1 00:00:00,000 --> 00:00:03,000 [Powered by Google Translate] [Rishikimi] [Quiz 0] 2 00:00:03,000 --> 00:00:05,000 >> [Lexi Ross, Tommy MacWilliam, Lukas Freitas, Joseph Ong] [Universiteti i Harvardit] 3 00:00:05,000 --> 00:00:08,000 >> [Kjo është CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:10,000 >> Hey, të gjithë. 5 00:00:10,000 --> 00:00:15,000 Mirë se vini në seancën e shqyrtimit për Quiz 0, e cila po zhvillohet këtë të mërkurën. 6 00:00:15,000 --> 00:00:19,000 Ajo që ne jemi duke shkuar për të bërë sonte, unë jam me 3 TFS tjera, 7 00:00:19,000 --> 00:00:24,000 dhe së bashku ne do të kalojnë nëpër një rishikim të asaj që kemi bërë gjatë deri më tani. 8 00:00:24,000 --> 00:00:27,000 Kjo nuk do të jetë 100% të plotë, por kjo duhet të ju jap një ide më të mirë 9 00:00:27,000 --> 00:00:31,000 të asaj që ju tashmë keni atë poshtë dhe ju ende nevojë për të studiuar përpara se të mërkurën. 10 00:00:31,000 --> 00:00:34,000 Dhe të ndjehen të lirë për të ngritur dorën tuaj me pyetje si ne jemi duke shkuar së bashku, 11 00:00:34,000 --> 00:00:38,000 por mbani në mend se ne do të ketë gjithashtu një pak kohë në fund- 12 00:00:38,000 --> 00:00:41,000 në qoftë se ne të merrni me me pak minuta për të këmbimit, për të bërë pyetje të përgjithshme, 13 00:00:41,000 --> 00:00:47,000 kështu që të mbajë këtë në mendje, dhe kështu që ne jemi duke shkuar për të filluar në fillim me Javës 0. 14 00:00:47,000 --> 00:00:50,000 >> [Quiz 0 Shqyrtim!] [Pjesa 0] [Lexi Ross] Por, para se të bëjmë që le të flasim për 15 00:00:50,000 --> 00:00:53,000 logjistike të quiz. 16 00:00:53,000 --> 00:00:55,000 >> [Logjistika] [Quiz zhvillohet të mërkurën 10/10 në vend të ligjërimit] 17 00:00:55,000 --> 00:00:57,000 >> [(Shih http://cdn.cs50.net/2012/fall/quizzes/0/about0.pdf për detaje)] Kjo është në e mërkurë, 10 Tet. 18 00:00:57,000 --> 00:01:00,000 >> Se kjo e mërkurë, dhe në qoftë se ju shkoni në këtë URL këtu, 19 00:01:00,000 --> 00:01:03,000 e cila është gjithashtu të arritshme nga CS50.net-nuk ka një lidhje me të, 20 00:01:03,000 --> 00:01:06,000 ju mund të shihni informacion në lidhje ku të shkoni në bazë të 21 00:01:06,000 --> 00:01:10,000 Emri juaj e fundit, ose përkatësia shkolla, si dhe 22 00:01:10,000 --> 00:01:14,000 ajo tregon se pikërisht çfarë quiz do të mbulojë dhe llojet e pyetjeve që ju jeni do të merrni. 23 00:01:14,000 --> 00:01:19,000 Mbani në mend se ju do të keni një shans për të shqyrtuar për quiz në nenin, 24 00:01:19,000 --> 00:01:21,000 kështu TFS tuaja duhet të shkojnë mbi disa probleme praktike, 25 00:01:21,000 --> 00:01:29,000 dhe kjo është një tjetër shans të mirë për të parë se ku ju ende nevojë për të studiuar për quiz. 26 00:01:29,000 --> 00:01:32,000 Le të fillojë në fillim me Bytes 'N' copa. 27 00:01:32,000 --> 00:01:35,000 Kujtohet një pak është vetëm një 0 ose një 1, 28 00:01:35,000 --> 00:01:38,000 dhe një bajt është një koleksion prej 8 bit të këtyre. 29 00:01:38,000 --> 00:01:42,000 Le të shikojmë në këtë koleksion të bit drejtë këtu. 30 00:01:42,000 --> 00:01:44,000 Ne duhet të jetë në gjendje të kuptoj se sa bit janë. 31 00:01:44,000 --> 00:01:48,000 Ku ne numërimin e ka vetëm 8 prej tyre, tetë 0 ose 1 njësi. 32 00:01:48,000 --> 00:01:51,000 Dhe pasi ka 8 bit, se edhe 1 byte, 33 00:01:51,000 --> 00:01:53,000 dhe le të kthyer atë në heksadecimal. 34 00:01:53,000 --> 00:01:58,000 Hexadecimal është bazë 16, dhe kjo është goxha e lehtë për t'u kthyer 35 00:01:58,000 --> 00:02:01,000 një numër në binar, e cila është ajo që është, në një numër në heksadecimal. 36 00:02:01,000 --> 00:02:04,000 Të gjithë ne bëjmë është që ne të shikojmë në grupe prej 4, 37 00:02:04,000 --> 00:02:07,000 dhe ne shnderrimin e tyre për shifra e duhur heksadecimal. 38 00:02:07,000 --> 00:02:11,000 Ne fillim me grupin e djathtë më i 4, kështu që 0011. 39 00:02:11,000 --> 00:02:16,000 Që do të jetë një 1 dhe një 2, kështu bashku që bën 3. 40 00:02:16,000 --> 00:02:19,000 Dhe pastaj le të shohim në bllokun tjetër 4. 41 00:02:19,000 --> 00:02:24,000 1101. Që do të jetë një 1, një 4, dhe një 8. 42 00:02:24,000 --> 00:02:28,000 Së bashku që do të jetë 13, i cili bën D. 43 00:02:28,000 --> 00:02:32,000 Dhe ne do të kujtojmë se në heksadecimal ne nuk shkojnë vetëm nëpër 0 9. 44 00:02:32,000 --> 00:02:36,000 Ne do të shkojmë nëpër F 0, kështu që pas 9, 10 i korrespondon një, 45 00:02:36,000 --> 00:02:40,000 11 B, e të tjera, ku F është 15. 46 00:02:40,000 --> 00:02:44,000 Këtu 13 është një D, 47 00:02:44,000 --> 00:02:49,000 mënyrë për të kthyer atë në decimal të gjithë ne bëjmë është që ne të vërtetë 48 00:02:49,000 --> 00:02:52,000 trajtojnë çdo pozicion si një fuqi prej 2. 49 00:02:52,000 --> 00:02:58,000 Kjo është një 1, 2 një, zero 4s, zero 8s, një 16, më tej, 50 00:02:58,000 --> 00:03:03,000 dhe kjo është pak e vështirë për të llogaritur në kokën tuaj, por nëse ne do të shkojmë në rrëshqitje tjetër 51 00:03:03,000 --> 00:03:05,000 ne mund të shohim përgjigje për këtë. 52 00:03:05,000 --> 00:03:09,000 >> Në thelb ne jemi duke shkuar në të gjithë nga e djathta në të majtë mbrapa, 53 00:03:09,000 --> 00:03:14,000 dhe ne jemi shumëzuar çdo shifër nga fuqia e 2 korresponduese. 54 00:03:14,000 --> 00:03:19,000 Dhe mbani mend, per heksadecimal kemi treguar këto numra me 0x në fillim 55 00:03:19,000 --> 00:03:23,000 kështu që ne nuk e ngatërruar atë me një numër decimal. 56 00:03:23,000 --> 00:03:29,000 Vazhduar më, kjo është një Tabela ASCII, 57 00:03:29,000 --> 00:03:35,000 dhe atë që ne i përdorim ASCII është për të hartë nga personazhet me vlerat numerike. 58 00:03:35,000 --> 00:03:39,000 Kujtohet në pset kriptografisë kemi bërë përdorimin e gjerë të tabelën ASCII 59 00:03:39,000 --> 00:03:43,000 në mënyrë që të përdorin metoda të ndryshme të cryptography, 60 00:03:43,000 --> 00:03:47,000 the Cezari dhe shifër Vigenere, për të kthyer letra të ndryshme 61 00:03:47,000 --> 00:03:52,000 në një varg sipas kyç të dhënë nga ana e përdoruesit. 62 00:03:52,000 --> 00:03:56,000 Le të shikojmë në pak matematikë ASCII. 63 00:03:56,000 --> 00:04:02,000 Kërkim në 'P' + 1, në formën e karakterit që do të jetë Q, 64 00:04:02,000 --> 00:04:07,000 dhe mos harroni se '5 '≠ 5. 65 00:04:07,000 --> 00:04:10,000 Dhe pikërisht si do të konvertohet në mes të atyre që ne 2 forma? 66 00:04:10,000 --> 00:04:13,000 Kjo nuk është në të vërtetë shumë e vështirë. 67 00:04:13,000 --> 00:04:16,000 Në mënyrë që të merrni 5 zbresim '0 ' 68 00:04:16,000 --> 00:04:20,000 sepse ka 5 vende mes të '0 'dhe '5'. 69 00:04:20,000 --> 00:04:23,000 Në mënyrë për të shkuar në mënyrë tjetër, ne shtoni vetëm 0, 70 00:04:23,000 --> 00:04:25,000 kështu që kjo është lloj i si aritmetike të rregullt. 71 00:04:25,000 --> 00:04:29,000 Vetëm mos harroni se kur diçka ka citate rreth tij kjo është një karakter 72 00:04:29,000 --> 00:04:37,000 dhe kështu i korrespondon një vlerë në tabelën ASCII. 73 00:04:37,000 --> 00:04:40,000 Lëvizur në shumë tema të përgjithshme shkencave kompjuterike. 74 00:04:40,000 --> 00:04:43,000 Ne kemi mësuar se çfarë është një algoritmi është dhe se si ne e përdorin programimit 75 00:04:43,000 --> 00:04:45,000 për zbatimin e algoritme. 76 00:04:45,000 --> 00:04:48,000 Disa shembuj të algoritmeve janë diçka të vërtetë të thjeshtë si 77 00:04:48,000 --> 00:04:51,000 kontrolluar nëse një numër është edhe apo i rastësishëm. 78 00:04:51,000 --> 00:04:54,000 Për këtë kujtojmë ne mod me numrin 2 dhe kontrolloni nëse rezultati është 0. 79 00:04:54,000 --> 00:04:57,000 Nëse është kështu, ajo është edhe më. Nëse jo, kjo është e çuditshme. 80 00:04:57,000 --> 00:04:59,000 Dhe kjo është një shembull i një algoritmi të vërtetë themelore. 81 00:04:59,000 --> 00:05:02,000 >> A pak e një më të përfshirë është kërkimi binar, 82 00:05:02,000 --> 00:05:05,000 të cilat ne do të shkoj për më vonë në seancën e shqyrtimit. 83 00:05:05,000 --> 00:05:09,000 Dhe programimi është term që ne përdorim për të marrë një algoritmi 84 00:05:09,000 --> 00:05:15,000 dhe konvertimin atë për kodin kompjuterin mund të lexoni. 85 00:05:15,000 --> 00:05:20,000 2 shembuj të programimit është zeroja, 86 00:05:20,000 --> 00:05:22,000 cila është ajo që ne e bëmë në Javën 0. 87 00:05:22,000 --> 00:05:25,000 Edhe pse ne fakt nuk shkruani kodin nga kjo është një mënyrë e zbatimit të 88 00:05:25,000 --> 00:05:29,000 kjo algoritmi, e cila është e shtypje numrat 1-10, 89 00:05:29,000 --> 00:05:32,000 dhe këtu ne bëjmë të njëjtën gjë në gjuhën e programimit C. 90 00:05:32,000 --> 00:05:41,000 Këto janë funksionalisht të barasvlershme, të shkruara vetëm në gjuhë të ndryshme ose sintaksor. 91 00:05:41,000 --> 00:05:44,000 Ne pastaj mësuar për shprehje boolean, 92 00:05:44,000 --> 00:05:48,000 dhe një Boolean është një vlerë që është ose e vërtetë apo e rreme, 93 00:05:48,000 --> 00:05:51,000 dhe shprehje boolean këtu shpesh 94 00:05:51,000 --> 00:05:55,000 shkoni brenda kushteve, kështu që nëse (x ≤ 5), 95 00:05:55,000 --> 00:06:00,000 mirë, ne kemi vendosur tashmë x = 5, në mënyrë që gjendja do të vlerësojë të vërtetë. 96 00:06:00,000 --> 00:06:03,000 Dhe nëse kjo është e vërtetë, pavarësisht Kodi është nën kusht 97 00:06:03,000 --> 00:06:08,000 do të vlerësohet nga kompjuteri, në mënyrë që vargu do të jenë të shtypura 98 00:06:08,000 --> 00:06:12,000 të prodhimit standarde, dhe gjendjen afat 99 00:06:12,000 --> 00:06:16,000 i referohet çdo gjë që është brenda kllapa e deklaratës nëse. 100 00:06:16,000 --> 00:06:20,000 Mbani mend të gjithë operatorët. 101 00:06:20,000 --> 00:06:26,000 Të ruaj të && dhe ajo e | | kur ne jemi duke u përpjekur për të kombinuar 2 ose më shumë kushte, 102 00:06:26,000 --> 00:06:30,000 == = Jo për të kontrolluar nëse 2 gjëra janë të barabartë. 103 00:06:30,000 --> 00:06:36,000 Mos harroni se është për caktimin = == ndërsa është një operator Boolean. 104 00:06:36,000 --> 00:06:41,000 ≤, ≥ dhe pastaj 2 finale janë vetë-shpjeguese. 105 00:06:41,000 --> 00:06:45,000 Një shqyrtim i përgjithshëm i logjika Boolean këtu. 106 00:06:45,000 --> 00:06:48,000 Dhe shprehje boolean janë gjithashtu të rëndësishme në sythe, 107 00:06:48,000 --> 00:06:50,000 të cilat ne do të shkoj për tani. 108 00:06:50,000 --> 00:06:56,000 Ne mësuam rreth 3 llojet e sythe deri tani në CS50, për, ndërsa, dhe të bëjë duke. 109 00:06:56,000 --> 00:06:59,000 Dhe është e rëndësishme të dini se ndërsa për shumicën e qëllimeve 110 00:06:59,000 --> 00:07:02,000 ne fakt mund të përdorni çdo lloj lak në përgjithësi 111 00:07:02,000 --> 00:07:06,000 ka lloje të caktuara të përbashkëta qëllime apo modelet 112 00:07:06,000 --> 00:07:09,000 në programimin që në mënyrë specifike për të thirrur një nga këto sythe 113 00:07:09,000 --> 00:07:13,000 që e bëjnë atë më efikas të kodit apo elegante atë në atë mënyrë. 114 00:07:13,000 --> 00:07:18,000 Le të shkojnë mbi atë që secili nga këto sythe tendencë të përdoren për më shpesh. 115 00:07:18,000 --> 00:07:21,000 >> Në një për lak ne përgjithësi tashmë e dimë se sa herë që ne duam të iterate. 116 00:07:21,000 --> 00:07:24,000 Kjo është ajo që ne kemi vënë në gjendje. 117 00:07:24,000 --> 00:07:28,000 Sepse, i = 0, i <10, për shembull. 118 00:07:28,000 --> 00:07:31,000 Ne tashmë e dimë që ne duam të bëjmë diçka 10 herë. 119 00:07:31,000 --> 00:07:34,000 Tani, për një lak, ndërsa, në përgjithësi ne nuk domosdoshmërisht 120 00:07:34,000 --> 00:07:36,000 e di se sa herë ne duam lak për të kandiduar. 121 00:07:36,000 --> 00:07:39,000 Por ne e dimë disa lloj kusht që ne duam që ajo të 122 00:07:39,000 --> 00:07:41,000 të jetë gjithmonë e vërtetë apo e rreme të jetë gjithmonë. 123 00:07:41,000 --> 00:07:44,000 Për shembull, ndërsa është vendosur. 124 00:07:44,000 --> 00:07:46,000 Le të themi se është një ndryshore boolean. 125 00:07:46,000 --> 00:07:48,000 Ndërkohë që është e vërtetë që ne duam kodin për të vlerësuar, 126 00:07:48,000 --> 00:07:52,000 kështu që një pak më të zgjeruar, një pak më të përgjithshme se një për lak, 127 00:07:52,000 --> 00:07:55,000 por çdo për lak gjithashtu mund të konvertohet në një lak, ndërsa. 128 00:07:55,000 --> 00:08:00,000 Së fundi, bëni ndërsa unazore, të cilat mund të jetë trickiest për të kuptuar menjëherë, 129 00:08:00,000 --> 00:08:04,000 janë përdorur shpesh kur ne duam të vlerësojmë kodin parë 130 00:08:04,000 --> 00:08:06,000 para herë të parë ne kontrolloni gjendjen. 131 00:08:06,000 --> 00:08:09,000 Një rast i zakonshëm për një përdorim bëni ndërsa lak 132 00:08:09,000 --> 00:08:12,000 është kur ju doni të merrni të dhëna përdoruesi, dhe ju e dini që ju doni të kërkoni përdoruesit 133 00:08:12,000 --> 00:08:15,000 për kontributin paktën një herë, por nëse ata nuk ju japin kontribut të mirë menjëherë 134 00:08:15,000 --> 00:08:18,000 ju doni të mbani duke u kërkuar atyre derisa ata të ju jap të dhëna të mira. 135 00:08:18,000 --> 00:08:21,000 Kjo është përdorimi më të zakonshme të një të bëjë, ndërsa loop, 136 00:08:21,000 --> 00:08:23,000 dhe le të shikojmë në strukturën aktuale të këtyre unazore. 137 00:08:23,000 --> 00:08:27,000 Ata zakonisht gjithmonë kanë tendencë për të ndjekur këto modele. 138 00:08:27,000 --> 00:08:30,000 >> Në lak për brenda ju keni 3 komponentë: 139 00:08:30,000 --> 00:08:35,000 initialization, zakonisht diçka si int i = 0, ku i është kundër, 140 00:08:35,000 --> 00:08:40,000 kusht, ku ne duam të themi drejtuar këtë për lak për sa kohë që kjo gjendje ende mban, 141 00:08:40,000 --> 00:08:44,000 Ashtu si unë <10, dhe pastaj në fund, përditësim, e cila është se si ne rritje 142 00:08:44,000 --> 00:08:47,000 variabli counter në çdo pikë në lak. 143 00:08:47,000 --> 00:08:50,000 Një gjë e përbashkët për të parë nuk është vetëm i + +, 144 00:08:50,000 --> 00:08:52,000 që do të thotë shtim i nga 1 në çdo kohë. 145 00:08:52,000 --> 00:08:55,000 Ju gjithashtu mund të bëjë diçka si unë + = 2, 146 00:08:55,000 --> 00:08:58,000 që do të thotë shtoni 2 me i çdo herë ju shkoni nëpër lak. 147 00:08:58,000 --> 00:09:03,000 Dhe pastaj e bëjnë këtë vetëm referohet çdo kod që aktualisht drejton si pjesë e lak. 148 00:09:03,000 --> 00:09:09,000 Dhe për një lak, ndërsa, këtë herë ne fakt kemi inicializimit jashtë lak, 149 00:09:09,000 --> 00:09:12,000 kështu për shembull, le të thonë se ne jemi duke u përpjekur për të bërë të njëjtin lloj të lak si unë përshkruar vetëm. 150 00:09:12,000 --> 00:09:16,000 Ne do të thonë int i = 0 para se të fillon lak. 151 00:09:16,000 --> 00:09:20,000 Atëherë ne mund të themi, ndërsa i <10 ta bëjë këtë, 152 00:09:20,000 --> 00:09:22,000 kështu që blloku i njëjtë i kodit si më parë, 153 00:09:22,000 --> 00:09:26,000 dhe këtë herë pjesë e përditësimi i kodit, për shembull, i + +, 154 00:09:26,000 --> 00:09:29,000 në fakt shkon brenda lak. 155 00:09:29,000 --> 00:09:33,000 Dhe së fundi, për një të bëjë, ndërsa, është e ngjashme me lak, ndërsa, 156 00:09:33,000 --> 00:09:36,000 por ne duhet të kujtojmë se kodi do të vlerësojë herë 157 00:09:36,000 --> 00:09:40,000 para se gjendja është e kontrolluar, kështu që ka kuptim shumë më tepër 158 00:09:40,000 --> 00:09:44,000 në qoftë se ju shikoni në atë në mënyrë të krye e deri në fund. 159 00:09:44,000 --> 00:09:49,000 Në një të bëjë ndërsa kodi lak vlerëson ju edhe para se të shikojmë në gjendjen, ndërsa, 160 00:09:49,000 --> 00:09:55,000 ndërsa një lak, ndërsa, ajo kontrollon parë. 161 00:09:55,000 --> 00:09:59,000 Deklaratat dhe variablave. 162 00:09:59,000 --> 00:10:04,000 Kur ne duam të krijojmë një variabël i ri ne së pari duam të inicializoj atë. 163 00:10:04,000 --> 00:10:07,000 >> Për shembull, bar int initializes bar ndryshueshme, 164 00:10:07,000 --> 00:10:10,000 por kjo nuk do t'i jepte një vlerë, kështu që çfarë është vlera e bar e tani? 165 00:10:10,000 --> 00:10:12,000 Ne nuk e dimë. 166 00:10:12,000 --> 00:10:14,000 Kjo mund të jetë disa vlera plehrash që ishte ruajtur më parë në kujtesën atje, 167 00:10:14,000 --> 00:10:16,000 dhe ne nuk duam që të përdorin këtë variabël 168 00:10:16,000 --> 00:10:19,000 deri sa ne fakt jepte një vlerë, 169 00:10:19,000 --> 00:10:21,000 kështu që ne deklaroj këtu. 170 00:10:21,000 --> 00:10:24,000 Pastaj ne nisja që ajo të jetë 42 më poshtë. 171 00:10:24,000 --> 00:10:28,000 Tani, sigurisht, ne e dimë kjo mund të bëhet në një linjë, bar int = 42. 172 00:10:28,000 --> 00:10:30,000 Por vetëm të jetë i qartë hapat e shumta që janë në vazhdim e sipër, 173 00:10:30,000 --> 00:10:34,000 deklarata dhe initialization ndodhin veçmas këtu. 174 00:10:34,000 --> 00:10:38,000 Kjo ndodh në një hap, dhe një tjetër, int Baz = bar + 1, 175 00:10:38,000 --> 00:10:44,000 kjo deklaratë më poshtë, që Baz increments, kështu që në fund të këtij blloku kodi 176 00:10:44,000 --> 00:10:48,000 në qoftë se ne do të shtypura vlerën e Baz ajo do të jetë 44 177 00:10:48,000 --> 00:10:52,000 sepse ne deklarojë dhe nisja atë të jetë 1 bar>, 178 00:10:52,000 --> 00:10:58,000 dhe pastaj ne rritje atë një herë më shumë me + +. 179 00:10:58,000 --> 00:11:02,000 Ne shkuam mbi këtë shkurtimisht bukur, por është mirë që të ketë një të përgjithshme 180 00:11:02,000 --> 00:11:04,000 të kuptuarit e asaj që temat dhe ngjarjet janë. 181 00:11:04,000 --> 00:11:06,000 Ne kryesisht e bëri këtë në Scratch, 182 00:11:06,000 --> 00:11:09,000 kështu që ju mund të mendoni për temat si sekuenca të shumta të kodit 183 00:11:09,000 --> 00:11:11,000 drejtimin në të njëjtën kohë. 184 00:11:11,000 --> 00:11:14,000 Në fakt, ajo ndoshta nuk është drejtimin në të njëjtën kohë, 185 00:11:14,000 --> 00:11:17,000 por lloj abstrakte ne mund të mendoni për atë në këtë mënyrë. 186 00:11:17,000 --> 00:11:20,000 >> Në Scratch, për shembull, kishim sprites shumta. 187 00:11:20,000 --> 00:11:22,000 Kjo mund të jetë ekzekutuar kod të ndryshme në të njëjtën kohë. 188 00:11:22,000 --> 00:11:26,000 Një mund të jetë në këmbë ndërsa tjetri është duke thënë diçka 189 00:11:26,000 --> 00:11:29,000 në një pjesë të ndryshme të ekran. 190 00:11:29,000 --> 00:11:34,000 Ngjarje janë një mënyrë tjetër e ndan nga logjika 191 00:11:34,000 --> 00:11:37,000 mes elementeve të ndryshme të kodit tuaj, 192 00:11:37,000 --> 00:11:40,000 dhe në Scratch ne ishim në gjendje për të simuluar ngjarjet duke përdorur Broadcast, 193 00:11:40,000 --> 00:11:43,000 dhe kjo është në fakt kur kam marrë, jo kur dëgjoj, 194 00:11:43,000 --> 00:11:47,000 por në thelb kjo është një mënyrë për të transmetuar informacion 195 00:11:47,000 --> 00:11:49,000 nga një sprite në një tjetër. 196 00:11:49,000 --> 00:11:52,000 Për shembull, ju mund të dëshironi të transmetojë lojë gjatë, 197 00:11:52,000 --> 00:11:56,000 dhe kur një tjetër lojë sprite merr mbi, 198 00:11:56,000 --> 00:11:58,000 ai i përgjigjet në një mënyrë të caktuar. 199 00:11:58,000 --> 00:12:03,000 Kjo është një model i rëndësishëm për të kuptuar për programimin. 200 00:12:03,000 --> 00:12:07,000 Vetëm për të shkuar gjatë javës bazë 0, çka kemi shkuar mbi deri tani, 201 00:12:07,000 --> 00:12:10,000 le të shohim në këtë program C thjeshtë. 202 00:12:10,000 --> 00:12:14,000 Teksti mund të jetë pak më i vogël nga këtu, por unë do të shkoj mbi atë të vërtetë të shpejtë. 203 00:12:14,000 --> 00:12:20,000 Ne jemi përfshirë 2 fotografi header në të, cs50.h lartë dhe stdio.h. 204 00:12:20,000 --> 00:12:23,000 Ne jemi pastaj përcaktimin një limit konstant quajtur të jenë 100. 205 00:12:23,000 --> 00:12:26,000 Ne jemi pas zbatimit funksioni ynë kryesor. 206 00:12:26,000 --> 00:12:29,000 Që ne nuk e përdorim argumente command line këtu kemi nevojë për të vënë pavlefshme 207 00:12:29,000 --> 00:12:32,000 si argumente për kryesor. 208 00:12:32,000 --> 00:12:38,000 Ne e shohim më sipër int kryesore. Kjo është lloj kthimi, prandaj kthehen 0 në fund. 209 00:12:38,000 --> 00:12:41,000 Dhe ne jemi duke përdorur funksionin e bibliotekës CS50 merrni int 210 00:12:41,000 --> 00:12:45,000 të kërkojë nga shfrytëzuesi për input, dhe ne dyqan atë në këtë x ndryshueshme, 211 00:12:45,000 --> 00:12:51,000 kështu që ne të deklarojë x lart, dhe ne nisja me x = GetInt. 212 00:12:51,000 --> 00:12:53,000 >> Ne atëherë kontrolloni për të parë nëse përdoruesi na dha kontribut të mirë. 213 00:12:53,000 --> 00:12:59,000 Nëse kjo është LIMIT ≥ ne duam të kthehen një kod gabimi prej 1 dhe printoni një mesazh gabimi. 214 00:12:59,000 --> 00:13:02,000 Dhe së fundi, në qoftë se përdoruesi na ka dhënë kontribut të mirë 215 00:13:02,000 --> 00:13:08,000 ne jemi duke shkuar në sheshin e numrit dhe të shtypura jashtë në këtë rezultat. 216 00:13:08,000 --> 00:13:11,000 Vetëm për të siguruar që ata të gjithë në shtëpi hit 217 00:13:11,000 --> 00:13:17,000 ju mund të shihni etiketat e pjesëve të ndryshme të kodit këtu. 218 00:13:17,000 --> 00:13:19,000 Kam përmendur të vazhdueshme, fotografi header. 219 00:13:19,000 --> 00:13:21,000 Oh, int x. Sigurohuni që të mbani mend se është një variabël lokale. 220 00:13:21,000 --> 00:13:24,000 Kjo kontraston atë nga një ndryshore globale, të cilat ne do të flasim për 221 00:13:24,000 --> 00:13:27,000 pak më vonë në seancën e shqyrtimit, 222 00:13:27,000 --> 00:13:30,000 dhe ne jemi të thirrur funksionin e bibliotekës printf, 223 00:13:30,000 --> 00:13:34,000 kështu që nëse ne nuk e kishte përfshirë file header stdio.h 224 00:13:34,000 --> 00:13:37,000 ne nuk do të jetë në gjendje të thërrasë printf. 225 00:13:37,000 --> 00:13:42,000 Dhe unë besoj se shigjeta që u shfaros këtu është vënë në% d, 226 00:13:42,000 --> 00:13:45,000 cila është një varg formatimit në printf. 227 00:13:45,000 --> 00:13:52,000 Ajo thotë se të shtypura nga ky variabël si një numër,% d. 228 00:13:52,000 --> 00:13:58,000 Dhe kjo është ajo për të Javës 0. 229 00:13:58,000 --> 00:14:06,000 Tani Lucas do të vazhdojë. 230 00:14:06,000 --> 00:14:08,000 Hej, djema. Emri im është Lukas. 231 00:14:08,000 --> 00:14:10,000 Unë jam një i paedukuar mjaft në shtëpinë më të mirë në kampus, Mather, 232 00:14:10,000 --> 00:14:14,000 dhe unë jam duke shkuar për të folur pak për Javën e 1 dhe 2,1. 233 00:14:14,000 --> 00:14:16,000 [Java 1 dhe 2.1!] [Lucas Freitas] 234 00:14:16,000 --> 00:14:19,000 Si Lexi u thënë, kur kemi filluar përkthimin kodin tuaj nga e para në C 235 00:14:19,000 --> 00:14:23,000 një nga gjërat që kemi vërejtur është se ju nuk mund vetëm të 236 00:14:23,000 --> 00:14:26,000 shkruani kodin tuaj dhe drejtuar atë duke përdorur një flamur të gjelbër më. 237 00:14:26,000 --> 00:14:30,000 Në fakt, ju duhet të përdorni disa hapa për të bërë programin tuaj C 238 00:14:30,000 --> 00:14:33,000 të bëhet një file e ekzekutueshme. 239 00:14:33,000 --> 00:14:36,000 Në thelb ajo që ju bëni kur jeni të shkruar një program është se 240 00:14:36,000 --> 00:14:40,000 ju përkthejnë idenë tuaj në një gjuhë që një përpilues mund ta kuptojnë, 241 00:14:40,000 --> 00:14:44,000 kështu që kur ju jeni duke shkruar një program në C 242 00:14:44,000 --> 00:14:47,000 çfarë jeni duke bërë në fakt është shkruar diçka që përpiluesit juaj është duke shkuar për të kuptuar, 243 00:14:47,000 --> 00:14:50,000 dhe pastaj përpiluesit do të përkthejnë atë kod 244 00:14:50,000 --> 00:14:53,000 në diçka që kompjuteri juaj do të kuptojnë. 245 00:14:53,000 --> 00:14:55,000 >> Dhe gjëja është, kompjuteri juaj është në të vërtetë shumë e memec. 246 00:14:55,000 --> 00:14:57,000 Kompjuteri juaj mund të kuptojë vetëm 0s dhe 1s, 247 00:14:57,000 --> 00:15:01,000 kështu që në të vërtetë në kompjuterët e parë njerëzit programuar zakonisht 248 00:15:01,000 --> 00:15:04,000 përdorur 0s dhe 1s, por jo më, falënderoj Perëndinë. 249 00:15:04,000 --> 00:15:07,000 Ne nuk duhet të mësuar përmendësh sekuenca për 0s dhe 1s 250 00:15:07,000 --> 00:15:10,000 për një për lak ose për një lak kohë dhe kështu me radhë. 251 00:15:10,000 --> 00:15:13,000 Kjo është arsyeja pse ne kemi një përpilues. 252 00:15:13,000 --> 00:15:17,000 Çfarë është një përpilues nuk është ajo në thelb përkthehet kodin C, 253 00:15:17,000 --> 00:15:21,000 në rastin tonë, në një gjuhë që kompjuteri juaj do të kuptojnë, 254 00:15:21,000 --> 00:15:25,000 cila është kodi objekt, dhe përpiluesit se ne jeni përdorur 255 00:15:25,000 --> 00:15:30,000 quhet tingëllimë, kështu që kjo është në të vërtetë simbol për tingëllimë. 256 00:15:30,000 --> 00:15:33,000 Kur ju keni programin tuaj, ju duhet të bëni 2 gjëra. 257 00:15:33,000 --> 00:15:37,000 Së pari, ju duhet të hartojnë programin tuaj, dhe pastaj ju do të jeni të drejtuar programin tuaj. 258 00:15:37,000 --> 00:15:41,000 Për të hartuar programin tuaj ju keni shumë opsione për të bërë kështu. 259 00:15:41,000 --> 00:15:44,000 I pari është për të bërë programi tingëllimë 260 00:15:44,000 --> 00:15:47,000 në të cilat programi është emri i programit tuaj. 261 00:15:47,000 --> 00:15:51,000 Në këtë rast ju mund të shihni se ata janë vetëm duke thënë "Hej, hartojnë programin tim." 262 00:15:51,000 --> 00:15:56,000 Ju nuk jeni i thënë: "Unë dua këtë emër për programin tim" ose diçka. 263 00:15:56,000 --> 00:15:58,000 >> Mundësia e dytë është duke i dhënë një emër për programin tuaj. 264 00:15:58,000 --> 00:16:02,000 Ju mund të them tingëllimë-o dhe pastaj emrin që ju dëshironi 265 00:16:02,000 --> 00:16:06,000 file e ekzekutueshme për të quajtur si dhe pastaj programi. 266 00:16:06,000 --> 00:16:11,000 Dhe ju gjithashtu mund të bëjë të bëjë programin, dhe të shohim se si ne 2 rastet e para 267 00:16:11,000 --> 00:16:15,000 Kam vënë. C, dhe në një të tretën unë vetëm kanë programe? 268 00:16:15,000 --> 00:16:18,000 Yeah, ju vërtetë nuk duhet të vënë. C kur ju përdorni bëni. 269 00:16:18,000 --> 00:16:22,000 Përndryshe përpiluesi është në të vërtetë do të çirrem në ju. 270 00:16:22,000 --> 00:16:24,000 Dhe gjithashtu, unë nuk e di nëse ju djema mbani mend, 271 00:16:24,000 --> 00:16:29,000 por shumë herë kemi përdorur edhe lcs50-ose-LM. 272 00:16:29,000 --> 00:16:31,000 Kjo është quajtur lidh. 273 00:16:31,000 --> 00:16:35,000 Ajo thjesht tregon përpilues që ju do të përdorni ato biblioteka të drejtë atje, 274 00:16:35,000 --> 00:16:39,000 kështu që nëse ju doni të përdorni cs50.h ju në të vërtetë duhet të tipit 275 00:16:39,000 --> 00:16:43,000 tingëllimë programi-lcs50. 276 00:16:43,000 --> 00:16:45,000 Nëse ju nuk e bëni këtë, përpiluesit nuk do të dinë 277 00:16:45,000 --> 00:16:50,000 se ju jeni duke përdorur ato funksione në cs50.h. 278 00:16:50,000 --> 00:16:52,000 Dhe kur ju doni të drejtuar programin tuaj ju keni 2 opsione. 279 00:16:52,000 --> 00:16:57,000 Nëse ju e bëri programi tingëllimë ju nuk keni dhënë një emër të programit tuaj. 280 00:16:57,000 --> 00:17:01,000 Ju keni për të drejtuar atë duke përdorur. A.out /. 281 00:17:01,000 --> 00:17:06,000 A.out është një emër standard që tingëllimë jep programin tuaj nëse ju nuk jepte një emër. 282 00:17:06,000 --> 00:17:11,000 Përndryshe ju do të jeni për të bërë. Program / në qoftë se ju dha një emër për programin tuaj, 283 00:17:11,000 --> 00:17:15,000 dhe në qoftë se ju ka bërë emrin e programit që një program do të merrni 284 00:17:15,000 --> 00:17:23,000 tashmë do të jetë i programuar të njëjtin emër si file c. 285 00:17:23,000 --> 00:17:26,000 Pastaj kemi biseduar rreth llojeve të të dhënave dhe të dhënave. 286 00:17:26,000 --> 00:17:31,000 >> Në thelb lloje të të dhënave janë e njëjta gjë si kuti të vogla që ata përdorin 287 00:17:31,000 --> 00:17:35,000 për të ruajtur vlerat, kështu lloje të të dhënave në të vërtetë janë vetëm si Pokémons. 288 00:17:35,000 --> 00:17:39,000 Ata vijnë në të gjitha madhësive dhe llojeve. 289 00:17:39,000 --> 00:17:43,000 Unë nuk e di nëse kjo analogji e bën kuptim. 290 00:17:43,000 --> 00:17:46,000 Madhësia e të dhënave në fakt varet nga arkitekturën makinë. 291 00:17:46,000 --> 00:17:49,000 Të gjitha madhësive të dhënat që unë jam duke shkuar për të treguar këtu 292 00:17:49,000 --> 00:17:53,000 janë në të vërtetë për një makinë 32-bit, e cila është rasti i aparatit tonë, 293 00:17:53,000 --> 00:17:56,000 por në qoftë se ju në të vërtetë janë coding Mac tuaj ose në një Windows gjithashtu 294 00:17:56,000 --> 00:17:59,000 ndoshta ju jeni do të ketë një makinë 64-bit, 295 00:17:59,000 --> 00:18:03,000 kështu që mos harroni se madhësive të dhënat që unë jam duke shkuar për të treguar këtu 296 00:18:03,000 --> 00:18:06,000 janë për makinë 32-bit. 297 00:18:06,000 --> 00:18:08,000 I pari që pamë ishte një int, 298 00:18:08,000 --> 00:18:10,000 e cila është shumë e thjeshtë. 299 00:18:10,000 --> 00:18:13,000 Ju përdorni int për të ruajtur një numër të plotë. 300 00:18:13,000 --> 00:18:16,000 Ne gjithashtu pa karakter, i char. 301 00:18:16,000 --> 00:18:20,000 Nëse ju doni të përdorni një letër apo një simbol pak ju jeni me siguri do të përdorin një char. 302 00:18:20,000 --> 00:18:26,000 Një char ka 1 bajt, që do të thotë 8 bit, si Lexi tha. 303 00:18:26,000 --> 00:18:31,000 Në thelb ne kemi një Tabela ASCII që ka 256 304 00:18:31,000 --> 00:18:34,000 kombinimet e mundshme të 0s dhe 1s, 305 00:18:34,000 --> 00:18:37,000 dhe pastaj kur ju shkruani një char ajo do të përkthehet 306 00:18:37,000 --> 00:18:44,000 karakteri që ju inputet një numër që ju keni në tabelën ASCII, si Lexi tha. 307 00:18:44,000 --> 00:18:48,000 Ne gjithashtu kemi noton, të cilat ne i përdorim për të ruajtur numrat decimal. 308 00:18:48,000 --> 00:18:53,000 Nëse ju doni të zgjidhni 3,14, për shembull, ju jeni do të përdorin një noton 309 00:18:53,000 --> 00:18:55,000 ose një të dyfishtë që ka më shumë saktësi. 310 00:18:55,000 --> 00:18:57,000 Një noton ka 4 bytes. 311 00:18:57,000 --> 00:19:01,000 Një dyfishtë ka 8 bytes, kështu që i vetmi ndryshim është saktësi. 312 00:19:01,000 --> 00:19:04,000 Ne gjithashtu kemi një kohë të gjatë që është përdorur për integers, 313 00:19:04,000 --> 00:19:09,000 dhe ju mund të shikoni për një makinë 32-bit një int dhe një kohë të kenë të njëjtën madhësi, 314 00:19:09,000 --> 00:19:13,000 kështu që nuk ka të vërtetë të bëjë kuptim për të përdorur një kohë të gjatë në një makinë 32-bit. 315 00:19:13,000 --> 00:19:17,000 >> Por në qoftë se ju jeni duke përdorur një makinë Mac dhe 64-bit, në të vërtetë një kohë të gjatë ka madhësi 8, 316 00:19:17,000 --> 00:19:19,000 kështu që me të vërtetë varet nga arkitekturës. 317 00:19:19,000 --> 00:19:22,000 Për makinë 32-bit kjo nuk ka kuptim për të përdorur një kohë të gjatë me të vërtetë. 318 00:19:22,000 --> 00:19:25,000 Dhe pastaj një kohë të gjatë, në anën tjetër, ka 8 bytes, 319 00:19:25,000 --> 00:19:30,000 kështu që është shumë e mirë në qoftë se ju dëshironi që të ketë një numër i plotë më të gjatë. 320 00:19:30,000 --> 00:19:34,000 Dhe së fundi, ne kemi varg, e cila është në fakt një * char, 321 00:19:34,000 --> 00:19:37,000 cila është një akrep tek një shkrumb. 322 00:19:37,000 --> 00:19:40,000 Është shumë e lehtë të mendoni se madhësia e vargut do të jetë si 323 00:19:40,000 --> 00:19:42,000 Numri i karaktereve që ju keni atje, 324 00:19:42,000 --> 00:19:45,000 por në fakt * char vetë 325 00:19:45,000 --> 00:19:49,000 ka madhësinë e një pointer në një char, i cili është 4 bytes. 326 00:19:49,000 --> 00:19:52,000 Madhësia e një * char është 4 bytes. 327 00:19:52,000 --> 00:19:56,000 Kjo nuk ka rëndësi në qoftë se ju keni një fjalë të vogël ose një letër apo ndonjë gjë. 328 00:19:56,000 --> 00:19:58,000 Ajo do të jetë 4 bytes. 329 00:19:58,000 --> 00:20:01,000 Ne gjithashtu mësuar pak në lidhje me hedh, 330 00:20:01,000 --> 00:20:04,000 në mënyrë që ju mund të shihni, nëse keni, për shembull, një program që thotë 331 00:20:04,000 --> 00:20:08,000 int x = 3 dhe pastaj printf ("% d", x / 2) 332 00:20:08,000 --> 00:20:12,000 bëni ju djema e di se çfarë ajo do të shtypura në ekran? 333 00:20:12,000 --> 00:20:14,000 >> Dikush? >> [Studentët] 2. 334 00:20:14,000 --> 00:20:16,000 1. >> 1, vërtet. 335 00:20:16,000 --> 00:20:20,000 Kur ju bëni 3/2 ajo do të marrë 1,5, 336 00:20:20,000 --> 00:20:24,000 por që ne jemi duke përdorur një numër të plotë se kjo do të injorojë pjesën decimal, 337 00:20:24,000 --> 00:20:26,000 dhe ju jeni do të ketë 1. 338 00:20:26,000 --> 00:20:29,000 Nëse ju nuk dëshironi që kjo të ndodhë atë që ju mund të bëni, për shembull, 339 00:20:29,000 --> 00:20:33,000 është shpallë një noton y = x. 340 00:20:33,000 --> 00:20:40,000 Pastaj x që përdoret për të jetë 3 është tani do të jetë në y 3.000. 341 00:20:40,000 --> 00:20:44,000 Dhe pastaj ju mund të shtypura y / 2. 342 00:20:44,000 --> 00:20:50,000 Në fakt, unë duhet të ketë një 2. atje. 343 00:20:50,000 --> 00:20:55,000 Ajo do të bëjë 3.00/2.00, 344 00:20:55,000 --> 00:20:58,000 dhe ju jeni duke shkuar për të marrë 1.5. 345 00:20:58,000 --> 00:21:06,000 Dhe ne e kemi këtë f .2 vetëm për të kërkuar 2 njësi dhjetore në pjesën dhjetore. 346 00:21:06,000 --> 00:21:12,000 Nëse ju keni 0,3 f ajo do të ketë në fakt 1,500. 347 00:21:12,000 --> 00:21:16,000 Nëse kjo është 2 ajo do të jetë 1.50. 348 00:21:16,000 --> 00:21:18,000 Ne gjithashtu kemi me këtë rast këtu. 349 00:21:18,000 --> 00:21:22,000 Nëse ju bëni noton x = 3.14 dhe pastaj ju x printf 350 00:21:22,000 --> 00:21:24,000 ju jeni do të marrë 3.14. 351 00:21:24,000 --> 00:21:29,000 Dhe në qoftë se ju bëni x = int i X, 352 00:21:29,000 --> 00:21:34,000 që do të thotë trajtojnë si një int x dhe ju të shtypura x tani 353 00:21:34,000 --> 00:21:36,000 ju jeni do të ketë 3,00. 354 00:21:36,000 --> 00:21:38,000 Bën që të bëjnë kuptim? 355 00:21:38,000 --> 00:21:41,000 Sepse ju jeni të parë trajtimin x si një numër të plotë, kështu që ju jeni duke injoruar pjesën decimal, 356 00:21:41,000 --> 00:21:45,000 dhe pastaj ju jeni shtypjen x. 357 00:21:45,000 --> 00:21:47,000 Dhe së fundi, ju gjithashtu mund të bëjë këtë, 358 00:21:47,000 --> 00:21:52,000 int x = 65, dhe pastaj ju të deklarojë një char c = x, 359 00:21:52,000 --> 00:21:56,000 dhe pastaj, nëse keni shkruar c ju jeni të vërtetë do të merrni 360 00:21:56,000 --> 00:21:59,000 A, kështu që në thelb ajo që ju jeni duke bërë këtu 361 00:21:59,000 --> 00:22:02,000 është përkthyer numër i plotë në karakter, 362 00:22:02,000 --> 00:22:05,000 ashtu si Tabela ASCII bën. 363 00:22:05,000 --> 00:22:08,000 Ne gjithashtu biseduam për operatorët matematike. 364 00:22:08,000 --> 00:22:14,000 Shumica e tyre janë mjaft të drejtpërdrejtë, kështu +, -, *, /, 365 00:22:14,000 --> 00:22:20,000 dhe gjithashtu kemi biseduar për mod, e cila është pjesa e ndarjes së 2 numrave. 366 00:22:20,000 --> 00:22:23,000 Nëse ju keni 10% 3, për shembull, 367 00:22:23,000 --> 00:22:27,000 kjo do të thotë ndarje 10 me 3, dhe çka është pjesa tjetër? 368 00:22:27,000 --> 00:22:30,000 Ajo do të jetë 1, kështu që kjo është në fakt shumë i dobishëm për një shumë të programeve. 369 00:22:30,000 --> 00:22:38,000 Për Vigenere dhe Cezarit Unë jam goxha i sigurt se të gjithë ju djema përdorur mod. 370 00:22:38,000 --> 00:22:43,000 Rreth operatorët matematike, të jenë shumë të kujdesshëm kur të kombinuar dhe / *. 371 00:22:43,000 --> 00:22:48,000 >> Për shembull, nëse ju bëni (3/2) * 2 se çfarë po ju do të merrni? 372 00:22:48,000 --> 00:22:50,000 [Studentët] 2. 373 00:22:50,000 --> 00:22:54,000 Po, 2, sepse 3/2 është do të jetë 1.5, 374 00:22:54,000 --> 00:22:57,000 por pasi që ju jeni duke bërë operacionet mes 2 integers 375 00:22:57,000 --> 00:22:59,000 ju jeni në të vërtetë vetëm do të marrin në konsideratë 1, 376 00:22:59,000 --> 00:23:03,000 dhe pastaj 1 * 2 do të jetë 2, në mënyrë që të jenë shumë, shumë të kujdesshëm 377 00:23:03,000 --> 00:23:07,000 kur bën aritmetike me integers, sepse 378 00:23:07,000 --> 00:23:12,000 ju mund të merrni se 2 = 3, në këtë rast. 379 00:23:12,000 --> 00:23:14,000 Dhe gjithashtu të jenë shumë të kujdesshëm në lidhje me përparësisë. 380 00:23:14,000 --> 00:23:21,000 Ju duhet të zakonisht përdorin kllapa të jetë i sigurt se ju e dini se çfarë jeni duke bërë. 381 00:23:21,000 --> 00:23:27,000 Disa shkurtesa të dobishme, sigurisht, një është i + + ose + i = 1 382 00:23:27,000 --> 00:23:30,000 ose duke përdorur + =. 383 00:23:30,000 --> 00:23:34,000 Kjo është e njëjta gjë si bëjnë i = i + 1. 384 00:23:34,000 --> 00:23:39,000 Ju gjithashtu mund të bëjë i - ose i - = 1, 385 00:23:39,000 --> 00:23:42,000 cila është gjë njëjtë si I = I -1, 386 00:23:42,000 --> 00:23:46,000 diçka djema përdorni një shumë në për sythe, të paktën. 387 00:23:46,000 --> 00:23:52,000 Gjithashtu, për *, në qoftë se ju përdorni * = dhe nëse ju bëni, për shembull, 388 00:23:52,000 --> 00:23:57,000 i * = 2 është e njëjta gjë si duke thënë se i = i * 2, 389 00:23:57,000 --> 00:23:59,000 dhe e njëjta gjë për ndarje. 390 00:23:59,000 --> 00:24:08,000 Nëse ju bëni i / = 2 kjo është e njëjta gjë si i = i / 2. 391 00:24:08,000 --> 00:24:10,000 >> Tani në lidhje me funksionet. 392 00:24:10,000 --> 00:24:13,000 Ju djema janë mësuar që funksionon një strategji shumë e mirë për të ruajtur kodin 393 00:24:13,000 --> 00:24:16,000 ndërsa ju jeni programimit, kështu që nëse ju dëshironi për të kryer të njëjtën detyrë 394 00:24:16,000 --> 00:24:20,000 në kodin përsëri dhe përsëri, ndoshta ju doni të përdorni një funksion 395 00:24:20,000 --> 00:24:25,000 vetëm kështu që ju nuk keni për të kopjoni dhe ngjisni kodin pushim. 396 00:24:25,000 --> 00:24:28,000 Aktualisht, kryesore është një funksion, dhe kur unë të ju tregojnë formatin e një funksioni 397 00:24:28,000 --> 00:24:32,000 ju do të jeni për të parë se kjo është shumë e qartë. 398 00:24:32,000 --> 00:24:35,000 Ne gjithashtu përdorin funksionet nga disa biblioteka, 399 00:24:35,000 --> 00:24:39,000 për shembull, printf, GetIn, i cili është nga biblioteka CS50, 400 00:24:39,000 --> 00:24:43,000 dhe funksione të tjera si toupper. 401 00:24:43,000 --> 00:24:46,000 Të gjitha këto funksione janë zbatuar aktualisht në biblioteka të tjera, 402 00:24:46,000 --> 00:24:49,000 dhe kur ju vënë ato fotografi litar në fillim të programit tuaj 403 00:24:49,000 --> 00:24:53,000 ju jeni duke thënë mund të ju lutem jepni kodin për këto funksione 404 00:24:53,000 --> 00:24:57,000 kështu që unë nuk kam për t'i zbatuar ato me veten? 405 00:24:57,000 --> 00:25:00,000 Dhe ju gjithashtu mund të shkruani funksionet tuaja, kështu që kur ju filloni programimit 406 00:25:00,000 --> 00:25:04,000 ti e kupton se biblioteka nuk kanë të gjitha funksionet që ju duhet. 407 00:25:04,000 --> 00:25:10,000 Për pset e fundit, për shembull, kemi shkruar barazim, rrahje, dhe lookup, 408 00:25:10,000 --> 00:25:13,000 dhe kjo është shumë, shumë e rëndësishme që të jenë në gjendje të shkruani funksionet 409 00:25:13,000 --> 00:25:17,000 sepse ata janë të dobishme, dhe ne i përdorim ato gjatë gjithë kohës në programimin, 410 00:25:17,000 --> 00:25:19,000 dhe ajo kursen një shumë të kodit. 411 00:25:19,000 --> 00:25:21,000 Formati i një funksioni është kjo një. 412 00:25:21,000 --> 00:25:24,000 Ne kemi llojin e kthimit në fillim. Çfarë është lloji kthimi? 413 00:25:24,000 --> 00:25:27,000 Kjo është vetëm kur funksioni juaj do të kthehen. 414 00:25:27,000 --> 00:25:29,000 Nëse ju keni një funksion, për shembull, faktoriale, 415 00:25:29,000 --> 00:25:31,000 që do të llogaritur një faktorial i një numër i plotë, 416 00:25:31,000 --> 00:25:34,000 ndoshta ajo do të kthehet edhe një numër të plotë. 417 00:25:34,000 --> 00:25:37,000 Pastaj lloji kthimi do të jetë int. 418 00:25:37,000 --> 00:25:41,000 Printf në fakt ka një zbrazëti lloj të kthimit 419 00:25:41,000 --> 00:25:43,000 sepse ju nuk jeni kthyer asgjë. 420 00:25:43,000 --> 00:25:45,000 Ju jeni vetëm shtypjen gjëra në ekran 421 00:25:45,000 --> 00:25:48,000 dhe ndalohet pirja e duhanit funksionin më pas. 422 00:25:48,000 --> 00:25:51,000 Atëherë ju keni emrin e funksionit që ju mund të zgjidhni. 423 00:25:51,000 --> 00:25:55,000 Ju duhet të jetë pak më të arsyeshme, si mos zgjidhni një emër si xyz 424 00:25:55,000 --> 00:25:58,000 ose si x2f. 425 00:25:58,000 --> 00:26:02,000 Të përpiqet të bëjë një emër që ka kuptim. 426 00:26:02,000 --> 00:26:04,000 >> Për shembull, në qoftë se është faktorial, faktoriale thonë. 427 00:26:04,000 --> 00:26:08,000 Në qoftë se kjo është një funksion që do të nxjerrë diçka, atë emër barazim. 428 00:26:08,000 --> 00:26:11,000 Dhe pastaj ne kemi parametra, të cilat janë quajtur edhe argumente, 429 00:26:11,000 --> 00:26:14,000 të cilat janë si burimet që funksioni juaj ka nevojë për 430 00:26:14,000 --> 00:26:17,000 nga kodin tuaj për të kryer detyrën e saj. 431 00:26:17,000 --> 00:26:20,000 Nëse ju doni për të llogaritur faktoriale e një numri të 432 00:26:20,000 --> 00:26:23,000 ndoshta ju duhet të keni një numër për të llogaritur një faktoriale. 433 00:26:23,000 --> 00:26:27,000 Një nga argumentet që ju jeni do të ketë është numri vetë. 434 00:26:27,000 --> 00:26:31,000 Dhe pastaj ajo do të bëjë diçka dhe kthimin e vlerës në fund 435 00:26:31,000 --> 00:26:35,000 përveç nëse kjo është një funksion i pavlefshëm. 436 00:26:35,000 --> 00:26:37,000 Le të shohim një shembull. 437 00:26:37,000 --> 00:26:40,000 Nëse unë dua të shkruaj një funksion që përmbledh të gjitha numrat në një rrjet të integers, 438 00:26:40,000 --> 00:26:43,000 para së gjithash, lloji kthimi do të jetë int 439 00:26:43,000 --> 00:26:46,000 sepse unë kam një rrjet të integers. 440 00:26:46,000 --> 00:26:51,000 Dhe atëherë unë jam do të ketë emrin e funksionit si sumArray, 441 00:26:51,000 --> 00:26:54,000 dhe pastaj ajo do të marrë array vetë, për të nums int, 442 00:26:54,000 --> 00:26:58,000 dhe pastaj gjatësia e array kështu që unë e di se sa numra kam për të përmbledhur. 443 00:26:58,000 --> 00:27:02,000 Atëherë unë duhet të nisja një shumë të ndryshueshme të quajtur, për shembull, për 0, 444 00:27:02,000 --> 00:27:08,000 dhe çdo herë që unë shoh një element në grup unë duhet të shtoni atë në shumës, kështu që kam bërë një për lak. 445 00:27:08,000 --> 00:27:15,000 Ashtu si Lexi tha, ju bëni int i = 0, i 00:27:20,000 Dhe për çdo element në grup që kam bërë shuma + = nums [i], 447 00:27:20,000 --> 00:27:24,000 dhe atëherë unë u kthye shuma, kështu që është shumë e thjeshtë, dhe kjo kursen një shumë të kodit 448 00:27:24,000 --> 00:27:28,000 në qoftë se ju jeni duke përdorur këtë një funksion shumë herë. 449 00:27:28,000 --> 00:27:32,000 Pastaj kemi marrë një vështrim në kushte. 450 00:27:32,000 --> 00:27:38,000 Ne kemi, nëse tjetër, dhe tjetër në qoftë se. 451 00:27:38,000 --> 00:27:42,000 Le të shohim se çfarë është dallimi në mes të atyre. 452 00:27:42,000 --> 00:27:45,000 Hidhni një sy në këto 2 kodeve. Çfarë është dallimi në mes tyre? 453 00:27:45,000 --> 00:27:49,000 I pari ka-thelb kodet duan që ju të tregoni 454 00:27:49,000 --> 00:27:51,000 nëse një numër është +, -, ose 0. 455 00:27:51,000 --> 00:27:55,000 I pari thotë se në qoftë se është> 0 atëherë kjo është pozitive. 456 00:27:55,000 --> 00:28:00,000 Nëse kjo është = 0, atëherë ajo që është 0, dhe nëse kjo është <0, atëherë kjo është negative. 457 00:28:00,000 --> 00:28:04,000 >> Dhe tjetra është duke bërë, nëse, nëse tjetër, tjetër. 458 00:28:04,000 --> 00:28:07,000 Dallimi në mes të dy është se kjo është në të vërtetë do të 459 00:28:07,000 --> 00:28:13,000 kontrolloni nëse> 0, 0 00:28:17,000 kështu që nëse ju keni numrin 2, për shembull, do të vijnë këtu dhe të thonë 461 00:28:17,000 --> 00:28:21,000 if (x> 0), dhe kjo do të thotë po, kështu që unë të shtypura pozitive. 462 00:28:21,000 --> 00:28:25,000 Por edhe pse unë e di se është e> 0 dhe ajo nuk do të jetë 0 apo <0 463 00:28:25,000 --> 00:28:29,000 Unë jam ende duke shkuar për të bërë është 0, është ajo <0, 464 00:28:29,000 --> 00:28:33,000 kështu që unë jam në të vërtetë duke shkuar brenda VJ se unë nuk duhet të 465 00:28:33,000 --> 00:28:38,000 sepse unë tashmë e di se ai nuk do të plotësojë ndonjë nga këto kushte. 466 00:28:38,000 --> 00:28:41,000 Unë mund të përdorni në qoftë se, në qoftë tjetër, tjetër deklaratë. 467 00:28:41,000 --> 00:28:45,000 Ajo në thelb thotë se nëse x = 0 Unë të shtypura pozitive. 468 00:28:45,000 --> 00:28:48,000 Nëse nuk është, unë jam duke shkuar për të provuar këtë. 469 00:28:48,000 --> 00:28:51,000 Nëse kjo është 2 unë nuk jam duke shkuar për të bërë këtë. 470 00:28:51,000 --> 00:28:54,000 Në thelb, nëse unë kam për x = 2 ju do të thoni 471 00:28:54,000 --> 00:28:57,000 if (x> 0), po, kështu Printo këtë. 472 00:28:57,000 --> 00:29:00,000 Tani që unë e di se është e> 0 dhe se të kënaqur të parë nëse 473 00:29:00,000 --> 00:29:02,000 Unë nuk jam edhe do të drejtuar këtë kod. 474 00:29:02,000 --> 00:29:09,000 Kodi i shkon më shpejt, në fakt, 3 herë më të shpejtë në qoftë se ju përdorni këtë. 475 00:29:09,000 --> 00:29:11,000 Ne gjithashtu mësuar rreth dhe dhe ose. 476 00:29:11,000 --> 00:29:15,000 Unë nuk jam duke shkuar për të shkuar nëpër këtë, sepse tashmë Lexi folur rreth tyre. 477 00:29:15,000 --> 00:29:17,000 Kjo është vetëm && dhe | | operatorit. 478 00:29:17,000 --> 00:29:21,000 >> E vetmja gjë që unë do të them është të jenë të kujdesshëm kur ju keni 3 kushte. 479 00:29:21,000 --> 00:29:24,000 Përdorni kllapa sepse ajo është shumë konfuze kur ju keni një kusht 480 00:29:24,000 --> 00:29:27,000 dhe një tjetër apo një tjetër. 481 00:29:27,000 --> 00:29:30,000 Përdorni kllapa vetëm për t'u siguruar se kushtet tuaja kuptim 482 00:29:30,000 --> 00:29:34,000 sepse në këtë rast, për shembull, ju mund të imagjinojmë se 483 00:29:34,000 --> 00:29:38,000 kjo mund të jetë kusht i parë dhe një ose tjetër 484 00:29:38,000 --> 00:29:41,000 ose 2 kushtet e kombinuara në një dhe 485 00:29:41,000 --> 00:29:45,000 ose një e treta, kështu që vetëm të jenë të kujdesshëm. 486 00:29:45,000 --> 00:29:48,000 Dhe së fundi, kemi biseduar për ndizet. 487 00:29:48,000 --> 00:29:53,000 Një switch është shumë e dobishme kur ju keni një ndryshore. 488 00:29:53,000 --> 00:29:55,000 Le të thonë se ju keni një variabël si n 489 00:29:55,000 --> 00:29:59,000 që mund të jetë 0, 1, ose 2, dhe për secili prej këtyre rasteve 490 00:29:59,000 --> 00:30:01,000 ju do të jeni për të kryer një detyrë. 491 00:30:01,000 --> 00:30:04,000 Ju mund të them kaloni ndryshore, dhe kjo tregon se 492 00:30:04,000 --> 00:30:08,000 vlera atëherë është si value1 unë jam duke shkuar për të bërë këtë, 493 00:30:08,000 --> 00:30:12,000 dhe pastaj kam të thyer, që do të thotë unë nuk jam duke shkuar për të parë ndonjë nga rastet e tjera 494 00:30:12,000 --> 00:30:15,000 sepse ne të kënaqur tashmë se rasti 495 00:30:15,000 --> 00:30:20,000 dhe pastaj value2 dhe kështu me radhë, dhe unë gjithashtu mund të ketë një kaloni default. 496 00:30:20,000 --> 00:30:24,000 Që do të thotë në qoftë se ajo nuk i plotëson asnjë nga rastet që kam pasur 497 00:30:24,000 --> 00:30:29,000 që unë jam duke shkuar për të bërë diçka tjetër, por kjo është fakultative. 498 00:30:29,000 --> 00:30:36,000 Kjo është e gjitha për mua. Tani le të kemi Tomi. 499 00:30:36,000 --> 00:30:41,000 Të gjithë të drejtë, kjo do të jetë Java 3-ish. 500 00:30:41,000 --> 00:30:45,000 Këto janë disa nga temat që ne do të mbulojnë, kripto, fushëveprimi, vargjeve, e të tjera. 501 00:30:45,000 --> 00:30:49,000 Vetëm një fjalë shpejtë në kripto. Ne nuk jemi duke shkuar për të arritur këtë shtëpi. 502 00:30:49,000 --> 00:30:52,000 >> Ne e bëmë këtë në pset 2, por për quiz sigurohuni që ju e dini dallimin 503 00:30:52,000 --> 00:30:54,000 mes shifër Cezarit dhe shifër Vigenere, 504 00:30:54,000 --> 00:30:57,000 si dy nga ato punë shifra dhe çfarë është si për të encrypt 505 00:30:57,000 --> 00:30:59,000 decrypt dhe tekst duke përdorur ato 2 shifra. 506 00:30:59,000 --> 00:31:03,000 Mos harroni, shifër Cezari thjesht rrotullohet çdo karakter me të njëjtën sasi, 507 00:31:03,000 --> 00:31:06,000 duke u siguruar që ju mod me numrin e shkronjave në alfabet. 508 00:31:06,000 --> 00:31:09,000 Dhe shifër Vigenere, në anën tjetër, rrotullohet çdo karakter 509 00:31:09,000 --> 00:31:12,000 me një sasi të ndryshme, kështu që në vend se duke thënë 510 00:31:12,000 --> 00:31:15,000 çdo karakter qarkullojnë nga 3 Vigenere do të rrotullohen çdo karakter 511 00:31:15,000 --> 00:31:17,000 me një sasi të ndryshme në varësi të disa fjalen 512 00:31:17,000 --> 00:31:20,000 ku çdo letër në fjalë paraqet një sasi të ndryshme 513 00:31:20,000 --> 00:31:26,000 të rrotullohen tekstin e qartë nga. 514 00:31:26,000 --> 00:31:28,000 Le të flasim së pari në lidhje me qëllimin e ndryshueshme. 515 00:31:28,000 --> 00:31:30,000 Ka 2 lloje të ndryshme të variablave. 516 00:31:30,000 --> 00:31:33,000 Ne kemi variablave lokale, dhe këto do të jenë të përcaktuara 517 00:31:33,000 --> 00:31:36,000 jashtë kryesore ose jashtë çdo funksion apo bllok, 518 00:31:36,000 --> 00:31:39,000 dhe këto do të jenë të qasshme kudo në programin tuaj. 519 00:31:39,000 --> 00:31:41,000 Nëse ju keni një funksion dhe në këtë funksion është një lak, ndërsa 520 00:31:41,000 --> 00:31:44,000 ndryshueshme madh global është i arritshëm kudo. 521 00:31:44,000 --> 00:31:48,000 Një variabël lokale, nga ana tjetër, është scoped në vendin ku është përcaktuar. 522 00:31:48,000 --> 00:31:53,000 >> Nëse ju keni një funksion këtu, për shembull, kemi këtë funksion g, 523 00:31:53,000 --> 00:31:56,000 dhe brenda g nuk është një ndryshore të quajtur y këtu, 524 00:31:56,000 --> 00:31:58,000 dhe kjo do të thotë se kjo është një variabël lokale. 525 00:31:58,000 --> 00:32:00,000 Edhe pse kjo është e ndryshueshme quajtur y 526 00:32:00,000 --> 00:32:03,000 dhe kjo është e ndryshueshme quajtur y këto 2 funksione 527 00:32:03,000 --> 00:32:06,000 nuk kanë asnjë ide se çfarë variabla njëri tjetrit lokale janë. 528 00:32:06,000 --> 00:32:10,000 Nga ana tjetër, deri këtu themi int x = 5, 529 00:32:10,000 --> 00:32:12,000 dhe kjo është jashtë fushës së çdo funksioni. 530 00:32:12,000 --> 00:32:16,000 Kjo është jashtë fushëveprimit të kryesore, kështu që kjo është një ndryshore globale. 531 00:32:16,000 --> 00:32:20,000 Kjo do të thotë se brenda këtyre 2 funksioneve kur them x - x ose + + 532 00:32:20,000 --> 00:32:26,000 Unë jam hyrë në të njëjtën ku x y këtë dhe kjo y janë variabla të ndryshme. 533 00:32:26,000 --> 00:32:30,000 Kjo është diferenca midis një ndryshore globale dhe një variabël lokale. 534 00:32:30,000 --> 00:32:33,000 Sa i përket dizajnit është i shqetësuar, nganjëherë kjo është ndoshta një ide e mirë 535 00:32:33,000 --> 00:32:37,000 për të mbajtur variablave lokale kurdo që ju ndoshta mund 536 00:32:37,000 --> 00:32:39,000 pasi ka një bandë e variablave globale mund të merrni të vërtetë konfuze. 537 00:32:39,000 --> 00:32:42,000 Nëse ju keni një bandë e funksioneve të gjitha modifikimit të njëjtën gjë 538 00:32:42,000 --> 00:32:45,000 ju mund të harrojmë çfarë nëse ky funksion aksidentalisht modifikon këtë global, 539 00:32:45,000 --> 00:32:47,000 dhe kjo funksion tjetër nuk e di për këtë, 540 00:32:47,000 --> 00:32:50,000 dhe ajo ka marrë mjaft konfuze si ju të merrni kodin më shumë. 541 00:32:50,000 --> 00:32:53,000 Mbajtja variablat lokale kurdo që ju ndoshta mund 542 00:32:53,000 --> 00:32:56,000 është dizajn vetëm mirë. 543 00:32:56,000 --> 00:33:00,000 Vargjeve, mos harroni, janë thjesht listat e elementeve të të njëjtit lloj. 544 00:33:00,000 --> 00:33:04,000 Brenda CI nuk mund të ketë një listë si 1, 2.0, hello. 545 00:33:04,000 --> 00:33:06,000 Ne thjesht nuk mund ta bëjë këtë. 546 00:33:06,000 --> 00:33:11,000 >> Kur ne të deklarojë një koleksion në C të gjitha elementet duhet të jenë të të njëjtit lloj. 547 00:33:11,000 --> 00:33:14,000 Këtu unë kam një rrjet të integers 3. 548 00:33:14,000 --> 00:33:18,000 Këtu unë kam gjatësinë e vektorit, por në qoftë se unë jam vetëm duke deklaruar se në këtë sintaksë 549 00:33:18,000 --> 00:33:21,000 ku unë të specifikojë se çfarë të gjitha elementet janë teknikisht unë nuk nevojë për këtë 3. 550 00:33:21,000 --> 00:33:25,000 Përpiluesi është mjaft i zgjuar që të kuptoj se sa e madhe duhet të jetë array. 551 00:33:25,000 --> 00:33:28,000 Tani kur unë dua të të marrë ose të vendosni vlerën e një grup 552 00:33:28,000 --> 00:33:30,000 kjo është sintaksë për të bërë këtë. 553 00:33:30,000 --> 00:33:33,000 Kjo në fakt do të ndryshojë elementin e dytë të grup, sepse, mos harroni, 554 00:33:33,000 --> 00:33:36,000 Numërimi fillon në 0, jo në 1. 555 00:33:36,000 --> 00:33:42,000 Në qoftë se unë dua të lexuar se vlera që unë mund të them diçka si int x = array [1]. 556 00:33:42,000 --> 00:33:44,000 Ose në qoftë se unë dua të vendosur atë vlerë, si unë jam duke bërë këtu, 557 00:33:44,000 --> 00:33:47,000 Unë mund të them array [1] = 4. 558 00:33:47,000 --> 00:33:50,000 Kjo kohë hyrë elemente nga indeksin e tyre 559 00:33:50,000 --> 00:33:52,000 apo pozicioni i tyre ose kur ata janë në grup, 560 00:33:52,000 --> 00:33:57,000 dhe që fillon në listë 0. 561 00:33:57,000 --> 00:34:00,000 Ne gjithashtu mund të ketë vargjeve të vargjeve, 562 00:34:00,000 --> 00:34:03,000 dhe kjo quhet një rrjet multi-dimensionale. 563 00:34:03,000 --> 00:34:05,000 Kur ne kemi një rrjet multi-dimensionale 564 00:34:05,000 --> 00:34:07,000 që do të thotë që ne mund të kemi diçka si rreshtave dhe kolonave, 565 00:34:07,000 --> 00:34:11,000 dhe kjo është vetëm një mënyrë për të visualizing këtë apo duke menduar për të. 566 00:34:11,000 --> 00:34:14,000 Kur unë kam një rrjet multi-dimensionale do të thotë se unë jam duke shkuar për të filluar nevojë 567 00:34:14,000 --> 00:34:17,000 më shumë se 1 index sepse në qoftë se unë kam një rrjet 568 00:34:17,000 --> 00:34:19,000 vetëm duke thënë se çfarë rresht ju jeni në nuk na jep një numër. 569 00:34:19,000 --> 00:34:22,000 Kjo është me të vërtetë vetëm do të na japin një listë të numrave. 570 00:34:22,000 --> 00:34:25,000 Le të thonë se unë kam këtë grup këtu. 571 00:34:25,000 --> 00:34:30,000 Unë kam një koleksion të quajtur rrjetit, dhe unë jam duke thënë se ajo e 2 rreshtave dhe kolonave 3, 572 00:34:30,000 --> 00:34:32,000 dhe kështu që kjo është një mënyrë për të visualizing atë. 573 00:34:32,000 --> 00:34:37,000 Kur them unë dua të të marrë elementin në [1] [2] 574 00:34:37,000 --> 00:34:41,000 që do të thotë se për shkak se këto janë rreshtat e parë dhe pastaj shtylla 575 00:34:41,000 --> 00:34:44,000 Unë jam duke shkuar për të hidhen në rresht 1 viti kam thënë: 1. 576 00:34:44,000 --> 00:34:49,000 >> Atëherë unë jam duke shkuar për të ardhur këtu për kolonën 2, dhe unë jam duke shkuar për të marrë vlerën 6. 577 00:34:49,000 --> 00:34:51,000 Kuptim? 578 00:34:51,000 --> 00:34:55,000 Multi-dimensionale vargjeve, mos harroni, teknikisht janë vetëm një grup i vargjeve. 579 00:34:55,000 --> 00:34:57,000 Ne mund të kemi vargjeve të vargjeve të vargjeve. 580 00:34:57,000 --> 00:35:00,000 Ne mund të mbajë, por me të vërtetë një mënyrë për të menduar për 581 00:35:00,000 --> 00:35:03,000 se si kjo është duke u hedhur jashtë dhe çfarë po ndodh është që të kujtoj atë 582 00:35:03,000 --> 00:35:09,000 në një rrjet si kjo. 583 00:35:09,000 --> 00:35:12,000 Kur ne të kalojë vargjeve të funksioneve, ata do të sillen 584 00:35:12,000 --> 00:35:16,000 pak ndryshe se kur ne të kalojë variablave të rregullta për funksionet 585 00:35:16,000 --> 00:35:18,000 si kalon një int apo noton. 586 00:35:18,000 --> 00:35:21,000 Kur ne të kalojë në një lloje int ose char apo ndonjë nga këto të dhëna të tjera 587 00:35:21,000 --> 00:35:24,000 ne vetëm mori një vështrim në qoftë se funksioni modifikon 588 00:35:24,000 --> 00:35:28,000 Vlera e kësaj variable se ndryshimi nuk do të shumoj deri 589 00:35:28,000 --> 00:35:32,000 te funksionit quajtur. 590 00:35:32,000 --> 00:35:35,000 Me një grup, në anën tjetër, që do të ndodhë. 591 00:35:35,000 --> 00:35:39,000 Nëse unë të kalojë në një grup me disa funksion dhe se funksioni i ndryshon disa nga elementet, 592 00:35:39,000 --> 00:35:43,000 kur unë të kthehem deri në funksionin që quhet it 593 00:35:43,000 --> 00:35:47,000 grup im është tani do të jenë të ndryshme, dhe fjalori për se 594 00:35:47,000 --> 00:35:50,000 vargjeve është kalojnë duke iu referuar, siç do të shohim më vonë. 595 00:35:50,000 --> 00:35:53,000 Kjo është e lidhur me punën si pointers, ku këto lloje themelore të të dhënave, 596 00:35:53,000 --> 00:35:55,000 në anën tjetër, janë miratuar nga vlera. 597 00:35:55,000 --> 00:35:59,000 >> Ne mund të mendoj se si të bërë një kopje të disa ndryshore dhe pastaj kalon në kopje. 598 00:35:59,000 --> 00:36:01,000 Kjo nuk ka rëndësi se çfarë të bëjmë me atë variabël. 599 00:36:01,000 --> 00:36:06,000 Funksioni thirrje nuk do të jenë të vetëdijshëm se ajo është ndryshuar. 600 00:36:06,000 --> 00:36:10,000 Vargjeve janë vetëm pak të ndryshme në këtë drejtim. 601 00:36:10,000 --> 00:36:13,000 Për shembull, si ne vetëm e pa, kryesore është thjesht një funksion 602 00:36:13,000 --> 00:36:15,000 që mund të marrë në 2 argumente. 603 00:36:15,000 --> 00:36:20,000 Argumenti i parë në funksion kryesor është argc, ose numri i argumenteve, 604 00:36:20,000 --> 00:36:23,000 dhe Argumenti i dytë është quajtur argv, 605 00:36:23,000 --> 00:36:27,000 dhe ata janë vlerat reale të këtyre argumenteve. 606 00:36:27,000 --> 00:36:30,000 Le të thonë se unë kam një program të quajtur this.c, 607 00:36:30,000 --> 00:36:34,000 dhe unë them të bëjë këtë, dhe unë jam duke shkuar për të drejtuar këtë në rreshtin e komandave. 608 00:36:34,000 --> 00:36:38,000 Tani të kalojë në disa argumente të programit tim quhet kjo, 609 00:36:38,000 --> 00:36:42,000 Unë mund të them diçka të tillë. / Cs kjo është 50. 610 00:36:42,000 --> 00:36:45,000 Kjo është ajo që ne imagjinojmë Davidi për të bërë çdo ditë në terminal. 611 00:36:45,000 --> 00:36:48,000 Por tani brenda kryesore funksioni i këtij programi 612 00:36:48,000 --> 00:36:52,000 ka këto vlera, kështu argc është 4. 613 00:36:52,000 --> 00:36:56,000 Kjo mund të jetë pak konfuze, sepse me të vërtetë ne jemi që i kalojnë në është cs 50. 614 00:36:56,000 --> 00:36:58,000 Kjo është vetëm 3. 615 00:36:58,000 --> 00:37:02,000 Por mos harroni se elementi i parë i argv ose Argumenti i parë 616 00:37:02,000 --> 00:37:05,000 është emri i funksionit vetë. 617 00:37:05,000 --> 00:37:07,190 Kështu që do të thotë se ne kemi 4 gjëra këtu, 618 00:37:07,190 --> 00:37:10,530 dhe elementi i parë do të jetë. / këtë. 619 00:37:10,530 --> 00:37:12,970 Dhe kjo do të përfaqësohet si një varg. 620 00:37:12,970 --> 00:37:18,590 Pastaj elementet e mbetura janë ato që ne pas shtypur në emër të programit. 621 00:37:18,590 --> 00:37:22,720 Pra, ashtu si një mënjanë, si ne ndoshta pa në pset 2, 622 00:37:22,720 --> 00:37:28,780 mos harroni se vargu 50 është ≠ në 50 integer. 623 00:37:28,780 --> 00:37:32,520 Pra, ne nuk mund të themi diçka si, "int x = argv 3. ' 624 00:37:32,520 --> 00:37:36,470 >> Kjo është jo vetëm do të bëjë kuptim, sepse ky është një varg, dhe kjo është një numër të plotë. 625 00:37:36,470 --> 00:37:38,510 Pra, nëse ju doni të konvertohet në mes të 2, mbani mend, ne do të 626 00:37:38,510 --> 00:37:40,810 kanë këtë funksion magjike quajtur atoi. 627 00:37:40,810 --> 00:37:46,270 Që merr një varg dhe kthehet integer përfaqësuar brenda atij vargut. 628 00:37:46,270 --> 00:37:48,360 Pra, kjo është një gabim i lehtë për të bërë në quiz, 629 00:37:48,360 --> 00:37:51,590 vetëm duke menduar se kjo automatikisht do të jetë lloji i saktë. 630 00:37:51,590 --> 00:37:53,860 Por vetëm e di se këto do të jetë gjithmonë vargjet 631 00:37:53,860 --> 00:38:00,920 edhe nëse vargu përmban vetëm një numër të plotë apo një karakter ose një noton. 632 00:38:00,920 --> 00:38:03,380 Pra, tani le të flasim në lidhje me kandidimin kohë. 633 00:38:03,380 --> 00:38:06,700 Kur ne kemi të gjitha këto algoritme që bëjnë të gjitha këto gjëra të çmendur, 634 00:38:06,700 --> 00:38:11,580 ajo bëhet me të vërtetë të dobishme për pyetjen, "Sa kohë që ata marrin?" 635 00:38:11,580 --> 00:38:15,500 Ne përfaqësojmë se me diçka të quajtur simbol asymptotic. 636 00:38:15,500 --> 00:38:18,430 Pra, kjo do të thotë se - mirë, le të themi japim algorithm tonë 637 00:38:18,430 --> 00:38:20,840 disa të dhëna të vërtetë, të vërtetë, të vërtetë e madhe. 638 00:38:20,840 --> 00:38:23,840 Ne duam të shtrojmë pyetjen, "Si është ajo kohë do të marrë? 639 00:38:23,840 --> 00:38:26,370 Sa hapa do të marrë algorithm tonë për të kandiduar 640 00:38:26,370 --> 00:38:29,980 si një funksion i madhësisë së input? " 641 00:38:29,980 --> 00:38:33,080 Pra, rruga e parë që ne mund të përshkruajnë kohë të kandidojë është me e madhe O. 642 00:38:33,080 --> 00:38:35,380 Dhe kjo është koha më e keqe-rastin tonë running. 643 00:38:35,380 --> 00:38:38,590 Pra, nëse ne duam të zgjidhim një rrjet, dhe ne japim algorithm tonë një grup 644 00:38:38,590 --> 00:38:41,000 kjo është në rend zbritës, kur ajo duhet të jetë në mënyrë ngjitje, 645 00:38:41,000 --> 00:38:43,130 që do të jetë rasti më i keq. 646 00:38:43,130 --> 00:38:49,800 Kjo is sipërme ynë lidhur në gjatësinë maksimale të kohës algorithm tonë do të marrë. 647 00:38:49,800 --> 00:38:54,740 Nga ana tjetër, kjo Ω do të përshkruajë të mirë-rasti kohë running. 648 00:38:54,740 --> 00:38:58,210 Pra, nëse ne japim një sërë renditura tashmë në një algoritmi klasifikim, 649 00:38:58,210 --> 00:39:00,940 sa kohë do të marrë për të zgjidhur atë? 650 00:39:00,940 --> 00:39:06,610 Dhe kjo, atëherë, përshkruan një ulët i detyruar në drejtimin kohë. 651 00:39:06,610 --> 00:39:10,980 Pra, këtu janë vetëm disa fjalë që përshkruajnë disa herë përbashkëta running. 652 00:39:10,980 --> 00:39:13,120 Këto janë në ngjitje qëllim. 653 00:39:13,120 --> 00:39:16,060 Kohën më të shpejtë running kemi quhet konstante. 654 00:39:16,060 --> 00:39:19,800 >> Kjo do të thotë pa marrë parasysh se sa shumë elementeve ne japin algorithm tonë, 655 00:39:19,800 --> 00:39:22,280 pa marrë parasysh sa e madhe array ynë është, sorting atë 656 00:39:22,280 --> 00:39:26,510 ose duke bërë çdo gjë që ne jemi duke bërë në grup gjithmonë do të marrë të njëjtën sasi kohe. 657 00:39:26,510 --> 00:39:30,270 Pra, ne mund të përfaqësojë që vetëm me një 1, e cila është një konstante. 658 00:39:30,270 --> 00:39:32,410 Ne gjithashtu shikuar në kohë të kandidojë logaritmike. 659 00:39:32,410 --> 00:39:34,800 Pra, diçka si kërkim binar është logaritmike, 660 00:39:34,800 --> 00:39:37,140 ku ne prerë problemin në gjysmën e kohës çdo 661 00:39:37,140 --> 00:39:40,970 dhe pastaj gjërat vetëm të merrni më të larta nga atje. 662 00:39:40,970 --> 00:39:43,580 Dhe në qoftë se ju jeni me shkrim ndonjëherë një O i çdo algorithm faktoriale, 663 00:39:43,580 --> 00:39:47,850 ju ndoshta nuk duhet të konsiderojë këtë si puna juaj ditë. 664 00:39:47,850 --> 00:39:53,910 Kur krahasojmë herë running është e rëndësishme për të mbajtur në mend këto gjëra. 665 00:39:53,910 --> 00:39:57,760 Pra, nëse unë kam një algoritmi që është O (n), dhe dikush tjetër 666 00:39:57,760 --> 00:40:03,590 ka një algoritmi e O (2n) këto janë në të vërtetë asymptotically ekuivalente. 667 00:40:03,590 --> 00:40:06,590 Pra, nëse ne e imagjinojmë n të jetë një numër i madh si eleventy miliardë: 668 00:40:06,590 --> 00:40:13,090 kështu që kur ne jemi krahasuar eleventy miliardë për diçka si eleventy + 3 miliardë, 669 00:40:13,090 --> 00:40:17,640 papritmas se 3 nuk ka të vërtetë të bëjë një ndryshim të madh më. 670 00:40:17,640 --> 00:40:20,980 Kjo është arsyeja pse ne jemi duke shkuar për të filluar duke pasur parasysh këto gjëra të jenë të barabartë. 671 00:40:20,980 --> 00:40:24,220 Pra, gjëra të tilla si këto kosntanta këtu, ka 2 x kjo, ose duke shtuar një 3, 672 00:40:24,220 --> 00:40:27,180 këto janë vetëm konstante, dhe këto do të bjerë deri. 673 00:40:27,180 --> 00:40:32,480 Pra, kjo është arsyeja pse të gjitha këto 3 herë drejtuara janë të njëjta si duke thënë se ata janë të O (n). 674 00:40:32,480 --> 00:40:37,490 Në mënyrë të ngjashme, në qoftë se ne kemi 2 herë të tjera të kandiduar, le të themi O (n ³ + 2n ²), ne mund të shtoni 675 00:40:37,490 --> 00:40:42,070 + N, 7 +, dhe pastaj ne kemi një tjetër kohë të drejtuar kjo është vetëm o (³ n). 676 00:40:42,070 --> 00:40:46,290 përsëri, këto janë e njëjta gjë, sepse këto - këto nuk janë të njëjta. 677 00:40:46,290 --> 00:40:49,840 Këto janë të njëjtat gjëra, më vjen keq. Pra, këto janë të njëjta, sepse 678 00:40:49,840 --> 00:40:53,090 this ³ n do të dominojnë këtë ² 2n. 679 00:40:53,090 --> 00:40:59,130 >> Çfarë nuk është e njëjta gjë është nëse ne kemi drejtuar herë si O ³ (n) dhe O (n ²) 680 00:40:59,130 --> 00:41:02,820 sepse ky ³ n është shumë më i madh se ky ² n. 681 00:41:02,820 --> 00:41:05,470 Pra, nëse kemi eksponentët, papritmas kjo fillon në materie, 682 00:41:05,470 --> 00:41:08,280 por kur ne jemi vetëm që kanë të bëjnë me faktorët si ne jemi deri këtu, 683 00:41:08,280 --> 00:41:12,810 atëherë ajo nuk do të marrë parasysh për shkak se ata janë vetëm do të bjerë jashtë. 684 00:41:12,810 --> 00:41:16,760 Le të marrin një vështrim në disa nga algoritme që kemi parë deri më tani 685 00:41:16,760 --> 00:41:19,260 dhe bisedoni për kohën e tyre të kandidojë. 686 00:41:19,260 --> 00:41:23,850 Mënyra e parë e kërkuar për një numër në një listë, që e pamë, ishte kërkim linear. 687 00:41:23,850 --> 00:41:26,950 Dhe zbatimi i kërkimit lineare është super i hapur. 688 00:41:26,950 --> 00:41:30,490 Ne vetëm kemi një listë dhe ne do të shikojmë në çdo element të vetme në listë 689 00:41:30,490 --> 00:41:34,260 deri ne gjeni numrin ne jemi duke kërkuar për të. 690 00:41:34,260 --> 00:41:38,370 Kështu që do të thotë se në rastin më të keq, kjo O (n). 691 00:41:38,370 --> 00:41:40,860 Dhe rasti më i keq mund të jetë këtu nëse elementi është 692 00:41:40,860 --> 00:41:45,710 elementi i fundit, pastaj duke përdorur search lineare ne duhet të shikojmë në çdo element të vetme 693 00:41:45,710 --> 00:41:50,180 deri sa të kemi në të fundit në mënyrë që të dini se kjo ishte në fakt në listë. 694 00:41:50,180 --> 00:41:52,910 Ne nuk mund të jap vetëm deri në gjysmë të rrugës dhe të thonë: "Kjo nuk është ndoshta atje." 695 00:41:52,910 --> 00:41:55,980 Me kërkimin linear ne duhet të shikojmë në të gjithë gjë. 696 00:41:55,980 --> 00:41:59,090 Të mirë-rasti kohë në punë, në anën tjetër, është konstante 697 00:41:59,090 --> 00:42:04,200 sepse në rastin më të mirë elementi ne jemi duke kërkuar për të është vetëm i pari në listë. 698 00:42:04,200 --> 00:42:08,930 Kështu që ajo do të marrë saktësisht të na hapin 1, pa marrë parasysh sa i madh lista është 699 00:42:08,930 --> 00:42:12,140 në qoftë se ne jemi duke kërkuar për elementin e parë çdo kohë. 700 00:42:12,140 --> 00:42:15,390 >> Kështu që kur ju kërkoni, mos harroni, kjo nuk kërkon që lista jonë të ndahen. 701 00:42:15,390 --> 00:42:19,430 Sepse ne jemi thjesht do të shikoni mbi çdo elementi të vetëm, dhe kjo nuk ka rëndësi 702 00:42:19,430 --> 00:42:23,560 atë mënyrë që ato elemente janë të in 703 00:42:23,560 --> 00:42:28,110 Një algoritëm më inteligjente kërkimi është diçka si kërkim dyor. 704 00:42:28,110 --> 00:42:31,500 Mos harroni, zbatimi i kërkimit binar është kur ju do të jeni 705 00:42:31,500 --> 00:42:34,320 mbajtur në kërkim në mes të listës. 706 00:42:34,320 --> 00:42:38,000 Dhe për shkak se ne jemi duke kërkuar në mes, ne kërkojmë që lista të renditura sipas 707 00:42:38,000 --> 00:42:40,580 apo tjetër ne nuk e dimë ku e mesme është, dhe ne duhet të shikojmë mbi 708 00:42:40,580 --> 00:42:44,480 krejt Listen për të gjetur atë, dhe pastaj në atë moment ne jemi vetëm humbur kohë. 709 00:42:44,480 --> 00:42:48,480 Pra, nëse ne kemi një listë të renditura dhe të gjejmë e mesme, ne jemi duke shkuar për të krahasuar mes 710 00:42:48,480 --> 00:42:51,590 në elementin ne jemi duke kërkuar për të. 711 00:42:51,590 --> 00:42:54,640 Në qoftë se kjo është shumë e lartë, atëherë ne mund të harrojmë gjysmën e duhur 712 00:42:54,640 --> 00:42:57,810 sepse ne e dimë se në qoftë se elementi ynë është tashmë shumë i lartë 713 00:42:57,810 --> 00:43:01,080 dhe çdo gjë në të djathtë të këtij elementi është edhe më e lartë, 714 00:43:01,080 --> 00:43:02,760 atëherë ne nuk kemi nevojë të shohim më aty. 715 00:43:02,760 --> 00:43:05,430 Ku në anën tjetër, në qoftë se elementi ynë është shumë i ulët, 716 00:43:05,430 --> 00:43:08,700 ne e dimë se gjithçka në të majtë të atij elementi është gjithashtu shumë i ulët, 717 00:43:08,700 --> 00:43:11,390 kështu që nuk ka të vërtetë ka kuptim për të parë atje, ose. 718 00:43:11,390 --> 00:43:15,760 Në këtë mënyrë, me çdo hap dhe çdo kohë ne shikojmë në mesin e listës, 719 00:43:15,760 --> 00:43:19,060 ne jemi duke shkuar për të prerë problemin tonë në gjysmën sepse papritmas ne e dimë 720 00:43:19,060 --> 00:43:23,040 një bandë e tërë e numrave që nuk mund të jetë një ne jemi duke kërkuar për të. 721 00:43:23,040 --> 00:43:26,950 >> Në pseudokod kjo do të dukej diçka si kjo, 722 00:43:26,950 --> 00:43:30,990 dhe për shkak se ne jemi prerja listën në gjysmën e kohës çdo të vetme, 723 00:43:30,990 --> 00:43:34,920 hedhje keq rastin tonë kohë të drejtuar nga lineare për logaritmike. 724 00:43:34,920 --> 00:43:39,260 Pra, ne kemi papritmas log-në hapat në mënyrë që të gjejnë një element në një listë. 725 00:43:39,260 --> 00:43:42,460 Të mirë-rasti Ora drejtimin, megjithatë, është ende e vazhdueshme 726 00:43:42,460 --> 00:43:45,180 sepse tani, le të them vetëm se elementi ne jemi duke kërkuar për të është 727 00:43:45,180 --> 00:43:48,380 gjithmonë e mesme e saktë nga lista origjinale. 728 00:43:48,380 --> 00:43:52,080 Kështu që ne mund të rritet listën tonë aq i madh sa ne duam, por në qoftë se elementi ne jemi duke kërkuar për të është në mes, 729 00:43:52,080 --> 00:43:54,910 atëherë ajo është vetëm do të marrë na hap 1. 730 00:43:54,910 --> 00:44:00,920 Kështu që është pse ne je O (log n) dhe Ω (1) ose konstante. 731 00:44:00,920 --> 00:44:04,510 Le të vërtetë të drejtuar kërkim dyor në këtë listë. 732 00:44:04,510 --> 00:44:08,020 Pra, le të themi se ne jemi duke kërkuar për elementin 164. 733 00:44:08,020 --> 00:44:11,650 Gjëja e parë që ne do të bëjmë është të gjeni midpoint e kësaj liste. 734 00:44:11,650 --> 00:44:15,060 Kjo ndodh pikërisht kështu që midpoint do të bien në mes këtyre 2 numra, 735 00:44:15,060 --> 00:44:18,960 kështu që le të vetëm në mënyrë arbitrare të them, çdo herë midpoint bie në mes të 2 numrave, 736 00:44:18,960 --> 00:44:21,150 le të vetëm të rrumbullakosë më lart. 737 00:44:21,150 --> 00:44:24,330 Ne vetëm duhet të sigurohemi që ne bëjmë këtë në çdo hap të rrugës. 738 00:44:24,330 --> 00:44:29,040 Pra, ne jemi duke shkuar për të rrumbullakosë më lart, dhe ne jemi duke shkuar për të thonë se 161 është e mesme e listës sonë. 739 00:44:29,040 --> 00:44:34,640 Pra 161 <164, dhe çdo element të majtë të 161 740 00:44:34,640 --> 00:44:39,120 është gjithashtu <164, kështu që ne e dimë se kjo nuk do të na ndihmojë në të gjitha 741 00:44:39,120 --> 00:44:42,690 të fillojmë të shikojmë gjatë këtu, sepse elementi ne jemi duke kërkuar për nuk mund të jetë atje. 742 00:44:42,690 --> 00:44:47,060 Pra, çfarë mund të bëjmë është që ne vetëm mund të harrojmë për atë gjysmën e tërë e majtë të listës, 743 00:44:47,060 --> 00:44:51,700 dhe tani e konsiderojnë vetëm nga e drejta e tutje 161. 744 00:44:51,700 --> 00:44:54,050 >> Pra, përsëri, kjo është midpoint, le të vetëm të rrumbullakosë më lart. 745 00:44:54,050 --> 00:44:56,260 Tani 175 është shumë e madhe. 746 00:44:56,260 --> 00:44:59,180 Kështu që ne e dimë se nuk do të na ndihmojë të kërkoni këtu apo këtu, 747 00:44:59,180 --> 00:45:06,610 kështu që ne mund të hedhin vetëm që larg, dhe në fund ne do të goditur 164. 748 00:45:06,610 --> 00:45:10,560 Çdo pyetje në kërkim binar? 749 00:45:10,560 --> 00:45:14,180 Le të lëvizin nga të kërkoni përmes një listë tashmë renditura 750 00:45:14,180 --> 00:45:17,660 që në fakt të marrë një listë të numrave në çdo mënyrë 751 00:45:17,660 --> 00:45:20,960 dhe duke e bërë këtë listë në ngjitje qëllim. 752 00:45:20,960 --> 00:45:24,060 Algorithm parë kemi shikuar në u quajt lloj flluskë. 753 00:45:24,060 --> 00:45:27,300 Dhe kjo do të jetë më e thjeshtë e algoritmeve pamë. 754 00:45:27,300 --> 00:45:32,970 Lloj Bubble thotë se kur çdo 2 elemente brenda listës janë jashtë vendit, 755 00:45:32,970 --> 00:45:36,500 që do të thotë se ka një numër të lartë të majtë e një numri më të ulët, 756 00:45:36,500 --> 00:45:40,190 atëherë ne do të bie në ujdi tyre, sepse kjo do të thotë se lista do të jetë 757 00:45:40,190 --> 00:45:42,860 "Më shumë renditura" se sa ishte më parë. 758 00:45:42,860 --> 00:45:45,180 Dhe ne jemi vetëm do të vazhdojë këtë proces përsëri dhe përsëri dhe përsëri 759 00:45:45,180 --> 00:45:52,100 deri në fund lloj elementet e flluskë për vendndodhjen e tyre të saktë dhe ne kemi një listë të renditura. 760 00:45:52,100 --> 00:45:57,230 >> Ora drejtuar kjo do të jetë O (n ²). Pse? 761 00:45:57,230 --> 00:46:00,370 E pra, sepse në rastin më të keq, ne jemi duke shkuar për të marrë çdo element, dhe 762 00:46:00,370 --> 00:46:04,570 ne jemi duke shkuar për t'i dhënë fund krahasuar atë me çdo element tjetër në listë. 763 00:46:04,570 --> 00:46:08,030 Por në rastin më të mirë, ne kemi një listë të renditura tashmë, lloj flluskë e 764 00:46:08,030 --> 00:46:12,230 vetëm do të kalojnë nëpër një herë, thonë: "Jo. Unë nuk e ka bërë asnjë këmbime, kështu që unë jam bërë." 765 00:46:12,230 --> 00:46:17,410 Pra, ne kemi një kohë të mirë-rasti drejtimin e Ω (n). 766 00:46:17,410 --> 00:46:20,680 Le të drejtuar lloj flluskë në një listë. 767 00:46:20,680 --> 00:46:23,560 Ose së pari, le të vetëm shikoni në disa pseudokod vërtetë shpejt. 768 00:46:23,560 --> 00:46:28,160 Ne duam të themi ne duam të mbajnë gjurmët e, në çdo ripërsëritje e lak, 769 00:46:28,160 --> 00:46:32,190 mbajnë gjurmët e nëse ne nuk ndryshoi ndonjë elemente. 770 00:46:32,190 --> 00:46:37,610 Pra, arsyeja për këtë është, ne jemi duke shkuar për të ndaluar, kur ne nuk kemi swapped ndonjë elemente. 771 00:46:37,610 --> 00:46:41,980 Pra, në fillim të lak tonë, ne nuk kemi swapped asgjë, kështu që ne do të themi se është e rreme. 772 00:46:41,980 --> 00:46:47,170 Tani, ne jemi duke shkuar për të shkuar nëpër lista dhe krahasoni element I te elementi i + 1 773 00:46:47,170 --> 00:46:50,310 dhe në qoftë se ajo është e vërtetë se ka një numër të madh të majtë e një numri më të vogël, 774 00:46:50,310 --> 00:46:52,310 atëherë ne jemi vetëm do të bie në ujdi tyre. 775 00:46:52,310 --> 00:46:54,490 >> Dhe pastaj ne jemi duke shkuar për të mos harroni se ne swapped një element. 776 00:46:54,490 --> 00:46:58,900 Kjo do të thotë se ne kemi nevojë për të shkuar nëpër lista të paktën 1 më shumë kohë 777 00:46:58,900 --> 00:47:02,160 sepse gjendja në të cilën u ndal, ne është kur lista e tërë është renditur tashmë, 778 00:47:02,160 --> 00:47:04,890 që do të thotë ne nuk kemi bërë ndonjë këmbime. 779 00:47:04,890 --> 00:47:09,960 Pra, kjo është arsyeja pse gjendja jonë këtu poshtë është ', ndërsa disa elemente janë swapped ". 780 00:47:09,960 --> 00:47:13,720 Pra, tani le të shohim vetëm në këtë kandidon për një listë. 781 00:47:13,720 --> 00:47:16,640 Kam listën 5,0,1,6,4. 782 00:47:16,640 --> 00:47:19,850 Lloj flluskoj do të fillojë gjatë gjithë rrugës në të majtë, dhe ajo do të të krahasuar 783 00:47:19,850 --> 00:47:24,700 elementet i, në mënyrë që të i 0 + 1, e cila është elementi 1. 784 00:47:24,700 --> 00:47:29,020 Kjo do të thotë, edhe 5> 0, por tani 5 është në të majtë, 785 00:47:29,020 --> 00:47:32,500 kështu që unë duhet të bie në ujdi 5 dhe 0. 786 00:47:32,500 --> 00:47:35,470 Kur unë të bie në ujdi tyre, papritmas kam marrë këtë listë të ndryshme. 787 00:47:35,470 --> 00:47:38,260 Tani 5> 1, kështu që ne jemi duke shkuar për të bie në ujdi tyre. 788 00:47:38,260 --> 00:47:42,160 5 nuk është i> 6, kështu që ne nuk duhet të bëjmë asgjë këtu. 789 00:47:42,160 --> 00:47:46,690 Por 6> 4, kështu që ne duhet të bie në ujdi. 790 00:47:46,690 --> 00:47:49,740 Përsëri, ne kemi nevojë për të drejtuar nëpër lista të tërë për të zbuluar përfundimisht 791 00:47:49,740 --> 00:47:52,330 se këto janë jashtë funksionit, ne bie në ujdi tyre, 792 00:47:52,330 --> 00:47:57,120 dhe në këtë pikë ne kemi nevojë për të drejtuar nëpër lista kohë 1 më shumë 793 00:47:57,120 --> 00:48:05,390 për t'u siguruar se çdo gjë është në rregull të tij, dhe në këtë lloj flluskë pikë ka mbaruar. 794 00:48:05,390 --> 00:48:10,720 Një algorithm të ndryshme për të marrë disa elemente dhe zgjidhja e tyre është një lloj përzgjedhje. 795 00:48:10,720 --> 00:48:15,740 Ideja prapa përzgjedhjes lloj është që ne jemi duke shkuar për të ndërtuar një pjesë të renditura të listës 796 00:48:15,740 --> 00:48:18,150 1 element në një kohë. 797 00:48:18,150 --> 00:48:23,170 >> Dhe mënyrën se si ne jemi duke shkuar për të bërë këtë është duke ndërtuar segmentin e majtë të listës. 798 00:48:23,170 --> 00:48:27,510 Dhe në thelb, çdo - në çdo hap, ne jemi duke shkuar për të marrë elementin më të vogël që kemi lënë 799 00:48:27,510 --> 00:48:32,310 që nuk është renditur ende, dhe ne jemi duke shkuar për të lëvizur atë në këtë segment renditura. 800 00:48:32,310 --> 00:48:35,850 Kjo do të thotë ne kemi nevojë të vazhdueshme të gjetur elementin minimal Unsorted 801 00:48:35,850 --> 00:48:40,720 dhe pastaj të marrë atë element minimal dhe shkëmbim atë me çfarëdo 802 00:48:40,720 --> 00:48:45,090 la-shumica element që nuk zgjidhet. 803 00:48:45,090 --> 00:48:50,890 Ora drejtuar nga kjo do të jetë O (n ²), sepse në rastin më të keq 804 00:48:50,890 --> 00:48:55,070 ne kemi nevojë për të krahasuar çdo element të vetme për çdo element tjetër. 805 00:48:55,070 --> 00:48:59,250 Sepse ne jemi duke thënë se në qoftë se ne të fillojë në gjysmën e majtë të listës, ne kemi nevojë 806 00:48:59,250 --> 00:49:02,970 për të shkuar nëpër tërë segmentin e duhur për të gjetur elementin më të vogël. 807 00:49:02,970 --> 00:49:05,430 Dhe pastaj, përsëri, ne kemi nevojë për të shkuar mbi të gjithë segmentin e duhur dhe 808 00:49:05,430 --> 00:49:08,210 do të mbajë mbi atë mbi dhe mbi dhe mbi përsëri. 809 00:49:08,210 --> 00:49:11,350 Kjo do të jetë ² n. Ne do të duhet një për brenda loop e një tjetër për lak 810 00:49:11,350 --> 00:49:13,350 e cila sugjeron ² n. 811 00:49:13,350 --> 00:49:16,530 Në rastin më të mirë mendimi, le të themi se t'i jepte një listë të renditura tashmë; 812 00:49:16,530 --> 00:49:19,270 ne fakt nuk e bëjmë ndonjë të mirë se n ². 813 00:49:19,270 --> 00:49:21,730 Sepse lloj përzgjedhje ka asnjë mënyrë për të ditur se 814 00:49:21,730 --> 00:49:25,540 elementi minimale është vetëm 1 Unë të ndodhë që të jetë në kërkim në. 815 00:49:25,540 --> 00:49:28,970 Ajo ende ka nevojë për t'u siguruar që kjo është në të vërtetë minimale. 816 00:49:28,970 --> 00:49:31,670 >> Dhe mënyra e vetme për t'u siguruar se ajo është minimale, duke përdorur këtë algorithm, 817 00:49:31,670 --> 00:49:34,640 është që të shikojmë në çdo element të vetme përsëri. 818 00:49:34,640 --> 00:49:38,420 Pra me të vërtetë, në qoftë se ju jepni atë - nëse ju jepni lloj përzgjedhje një listë të renditura tashmë, 819 00:49:38,420 --> 00:49:42,720 ajo nuk do të bëjë ndonjë të mirë se duke i dhënë asaj një listë që nuk është renditura ende. 820 00:49:42,720 --> 00:49:46,320 Nga rruga, nëse kjo ndodh të jetë rasti se diçka është O (diçka) 821 00:49:46,320 --> 00:49:50,640 dhe omega e diçka, ne vetëm mund të them më shumë shkurtimisht se është θ diçka. 822 00:49:50,640 --> 00:49:52,760 Pra, nëse ju shihni se të vijë deri diku, kjo është ajo që vetëm do të thotë. 823 00:49:52,760 --> 00:49:57,580 >> Nëse diçka është theta të n ², ajo është edhe e madhe O (n ²) dhe Ω (n ²). 824 00:49:57,580 --> 00:49:59,790 Kështu rastin më të mirë dhe rastin më të keq, kjo nuk ka të bëjë një ndryshim, 825 00:49:59,790 --> 00:50:04,400 algorithm do të bëjë të njëjtën gjë çdo kohë. 826 00:50:04,400 --> 00:50:06,610 Pra, kjo është ajo që pseudokod për lloj përzgjedhjes mund të duken si. 827 00:50:06,610 --> 00:50:10,630 Ne jemi në thelb do të thotë se unë dua të iterate mbi listën 828 00:50:10,630 --> 00:50:15,180 nga e majta në të djathtë, dhe në çdo ripërsëritje e lak, unë jam duke shkuar për të lëvizur 829 00:50:15,180 --> 00:50:19,780 elementi minimal në këtë pjesë të renditura të listës. 830 00:50:19,780 --> 00:50:23,260 Dhe një herë unë të lëvizë diçka atje, unë kurrë nuk duhet të shikoni në atë element përsëri. 831 00:50:23,260 --> 00:50:28,600 Sepse sa më shpejt që unë të bie në ujdi një element për segmentin e majtë të listës, është e renditura 832 00:50:28,600 --> 00:50:32,600 sepse ne jemi duke bërë gjithçka në ngjitje urdhër duke përdorur minimume. 833 00:50:32,600 --> 00:50:38,740 Kështu thamë, në rregull, ne jemi në pozitë që unë, dhe ne duhet të shikojmë në të gjitha elementet e 834 00:50:38,740 --> 00:50:42,260 për të drejtën e unë në mënyrë që të gjeni minimum. 835 00:50:42,260 --> 00:50:46,150 Pra, kjo do të thotë që ne duam të shohim nga i + 1 në fund të listës. 836 00:50:46,150 --> 00:50:51,610 Dhe tani, në qoftë se elementi që ne jemi duke kërkuar në është më pak se minimumi tonë deri më tani, 837 00:50:51,610 --> 00:50:54,190 i cili, mos harroni, ne jemi duke filluar off minimale për jetë vetëm 838 00:50:54,190 --> 00:50:57,020 çfarëdo elementi ne jemi aktualisht në, unë do të supozojmë se kjo është minimale. 839 00:50:57,020 --> 00:51:00,270 Nëse unë gjej një element që është më e vogël se ajo, atëherë unë jam duke shkuar për të thënë, në rregull, 840 00:51:00,270 --> 00:51:02,700 mirë, unë kam gjetur një minimum të ri. 841 00:51:02,700 --> 00:51:06,080 Unë jam duke shkuar për të kujtuar se ku ishte minimale. 842 00:51:06,080 --> 00:51:09,560 >> Deri tani, një herë unë kam kaluar nëpër këtë segment të drejtë Unsorted, 843 00:51:09,560 --> 00:51:16,690 Unë mund të them se unë jam duke shkuar për shkëmbim elementin minimal me element që është në pozitë unë. 844 00:51:16,690 --> 00:51:21,100 Kjo do të ndërtojnë listën time, pjesa ime renditura nga lista nga e majta në të djathtë, 845 00:51:21,100 --> 00:51:25,190 dhe ne kurrë nuk duhet të shikoni në një element përsëri pasi ajo është në atë pjesë. 846 00:51:25,190 --> 00:51:27,930 Pasi ne kemi swapped atë. 847 00:51:27,930 --> 00:51:30,260 Pra, le të kandidojë lloj përzgjedhje në këtë listë. 848 00:51:30,260 --> 00:51:38,220 Elementi blu këtu do të jetë i dhe elementi kuqe do të jetë elementi minimale. 849 00:51:38,220 --> 00:51:41,570 Kështu që i fillon të gjitha rrugën në të majtë të listës, kështu që në 5. 850 00:51:41,570 --> 00:51:44,610 Tani ne kemi nevojë për të gjetur element minimal Unsorted. 851 00:51:44,610 --> 00:51:49,480 Pra, ne themi 0 <5, kështu që është minimale 0 tim të ri. 852 00:51:49,480 --> 00:51:53,820 >> Por unë nuk mund të ndalet aty, sepse edhe pse ne mund të pranojmë se 0 është më i vogël, 853 00:51:53,820 --> 00:51:59,390 ne kemi nevojë për të drejtuar nëpër çdo element tjetër të listës për t'u siguruar. 854 00:51:59,390 --> 00:52:01,760 Pra, 1 është më e madhe, 6 është më e madhe, 4 është më e madhe. 855 00:52:01,760 --> 00:52:05,850 Kjo do të thotë se pas duke kërkuar në të gjitha këto elemente, unë kam vendosur 0 është më i vogël. 856 00:52:05,850 --> 00:52:09,800 Kështu që unë jam duke shkuar për të bie në ujdi 5 dhe 0. 857 00:52:09,800 --> 00:52:15,480 Sapo kam shkëmbim që, unë jam duke shkuar për të marrë një listë të re, dhe unë e di se unë kurrë nuk duhet të shohim në atë përsëri 0 858 00:52:15,480 --> 00:52:19,380 sepse sapo kam swapped atë, unë kam renditur atë dhe ne jemi duke bërë. 859 00:52:19,380 --> 00:52:22,730 Tani ai vetëm kështu ndodh që elementi blu është përsëri 5, 860 00:52:22,730 --> 00:52:26,030 dhe ne duhet të shikojmë në 1, 6 dhe 4 për të përcaktuar se 1 861 00:52:26,030 --> 00:52:31,520 është elementi më i vogël minimale, kështu që ne do të bie në ujdi 1 dhe 5. 862 00:52:31,520 --> 00:52:36,890 Përsëri, ne duhet të shikojmë në - krahasojmë 5 të 6 dhe 4, 863 00:52:36,890 --> 00:52:39,830 dhe ne jemi duke shkuar për të bie në ujdi 4 dhe 5, dhe më në fund, krahasuar 864 00:52:39,830 --> 00:52:45,740 ato 2 numra dhe shkëmbim ato deri sa të kemi listën tonë renditura. 865 00:52:45,740 --> 00:52:49,730 Çdo pyetje në lloj përzgjedhje? 866 00:52:49,730 --> 00:52:56,420 Rregull. Le të shkojë në temën e kaluar këtu, dhe kjo është recursion. 867 00:52:56,420 --> 00:52:59,810 >> Recursion, mos harroni, kjo është me të vërtetë gjë e meta ku një funksion 868 00:52:59,810 --> 00:53:02,740 përsëritur quan veten. 869 00:53:02,740 --> 00:53:05,620 Pra, në një farë pike, ndërsa fuction jonë është vazhdimisht e quan veten, 870 00:53:05,620 --> 00:53:10,100 ka nevojë të ketë disa pika në të cilën ne të ndaluar duke e quajtur veten. 871 00:53:10,100 --> 00:53:13,670 Sepse nëse ne nuk e bëjmë këtë, atëherë ne jemi vetëm do të vazhdojë të bëjë këtë përgjithmonë, 872 00:53:13,670 --> 00:53:16,660 dhe programi ynë nuk është vetëm do të përfundojë. 873 00:53:16,660 --> 00:53:19,200 Ne e quajmë këtë kusht rasti bazë. 874 00:53:19,200 --> 00:53:22,570 Dhe rasti baza thotë, në vend se duke e quajtur një funksion përsëri, 875 00:53:22,570 --> 00:53:25,330 Unë jam vetëm duke shkuar për të kthyer disa vlera. 876 00:53:25,330 --> 00:53:28,080 Pra, një herë ne kemi kthyer një vlerë, e kemi ndalur duke e quajtur veten, 877 00:53:28,080 --> 00:53:32,550 dhe pjesa tjetër e thirrjeve ne kemi bërë deri më tani mund të kthehen. 878 00:53:32,550 --> 00:53:36,050 E kundërta e rastit bazë është rasti rekursive. 879 00:53:36,050 --> 00:53:39,050 Dhe kjo është kur ne duam të bërë një tjetër telefonatë në funksion që ne jemi aktualisht in 880 00:53:39,050 --> 00:53:44,690 Dhe ne me siguri, edhe pse jo gjithmonë, duan të përdorin argumente të ndryshme. 881 00:53:44,690 --> 00:53:48,940 >> Pra, nëse kemi një funksion të quajtur f, f dhe vetëm e quajti të marrë 1 argument, 882 00:53:48,940 --> 00:53:52,010 dhe ne vetëm mbajtur thirrje f (1), F (1), F (1), dhe kjo vetëm ndodh në mënyrë që 883 00:53:52,010 --> 00:53:56,510 Argumenti 1 bie në rast gjithkund rekursive, ne nuk jeni ende do të ndalet. 884 00:53:56,510 --> 00:54:01,620 Edhe në qoftë se ne kemi një bazë rast, ne duhet të sigurohemi që përfundimisht ne jemi duke shkuar për të goditur atë rast bazë. 885 00:54:01,620 --> 00:54:04,250 Ne nuk mbajnë vetëm duke qëndruar në këtë rast gjithkund rekursive. 886 00:54:04,250 --> 00:54:09,870 Në përgjithësi, kur ne e quajmë veten, ne jemi ndoshta do të ketë një argument të ndryshme çdo herë. 887 00:54:09,870 --> 00:54:12,700 Këtu është një funksion recursive të vërtetë të thjeshtë. 888 00:54:12,700 --> 00:54:15,090 Pra, kjo do të llogaritur faktoriale e një numri. 889 00:54:15,090 --> 00:54:17,790 Deri krye këtu kemi rastin tonë bazë. 890 00:54:17,790 --> 00:54:22,330 Në rast se n ≤ 1, ne nuk jemi duke shkuar për të thirrur faktoriale përsëri. 891 00:54:22,330 --> 00:54:26,490 Ne jemi duke shkuar për të ndaluar, ne jemi vetëm do të kthehen disa vlera. 892 00:54:26,490 --> 00:54:30,170 Nëse kjo nuk është e vërtetë, atëherë ne jemi duke shkuar për të goditur rastin tonë rekursive. 893 00:54:30,170 --> 00:54:33,550 Vini re këtu se ne nuk jemi vetëm duke e quajtur faktorial (n), sepse kjo nuk do të jetë shumë e dobishme. 894 00:54:33,550 --> 00:54:36,810 Ne jemi duke shkuar për të thirrur faktoriale për diçka tjetër. 895 00:54:36,810 --> 00:54:40,850 >> Dhe kështu ju mund të shihni, përfundimisht nëse ne të kalojë një diçka faktoriale (5) ose, 896 00:54:40,850 --> 00:54:45,900 ne jemi duke shkuar për të thirrur faktoriale (4) dhe kështu me radhë, dhe në fund ne jemi duke shkuar për të goditur këtë rast bazë. 897 00:54:45,900 --> 00:54:51,730 Pra, kjo duket e mirë. Le të shohim se çfarë ndodh kur ne fakt drejtuar këtë. 898 00:54:51,730 --> 00:54:57,840 Kjo është rafte, dhe le të thonë se kryesore do të thërrasë këtë funksion me një argument (4). 899 00:54:57,840 --> 00:55:02,200 Pra, një herë faktoriale sheh dhe = 4, faktoriale do të thërrasë veten. 900 00:55:02,200 --> 00:55:05,010 Tani, papritmas, ne kemi faktorial (3). 901 00:55:05,010 --> 00:55:10,780 Pra, këto funksione do të vazhdojë të rritet deri në fund ne goditi rastin tonë bazë. 902 00:55:10,780 --> 00:55:17,830 Në këtë pikë, vlera kthimi i kësaj është kthimi (NX vlera kthimi i kësaj), 903 00:55:17,830 --> 00:55:21,290 vlera kthimi i kësaj është NX vlera kthimi i kësaj. 904 00:55:21,290 --> 00:55:23,290 Përfundimisht ne kemi nevojë për të goditur disa numër. 905 00:55:23,290 --> 00:55:26,560 Në krye këtu, themi kthim 1. 906 00:55:26,560 --> 00:55:30,650 Kjo do të thotë se një herë ne të kthehemi këtë numër, ne mund të pop këtë off rafte. 907 00:55:30,650 --> 00:55:36,570 Kështu kjo faktorial (1) është e bërë. 908 00:55:36,570 --> 00:55:41,190 Kur kthehet 1, kjo faktoriale (1) kthimet, kjo kthimit të 1. 909 00:55:41,190 --> 00:55:46,910 Vlera e kthimit të kësaj, mos harroni, ishte NX vlera kthimi i kësaj. 910 00:55:46,910 --> 00:55:50,720 Pra papritmas, ky djalë e di që unë dua të kthehen 2. 911 00:55:50,720 --> 00:55:55,910 >> Pra mbani mend, kthehet vlera e kjo është vetëm NX vlera e kthimit deri këtu. 912 00:55:55,910 --> 00:56:01,160 Kështu që tani ne mund të themi 3 x 2, dhe më në fund, këtu mund të themi 913 00:56:01,160 --> 00:56:04,010 kjo është vetëm do të jetë 4 x 3 x 2. 914 00:56:04,010 --> 00:56:09,570 Dhe një herë këtë kthim, ne kemi marrë deri në një të vetme brenda integer e kryesore. 915 00:56:09,570 --> 00:56:15,460 Çdo pyetje në recursion? 916 00:56:15,460 --> 00:56:17,090 Dakord. Pra, nuk ka më shumë kohë për pyetjet në fund, 917 00:56:17,090 --> 00:56:23,360 por tani Jozefi do të mbulojë temat e mbetura. 918 00:56:23,360 --> 00:56:25,590 >> [Joseph Ong] All right. Pra, tani që ne kemi biseduar rreth recursions, 919 00:56:25,590 --> 00:56:27,840 le të flasim pak për atë lloj bashkojë është. 920 00:56:27,840 --> 00:56:31,740 Merge lloj thelb është një tjetër mënyrë për klasifikim një listë të numrave. 921 00:56:31,740 --> 00:56:36,430 Dhe si funksionon ai është, me lloj Merge ju keni një listë, dhe çfarë bëjmë ne është 922 00:56:36,430 --> 00:56:39,120 themi, le të ndahet në 2 gjysmave këtë. 923 00:56:39,120 --> 00:56:42,750 Ne do të kandidojë parë bashkojë lloj përsëri në gjysmën e majtë, 924 00:56:42,750 --> 00:56:45,040 atëherë ne do të kandidojë bashkojë lloj në gjysmën e djathtë, 925 00:56:45,040 --> 00:56:50,240 dhe që na jep tani 2 gjysmave të cilat janë të renditura, dhe tani ne jemi duke shkuar për të kombinuar ato gjysmave së bashku. 926 00:56:50,240 --> 00:56:55,010 Është pak e vështirë për të parë pa një shembull, kështu që ne do të shkojnë nëpër mocionet dhe shikoni se çfarë ndodh. 927 00:56:55,010 --> 00:56:59,590 Pra, ju filloni me këtë listë, ne ndarë atë në 2 gjysmave. 928 00:56:59,590 --> 00:57:02,300 Ne drejtuar bashkojë lloj në gjysmën e majtë të parë. 929 00:57:02,300 --> 00:57:06,660 Pra, kjo është gjysma e majtë, dhe tani ne drejtuar atyre përmes kësaj liste përsëri 930 00:57:06,660 --> 00:57:09,800 e cila merr kaluar në lloj shkrihen, dhe pastaj shohim, përsëri, 931 00:57:09,800 --> 00:57:13,270 në anën e majtë të kësaj liste dhe ne të drejtuar lloj bashkojë në të. 932 00:57:13,270 --> 00:57:15,880 Tani, ne të merrni poshtë për një listë të numrave 2, 933 00:57:15,880 --> 00:57:19,010 dhe tani gjysma e majtë është vetëm 1 element të gjatë, dhe ne nuk mund të 934 00:57:19,010 --> 00:57:23,380 ndarë një listë që është vetëm 1 element në gjysmë, kështu që ne vetëm të themi, pasi ne kemi 50, 935 00:57:23,380 --> 00:57:26,400 e cila është vetëm 1 element, është renditur tashmë. 936 00:57:26,400 --> 00:57:29,860 >> Pasi ne jemi bërë me këtë, ne mund të shohim se ne mund 937 00:57:29,860 --> 00:57:32,230 lëvizin për në gjysmën e djathtë të kësaj liste, 938 00:57:32,230 --> 00:57:36,480 dhe 3 është renditur gjithashtu, dhe kështu që tani që të dy gjysmave të kësaj liste janë të renditura 939 00:57:36,480 --> 00:57:39,080 ne mund të bashkohen këto numra përsëri së bashku. 940 00:57:39,080 --> 00:57:45,320 Kështu që ne shikojmë në 50 dhe 3; 3 është më i vogël se 50, kështu që ajo shkon në të parë dhe pastaj 50 vjen in 941 00:57:45,320 --> 00:57:49,340 Tani, kjo është bërë, ne kthehemi deri në atë listë dhe kjo është lloj gjysmë të drejtë. 942 00:57:49,340 --> 00:57:52,440 42 është numri atë të vetë, kështu që është renditur tashmë. 943 00:57:52,440 --> 00:57:57,850 Deri tani ne krahasojmë këto 2 dhe 3 është më i vogël se 42, kështu që merr vënë në të parë, 944 00:57:57,850 --> 00:58:02,340 tani 42 merr të vënë në, dhe 50 merr vënë in 945 00:58:02,340 --> 00:58:07,220 Tani, që është renditur, ne do të shkojmë të gjithë rrugën prapa në krye, 1337 dhe 15. 946 00:58:07,220 --> 00:58:14,560 E pra, ne tani shohim në gjysmën e majtë të kësaj liste, 1337 është në vetvete kështu që është e renditura dhe të njëjta me 15. 947 00:58:14,560 --> 00:58:19,020 Deri tani ne kombinojnë këto 2 numra për të zgjidhur se lista origjinale, 15 <1337, 948 00:58:19,020 --> 00:58:23,060 kështu që ajo shkon në vend të parë, pastaj shkon 1337 in 949 00:58:23,060 --> 00:58:26,640 Dhe tani ne dy gjysmave të renditura të listës origjinale deri të lartë. 950 00:58:26,640 --> 00:58:30,440 Dhe të gjithë ne duhet të bëni është të kombinohen këto. 951 00:58:30,440 --> 00:58:36,890 Ne shohim në numrat 2 e parë të kësaj liste, 3 <15, kështu që ajo shkon në rrjet renditjes parë. 952 00:58:36,890 --> 00:58:44,460 15 <42, kështu që ajo shkon in Tani, 42 <1337, që shkon in 953 00:58:44,460 --> 00:58:51,010 50 <1337, kështu që ajo shkon in Dhe vini re se ne vetëm mori 2 numra off e kësaj liste. 954 00:58:51,010 --> 00:58:53,640 Pra, ne nuk jemi vetëm alternuara mes 2 listave. 955 00:58:53,640 --> 00:58:56,050 Ne jemi vetëm në kërkim në fillim, dhe ne jemi duke marrë elementin 956 00:58:56,050 --> 00:59:00,270 kjo është më e vogël dhe pastaj të vënë atë në grup tonë. 957 00:59:00,270 --> 00:59:04,080 Tani ne kemi shkrirë të gjitha gjysmave dhe ne jemi duke bërë. 958 00:59:04,080 --> 00:59:07,780 >> Ndonjë pyetje rreth bashkojë lloj? Po? 959 00:59:07,780 --> 00:59:14,190 [Student] Nëse kjo është ndarja në grupe të ndryshme, pse nuk e ata vetëm të ndarë një herë 960 00:59:14,190 --> 00:59:19,970 dhe ju keni 3 dhe 2 në një grup? [Pjesa tjetër e pakuptueshëm pyetje] 961 00:59:19,970 --> 00:59:24,940 Arsyeja - kështu që pyetja është, pse nuk mund t'i bashkojë ato vetëm në atë hapin e parë pasi kemi ato? 962 00:59:24,940 --> 00:59:29,530 Arsyeja që ne mund ta bëjmë këtë, të fillojë në të majtë më të elementeve të të dy palëve, 963 00:59:29,530 --> 00:59:33,040 dhe pastaj të marrë atë të vogël dhe e vënë atë në, është se ne e dimë se këto 964 00:59:33,040 --> 00:59:35,290 Listat individuale janë të renditura në urdhërat. 965 00:59:35,290 --> 00:59:37,290 Pra, nëse unë jam duke kërkuar në të majtë shumicën e elementeve të të dy gjysmave, 966 00:59:37,290 --> 00:59:40,490 Unë e di se ata do të jenë elementet më të vogla të këtyre listave. 967 00:59:40,490 --> 00:59:43,930 Kështu që unë mund të vënë ato në pika të vogla të këtij elementi listë të madhe. 968 00:59:43,930 --> 00:59:47,810 Nga ana tjetër, në qoftë se unë shoh në këto 2 listave në nivelin e dytë mbi atje, 969 00:59:47,810 --> 00:59:51,640 50, 3, 42, 1337 dhe 15, ata që nuk janë të renditura. 970 00:59:51,640 --> 00:59:55,770 Pra, nëse unë shoh në 50 dhe 1337, unë jam duke shkuar për të vënë 50 në listën time të parë. 971 00:59:55,770 --> 01:00:00,130 Por kjo nuk ka të vërtetë ka kuptim, sepse 3 është elementi më i vogël nga gjithë ata. 972 01:00:00,130 --> 01:00:04,390 Pra, arsyeja e vetme që mund të bëjmë këtë hap kombinuar është për shkak se listat tona janë të renditura tashmë. 973 01:00:04,390 --> 01:00:07,010 Cila është arsyeja pse ne kemi për të marrë poshtë të gjitha rrugën në fund 974 01:00:07,010 --> 01:00:09,800 sepse kur kemi vetëm një numër të vetme, ju e dini se një numër të vetme 975 01:00:09,800 --> 01:00:14,120 në vetvete është tashmë një listë të renditura. 976 01:00:14,120 --> 01:00:19,360 >> Çdo pyetje? Jo? 977 01:00:19,360 --> 01:00:24,260 Kompleksiteti? E pra, ju mund të shihni se në çdo hap ka numra në fund, 978 01:00:24,260 --> 01:00:27,590 dhe ne mund të ndajnë një listë në log gjysmë n herë, 979 01:00:27,590 --> 01:00:31,700 i cili është ku ne kemi marrë këtë log x n n kompleksitetit. 980 01:00:31,700 --> 01:00:34,940 Dhe ju do të shihni në rastin më të mirë për lloj Merge është n log n, dhe kjo ndodh pikërisht kështu 981 01:00:34,940 --> 01:00:39,340 se rasti më i keq, ose Ω atje, edhe n log n. 982 01:00:39,340 --> 01:00:42,480 Diçka për të mbajtur në mendje. 983 01:00:42,480 --> 01:00:45,750 Moving on, le të shkojnë në ndonjë skedar super themelor I / O. 984 01:00:45,750 --> 01:00:48,830 Nëse keni shikuar në Scramble, ju do të vëreni kemi pasur një lloj të sistemit 985 01:00:48,830 --> 01:00:51,270 ku ju mund të shkruani në një log file në qoftë se ju lexoni me anë të kodit. 986 01:00:51,270 --> 01:00:53,730 Le të shohim se si ju mund ta bëni këtë. 987 01:00:53,730 --> 01:00:57,450 E pra, ne kemi fprintf, të cilat ju mund të mendoni vetëm si printf, 988 01:00:57,450 --> 01:01:01,720 por vetëm shtypjen në një skedar në vend, dhe kështu f në fillim. 989 01:01:01,720 --> 01:01:07,570 Ky lloj i kodit deri këtu, ajo nuk është, si ju mund të keni parë në Scramble, 990 01:01:07,570 --> 01:01:12,310 ajo shkon përmes 2-dimensionale array printim tuaj nga rresht nga rresht se çfarë janë numrat. 991 01:01:12,310 --> 01:01:17,850 Në këtë rast, printf printime jashtë për terminalin tuaj ose atë që ne e quajmë prodhimi standard seksion. 992 01:01:17,850 --> 01:01:22,170 >> Dhe tani, në këtë rast, të gjithë ne duhet të bëni është të zëvendësojë printf me fprintf, 993 01:01:22,170 --> 01:01:26,770 tregoni se çfarë ju doni fotografi të shkruar për të, dhe në këtë rast vetëm ajo printon atë për këtë dosje 994 01:01:26,770 --> 01:01:32,230 në vend të shtypjes atë për terminalin tuaj. 995 01:01:32,230 --> 01:01:36,500 E pra, atëherë kjo ngre pyetjen: Ku nuk kemi marrë këtë lloj të dosjes nga, apo jo? 996 01:01:36,500 --> 01:01:39,840 Kemi kaluar hyni te kete fuction fprintf por ne nuk kishte asnjë ide se ku ai erdhi nga. 997 01:01:39,840 --> 01:01:43,980 E pra, në fillim të kodit, ajo që ne kishim ishte kjo copë e kodit gjatë këtu, 998 01:01:43,980 --> 01:01:48,340 e cila në thelb thotë se hapur fotografi quan log.txt. 999 01:01:48,340 --> 01:01:53,220 Çfarë bëjmë ne pas kësaj është që ne duhet të bëni të sigurtë që skedari hapet vërtetë sukses. 1000 01:01:53,220 --> 01:01:57,070 Pra, ajo mund të dështojnë për arsye të shumta, ju nuk keni hapësirë ​​të mjaftueshme në kompjuterin tuaj, për shembull. 1001 01:01:57,070 --> 01:01:59,790 Kështu që është gjithmonë e rëndësishme para se të bëni ndonjë operacione me dosjen 1002 01:01:59,790 --> 01:02:03,300 që ne të kontrolloni nëse kjo dosje u hap me sukses. 1003 01:02:03,300 --> 01:02:09,330 Pra, çfarë se një, kjo është një argument për fopen, mirë, ne mund të hapur një skedë në shumë mënyra. 1004 01:02:09,330 --> 01:02:13,510 Ajo që ne mund të bëjmë është, që ne mund të kalojë atë w, që do të thotë të pranoj dosjen në qoftë se ajo del tashmë, 1005 01:02:13,510 --> 01:02:18,070 Ne mund të kalojë një A, që ata append në fund të file në vend mbizotërues atë, 1006 01:02:18,070 --> 01:02:22,730 ose ne mund të specifikojë r, që do të thotë, le të hapë dosjen si read-only. 1007 01:02:22,730 --> 01:02:24,890 Pra, nëse programi përpiqet të bëjë ndonjë ndryshim në dosjen, 1008 01:02:24,890 --> 01:02:30,140 bërtas me ta dhe nuk le ta bëjë atë. 1009 01:02:30,140 --> 01:02:33,320 Së fundi, pasi ne jemi bërë me dosjen, bërë duke bërë operacione në të, 1010 01:02:33,320 --> 01:02:35,860 ne kemi nevojë për të siguruar që ne të mbyllë dosjen. 1011 01:02:35,860 --> 01:02:38,830 Dhe kështu në fund të programit tuaj, ju do të kalojnë ato përsëri 1012 01:02:38,830 --> 01:02:42,120 Vlerësoni këtë fotografi që keni hapur, dhe vetëm afër atë. 1013 01:02:42,120 --> 01:02:44,650 Pra, kjo është diçka e rëndësishme që ju duhet të bëni të sigurtë që ju bëni. 1014 01:02:44,650 --> 01:02:47,180 Pra, mos harroni ju mund të hapur një skedar, atëherë ju mund të shkruani në dosjen, 1015 01:02:47,180 --> 01:02:51,270 të bëjë operacione në dosjen, por pastaj ju duhet të mbyllë dosjen në fund. 1016 01:02:51,270 --> 01:02:53,270 >> Çdo pyetje në dosjen themelor I / O? Po? 1017 01:02:53,270 --> 01:02:58,050 [Pyetja Student, pakuptueshëm] 1018 01:02:58,050 --> 01:03:02,480 Të drejtë këtu. Pyetja është, ku e bën këtë fotografi log.txt duket? 1019 01:03:02,480 --> 01:03:07,890 E pra, nëse ju vetëm t'i jepte log.txt, ajo krijon atë në të njëjtën directory si ekzekutues. 1020 01:03:07,890 --> 01:03:10,500 Pra, nëse you're - >> [Pyetja Student, pakuptueshëm] 1021 01:03:10,500 --> 01:03:18,830 Po. Në të njëjtën dosje, ose në të njëjtën directory si ju e quani atë. 1022 01:03:18,830 --> 01:03:21,400 Tani, kujtesës rafte, dhe tog. 1023 01:03:21,400 --> 01:03:23,400 Pra, si është e kujtesës hedhur në kompjuter? 1024 01:03:23,400 --> 01:03:26,270 E pra, ju mund të imagjinoni kujtimin e këtij lloj si bllok këtu. 1025 01:03:26,270 --> 01:03:30,260 Dhe në kujtim ne kemi atë që quhet sasi mbërthyer atje, dhe rafte që është atje poshtë. 1026 01:03:30,260 --> 01:03:34,480 Dhe grumbull rritet në rënie dhe rafte rritet lart. 1027 01:03:34,480 --> 01:03:38,620 Pra, si Tommy përmendur - oh, mirë, dhe ne kemi këto të tjerë 4 segmente të cilat unë do të marrë në një të dytë - 1028 01:03:38,620 --> 01:03:42,890 Siç Tommy tha më parë, ju e dini se si funksionet e tij e quajnë veten e tyre dhe e quajnë njëri-tjetrin? 1029 01:03:42,890 --> 01:03:44,930 Ata ndërtojnë këtë lloj të kornizës rafte. 1030 01:03:44,930 --> 01:03:47,360 E pra, në qoftë se thirrjet kryesore foo, foo merr vënë në rafte. 1031 01:03:47,360 --> 01:03:52,430 Foo quan bar, bar të marrë të vënë në rafte, dhe që merr vënë në rafte pas. 1032 01:03:52,430 --> 01:03:57,040 Dhe, ndërsa ata të kthehen, ata çdo të marrë marrë off rafte. 1033 01:03:57,040 --> 01:04:00,140 Çfarë secilin nga këto vende dhe memorie të mbajë? 1034 01:04:00,140 --> 01:04:03,110 Mirë, të lartë, e cila është segmenti teksti, përmban programi vetë. 1035 01:04:03,110 --> 01:04:06,390 Pra në kodin e makinës, që është atje, sapo ju të hartojnë programin tuaj. 1036 01:04:06,390 --> 01:04:08,520 Tjetra, çdo initialized variablave globale. 1037 01:04:08,520 --> 01:04:12,660 >> Pra, ju keni variablave globale në programin tuaj, dhe ju thoni si, a = 5, 1038 01:04:12,660 --> 01:04:15,260 që merr vënë në atë segment, nën dhe të drejtën që, 1039 01:04:15,260 --> 01:04:18,990 keni ndonjë dhënat uninitialized globale, e cila është vetëm int a, 1040 01:04:18,990 --> 01:04:20,990 por ju nuk e thonë se kjo është e barabartë me asgjë. 1041 01:04:20,990 --> 01:04:23,870 Realizuar këto janë variabla globale, kështu që ata janë jashtë kryesore. 1042 01:04:23,870 --> 01:04:28,560 Pra, kjo do të thotë çdo ndryshore globale që janë shpallur, por nuk janë initialized. 1043 01:04:28,560 --> 01:04:32,310 Pra, çfarë është në tog? Memory ndarë përdorur malloc, të cilat ne do të merrni në një pak. 1044 01:04:32,310 --> 01:04:35,990 Dhe së fundi, me rafte keni ndonjë variablave lokale 1045 01:04:35,990 --> 01:04:39,950 dhe çdo funksionet që ju mund të telefononi në ndonjë nga parametrat e tyre. 1046 01:04:39,950 --> 01:04:43,720 Gjëja e fundit, ju nuk mund të vërtetë duhet të dini se çfarë të bëjë mjedis të ndryshueshëm, 1047 01:04:43,720 --> 01:04:46,700 por sa herë që ju të drejtuar programin, nuk është diçka e lidhur, si 1048 01:04:46,700 --> 01:04:49,550 kjo është emrin e personit i cili u zhvillua të programit. 1049 01:04:49,550 --> 01:04:51,550 Dhe kjo do të jetë lloj i në fund. 1050 01:04:51,550 --> 01:04:54,540 Në kushtet e adresave kujtesës, të cilat janë vlerat hexadecimal, 1051 01:04:54,540 --> 01:04:58,170 vlerat në fillim të lartë në 0, dhe ata të shkojnë të gjithë rrugën poshtë në fund. 1052 01:04:58,170 --> 01:05:00,440 Në këtë rast, në qoftë se ju jeni në sistemin 32-bit, 1053 01:05:00,440 --> 01:05:05,390 adresa në fund do të jetë 0x, e ndjekur nga af, sepse kjo është 32 bit, 1054 01:05:05,390 --> 01:05:10,890 e cila është 8 bytes, dhe në këtë rast 8 bytes korrespondon me 8 numra heksadecimal. 1055 01:05:10,890 --> 01:05:20,110 Pra, këtu poshtë ju jeni do të ketë, si, 0xffffff, dhe deri atje ju jeni do të ketë 0. 1056 01:05:20,110 --> 01:05:23,660 Pra cilat janë pointers? Disa prej jush nuk mund të ketë mbuluar këtë në seksionin e parë. 1057 01:05:23,660 --> 01:05:26,660 por ne nuk shkoni mbi atë në leksion, kështu që një akrep është vetëm një lloj të dhënave 1058 01:05:26,660 --> 01:05:34,030 cilat dyqane, në vend të një lloj të vlerës si 50, ajo ruan adresën e lokacionit disa në kujtesë. 1059 01:05:34,030 --> 01:05:36,020 Si kjo kujtim [pakuptueshëm]. 1060 01:05:36,020 --> 01:05:41,120 Pra, në këtë rast, ajo që ne kemi është, ne kemi një tregues për një numër të plotë apo * int, 1061 01:05:41,120 --> 01:05:46,210 dhe ajo përmban këtë adresë hexadecimal e 0xDEADBEEF. 1062 01:05:46,210 --> 01:05:50,880 >> Kështu që ajo që ne kemi është, tani, kjo tregon treguesin në disa vend në kujtesë, 1063 01:05:50,880 --> 01:05:56,020 dhe kjo është vetëm një, vlera 50 është në këtë vend kujtesës. 1064 01:05:56,020 --> 01:06:01,810 Në disa 32-bit sistemeve, në të gjitha 32-bit sistemeve, pointers marrë bit 32 ose 4 bytes. 1065 01:06:01,810 --> 01:06:06,020 Por, për shembull, në një sistem të 64-bit, 64 bit janë pointers. 1066 01:06:06,020 --> 01:06:08,040 Pra, kjo është diçka që ju do të dëshironi që të mbani në mend. 1067 01:06:08,040 --> 01:06:12,310 Pra, në një sistem të fund-bit, një akrep është bit në fund gjatë. 1068 01:06:12,310 --> 01:06:17,320 Pointers janë lloj i vështirë për të tretet, pa gjëra ekstra, 1069 01:06:17,320 --> 01:06:20,300 kështu që le të kalojnë nëpër një shembull të alokimit kujtesës dinamike. 1070 01:06:20,300 --> 01:06:25,130 Çfarë alokimi dinamike memorie bën për ju, apo atë që ne e quajmë malloc, 1071 01:06:25,130 --> 01:06:29,280 kjo ju lejon të akordojë një lloj të të dhënave jashtë e caktuar. 1072 01:06:29,280 --> 01:06:31,830 Pra, kjo është lloj i të dhënave më të përhershëm për kohëzgjatjen e programit. 1073 01:06:31,830 --> 01:06:36,430 Sepse siç e dini, nëse ju deklaroj X brenda një funksion, dhe se kthimi funksion, 1074 01:06:36,430 --> 01:06:40,910 ju nuk keni qasje në të dhënat që është ruajtur në x. 1075 01:06:40,910 --> 01:06:44,420 Çfarë pointers le të bëjmë është se ata le të ruajë vlerat e kujtesës ose dyqan 1076 01:06:44,420 --> 01:06:46,840 në një segment të ndryshme të memories, përkatësisht grumbull. 1077 01:06:46,840 --> 01:06:49,340 Tani sapo kthehemi nga funksioni, për aq kohë sa ne kemi një tregues 1078 01:06:49,340 --> 01:06:54,960 në atë vend në kujtesë, atëherë çfarë mund të bëjmë është që ne vetëm mund të shikoni në vlerat atje. 1079 01:06:54,960 --> 01:06:58,020 Le të shikojmë një shembull: Kjo është paraqitjen tonë kujtesës përsëri. 1080 01:06:58,020 --> 01:07:00,050 Dhe ne e kemi këtë funksion, kryesore. 1081 01:07:00,050 --> 01:07:06,870 Çfarë ajo nuk është - në rregull, në mënyrë të thjeshtë, apo jo? - Int x = 5, kjo është vetëm një ndryshore në rafte në kryesore. 1082 01:07:06,870 --> 01:07:12,450 >> Nga ana tjetër, tani ne deklarojë një tregues i cili e quan giveMeThreeInts funksion. 1083 01:07:12,450 --> 01:07:16,800 Dhe kështu që tani ne do të shkojmë në këtë funksion dhe ne të krijojë një kornizë të re rafte për të. 1084 01:07:16,800 --> 01:07:20,440 Megjithatë, në këtë kuadër rafte, ne deklarojmë int temp *, 1085 01:07:20,440 --> 01:07:23,210 e cila në mallocs 3 integers për ne. 1086 01:07:23,210 --> 01:07:25,880 Kështu madhësia e int do të na japë sa bytes ky është int, 1087 01:07:25,880 --> 01:07:29,620 dhe malloc na jep se bytes shumë hapësirë ​​në tog. 1088 01:07:29,620 --> 01:07:32,890 Pra, në këtë rast, ne kemi krijuar hapësirë ​​të mjaftueshme për 3 integers, 1089 01:07:32,890 --> 01:07:36,830 dhe tog është rruga deri atje, e cila është arsyeja pse unë kam tërhequr atë lartë deri. 1090 01:07:36,830 --> 01:07:42,900 Pasi ne jemi bërë, ne kemi ardhur përsëri deri këtu, ju duhet vetëm 3 ints kthye, 1091 01:07:42,900 --> 01:07:47,000 dhe kjo e kthen adresën, në këtë rast mbi ku se kujtesa është. 1092 01:07:47,000 --> 01:07:51,250 Dhe ne kemi ngritur akrep kaloni =, dhe atje kemi vetëm tregues tjetër. 1093 01:07:51,250 --> 01:07:54,550 Por ajo që kthimet funksion është bërë pirg këtu dhe zhduket. 1094 01:07:54,550 --> 01:07:59,250 Pra temp zhduket, por ne ende mbajnë adresën e ku 1095 01:07:59,250 --> 01:08:01,850 ato 3 integers janë në brendësi të mbetet. 1096 01:08:01,850 --> 01:08:06,180 Pra, në këtë grup, pointers janë scoped në nivel lokal për kuadër bërë pirg, 1097 01:08:06,180 --> 01:08:09,860 por kujtesës në të cilën ata i referohen është në tog. 1098 01:08:09,860 --> 01:08:12,190 >> Bën që të bëjnë kuptim? 1099 01:08:12,190 --> 01:08:14,960 [Student] Mund të ju përsëris se? >> [Jozefi] Po. 1100 01:08:14,960 --> 01:08:20,270 Pra, nëse unë kthehem vetëm pak, ju shihni se temp ndarë 1101 01:08:20,270 --> 01:08:23,500 disa kujtesës në grumbull deri atje. 1102 01:08:23,500 --> 01:08:28,680 Pra, kur ky funksion, giveMeThreeInts Kthim, kjo rafte këtu do të zhduket. 1103 01:08:28,680 --> 01:08:35,819 Dhe me atë ndonjë të variablave, në këtë rast, ky tregues që është ndarë në kuadër bërë pirg. 1104 01:08:35,819 --> 01:08:39,649 Kjo do të zhduket, por që ne u kthye Temp 1105 01:08:39,649 --> 01:08:46,330 dhe ne kemi vendosur treguesin = temp, akrep po tani do të vinte në kujtesën njëjtin vend si temp ishte. 1106 01:08:46,330 --> 01:08:50,370 Deri tani, edhe pse kemi humbur temp, që akrep lokale, 1107 01:08:50,370 --> 01:08:59,109 ne ende ruajnë adresën e kujtesës së asaj që është treguar në brendësi të kësaj akrep ndryshueshme. 1108 01:08:59,109 --> 01:09:03,740 Pyetje? Kjo mund të jetë lloj i një temë konfuze në qoftë se ju nuk keni shkuar mbi atë në seksionin. 1109 01:09:03,740 --> 01:09:09,240 Ne mund, TF tuaj patjetër do të shkojnë mbi atë dhe sigurisht ne mund të përgjigjem pyetjeve 1110 01:09:09,240 --> 01:09:11,500 në fund të seancës shqyrtim për këtë. 1111 01:09:11,500 --> 01:09:14,220 Por kjo është lloj i një teme komplekse, dhe kam shumë shembuj që do të shfaqen 1112 01:09:14,220 --> 01:09:18,790 që do t'ju ndihmojë të qartësuar se çfarë në të vërtetë janë pointers. 1113 01:09:18,790 --> 01:09:22,500 >> Në këtë rast, pointers janë ekuivalente me vargjeve, 1114 01:09:22,500 --> 01:09:25,229 kështu që unë mund të përdorni vetëm këtë tregues si të njëjtën gjë si një grup int. 1115 01:09:25,229 --> 01:09:29,840 Kështu që unë jam indeksimin në 0, dhe ndryshimin integer parë të 1, 1116 01:09:29,840 --> 01:09:39,689 ndryshimin integer dytë tek 2, dhe integer 3 tek 3. 1117 01:09:39,689 --> 01:09:44,210 Pra, më shumë në pointers. E pra, kujtoj Binky. 1118 01:09:44,210 --> 01:09:48,319 Në këtë rast ne kemi ndarë një tregues, ose ne shpalli një tregues, 1119 01:09:48,319 --> 01:09:52,760 por fillimisht, kur unë sapo shpalli një tregues, kjo nuk është vënë për të kudo në kujtesë. 1120 01:09:52,760 --> 01:09:54,930 Kjo është vetëm vlerat e plehrave në brendësi të saj. 1121 01:09:54,930 --> 01:09:56,470 Kështu që unë nuk kam asnjë ide se ku ky tregues është treguar për të. 1122 01:09:56,470 --> 01:10:01,630 Ajo ka një adresë e cila është e mbushur vetëm me të 0 dhe 1 e ku u shpall fillimisht. 1123 01:10:01,630 --> 01:10:04,810 Unë nuk mund të bëjë asgjë me këtë deri sa unë e quaj malloc në atë 1124 01:10:04,810 --> 01:10:08,390 dhe pastaj kjo më jep një hapësirë ​​të vogël në grumbull, ku unë mund të vënë vlerat brenda. 1125 01:10:08,390 --> 01:10:11,980 Pastaj përsëri, unë nuk e di se çfarë është në brendësi të kësaj memorie. 1126 01:10:11,980 --> 01:10:16,780 Pra, gjëja e parë që unë duhet të bëni është të kontrolloni nëse sistemi kishte kujtesë të mjaftueshme 1127 01:10:16,780 --> 01:10:20,850 të më jepni Prapa 1 integer në vendin e parë, e cila është arsyeja pse unë jam duke bërë këtë kontroll. 1128 01:10:20,850 --> 01:10:25,020 Nëse akrep është null, që do të thotë se ajo nuk kishte hapësirë ​​të mjaftueshme apo ndonjë gabim tjetër ndodhur, 1129 01:10:25,020 --> 01:10:26,320 kështu që unë duhet të dalë jashtë programit tim. 1130 01:10:26,320 --> 01:10:29,400  Por në qoftë se ai e bëri sukses, tani unë mund të përdorin atë treguesin 1131 01:10:29,400 --> 01:10:35,020 dhe çfarë treguesin * nuk është ajo ndjek kur adresa është 1132 01:10:35,020 --> 01:10:38,480 ku se vlera është, dhe ajo vendos të barabartë me 1. 1133 01:10:38,480 --> 01:10:41,850 Kështu gjatë këtu, ne jemi duke kontrolluar në qoftë se kujtesa ekzistuar. 1134 01:10:41,850 --> 01:10:45,380 >> Pasi ju e dini se ekziston, ju mund të vënë në atë 1135 01:10:45,380 --> 01:10:50,460 çfarë vlera që ju dëshironi për të vënë në atë, në këtë rast 1. 1136 01:10:50,460 --> 01:10:53,060 Pasi ne jemi bërë me atë, ju keni nevojë për të liruar atë treguesin 1137 01:10:53,060 --> 01:10:57,160 sepse ne kemi nevojë për të marrë përsëri në sistemin që kujtesës që keni kërkuar në vendin e parë. 1138 01:10:57,160 --> 01:10:59,690 Sepse kompjuteri nuk e di se kur ne jemi bërë me të. 1139 01:10:59,690 --> 01:11:02,510 Në këtë rast ne jemi duke thënë në mënyrë eksplicite atë, në rregull, ne jemi bërë me atë memorie. 1140 01:11:02,510 --> 01:11:10,780 Nëse disa proces tjetër ka nevojë për atë, disa program tjetër ka nevojë për atë, të ndjehen të lirë për të shkuar përpara dhe për të marrë atë. 1141 01:11:10,780 --> 01:11:15,110 Ajo që ne mund të bëjmë është që ne mund të merrni vetëm adresën e variablave lokale në grup. 1142 01:11:15,110 --> 01:11:19,080 Pra, int x është brenda kornizës së bërë pirg kryesor. 1143 01:11:19,080 --> 01:11:23,060 Dhe kur ne e përdorim këtë simbol, kjo dhe operator, atë që nuk është 1144 01:11:23,060 --> 01:11:27,310 ajo merr x dhe x është vetëm disa të dhëna në kujtesë, por ajo ka një adresë. 1145 01:11:27,310 --> 01:11:33,790 Është e vendosur diku. Pra, duke e quajtur & x, çka kjo nuk është ajo na jep adresën e x. 1146 01:11:33,790 --> 01:11:38,430 Duke bërë këtë, ne jemi duke e bërë pikë akrep ku x është në kujtesë. 1147 01:11:38,430 --> 01:11:41,710 Tani ne thjesht nuk diçka si * x, ne jemi duke shkuar për të marrë 5 shpinën. 1148 01:11:41,710 --> 01:11:43,820 Ylli është quajtur dereferencing atë. 1149 01:11:43,820 --> 01:11:46,640 Ju ndiqni adresën dhe që ju të merrni vlerën e saj ruajtur atje. 1150 01:11:51,000 --> 01:11:53,310 >> Çdo pyetje? Po? 1151 01:11:53,310 --> 01:11:56,500 [Student] Nëse ju nuk e bëni gjënë e 3-mprehtë, e bën atë akoma përpilojë? 1152 01:11:56,500 --> 01:11:59,490 Po. Nëse ju nuk e bëni gjënë e 3-akrep, ajo ende do të hartojë, 1153 01:11:59,490 --> 01:12:02,720 por unë do të ju tregojnë se çfarë ndodh në një të dytë, dhe pa bërë që, 1154 01:12:02,720 --> 01:12:04,860 kjo është ajo që ne e quajmë një rrjedhje kujtim. Ju nuk jeni i dhënë të sistemit 1155 01:12:04,860 --> 01:12:07,850 mbështesë kujtesën e saj, kështu që pas një kohë programi do të grumbullohen 1156 01:12:07,850 --> 01:12:10,940 kujtesës që nuk është përdorur, dhe asgjë tjetër mund ta përdorni atë. 1157 01:12:10,940 --> 01:12:15,750 Nëse e keni parë ndonjëherë me Firefox 1.5 milion kilobytes në kompjuterin tuaj, 1158 01:12:15,750 --> 01:12:17,840 në detyrën e menaxherit, kjo është ajo që po ndodh. 1159 01:12:17,840 --> 01:12:20,760 Ju keni një rrjedhje kujtesës në programin që ata nuk janë të trajtimit. 1160 01:12:23,080 --> 01:12:26,240 Pra, si e bën punën treguesin aritmetike? 1161 01:12:26,240 --> 01:12:29,480 E pra, aritmetike akrep është lloj i indeksimit si në një rrjet. 1162 01:12:29,480 --> 01:12:36,370 Në këtë rast, unë kam një tregues, dhe atë që unë kam bërë është bërë pikë tregues për elementin e parë 1163 01:12:36,370 --> 01:12:42,100 të këtij grup prej 3 integers që unë kam ndarë. 1164 01:12:42,100 --> 01:12:46,670 Deri tani çfarë të bëj, akrep yll ndryshon vetëm elementin e parë në listë. 1165 01:12:46,670 --> 01:12:49,140 Star treguesin 1 pikë mbi këtu. 1166 01:12:49,140 --> 01:12:53,140 Pra, tregues është mbi këtu, akrep 1 është mbi këtu, akrep 2 është këtu. 1167 01:12:53,140 --> 01:12:56,610 >> Pra, vetëm duke shtuar 1 është e njëjta gjë si lëviz përgjatë këtij grup. 1168 01:12:56,610 --> 01:12:59,880 Ajo që ne bëjmë është, kur ne bëjmë treguesin 1 ju të merrni adresën gjatë këtu, 1169 01:12:59,880 --> 01:13:04,180 dhe në mënyrë që të merrni vlerën në këtu, ju vënë një yll në tërë nga shprehjes 1170 01:13:04,180 --> 01:13:05,990 të dereference atë. 1171 01:13:05,990 --> 01:13:09,940 Pra, në këtë rast, unë jam duke vendin e parë në këtë grup në 1, 1172 01:13:09,940 --> 01:13:13,970 vend të dytë për 2, dhe vendin e tretë me 3. 1173 01:13:13,970 --> 01:13:18,180 Atëherë çfarë unë jam duke bërë këtu është se unë jam shtypjen treguesin tonë +1, 1174 01:13:18,180 --> 01:13:19,970 të cilat vetëm më jep 2. 1175 01:13:19,970 --> 01:13:23,650 Tani unë jam bën rritjen treguesin, kështu treguesin e barabartë me treguesin +1, 1176 01:13:23,650 --> 01:13:26,780 që lëviz atë përpara. 1177 01:13:26,780 --> 01:13:30,810 Dhe kështu që tani, nëse unë të shtypura nga treguesin +1, akrep +1 tani është 3, 1178 01:13:30,810 --> 01:13:33,990 e cila në këtë rast printime nga 3. 1179 01:13:33,990 --> 01:13:36,560 Dhe në mënyrë që diçka të lirë, tregues që unë jap atë 1180 01:13:36,560 --> 01:13:40,540 duhet të vënë në fillim të array që kam marrë prapa nga malloc. 1181 01:13:40,540 --> 01:13:43,430 Pra, në këtë rast, në qoftë se unë do të thërrasë 3 të drejtë këtu, kjo nuk do të jetë e drejtë, 1182 01:13:43,430 --> 01:13:45,070 sepse kjo është në mes të grup. 1183 01:13:45,070 --> 01:13:48,820 Unë duhet të zbres për të marrë në lokacionin origjinal 1184 01:13:48,820 --> 01:13:50,420 spot fillestare të parë para se unë mund të lirë atë. 1185 01:13:56,300 --> 01:13:58,450 Pra, këtu është një shembull më shumë të përfshira. 1186 01:13:58,450 --> 01:14:03,360 Në këtë rast, ne jemi të shpërndarjes 7 shkronja në një grup karakter. 1187 01:14:03,360 --> 01:14:06,480 >> Dhe në këtë rast ajo që ne po bëjmë është që ne jemi duke looping mbi 6 e parë të tyre, 1188 01:14:06,480 --> 01:14:09,900 dhe ne jemi të vendosur ato në Z. 1189 01:14:09,900 --> 01:14:13,350 Pra, për int i = 0, i> 6, i + +, 1190 01:14:13,350 --> 01:14:16,220 Pra, akrep + i vetëm do të na japë, në këtë rast, 1191 01:14:16,220 --> 01:14:20,860 akrep, akrep +1, akrep +2, +3 akrep, dhe kështu me radhë e kështu me radhë në lak. 1192 01:14:20,860 --> 01:14:24,040 Atë që do të bëjë është ajo merr atë adresë, dereferences atë për të marrë vlerën, 1193 01:14:24,040 --> 01:14:27,440 dhe ndryshimet që vlera në Z. 1194 01:14:27,440 --> 01:14:30,350 Pastaj, në fund mos harroni kjo është një varg, apo jo? 1195 01:14:30,350 --> 01:14:33,560 Të gjitha vargjet duhet të përfundojë me karakter null ndërprerjen. 1196 01:14:33,560 --> 01:14:38,620 Pra, ajo që unë bëj është në treguesin 6 kam vënë karakterin null Terminator in 1197 01:14:38,620 --> 01:14:43,980 Dhe tani ajo që unë jam duke bërë në thelb mbi këtu është zbatuar printf për një varg, e drejtë? 1198 01:14:43,980 --> 01:14:46,190 >> Pra, kur nuk printf tani kur është arritur fundin e një varg? 1199 01:14:46,190 --> 01:14:48,230 Kur ajo hits karakterin null pavlefshme. 1200 01:14:48,230 --> 01:14:52,030 Pra, në këtë rast, pika origjinale e mi treguesin në fillim të këtij grup. 1201 01:14:52,030 --> 01:14:56,410 Unë shtypura karakterin e parë jashtë. Unë lëvizur atë mbi një. 1202 01:14:56,410 --> 01:14:58,420 Unë të shtypura atë karakterin jashtë. Unë lëvizin atë përsipër. 1203 01:14:58,420 --> 01:15:02,180 Dhe unë të vazhdojmë të bëjmë këtë deri sa unë të arritur në fund. 1204 01:15:02,180 --> 01:15:07,750 Dhe tani në fund * treguesin do dereference këtë dhe për të marrë karakterin null pavlefshme mbrapa. 1205 01:15:07,750 --> 01:15:11,780 Dhe kështu, ndërsa loop im shkon vetëm kur kjo vlerë nuk është karakteri null ndërprerjen. 1206 01:15:11,780 --> 01:15:13,770 Pra, tani unë dalje nga ky lak. 1207 01:15:18,780 --> 01:15:21,180 Dhe kështu që nëse unë zbres 6 nga ky akrep, 1208 01:15:21,180 --> 01:15:22,860 Unë kthehem të gjithë rrugën në fillim. 1209 01:15:22,860 --> 01:15:27,880 Mos harroni, unë jam duke bërë këtë, sepse unë kam për të shkuar në fillim në mënyrë të lirë atë. 1210 01:15:27,880 --> 01:15:30,270 >> Pra, unë e di se ishte shumë. A ka ndonjë pyetje? 1211 01:15:30,270 --> 01:15:31,870 Ju lutem, po? 1212 01:15:31,870 --> 01:15:36,610 [Pyetja Student pakuptueshëm] 1213 01:15:36,610 --> 01:15:38,190 Mund të ju them se fort? Më vjen keq. 1214 01:15:38,190 --> 01:15:44,140 [Student] Në slide fundit drejtë para se të liruar në treguesin, 1215 01:15:44,140 --> 01:15:47,300 ku janë në fakt ndryshimin e vlerës së akrep? 1216 01:15:47,300 --> 01:15:50,370 [Joseph] Pra, të drejtë këtu. >> [Student] Oh, në rregull. 1217 01:15:50,370 --> 01:15:51,890 [Joseph] Pra, unë kam një tregues minus minus, djathtas, 1218 01:15:51,890 --> 01:15:54,140 i cili lëviz prapa një gjë, dhe pastaj kam liruar atë, 1219 01:15:54,140 --> 01:15:57,000 sepse ky tregues duhet të theksohet në fillim të array. 1220 01:15:57,000 --> 01:16:00,420 [Student] Por kjo nuk do të jetë e nevojshme që ju kishte ndalur pas atë linjë. 1221 01:16:00,420 --> 01:16:03,130 [Joseph] Pra, në qoftë se unë kishte ndalur pas kësaj, kjo do të konsiderohet si një rrjedhje kujtim, 1222 01:16:03,130 --> 01:16:04,810 sepse nuk e kam drejtuar pa pagesë. 1223 01:16:04,810 --> 01:16:11,290 [Student] I [pakuptueshëm] pas tre linjave të para, ku keni pasur treguesin 1 [] pakuptueshëm. 1224 01:16:11,290 --> 01:16:13,140 [Joseph] Uh-huh. Pra, çfarë është pyetja atje? 1225 01:16:13,140 --> 01:16:14,780 Më vjen keq. Jo, jo. Shkoni, shkoni, ju lutem. 1226 01:16:14,780 --> 01:16:16,870 [Student] Pra, ju nuk jeni duke ndryshuar vlerën e pointers. 1227 01:16:16,870 --> 01:16:19,130 Ju nuk do të kishte pasur të bëjë treguesin minus minus. 1228 01:16:19,130 --> 01:16:19,730 [Joseph] Po, pikërisht. 1229 01:16:19,730 --> 01:16:21,890 Pra, kur të bëj treguesin 1 dhe 2 treguesin, 1230 01:16:21,890 --> 01:16:24,410 Unë nuk jam duke bërë treguesin e barabartë me treguesin +1. 1231 01:16:24,410 --> 01:16:27,260 Pra, tregues qëndron vetëm duke treguar në fillim të array. 1232 01:16:27,260 --> 01:16:31,460 Kjo është vetëm kur të bëj plus plus se ajo përcakton vlerën kthehet brenda treguesin, 1233 01:16:31,460 --> 01:16:33,550 se në fakt ajo lëviz këtë së bashku. 1234 01:16:36,860 --> 01:16:37,780 Dakord. 1235 01:16:40,550 --> 01:16:42,030 Më shumë pyetje? 1236 01:16:44,680 --> 01:16:47,790 >> Përsëri, në qoftë se kjo është lloj i madhe, kjo do të mbulohet në seancë. 1237 01:16:47,790 --> 01:16:50,710 Pyetni shokët tuaj të mësimdhënies rreth saj, dhe ne mund të përgjigjem pyetjeve në fund. 1238 01:16:53,510 --> 01:16:56,600 Dhe zakonisht ne nuk doja të bëj këtë gjë minus. 1239 01:16:56,600 --> 01:16:59,760 Kjo duhet të kërkojë mua mbajtja e sa kam kompensuar në rrjet. 1240 01:16:59,760 --> 01:17:04,520 Pra, në përgjithësi, kjo është vetëm për të shpjeguar se si punon aritmetike pointer. 1241 01:17:04,520 --> 01:17:07,970 Por ajo që ne zakonisht të doja të bëni është që ne si për të krijuar një kopje të kursorit, 1242 01:17:07,970 --> 01:17:11,640 dhe pastaj ne do të përdorim atë kopje kur ne jemi duke lëvizur rreth në varg. 1243 01:17:11,640 --> 01:17:14,660 Pra, në këto rast se ju përdorni kopje të shtypur të gjithë tekstin, 1244 01:17:14,660 --> 01:17:19,040 por ne nuk duhet të bëjmë ashtu si treguesin minus 6 ose mbajnë gjurmët e sa kemi lëvizur në këtë, 1245 01:17:19,040 --> 01:17:22,700 vetëm për shkak se ne e dimë se pika jonë origjinal është theksuar ende në fillim të listës 1246 01:17:22,700 --> 01:17:25,340 dhe të gjitha që ne ndryshohet ishte kjo kopje. 1247 01:17:25,340 --> 01:17:28,250 Pra, në përgjithësi, ndryshojnë kopje të treguesin tuaj origjinal. 1248 01:17:28,250 --> 01:17:32,350 Mos u mundoni të lloj si - don 't ndryshoj kopje origjinale. 1249 01:17:32,350 --> 01:17:35,290 Duke u përpjekur për të ndryshuar vetëm kopjet origjinale të juaj. 1250 01:17:41,540 --> 01:17:44,870 Pra, ju vëreni kur ne të kalojë në vargun printf 1251 01:17:44,870 --> 01:17:48,990 ju nuk keni për të vënë një yll në frontin e saj si ne e bëmë me të gjitha dereferences tjera, apo jo? 1252 01:17:48,990 --> 01:17:54,180 Pra, nëse ju të shtypura nga tërë vargu% s pret është një adresë, 1253 01:17:54,180 --> 01:17:57,610 dhe në këtë rast një akrep ose në këtë rast si një grup të karaktereve. 1254 01:17:57,610 --> 01:18:00,330 >> Karaktere, char * s, dhe vargjeve janë e njëjta gjë. 1255 01:18:00,330 --> 01:18:03,690 Tregues është që të karaktereve, dhe vargjeve karakter janë e njëjta gjë. 1256 01:18:03,690 --> 01:18:05,720 Dhe kështu, të gjithë ne duhet të bëni është të kalojë në treguesin. 1257 01:18:05,720 --> 01:18:08,150 Ne nuk duhet të kalojë në si treguesin * ose diçka të tillë. 1258 01:18:13,110 --> 01:18:14,930 Pra, vargjeve dhe pointers janë e njëjta gjë. 1259 01:18:14,930 --> 01:18:19,160 Kur ju jeni duke bërë diçka si x [y] mbi këtu për një grup, 1260 01:18:19,160 --> 01:18:21,960 ajo që është bërë nën kapuç është ajo e thënë, në rregull, kjo është një grup karakter, 1261 01:18:21,960 --> 01:18:23,690 kështu që kjo është një akrep. 1262 01:18:23,690 --> 01:18:26,510 Dhe kështu x janë e njëjta gjë, 1263 01:18:26,510 --> 01:18:28,650 dhe kështu atë që bën është ajo shton y me x, 1264 01:18:28,650 --> 01:18:31,820 e cila është e njëjta gjë si lëvizur përpara në kujtesë se shumë. 1265 01:18:31,820 --> 01:18:34,930 Dhe tani x + y na jep një lloj adresë, 1266 01:18:34,930 --> 01:18:37,570 dhe ne dereference adresën ose ndiqni arrow 1267 01:18:37,570 --> 01:18:41,640 ku se lokacioni në kujtesë është dhe ne kemi marrë vlerën nga ky vend në kujtesë. 1268 01:18:41,640 --> 01:18:43,720 Pra, kështu që këto dy janë saktësisht e njëjta gjë. 1269 01:18:43,720 --> 01:18:45,840 Kjo është vetëm një sheqer sintaksore. 1270 01:18:45,840 --> 01:18:48,090 Ata bëjnë të njëjtën gjë. Ata janë vetëm syntactics të ndryshme për njëri-tjetrin. 1271 01:18:51,500 --> 01:18:57,590 >> Pra, çfarë mund të shkojnë keq me pointers? Ashtu si, shumë. Rregull. Pra, gjëra të këqija. 1272 01:18:57,590 --> 01:19:02,410 Disa gjëra të këqija që ju mund të bëni nuk janë kontrolluar nëse thirrja juaj malloc kthen null, apo jo? 1273 01:19:02,410 --> 01:19:06,560 Në këtë rast, unë jam duke kërkuar për të dhënë sistemin mua - çfarë është ky numër? 1274 01:19:06,560 --> 01:19:11,200 Ashtu si 2 miliardë herë 4, sepse madhësia e një numër të plotë është 4 bytes. 1275 01:19:11,200 --> 01:19:13,810 Unë jam duke kërkuar atë për të si 8000000000 bytes. 1276 01:19:13,810 --> 01:19:17,270 Sigurisht që kompjuteri im nuk do të jetë në gjendje të më jepni atë përsëri shumë e kujtesës. 1277 01:19:17,270 --> 01:19:20,960 Dhe ne nuk e kontrolloni nëse kjo është null, kështu që kur ne të përpiqemi për të dereference atë mbi atje - 1278 01:19:20,960 --> 01:19:24,270 ndiqni arrow ku ajo do të - ne nuk kemi atë memorie. 1279 01:19:24,270 --> 01:19:27,150 Kjo është ajo që ne e quajmë dereferencing një tregues null. 1280 01:19:27,150 --> 01:19:29,710 Dhe kjo në thelb ju bën të segfault. 1281 01:19:29,710 --> 01:19:31,790 Kjo është një nga mënyrat që ju mund segfault. 1282 01:19:34,090 --> 01:19:38,090 Gjëra të tjera të këqija që ju mund të bëni - oh mirë. 1283 01:19:38,090 --> 01:19:40,650 Kjo ishte një tregues dereferencing null. Rregull. 1284 01:19:40,650 --> 01:19:45,160 Gjëra të tjera të këqija - mirë, për të rregulluar që ju vetëm vënë një kontroll në atje 1285 01:19:45,160 --> 01:19:46,980 që kontrollon nëse kursori është i pavlefshëm 1286 01:19:46,980 --> 01:19:51,000 dhe dalin nga programi nëse ndodh që malloc kthen një tregues null. 1287 01:19:55,110 --> 01:19:59,850 Kjo është komik RockSonte. Njerëzit e kuptojnë atë tani. Lloj të. 1288 01:20:06,120 --> 01:20:09,350 >> Pra, memorie. Dhe unë shkova mbi këtë. 1289 01:20:09,350 --> 01:20:12,000 Ne jemi duke bërë thirrje malloc në një lak, por çdo herë që ne e quajmë malloc 1290 01:20:12,000 --> 01:20:14,370 ne jemi duke humbur gjurmët e ku ky tregues është treguar, 1291 01:20:14,370 --> 01:20:15,750 sepse ne jemi clobbering atë. 1292 01:20:15,750 --> 01:20:18,410 Pra, thirrja fillestare për malloc jep memorie gjatë këtu. 1293 01:20:18,410 --> 01:20:19,990 Pointers mia tregues për këtë. 1294 01:20:19,990 --> 01:20:23,020 Tani, unë nuk e liruar atë, kështu që tani unë e quaj malloc përsëri. 1295 01:20:23,020 --> 01:20:26,070 Tani ajo pikë gjatë këtu. Tani kujtesa ime është vënë mbi këtu. 1296 01:20:26,070 --> 01:20:27,640 Vënë këtu. Vënë këtu. 1297 01:20:27,640 --> 01:20:31,820 Por unë kam humbur gjurmët e adresave të të gjithë kujtesën e gjatë këtu që unë ndarë. 1298 01:20:31,820 --> 01:20:35,100 Dhe kështu që tani unë nuk kam asnjë referencë ndaj tyre më. 1299 01:20:35,100 --> 01:20:37,230 Pra, unë nuk mund të lirë ata jashtë këtë lak. 1300 01:20:37,230 --> 01:20:39,390 Dhe kështu, në mënyrë për të rregulluar diçka si kjo, 1301 01:20:39,390 --> 01:20:42,250 në qoftë se ju harroni të kujtesës të lirë dhe që ju të merrni këtë rrjedhje kujtesës, 1302 01:20:42,250 --> 01:20:45,810 Ju keni për të liruar kujtesës brenda këtij lak një herë ju jeni bërë me të. 1303 01:20:45,810 --> 01:20:51,400 E pra, kjo është ajo që ndodh. Unë e di shumë prej jush urrejnë këtë. 1304 01:20:51,400 --> 01:20:55,270 Por tani - yay! Ju merrni si 44.000 kilobytes. 1305 01:20:55,270 --> 01:20:57,110 Pra, ju liruar atë në fund të lak, 1306 01:20:57,110 --> 01:20:59,770 dhe që do të vetëm të lirë e kujtesës çdo kohë. 1307 01:20:59,770 --> 01:21:03,620 Në thelb, programi juaj nuk ka një rrjedhje kujtim më. 1308 01:21:03,620 --> 01:21:08,150 >> Dhe tani diçka tjetër që ju mund të bëni është liruar disa kujtesës që ju keni kërkuar për të dy. 1309 01:21:08,150 --> 01:21:11,060 Në këtë rast, ju malloc diçka, ju të ndryshojë vlerën e saj. 1310 01:21:11,060 --> 01:21:13,140 Ju liruar një herë sepse ju tha se ju janë bërë me të. 1311 01:21:13,140 --> 01:21:14,940 Por atëherë ne liruar atë përsëri. 1312 01:21:14,940 --> 01:21:16,730 Kjo është diçka që është shumë e keqe. 1313 01:21:16,730 --> 01:21:18,820 Kjo nuk do të fillimisht segfault, 1314 01:21:18,820 --> 01:21:23,350 por pas një kohe ajo që kjo nuk është e dyfishtë liruar Kjo korrupton strukturën tuaj tog, 1315 01:21:23,350 --> 01:21:27,200 dhe ju do të mësoni pak më shumë në lidhje me këtë në qoftë se ju zgjidhni për të marrë një klasë si CS61. 1316 01:21:27,200 --> 01:21:30,000 Por në thelb pas një, ndërsa kompjuteri juaj është duke shkuar për të marrë hutuar 1317 01:21:30,000 --> 01:21:33,010 për atë që vendet ku janë kujtesës dhe ku është e ruajtur - 1318 01:21:33,010 --> 01:21:34,800 ku të dhënat është ruajtur në kujtesë. 1319 01:21:34,800 --> 01:21:38,080 Dhe kështu duke liruar një tregues dy herë është një gjë e keqe që ju nuk dëshironi të bëni. 1320 01:21:38,080 --> 01:21:41,600 >> Gjëra të tjera që mund të shkojnë keq nuk është përdorur sizeof. 1321 01:21:41,600 --> 01:21:44,460 Pra, në këtë rast ju malloc 8 bytes, 1322 01:21:44,460 --> 01:21:46,700 dhe kjo është e njëjta gjë si dy integers, apo jo? 1323 01:21:46,700 --> 01:21:49,580 Pra, kjo është krejtësisht e sigurt, por është ajo? 1324 01:21:49,580 --> 01:21:52,160 E pra, si Lucas biseduar rreth në arkitektura të ndryshme, 1325 01:21:52,160 --> 01:21:54,220 integers janë të gjatesite e ndryshme. 1326 01:21:54,220 --> 01:21:57,970 Pra, në aplikim që ju jeni duke përdorur, integers janë rreth 4 bytes, 1327 01:21:57,970 --> 01:22:02,370 por në ndonjë sistem tjetër që ata mund të jenë 8 byte ose ata mund të jenë 16 bytes. 1328 01:22:02,370 --> 01:22:05,680 Pra, në qoftë se unë vetëm përdorin këtë numër gjatë këtu, 1329 01:22:05,680 --> 01:22:07,310 ky program mund të punojnë në aplikim, 1330 01:22:07,310 --> 01:22:10,360 por kjo nuk do të siguroj kujtesë të mjaftueshme në ndonjë sistem tjetër. 1331 01:22:10,360 --> 01:22:14,020 Në këtë rast, kjo është ajo që operatori sizeof është përdorur për të. 1332 01:22:14,020 --> 01:22:16,880 Kur ne e quajmë sizeof (int), atë që kjo nuk është 1333 01:22:16,880 --> 01:22:21,910  kjo na jep përmasat e një numër të plotë në sistemin që programi është i rrjedhshëm. 1334 01:22:21,910 --> 01:22:25,490 Pra, në këtë rast, sizeof (int) do të kthehet në diçka si 4 të pajisjes, 1335 01:22:25,490 --> 01:22:29,980 dhe tani kjo 4 vullneti * 2, i cili është 8, 1336 01:22:29,980 --> 01:22:32,330 e cila është vetëm sasia e hapësirës së nevojshme për dy integers. 1337 01:22:32,330 --> 01:22:36,710 Në një sistem tjetër, nëse një int është si 16 ose 8 bytes bytes, 1338 01:22:36,710 --> 01:22:39,380 ajo vetëm do të kthehen bytes mjaftueshme për të ruajtur atë sasi. 1339 01:22:41,830 --> 01:22:45,310 >> Dhe së fundi, structs. 1340 01:22:45,310 --> 01:22:48,340 Pra, në qoftë se ju të kërkuar për të ruajtur një bord sudoku në kujtesë, si mund ta bëjmë këtë? 1341 01:22:48,340 --> 01:22:51,570 Ju mund të mendoni e si një variabël për gjëja e parë, 1342 01:22:51,570 --> 01:22:53,820 një ndryshore për gjë të dytë, një variabël për gjë të tretë, 1343 01:22:53,820 --> 01:22:56,420 një ndryshore për gjë katërt - e keqe, apo jo? 1344 01:22:56,420 --> 01:23:00,750 Pra, një përmirësim ju mund të bëni në krye të kësaj është të bëjë një 9 x 9 koleksion. 1345 01:23:00,750 --> 01:23:04,480 Kjo është në rregull, por çka nëse do të donit që të lidhen gjëra të tjera me bordin sudoku 1346 01:23:04,480 --> 01:23:06,490 si ajo vështirësia e bordit është, 1347 01:23:06,490 --> 01:23:11,740 ose, për shembull, se çfarë rezultati juaj është, ose se sa kohë është marrë ju për të zgjidhur këtë bord? 1348 01:23:11,740 --> 01:23:14,970 E pra, çfarë mund të bëni është që ju mund të krijoni një struct. 1349 01:23:14,970 --> 01:23:18,910 Ajo që unë jam duke thënë është në thelb unë jam përcaktimin e kësaj strukture gjatë këtu, 1350 01:23:18,910 --> 01:23:23,230 dhe unë jam duke përcaktuar një bord sudoku i cili përbëhet nga një bord që është 9 x 9. 1351 01:23:23,230 --> 01:23:26,650 >> Dhe atë që ka ajo ka pointers në emër të nivelit. 1352 01:23:26,650 --> 01:23:30,730 Ajo gjithashtu ka X dhe Y, të cilat janë koordinatat e ku jam unë tani. 1353 01:23:30,730 --> 01:23:35,980 Ajo gjithashtu ka kaluar koha [pakuptueshëm], dhe ajo ka numrin e përgjithshëm të lëviz kam futur deri tani. 1354 01:23:35,980 --> 01:23:40,010 Dhe kështu në këtë rast, unë mund të grupojnë një bandë e tërë e të dhënave në vetëm një strukturë 1355 01:23:40,010 --> 01:23:42,790 në vend që atë si fluturon rreth në si variabla të ndryshme 1356 01:23:42,790 --> 01:23:44,540 se unë nuk mund të vërtetë të mbajnë gjurmët e. 1357 01:23:44,540 --> 01:23:49,720 Dhe kjo na lejon të kemi vetëm një sintaksë të këndshme për lloj referenca gjëra të ndryshme në brendësi të këtij struct. 1358 01:23:49,720 --> 01:23:53,430 Unë vetëm mund të bëjë board.board, dhe unë të marrë bordit sudoku mbrapa. 1359 01:23:53,430 --> 01:23:56,320 Board.level, unë të marrë se sa vështirë është. 1360 01:23:56,320 --> 01:24:00,540 Board.x dhe board.y jepni koordinatat e ku unë mund të jetë në bord. 1361 01:24:00,540 --> 01:24:04,730 Dhe kështu që unë jam duke hyrë në atë që ne e quajmë fushat në struct. 1362 01:24:04,730 --> 01:24:08,840 Kjo përcakton sudokuBoard, e cila është një lloj që kam. 1363 01:24:08,840 --> 01:24:14,800 Dhe tani ne jemi këtu. Unë kam një ndryshore të quajtur "bordi" e sudokuBoard tipit. 1364 01:24:14,800 --> 01:24:18,820 Dhe kështu që tani unë mund të përdorni të gjitha fushat që përbëjnë këtë strukturë mbi këtu. 1365 01:24:20,830 --> 01:24:22,450 >> Çdo pyetje në lidhje me structs? Po? 1366 01:24:22,450 --> 01:24:25,890 [Student] Për int x, y, ju deklaruar të dy në një rresht? >> [Joseph] Uh-huh. 1367 01:24:25,890 --> 01:24:27,400 [Student] Pra, mund ta bëni vetëm se me të gjithë ata? 1368 01:24:27,400 --> 01:24:31,200 Ashtu si në x, y presje herë që në total? 1369 01:24:31,200 --> 01:24:34,460 [Joseph] Po, ju mund të patjetër të bëni këtë, por arsyeja që unë vënë x dhe y në të njëjtën linjë - 1370 01:24:34,460 --> 01:24:36,330 dhe pyetja është pse ne vetëm mund ta bëjë këtë në të njëjtën linjë? 1371 01:24:36,330 --> 01:24:38,600 Pse nuk kemi vetëm të vënë të gjitha këto në të njëjtën linjë është 1372 01:24:38,600 --> 01:24:42,090 x dhe y janë të lidhura me njëri-tjetrin, 1373 01:24:42,090 --> 01:24:44,780 dhe kjo është vetëm stilistikisht më të saktë, në një kuptim, 1374 01:24:44,780 --> 01:24:46,600 sepse ajo është grupuar dy gjëra në të njëjtën linjë 1375 01:24:46,600 --> 01:24:49,340 një lloj si të bëjnë të njëjtën gjë. 1376 01:24:49,340 --> 01:24:51,440 Dhe unë vetëm këto ndarë veç e veç. Kjo është vetëm një gjë e stil. 1377 01:24:51,440 --> 01:24:53,720 Kjo funksionalisht bën asnjë ndryshim whatsoever. 1378 01:24:58,150 --> 01:24:59,270 Çdo pyetje të tjera në structs? 1379 01:25:03,030 --> 01:25:06,620 Ju mund përcaktojnë një Pokedex me një struct. 1380 01:25:06,620 --> 01:25:11,720 Një Pokemon ka një numër të dhe ajo ka një letër, një pronar, një tip. 1381 01:25:11,720 --> 01:25:16,990 Dhe pastaj, nëse ju keni një rrjet të Pokemon, ju mund të bëni një Pokedex, e drejtë? 1382 01:25:16,990 --> 01:25:20,810 Mirë, cool. Pra, pyetjet mbi structs. Ata janë të lidhur me structs. 1383 01:25:20,810 --> 01:25:25,270 >> Së fundi, GDB. Çfarë do të ju lejojnë të bëni Gdb? Kjo ju lejon të korrigjoj programin tuaj. 1384 01:25:25,270 --> 01:25:27,650 Dhe në qoftë se ju nuk e keni përdorur gdb, unë do të rekomanduar shikuar shkurtër 1385 01:25:27,650 --> 01:25:31,250 dhe vetëm duke shkuar mbi atë Gdb është, se si ju punoni me atë, se si ju mund ta përdorni atë, 1386 01:25:31,250 --> 01:25:32,900 dhe provë atë në një program. 1387 01:25:32,900 --> 01:25:37,400 Dhe kështu ajo Gdb ju lejon të bëni është ajo lejon pauzë [] deri pakuptueshëm programin tuaj 1388 01:25:37,400 --> 01:25:38,920 dhe një linjë praktike. 1389 01:25:38,920 --> 01:25:42,600 Për shembull, unë dua të ekzekutimit në pushim si linjë 3 të programit tim, 1390 01:25:42,600 --> 01:25:46,010 dhe, ndërsa unë jam në linjë 3 Unë mund të shtypura nga të gjitha vlerat që janë atje. 1391 01:25:46,010 --> 01:25:49,710 Dhe kështu që ajo që ne e quajmë si heshti në një linjë 1392 01:25:49,710 --> 01:25:52,350 po ne e quajmë këtë vënë një breakpoint në atë linjë 1393 01:25:52,350 --> 01:25:55,920 dhe pastaj ne mund të shtypura nga variablat në gjendjen e programit në atë kohë. 1394 01:25:55,920 --> 01:25:58,990 >> Ne mund të pastaj nga atje hap përmes programit line-nga-line. 1395 01:25:58,990 --> 01:26:03,200 Dhe atëherë ne mund të shikojmë në gjendjen e rafte në atë kohë. 1396 01:26:03,200 --> 01:26:08,600 Dhe kështu në mënyrë që të përdorni GDB, atë që ne bëjmë është që ne e quajmë tingulli në dosjen C, 1397 01:26:08,600 --> 01:26:11,290 por ne duhet të kalojë atë-ggdb flamurin. 1398 01:26:11,290 --> 01:26:15,850 Dhe një herë ne jemi bërë me atë ne vetëm të kandidojë gdb në dosjen rezultojë. 1399 01:26:15,850 --> 01:26:18,810 Dhe kështu që ju të merrni disa masë si të tekstit si kjo, 1400 01:26:18,810 --> 01:26:21,990 por me të vërtetë të gjithë ju duhet të bëni është të shkruani në komandat në fillim. 1401 01:26:21,990 --> 01:26:24,250 Pushim kryesore vë një breakpoint në kryesore. 1402 01:26:24,250 --> 01:26:28,470 Lista e 400 liston rreshta të kodit rreth linjës 400. 1403 01:26:28,470 --> 01:26:31,410 Dhe kështu në këtë rast ju mund të shikoni përreth dhe thonë, oh, 1404 01:26:31,410 --> 01:26:34,360 Unë dua të vendosur një breakpoint në linjë 397, e cila është kjo linjë, 1405 01:26:34,360 --> 01:26:37,170 dhe pastaj programi juaj shkon në atë hap dhe ajo do të thyejnë. 1406 01:26:37,170 --> 01:26:41,120 Ajo do të pauzë atje, dhe ju mund të shtypura jashtë, për shembull, vlera e të ulët apo të lartë. 1407 01:26:41,120 --> 01:26:46,410 Dhe kështu që nuk janë një bandë e komandave që ju duhet të dini, 1408 01:26:46,410 --> 01:26:48,660 dhe kjo do slideshow të shkojnë deri në faqen e internetit, 1409 01:26:48,660 --> 01:26:54,000 kështu që nëse ju vetëm dëshironi të referimit këto apo si të vënë ato në fletë tuaj mashtrojnë, mos ngurroni. 1410 01:26:54,000 --> 01:27:00,650 >> Cool. Kjo ishte Quiz Rishikimi 0, dhe ne do të rrinë përreth nëse keni ndonjë pyetje. 1411 01:27:00,650 --> 01:27:03,850 Dakord. 1412 01:27:03,850 --> 01:27:09,030 >>  [Duartrokitje] 1413 01:27:09,030 --> 01:27:13,000 >> [CS50.TV]