[Powered by Google Translate] [Adolygiad] [Cwis 0] [Lexi Ross, Tommy MacWilliam, Lucas Freitas, Joseph Ong] [Harvard University] [Mae hyn yn CS50.] [CS50.TV] Hey, bawb. Croeso i sesiwn adolygu ar gyfer Cwis 0, sy'n cael ei gynnal ar ddydd Mercher. Beth ydym ni'n mynd i'w wneud heno, rwy'n gyda 3 TFS eraill, a gyda'n gilydd rydym yn mynd i fynd trwy adolygiad o'r hyn yr ydym wedi ei wneud yn y cwrs hyd yn hyn. Dyw hi ddim yn mynd i fod yn 100% gynhwysfawr, ond dylai roi gwell syniad i chi yr hyn sydd gennych eisoes i lawr a beth bydd angen i chi astudio cyn dydd Mercher. Ac mae croeso i chi godi eich llaw gyda chwestiynau gan ein bod yn mynd ar hyd, ond cadwch mewn cof y byddwn hefyd yn cael ychydig bach o amser ar y diwedd- os cawn drwy gydag ychydig o funudau i sbâr i wneud cwestiynau cyffredinol, felly cadwch hynny mewn cof, ac felly rydym yn mynd i ddechrau yn y dechrau gydag Wythnos 0. [Cwis 0 Adolygiad!] [Rhan 0] [Lexi Ross] Ond cyn i ni wneud hynny gadewch i ni siarad am logisteg y cwis. [Logisteg] [Cwis yn digwydd ar ddydd Mercher 10/10 mewn lle darlith] [(Gweler http://cdn.cs50.net/2012/fall/quizzes/0/about0.pdf am fanylion)] Mae'n ddydd Mercher, Hydref 10fed. Dyna nos Fercher yma, ac os byddwch yn mynd i'r URL yma, sydd hefyd yn hygyrch o CS50.net-mae dolen gyswllt iddo- gallwch weld gwybodaeth am ble i fynd yn seiliedig ar eich enw olaf neu gysylltiad ysgol yn ogystal â mae'n dweud am yr union beth fydd y cwis yn cynnwys a'r mathau o gwestiynau y byddwch chi'n mynd i gael. Cadwch mewn cof y byddwch hefyd yn cael cyfle i adolygu ar gyfer y cwis yn adran, felly dylai eich TFS yn mynd dros rai problemau ymarferol, ac mae hynny'n gyfle da arall i weld lle bydd angen i chi astudio hyd ar gyfer y cwis. Gadewch i ni ddechrau yn y dechrau gydag Bytes 'n' Bits. Cofiwch ychydig yn unig o 0 neu 1, ac mae beit yn gasgliad o 8 o'r darnau. Gadewch i ni edrych ar y casgliad hwn o ddarnau iawn yma. Dylem fod yn gallu chyfrif i maes faint o ddarnau ceir. Pan fyddwn yn cyfrif nid dim ond 8 ohonynt, wyth 0 neu 1 uned. Ac ers oes 8 did, dyna 1 beit, a gadewch i drosi i hecsadegol. Hecsadegol yn sylfaen 16, ac mae'n eithaf hawdd i drosi nifer yn deuaidd, sef yr hyn hynny yw, i nifer yn hecsadegol. Mae pob rydym yn ei wneud yw ein bod yn edrych ar grwpiau o 4, ac rydym yn eu trosi i'r digid hecsadegol priodol. Rydym yn dechrau gyda'r grŵp dde y rhan fwyaf o 4, felly 0011. Mae hynny'n mynd i fod yn un 1 ac un 2, felly gyda'n gilydd sy'n gwneud 3. Ac yna gadewch i ni edrych ar y bloc arall o 4. 1101. Mae hynny'n mynd i fod yn un 1, un 4, ac un 8. Gyda'i gilydd mae hynny'n mynd i fod yn 13, sy'n gwneud D. A byddwn yn cofio bod yn hecsadegol nid ydym yn unig yn mynd 0 i 9. Rydym yn mynd trwy 0 F, felly ar ôl 9, 10 yn cyfateb i A, 11 i B, et cetera lle mae F yn 15. Dyma 13 yn D, felly i drosi i degol cyfan a wnawn yw ein bod mewn gwirionedd yn trin pob safle fel pŵer o 2. Dyna un 1, mae un 2, sero 4s, sero 8 oed, un 16, et cetera, ac mae'n ychydig yn anodd i gyfrifo yn eich pen, ond os ydym yn mynd at y sleid nesaf gallwn weld yr ateb i hynny. Yn y bôn rydym yn mynd ar draws o'r dde yn ôl i'r chwith, ac rydym yn lluosi pob digid gan y pŵer cyfatebol o 2. A chofiwch, er hecsadegol yr ydym yn pennu y niferoedd hyn gyda 0x ar y dechrau felly nid ydym yn drysu rhwng 'i ag a rhif degol. Parhau ar, mae hwn yn Tabl ASCII, a'r hyn rydym yn defnyddio ASCII ar gyfer yw mapio'r o gymeriadau i werthoedd rhifiadol. Cofiwch yn y pset cryptograffeg rydym yn gwneud defnydd helaeth o'r Tabl ASCII er mwyn defnyddio gwahanol ddulliau o cryptograffeg, y Caesar a'r cipher Vigenère, i drawsnewid gwahanol lythrennau mewn llinyn yn ôl yr allwedd a roddwyd gan y defnyddiwr. Gadewch i ni edrych ar ychydig o mathemateg ASCII. O edrych ar 'P' + 1, ar ffurf cymeriad a fyddai'n Q, a chofiwch fod '5 '≠ 5. A byddai sut yn union y trosi rhwng y 2 ffurflenni? Nid yw'n mewn gwirionedd yn rhy galed. Er mwyn cael 5 rydym yn tynnu '0 ' oherwydd bod 5 lle rhwng y '0 'a '5'. Er mwyn mynd y ffordd arall rydym yn unig ychwanegwch y 0, felly mae'n fath o fel rhifyddeg rheolaidd. Ond cofiwch fod pan fydd rhywbeth wedi dyfyniadau o'i gwmpas ei fod yn gymeriad ac felly yn cyfateb i werth yn y tabl ASCII. Symud i bynciau cyfrifiadurol mwy o wyddoniaeth gyffredinol. Rydym yn dysgu beth yw algorithm a sut rydym yn defnyddio rhaglennu i weithredu algorithmau. Dyma rai enghreifftiau o algorithmau yn rhywbeth syml iawn fel gwirio a yw rhif yn eilrif neu'n odrif. Am y cofiwch ein mod y rhif hwnnw â 2 a gwirio os yw'r canlyniad yw 0. Os felly, mae hyd yn oed. Os na, mae'n rhyfedd. A dyna enghraifft o algorithm sylfaenol iawn. Mae ychydig bach o un mwy o ran yn chwiliad deuaidd, y byddwn yn mynd drosodd yn ddiweddarach yn y sesiwn adolygu. Ac rhaglennu yw'r term a ddefnyddiwn ar gyfer cymryd algorithm a gall drosi i godio'r y cyfrifiadur yn darllen. 2 enghraifft o raglennu yn Scratch, sef yr hyn a wnaethom yn Wythnos 0. Er nad ydym yn mewn gwirionedd yn teipio allan y cod mae'n ffordd o weithredu y algorithm, sy'n argraffu'r rhifau 1-10, ac yma rydym yn gwneud yr un peth yn yr iaith raglennu C. Mae'r rhain yn swyddogaethol sy'n cyfateb, ysgrifenedig yn unig mewn ieithoedd gwahanol neu gystrawen. Yna byddwn yn dysgu am ymadroddion boolean, a gwerth Boole yn werth sy'n naill ai'n wir neu'n anwir, ac ymadroddion yma oftentimes boolean mynd y tu mewn o gyflyrau, felly os (x ≤ 5), yn dda, rydym yn gosod eisoes x = 5, fel y cyflwr yn mynd i werthuso i gwir. Ac os yw'n wir, beth bynnag yw cod o dan y cyflwr yn mynd i gael ei werthuso gan y cyfrifiadur, fel y llinyn yn mynd i gael ei argraffu i'r allbwn safonol, a chyflwr tymor yn cyfeirio at beth bynnag sydd y tu mewn i'r cromfachau y datganiad os. Cofiwch holl weithredwyr. Cofiwch ei && a | | pan fyddwn yn ceisio cyfuno 2 neu fwy o gyflyrau, Nid == = i wirio a 2 beth yn gyfartal. Cofiwch mai = ar gyfer aseiniad tra == yn weithredwr boolean. ≤, ≥ ac yna y 2 olaf yn hunan-esboniadol. Mae adolygiad cyffredinol o resymeg boolean yma. Ac ymadroddion boolean hefyd yn bwysig o ddolenni, y byddwn yn mynd dros awr. Rydym yn dysgu am 3 math o dolenni hyd yn hyn yn CS50, ar gyfer, ychydig, ac yn ei wneud tra. Ac mae'n bwysig gwybod, er bod at ddibenion y rhan fwyaf o gallwn mewn gwirionedd yn defnyddio unrhyw fath o ddolen yn gyffredinol mae rhai mathau o ddibenion neu batrymau cyffredin mewn rhaglenni sy'n benodol yn galw am un o'r dolenni sy'n ei gwneud yn y. mwyaf effeithlon neu cain i godedig yn y ffordd honno Gadewch i ni fynd dros beth mae pob un o'r dolenni yn tueddu i gael eu defnyddio ar gyfer y rhan fwyaf yn aml. Mewn gyfer dolen rydym yn gyffredinol eisoes yn gwybod faint o weithiau yr ydym am ei ailadrodd. Dyna beth rydym yn ei roi yn y cyflwr. Er, i = 0, i <10, er enghraifft. Rydym eisoes yn gwybod ein bod eisiau gwneud rhywbeth 10 gwaith. Nawr, am ddolen er, yn gyffredinol nid ydym yn o reidrwydd gwybod faint o weithiau yr ydym am i'r ddolen i redeg. Ond rydym yn gwybod rhyw fath o amod ein bod yn awyddus i bob amser fod yn wir neu bob amser fod yn ffug. Er enghraifft, er bod ei osod. Lets 'ddeud bod' na newidyn boolean. Er bod yn wir yr ydym am i'r cod i werthuso, felly mae ychydig yn fwy estynadwy, ychydig yn fwy cyffredinol na i ddolen, ond gall unrhyw ddolen i hefyd yn cael eu trosi i dolen gyfnod. Yn olaf, wneud tra dolenni, a all fod yn dyrys i ddeall ar unwaith, yn cael eu defnyddio'n aml wrth yr ydym am werthuso'r y cod cyntaf cyn y tro cyntaf i ni edrych ar y cyflwr. Mae achos defnydd cyffredin am wneud tra dolen yw pan fyddwch am gael mewnbwn defnyddwyr, ac rydych yn gwybod eich bod am ofyn i'r defnyddiwr ar gyfer mewnbwn o leiaf unwaith, ond os nad ydynt yn rhoi i chi mewnbwn da hawl i ffwrdd ydych am i ddal i ofyn iddynt nes eu bod yn rhoi i chi y mewnbwn da. Dyna y defnydd mwyaf cyffredin o ddim tra dolen, a gadewch i ni edrych ar y strwythur gwirioneddol y dolenni. Maent fel arfer bob amser yn tueddu i ddilyn patrymau hyn. Ar y ddolen ar gyfer tu mewn i chi gael 3 elfen: initialization, fel arfer rhywbeth fel int i = 0 lle i yw y cownter, cyflwr, lle rydym eisiau ei ddweud yn rhedeg hyn ar gyfer dolen cyhyd ag y cyflwr hwn yn dal, fel i <10, ac yna yn olaf, diweddaru, sef sut yr ydym gynyddran y newidyn cownter ar bob pwynt yn y ddolen. Mae beth cyffredin i weld yn unig sydd i + +, sy'n golygu codiad o 1 i bob tro. Gallech hefyd wneud rhywbeth fel i + = 2, sy'n golygu ychwanegu 2 i i bob tro y byddwch yn mynd drwy'r ddolen. Ac yna y gwneud hyn dim ond yn cyfeirio at unrhyw god sydd mewn gwirionedd yn rhedeg fel rhan o'r ddolen. Ac ar gyfer dolen tra, y tro hwn yr ydym mewn gwirionedd yn cael y initialization y tu allan i'r ddolen, felly, er enghraifft, gadewch i ni ddweud ein bod yn ceisio gwneud yr un math o ddolen fel yr wyf newydd eu disgrifio. Byddem yn dweud int i = 0 cyn i'r ddolen ddechrau. Yna gallem ddweud wrth i <10 yn gwneud hyn, felly mae'r un bloc o god ag o'r blaen, a'r tro hwn mae'r rhan diweddariad o'r cod, er enghraifft, i + +, mewn gwirionedd yn mynd y tu mewn i'r ddolen. Ac yn olaf, am wneud tra, mae'n debyg i'r ddolen tra, ond mae'n rhaid i ni gofio y bydd y cod yn gwerthuso unwaith cyn y cyflwr yn cael ei wirio, felly mae'n gwneud synnwyr llawer mwy o os ydych yn edrych arno yn nhrefn top i'r gwaelod. Mewn, wneud tra dolen y cod yn gwerthuso cyn i chi hyd yn oed edrych ar gyflwr tra tra bod dolen tra, mae'n gwirio yn gyntaf. Datganiadau a newidynnau. Pan fyddwn yn awyddus i greu amrywiol newydd i ni yn gyntaf am ei ymgychwyn hynny. Er enghraifft, bar int initializes y bar amrywiol, ond nid yw'n rhoi gwerth, felly beth yw bar yn werth nawr? Nid ydym yn gwybod. Gallai fod rhywfaint o werth garbage a storio yn flaenorol er cof yno, ac nid ydym am i ddefnyddio'r newidyn hyd nes y byddwn mewn gwirionedd yn rhoi ei fod yn werth, felly rydym yn datgan yma. Yna, rydym yn ymgychwyn ei fod yn 42 isod. Yn awr, wrth gwrs, rydym yn gwybod y gellir gwneud hyn ar un llinell, bar int = 42. Ond dim ond i gael eu glir y camau lluosog sy'n digwydd, datganiad a'r y initialization yn digwydd ar wahân yma. Mae'n digwydd ar un cam, ac mae'r un nesaf, int Baz = bar + 1, datganiad hwn isod, bod Baz cynyddrannau, felly ar ddiwedd y bloc cod pe baem yn argraffu'r gwerth Baz byddai'n 44 oherwydd ein bod yn datgan ac yn ymgychwyn ei fod yn 1 bar>, ac yna rydym yn cynyddiad unwaith mwy â'r + +. Aethom dros hyn yn gryno 'n bert, ond mae'n dda i gael cyffredinol dealltwriaeth o'r hyn edafedd a digwyddiadau. Rydym yn bennaf yn gwneud hyn yn Scratch, er mwyn i chi feddwl am edafedd fel dilyniannau lluosog o god yn rhedeg ar yr un pryd. Mewn gwirionedd, mae'n debyg nad yw'n rhedeg ar yr un pryd, ond math o haniaethol gallwn feddwl am y peth yn y ffordd honno. Yn Scratch, er enghraifft, cawsom y sprites lluosog. Gallai fod yn gweithredu cod gwahanol ar yr un pryd. Gallai un fod yn cerdded tra bod y llall yn ei ddweud rhywbeth mewn rhan wahanol o'r sgrîn. Digwyddiadau yn ffordd arall o wahanu'r rhesymeg rhwng gwahanol elfennau eich cod, ac yn Scratch roeddem yn gallu i efelychu digwyddiadau gan ddefnyddio yr Darlledu, a dyna mewn gwirionedd Pan fyddaf yn derbyn, nid pan fyddaf yn clywed, ond yn y bôn mae'n ffordd i drosglwyddo gwybodaeth o un sprite i'r llall. Er enghraifft, efallai y byddwch am i drosglwyddo gêm drosodd, a phan arall sprite yn cael gêm drosodd, ei fod yn ymateb mewn ffordd benodol. Mae'n fodel bwysig deall ar gyfer rhaglenni. Dim ond i fynd dros yr Wythnos sylfaenol 0, hyn yr ydym wedi mynd dros hyd yn hyn, gadewch i ni edrych ar y rhaglen C syml. Gall y testun fod ychydig bach o fan hyn, ond byddaf yn mynd drosto mewn gwirionedd gyflym. Rydym yn cynnwys 2 ffeil pennawd ar y brig, cs50.h a stdio.h. Rydym yn diffinio yna terfyn cyson alw i fod yn 100. Rydym wedyn yn gweithredu ein prif swyddogaeth. Gan nad ydym yn defnyddio dadleuon llinell gorchymyn yma mae angen i ni roi ddi-rym gan fod y dadleuon ar gyfer y prif. Rydym yn gweld int uchod prif. Dyna'r math o ddychwelyd, felly dychwelyd 0 ar y gwaelod. Ac rydym yn defnyddio CS50 swyddogaeth llyfrgell yn cael int i ofyn i'r defnyddiwr ar gyfer mewnbwn, ac rydym yn ei storio yn y x amrywiol, felly rydym yn datgan x uchod, ac rydym ymgychwyn gyda x = GetInt. Yna, byddwn yn gwirio i weld a yw'r defnyddiwr yn rhoi i ni mewnbwn da. Os yw'n TERFYN ≥ rydym am ddychwelyd cod gwall o 1 ac argraffu neges gwall. Ac yn olaf, os yw'r defnyddiwr wedi rhoi i ni mewnbwn da rydyn ni'n mynd i sgwâr y nifer ac argraffwch y canlyniad. Dim ond i wneud yn siŵr bod y rhai gartref daro pob gallwch weld y labeli o rannau gwahanol o'r cod yma. Soniais yn gyson, ffeiliau header. O, int x. Gwnewch yn siwr i gofio bod 'na newidyn lleol. Sy'n cyferbynnu ei fod o amrywiol byd-eang, a byddwn yn siarad am ychydig yn ddiweddarach yn y sesiwn adolygu, ac rydym yn galw y swyddogaeth llyfrgell printf, felly os nad ydym wedi cynnwys y ffeil pennawd stdio.h ni fyddem yn gallu galw printf. Ac yr wyf yn credu bod y saeth a gafodd eu torri i ffwrdd yma yn pwyntio at y% d, sydd yn llinyn fformadu yn printf. Mae'n dweud argraffu newidyn hwn fel% o nifer, d. A dyna ni ar gyfer Wythnos 0. Nawr Lucas yn mynd i barhau. Hey, guys. Fy enw i yw Lucas. Rwy'n sophomore yn y tŷ gorau ar y campws, Mather, ac rydw i'n mynd i siarad ychydig am Wythnos 1 a 2.1. [Wythnos 1 a 2.1!] [Lucas Freitas] Gan Lexi yn ei ddweud, pan ddechreuon ni gyfieithu eich cod o Scratch i C un o'r pethau yr ydym yn sylwi yw eich bod yn gallu nid yn unig ysgrifennu eich cod a'i redeg gan ddefnyddio baner werdd anymore. A dweud y gwir, mae'n rhaid i chi ddefnyddio rhai camau i wneud eich C rhaglen dod yn ffeil weithredadwy. Yn y bôn yr hyn yr ydych yn ei wneud pan fyddwch yn ysgrifennu rhaglen yw bod i chi gyfieithu eich syniad yn iaith y gall casglwr ddeall, felly pan fyddwch yn ysgrifennu rhaglen yn C beth rydych chi'n ei wneud mewn gwirionedd yn ysgrifennu rhywbeth y mae'ch compiler yn mynd i ddeall, ac yna y casglwr yn mynd i gyfieithu cod hwnnw i mewn i rywbeth y bydd eich cyfrifiadur yn deall. A'r peth yw, eich cyfrifiadur yn iawn mewn gwirionedd fud. Gall eich cyfrifiadur yn unig yn deall 0s a 1s, felly mewn gwirionedd yn y cyfrifiaduron cyntaf pobl fel arfer yn rhaglennu defnyddio 0s a 1s, ond nid anymore, diolch i Dduw. Nid oes rhaid i ni gofio y dilyniannau gyfer 0au ac 1 am am ddolen neu am ddolen gyfnod, ac felly ar. Dyna pam fod gennym compiler. Beth casglwr yn ei wneud yn y bôn yn trosi'r cod C, yn ein hachos ni, i iaith y bydd eich cyfrifiadur yn deall, sef y cod gwrthrych, a'r casglwr ein bod yn defnyddio Gelwir clang, felly mae hyn yn mewn gwirionedd yn y symbol ar gyfer clang. Pan fyddwch yn cael eich rhaglen, rhaid i chi wneud 2 beth. Yn gyntaf, mae'n rhaid i chi lunio eich rhaglen, ac yna rydych chi'n mynd i redeg eich rhaglen. Er mwyn llunio eich rhaglen gennych lawer o opsiynau i wneud hynny. Mae'r un cyntaf yw gwneud program.c clang mewn pa raglen yw enw eich rhaglen. Yn yr achos hwn gallwch weld eu bod dim ond dweud "Hey, lunio fy rhaglen." Nid ydych chi'n dweud "Rwyf am i'r enw ar gyfer fy rhaglen" neu unrhyw beth. Mae'r ail opsiwn yn rhoi enw i eich rhaglen. Gallwch ddweud clang-o ac yna enw'r eich bod am y ffeil gweithredadwy i gael eu henwi fel ac yna program.c. A allwch chi hefyd yn gwneud rhaglen, a gweld sut yn y 2 achos cyntaf Rhoi I. C, ac yn y trydydd Fi ond ca rhaglenni? Yeah, rydych na ddylai mewn gwirionedd yn rhoi. C pan fyddwch yn defnyddio ei wneud. Fel arall, compiler mewn gwirionedd yn mynd i gweiddi ar chi. A hefyd, nid wyf yn gwybod os ydych yn guys cofiwch, ond mae llawer o weithiau rydym hefyd yn defnyddio-lcs50 neu-lm. Sy'n cael ei alw'n cysylltu. 'I jyst yn dweud wrth y compiler y byddwch yn defnyddio'r llyfrgelloedd hynny iawn yno, felly os ydych am ddefnyddio cs50.h chi mewn gwirionedd yn rhaid i chi deipio clang program.c-lcs50. Os nad ydych yn gwneud hynny, nid yw'r casglwr yn mynd i wybod eich bod yn defnyddio swyddogaethau hynny yn cs50.h. A phan ydych am redeg eich rhaglen mae gennych 2 ddewis. Os gwnaethoch chi program.c clang na wnaethoch chi roi enw i'ch rhaglen. Mae'n rhaid i chi redeg gan ddefnyddio. / A.out. A.out yn enw safonol sy'n clang yn rhoi eich rhaglen os nad ydych yn rhoi enw iddo. Fel arall, ydych chi'n mynd i wneud. / Rhaglen os ydych yn rhoi enw i'ch rhaglen, a hefyd os gwnaethoch wneud rhaglen yr enw y rhaglen yn mynd i gael eisoes yn mynd i gael ei raglennu un enw gan fod y ffeil c. Yna buom yn siarad am fathau o ddata a data. Yn y bôn fathau o ddata yn yr un peth â blychau bach maent yn eu defnyddio i storio werthoedd, felly mathau o ddata mewn gwirionedd yn union fel Pokémons. Maent yn dod mewn bob maint a math. Nid wyf yn gwybod os yw'r gyfatebiaeth yn gwneud synnwyr. Mae maint data mewn gwirionedd yn dibynnu ar y bensaernïaeth peiriant. Mae'r holl ddata maint fy mod i'n mynd i ddangos yma mewn gwirionedd ar gyfer peiriant 32-bit, sef achos ein cyfarpar, ond os ydych mewn gwirionedd yn codio eich Mac neu mewn Ffenestri hefyd na thebyg yn mynd i gael peiriant 64-bit, felly cofiwch bod maint y data fy mod i'n mynd i ddangos yma ar gyfer y peiriant 32-bit. Mae'r un cyntaf a welsom yn int, sydd yn eithaf syml. Byddwch yn defnyddio int i storio yn gyfanrif. Rydym hefyd yn gweld y cymeriad, y torgoch. Os ydych am ddefnyddio llythyr neu symbol ychydig mae'n debyg eich bod yn mynd i ddefnyddio golosg. Mae torgoch wedi 1 beit, sy'n golygu 8 did, fel Lexi meddai. Yn y bôn mae gennym Tabl ASCII sydd 256 gyfuniadau posibl o 0au ac 1, ac yna pan fyddwch yn teipio golosg mae'n mynd i gyfieithu cymeriad bod mewnbynnau i chi nifer sydd gennych yn y tabl ASCII, fel Lexi meddai. Mae gennym hefyd y fflôt, yr ydym yn ei ddefnyddio i storio rhifau degol. Os ydych am ddewis 3.14, er enghraifft, rydych yn mynd i ddefnyddio fflôt neu ddwbl sydd â mwy o fanylder. Mae arnofio Mae 4 bytes. Mae dwbl wedi 8 bytes, felly yr unig wahaniaeth yw y manylder. Mae gennym hefyd hir sy'n cael ei ddefnyddio ar gyfer cyfanrifau, a gallwch weld am beiriant 32-bit yn int a hir yn cael yr un faint, felly nid yw'n wir yn gwneud synnwyr i ddefnyddio hir mewn peiriant 32-bit. Ond os ydych yn defnyddio peiriant Mac a 64-bit, mewn gwirionedd hir o faint 8, felly mae'n dibynnu ar y bensaernïaeth. Ar gyfer y peiriant 32-bit nid yw'n gwneud synnwyr i ddefnyddio hir iawn. Ac yna hir hir, ar y llaw arall, mae 8 bytes, felly mae'n dda iawn os ydych chi am gael cyfanrif hirach. Ac yn olaf, mae gennym llinyn, sydd mewn gwirionedd yn * torgoch, sy'n rhoi syniad i torgoch. Mae'n hawdd iawn i feddwl bod y maint y llinyn yn mynd i fod fel y nifer o gymeriadau sydd gennych yno, ond mewn gwirionedd yn y torgoch * ei hun Mae maint y pwyntydd i torgoch, sef 4 bytes. Mae maint * torgoch yw 4 bytes. Nid oes ots os oes gennych air bach neu lythyr neu unrhyw beth. Mae'n mynd i fod yn 4 bytes. Rydym hefyd wedi dysgu ychydig am castio, fel y gallwch weld, os oes gennych, er enghraifft, rhaglen sy'n dweud int x = 3 ac wedyn printf ("% d", x / 2) ydych chi'n guys yn gwybod beth mae'n mynd i argraffu ar y sgrin? Rywun? >> [Myfyrwyr] 2. 1. >> 1, yeah. Pan fyddwch yn gwneud 3/2 ei fod yn mynd i gael 1.5, ond gan ein bod yn defnyddio cyfanrif mae'n mynd i anwybyddu y rhan degol, a ydych yn mynd i gael 1. Os nad ydych am i hynny ddigwydd beth allwch chi ei wneud, er enghraifft, yn datgan fflôt y = x. Yna x a arferai fod yn 3 yn awr yn mynd i fod yn 3.000 yn y. Ac yna gallwch argraffu'r y / 2. A dweud y gwir, dylai gen i 2. dros yno. Mae'n mynd i wneud 3.00/2.00, a ydych yn mynd i gael 1.5. Ac mae gennym y f 0.2 yn unig i ofyn am 2 uned degol yn y rhan degol. Os oes gennych 0.3 f mae'n mynd i gael mewn gwirionedd 1.500. Os yw'n 2, mynd i fod yn 1.50. Mae gennym hefyd yr achos hwn yma. Os ydych yn arnofio x = 3.14 a yna x printf ydych chi'n mynd i gael 3.14. Ac os ydych yn ei wneud x = y int o x, sy'n golygu trin x fel int ac y byddwch yn argraffu x nawr ydych chi'n mynd i gael 3.00. Ydy hynny'n gwneud synnwyr? Oherwydd eich bod yn trin x 1 fel cyfanrif, felly rydych yn anwybyddu'r rhan degol, ac yna rydych chi'n argraffu x. Ac yn olaf, gallwch hefyd wneud hyn, int x = 65, ac yna byddwch yn datgan golosg c = x, ac yna os ydych yn argraffu'r c rydych chi mewn gwirionedd yn mynd i gael A, felly yn y bôn yr hyn rydych chi'n ei wneud yma yn cyfieithu'r cyfanrif i gymeriad, yn union fel y Tabl ASCII yn ei wneud. Buom hefyd yn siarad am weithredwyr mathemateg. Mae'r rhan fwyaf ohonynt yn eithaf syml, felly +, -, *, /, a hefyd buom yn siarad am mod, sef y gweddill o is-adran o 2 rif. Os oes gennych 10% 3, er enghraifft, mae'n golygu rhannu 10 gan 3, a beth yw'r gweddill? Mae'n mynd i fod yn 1, felly mae'n mewn gwirionedd yn ddefnyddiol iawn ar gyfer llawer o'r rhaglenni. Am Vigenère a Cesar Rwy'n eithaf siwr bod pob un ohonoch guys defnyddio mod. Ynglŷn â gweithredwyr mathemateg, fod yn ofalus iawn wrth gyfuno * a /. Er enghraifft, os ydych yn gwneud (3/2) * 2 beth ydych chi'n mynd i gael? [Mae myfyrwyr yn] 2. Yeah, 2, bod 3/2 yn mynd i fod yn 1.5, ond ers i chi yn ei wneud gweithrediadau rhwng 2 gyfanrifau rydych chi mewn gwirionedd dim ond yn mynd i ystyried 1, ac yna 1 * 2 yn mynd i fod yn 2, felly byddwch yn iawn, yn ofalus iawn wrth wneud rhifyddeg gyda chyfanrifau oherwydd efallai y byddwch yn cael y 2 = 3, yn yr achos hwnnw. A hefyd fod yn ofalus iawn ynglŷn â blaenoriaeth. Dylech fel arfer yn defnyddio cromfachau i fod yn sicr eich bod yn gwybod beth rydych chi'n ei wneud. Mae rhai llwybrau byr defnyddiol, wrth gwrs, mae un yn i + + neu i + = 1 neu ddefnyddio + =. Dyna'r un peth â gwneud i = i + 1. Gallwch hefyd wneud i - neu i - = 1, sef yr un peth fel fi = i -1, rhywbeth yr ydych yn guys defnyddio llawer i mewn ar gyfer dolenni, o leiaf. Hefyd, ar gyfer *, os ydych yn defnyddio * = ac os ydych yn ei wneud, er enghraifft, i * = 2 yw'r un peth â dweud i = i * 2, ac mae'r un peth ar gyfer rhannu. Os ydych yn ei wneud i / = 2 'i' yr un peth fel fi = i / 2. Nawr am swyddogaethau. Rydych guys dysgu bod swyddogaethau yn strategaeth dda iawn i arbed cod tra byddwch chi'n rhaglennu, felly os ydych am i berfformio'r un dasg mewn cod unwaith eto ac eto, mae'n debyg y byddwch am ddefnyddio swyddogaeth yn unig fel nad oes rhaid i chi gopïo a gludo y cod drosodd a throsodd. A dweud y gwir, prif swyddogaeth, a phan fyddaf yn dangos i chi y fformat swyddogaeth rydych chi'n mynd i weld fod hynny'n eithaf amlwg. Rydym hefyd yn defnyddio swyddogaethau o rai llyfrgelloedd, er enghraifft, printf, GetIn, sydd o'r llyfrgell CS50, a swyddogaethau eraill fel toupper. Mae pob un o'r swyddogaethau hynny yn cael eu rhoi ar waith mewn gwirionedd mewn llyfrgelloedd eraill, a phan fyddwch yn rhoi rhai ffeiliau tennyn yn dechrau eich rhaglen ydych yn dweud y gallwch chi os gwelwch yn dda roi i mi y cod ar gyfer y swyddogaethau hynny felly nid oes gennyf i'w gweithredu gan fy hun? A allwch chi hefyd ysgrifennu eich swyddogaethau eich hun, felly pan fyddwch yn dechrau rhaglennu byddwch yn sylweddoli nad yw llyfrgelloedd yn cael yr holl swyddogaethau sydd eu hangen arnoch. Ar gyfer y pset diwethaf, er enghraifft, fe wnaethom ysgrifennu tynnu, sgrialu, ac yn am-edrych, ac mae'n bwysig iawn, iawn i allu ysgrifennu swyddogaethau oherwydd eu bod yn ddefnyddiol, ac rydym yn eu defnyddio drwy'r amser o ran rhaglenni, ac fe fydd yn arbed llawer o god. Mae fformat y swyddogaeth yn yr un yma. Rydym wedi math dychwelyd yn y dechrau. Beth yw'r math dychwelyd? Dim ond pan fydd eich swyddogaeth yn mynd i ddychwelyd. Os oes gennych chi swyddogaeth, er enghraifft, ffactoraidd, sy'n mynd i gyfrifo ffactoraidd o'r cyfanrif, yn ôl pob tebyg mae'n mynd i ddychwelyd yn gyfanrif hefyd. Yna y math dychwelyd yn mynd i fod yn int. Printf mewn gwirionedd wedi dychwelyd eiddo gwag fath oherwydd nad ydych yn dychwelyd unrhyw beth. Rydych yn unig argraffu pethau i'r sgrin a rhoi'r gorau iddi swyddogaeth wedyn. Yna, mae gennych yr enw y swyddogaeth y gallwch ddewis. Dylech fod ychydig yn rhesymol, nid fel yn dewis enw fel xyz neu fel x2f. Ceisiwch i ffurfio enw sy'n gwneud synnwyr. Er enghraifft, os yw'n ffactoraidd, yn dweud ffactoraidd. Os yw'n swyddogaeth sydd yn mynd i dynnu rhywbeth, ei enwi tynnu. Ac yna mae gennym y paramedrau, a elwir hefyd yn dadleuon, sy'n edrych fel yr adnoddau y mae eich swyddogaeth anghenion oddi wrth eich cod i gyflawni ei dasg. Os ydych am gyfrifo ffactoraidd nifer yn ôl pob tebyg bydd angen i chi gael rhif i gyfrifo ffactoraidd. Un o'r dadleuon yr ydych chi'n mynd i gael yw'r rhif ei hun. Ac yna mae'n mynd i wneud rhywbeth a dychwelyd y gwerth ar y diwedd oni bai ei fod yn swyddogaeth ddi-rym. Gadewch i ni weld enghraifft. Os ydw i eisiau ysgrifennu swyddogaeth sy'n crynhoi'r holl rifau mewn amrywiaeth o gyfanrifau, yn gyntaf oll, y math dychwelyd yn mynd i fod yn int oherwydd bod gen i amrywiaeth o gyfanrifau. Ac yna dwi'n mynd i gael yr enw swyddogaeth fel sumArray, ac yna mae'n mynd i gymryd y casgliad ei hun, i nums int, ac yna ar hyd y rhesi, felly rwy'n gwybod faint o rifau rhaid i mi grynhoi. Yna rhaid i mi gychwyn y swm amrywiol o'r enw, er enghraifft, i 0, a phob tro rwy'n gweld elfen yn yr amrywiaeth dylwn ei ychwanegu at swm, felly wnes i am ddolen. Yn union fel Lexi dywedasoch, yr ydych yn ei wneud i int = 0, hyd 0, yna mae'n gadarnhaol. Os yw'n = i 0 yna mae'n 0, ac os yw'n <0, yna mae'n negyddol. Ac mae'r un arall yn ei wneud os, arall os, arall. Y gwahaniaeth rhwng y ddau yw bod yr un mewn gwirionedd yn mynd i gadarnhau a oes> 0, <0 = 0 neu dair gwaith, felly os oes gennych y rhif 2, er enghraifft, mae'n mynd i ddod yma a dweud os yw (x> 0), ac mae'n mynd i ddweud ie, felly rwy'n argraffu gadarnhaol. Ond hyd yn oed er fy mod yn gwybod ei fod yn> 0 ac nid yw'n mynd i fod yn 0 neu <0 Rwy'n dal yn mynd i wneud yw 0, a yw'n <0, felly rwy'n wir yn mynd y tu mewn o ifs nad oedd rhaid i mi oherwydd yr oeddwn eisoes yn gwybod nad yw'n mynd i fodloni unrhyw un o'r amodau hyn. Gallaf ddefnyddio'r os, arall os, arall datganiad. Mae yn y bôn yn dweud os x = 0 I argraffu'r cadarnhaol. Os nad yw'n, dw i'n mynd i hefyd yn profi hyn. Os yw'n 2 Nid wyf i'n mynd i wneud hyn. Yn y bôn os wyf wedi x = 2 fyddech chi'n ei ddweud os yw (x> 0), ie, felly argraffu hwn. Nawr fy mod yn gwybod ei fod yn> 0 a'i fod yn fodlon y gyntaf os Dydw i ddim hyd yn oed yn mynd i redeg y cod hwn. Mae'r cod yn rhedeg yn gyflymach, mewn gwirionedd, 3 gwaith yn gyflymach os ydych yn defnyddio hyn. Rydym hefyd yn dysgu am ac a neu. Dydw i ddim yn mynd i fynd drwy hyn oherwydd Lexi eisoes yn siarad amdanyn nhw. Dim ond y && a | | gweithredwr. Yr unig beth 'n annhymerus' ddweud yw fod yn ofalus pan mae gennych 3 amodau. Defnyddiwch cromfachau oherwydd ei fod yn ddryslyd iawn pan fydd gennych gyflwr ac un arall neu un arall. Defnyddio cromfachau yn unig i fod yn sicr bod eich amodau yn gwneud synnwyr oherwydd yn yr achos hwnnw, er enghraifft, gallwch ddychmygu bod gallai fod yn amod cyntaf ac un neu'r llall neu y 2 amodau cyfuno mewn ac neu y trydydd, felly dim ond byddwch yn ofalus. Ac yn olaf, buom yn siarad am switshis. Mae newid yn ddefnyddiol iawn pan fydd gennych newidyn. Lets 'ddeud bod gennych newidyn fel n Gall fod yn 0, 1, neu 2, ac ar gyfer pob un o'r achosion hynny ydych yn mynd i berfformio tasg. Gallwch ddweud newid y newidyn, ac mae'n nodi bod y gwerth yna yn debyg value1 Rydw i'n mynd i wneud hyn, ac yna byddaf yn torri, sy'n golygu Dydw i ddim yn mynd i edrych ar unrhyw un o'r achosion eraill oherwydd ein bod yn fodlon eisoes yr achos hwnnw ac yna value2 ac yn y blaen, ac yr wyf hefyd gael switsh diofyn. Mae hynny'n golygu os nad yw'n bodloni unrhyw un o'r achosion yr wyf wedi fy mod i'n mynd i wneud rhywbeth arall, ond mae hynny'n ddewisol. Dyna'r cyfan i mi. Nawr gadewch i ni gael Tommy. Mae pob hawl, mae hyn yn mynd i fod yn Wythnos 3-ish. Dyma rai o'r pynciau y byddwn yn eu cwmpasu, crypto, cwmpas, araeau, et cetera. Dim ond gair cyflym ar crypto. Nid ydym yn mynd i morthwyl y cartref hwn. Gwnaethom hyn yn pset 2, ond ar gyfer y cwis gwnewch yn siŵr eich bod yn gwybod y gwahaniaeth rhwng y cipher Cesar a cipher Vigenère, sut mae'r ddau o'r rhai a gwaith seifferau a beth mae'n ei olygu i amgryptio a dadgryptio testun gan ddefnyddio hynny 2 seifferau. Cofiwch, mae'r cipher Cesar yn syml yn cylchdroi bob cymeriad gan yr un swm, gwneud yn siŵr eich mod yn ôl y nifer o lythyrau yn yr wyddor. Ac mae'r cipher Vigenère, ar y llaw arall, troi pob cymeriad gan swm gwahanol, felly, yn hytrach na dweud bydd pob cymeriad gylchdroi gan 3 Vigenère cylchdroi pob cymeriad o swm gwahanol yn dibynnu ar rai keyword lle mae pob llythyren yn y gair allweddol yn cynrychioli rhai swm gwahanol i gylchdroi y testun glir gan. Gadewch i ni siarad gyntaf am gwmpas amrywiol. Mae 2 fath gwahanol o newidynnau. Mae gennym newidynnau lleol, ac mae'r rhain yn mynd i gael eu diffinio y tu allan i brif neu tu allan i unrhyw swyddogaeth neu floc, a bydd y rhain ar gael yn unrhyw le yn eich rhaglen. Os oes gennych chi swyddogaeth, ac yn y swyddogaeth honno yn ddolen tra y newidyn byd-eang mawr yn hygyrch ym mhob man. Mae newidyn lleol, ar y llaw arall, yn cwmpasu i'r man lle caiff ei ddiffinio. Os oes gennych chi swyddogaeth yma, er enghraifft, mae gennym y ffwythiant g, ac y tu mewn g mae yn newidyn yma a elwir yn y, ac mae hynny'n golygu bod hwn yn newidyn lleol. Er bod y newidyn hwn yw'r enw ar y ac mae'r newidyn gelwir y rhain 2 swyddogaethau oes ganddynt unrhyw syniad beth mae pob eraill newidynnau lleol. Ar y llaw arall, hyd yma yr ydym yn dweud int x = 5, ac mae hyn y tu allan i gwmpas unrhyw swyddogaeth. Mae'n tu allan i gwmpas prif, felly mae hwn yn newidyn byd-eang. Mae hynny'n golygu bod tu mewn y 2 swyddogaethau pan fyddaf yn dweud x - x + neu + Rwy'n defnyddio'r un x lle hwn, ac mae hyn y mae y newidynnau gwahanol. Dyna'r gwahaniaeth rhwng newidyn byd-eang a newidyn lleol. Cyn belled ag y dylunio yn y cwestiwn, weithiau mae'n fwy na thebyg yn syniad gwell i gadw newidynnau lleol pryd bynnag y gallwch ers cael y gall criw o newidynnau byd-eang ca 'n sylweddol ddryslyd. Os oes gennych criw o holl swyddogaethau addasu yr un peth efallai y byddwch yn anghofio beth os swyddogaeth hon yn ddamweiniol yn addasu hyn yn fyd-eang, ac nid yw'r swyddogaeth arall yn gwybod am y peth, a yw'n mynd yn eithaf ddryslyd wrth i chi fynd cod mwy. Cadw newidynnau lleol pryd bynnag y gallwch yw dylunio yn unig yn dda. Araeau, cofiwch, yn syml, yn rhestrau o elfennau o'r un math. Ni all y tu mewn o CI restr fel 1, 2.0, helo. Rydym nid yn unig all wneud hynny. Pan fyddwn yn datgan amrywiaeth yn C pob un o'r elfennau yn rhaid i fod o'r un math. Mae gen i amrywiaeth o 3 gyfanrifau. Mae gen i hyd y rhesi, ond os Im 'jyst yn datgan fel hyn cystrawen lle yr wyf yn nodi beth y mae'r holl elfennau yn Nid wyf yn dechnegol angen hyn 3. Mae'r compiler yn smart ddigon i chyfrif i maes pa mor fawr y dylai'r casgliad fod. Nawr pan fyddaf yn awyddus i gael neu osod y gwerth amrywiaeth dyma'r chystrawen i wneud hynny. Bydd hyn mewn gwirionedd yn addasu ail elfen y rhesi oherwydd, cofiwch, rhifo yn dechrau ar 0, nid yn 1. Os ydw i eisiau darllen y gwerth gallaf ddweud rhywbeth fel int x = array [1]. Neu os ydw i eisiau i osod y gwerth, fel yr wyf i'n ei wneud yma, Gallaf ddweud array [1] = 4. Yr adeg honno gael mynediad elfennau gan eu mynegai neu eu safle neu lle y maent yn y array, a bod y rhestr yn dechrau ar 0. Gallwn hefyd araeau o araeau, ac mae hyn yn cael ei alw'n amrywiaeth aml-ddimensiwn. Pan fydd gennym amrywiaeth aml-ddimensiwn sy'n golygu y gallwn gael rhywbeth fel rhesi a cholofnau, ac mae hyn yn un ffordd o ddelweddu hyn neu meddwl am y peth. Pan fyddaf yn cael amrywiaeth aml-ddimensiwn sy'n golygu fy mod i'n mynd i ddechrau angen mwy nag 1 mynegai oherwydd os oes gen i grid Nid dweud yr hyn rhes ydych mewn yn rhoi i ni yn rhif. Mae hynny'n wir ond yn mynd i roi i ni restr o rifau. Lets 'ddeud gennyf y casgliad yma. Mae gen i amrywiaeth o'r enw grid, ac i ddim yn dweud ei fod yn 2 res a 3 colofn, ac felly mae hyn yn un ffordd o ddelweddu hynny. Pan fyddaf yn dweud fy mod am gael yr elfen yn [1] [2] mae hynny'n golygu fod y rhain yn rhesi yn gyntaf ac yna colofnau Rydw i'n mynd i neidio i rwyfo 1 ers y dywedais 1. Wedyn dw i'n mynd i ddod draw yma i golofn 2, ac yr wyf i'n mynd i gael y gwerth 6. Gwneud synnwyr? Aml-ddimensiwn arrays, cofiwch, yn dechnegol yn unig amrywiaeth o araeau. Gallwn gael araeau o araeau o araeau. Gallwn ddal ati, ond mewn gwirionedd un ffordd o feddwl am sut mae hyn yn cael ei osod allan a beth sy'n mynd ymlaen yw i ddychmygu ei mewn grid fel hyn. Pan fyddwn yn pasio araeau i swyddogaethau, maen nhw'n mynd i ymddwyn ychydig yn wahanol na pan fyddwn yn pasio newidynnau rheolaidd i swyddogaethau fel pasio int neu arnofio. Pan fyddwn yn pasio mewn mathau int neu cols neu unrhyw un o'r ddata arall rydym yn unig yn cymryd golwg arno os bydd y swyddogaeth yn addasu gwerth y newidyn nad yw newid yn mynd i ledaenu i fyny i'r swyddogaeth galw. Gyda amrywiaeth, ar y llaw arall, bydd hynny'n digwydd. Os byddaf yn pasio mewn amrywiaeth i rai swyddogaeth a swyddogaeth honno yn newid rhai o'r elfennau, pan fyddaf yn dod yn ôl i fyny at y swyddogaeth a oedd yn galw ei fy amrywiaeth yn awr yn mynd i fod yn wahanol, ac mae'r eirfa ar gyfer y yn araeau yn cael eu pasio drwy gyfeirio, fel y byddwn yn gweld yn nes ymlaen. Mae hyn yn ymwneud â sut awgrymiadau gwaith, lle y mathau hyn data sylfaenol, ar y llaw arall, yn cael eu pasio yn ôl gwerth. Gallwn feddwl am hynny â gwneud copi o rai amrywiol ac yna'n pasio yn y copi. Nid oes ots beth rydym yn ei wneud â'r amrywiol. Ni fydd y swyddogaeth galw fod yn ymwybodol ei fod yn newid. Araeau yn unig ychydig yn wahanol yn hynny o beth. Er enghraifft, wrth i ni jyst yn gweld, prif, yn syml, yn swyddogaeth sy'n gallu cymryd mewn 2 dadleuon. Mae'r ddadl cyntaf i'r brif swyddogaeth yw argc, neu nifer o ddadleuon, ac mae'r ail ddadl yn cael ei alw argv, a'r rhai yn y gwerthoedd gwirioneddol y dadleuon hynny. Lets 'ddeud gen i raglen o'r enw this.c, a dywedaf yn gwneud hyn, ac yr wyf i'n mynd i redeg hyn ar y llinell orchymyn. Nawr i basio mewn rhai dadleuon i fy rhaglen o'r enw hyn, Gallwn ddweud rhywbeth fel. / Mae hyn yn cs 50. Dyma'r hyn yr ydym ddychmygu David i wneud bob dydd yn y derfynfa. Ond yn awr y tu mewn prif swyddogaeth y rhaglen Mae gwerthoedd hyn, felly argc yw 4. Gallai fod yn ychydig yn ddryslyd oherwydd mewn gwirionedd rydym yn dim ond pasio i mewn yn cs 50. Dyna dim ond 3. Ond cofiwch fod yr elfen gyntaf argv neu'r ddadl 1 yw enw'r y swyddogaeth ei hun. Felly mae hynny'n golygu bod gennym 4 o bethau yma, ac mae'r elfen gyntaf yn mynd i fod. / hyn. A bydd hyn yn cael ei gynrychioli fel llinyn. Yna yr elfennau sy'n weddill yn yr hyn rydym yn ei deipio i mewn ar ôl enw'r rhaglen. Felly, yn union fel neilltir, fel mae'n debyg ein bod yn gweld yn pset 2, cofio bod y llinyn yn 50 yn cael ei ≠ y 50 gyfanrif. Felly, ni allwn ddweud rhywbeth fel, 'int x = argv 3.' Na dim ond yn mynd i wneud synnwyr, oherwydd mae hyn yn llinyn, ac mae hyn yn gyfanrif. Felly, os ydych am newid rhwng y 2, cofiwch, rydym yn mynd i cael y swyddogaeth hud o'r enw atoi. Mae hynny'n mynd â llinyn ac yn dychwelyd y cyfanrif cynrychioli tu mewn y llinyn. Felly mae hynny'n gamgymeriad hawdd i'w gwneud ar y cwis, dim ond meddwl y bydd hyn yn awtomatig yn y math cywir. Ond dim ond yn gwybod y bydd y rhain bob amser yn llinynnau hyd yn oed os yw'r llinyn yn unig yn cynnwys cyfanrif neu gymeriad neu arnofio. Felly nawr gadewch i ni siarad am redeg amser. Pan fyddwn wedi cael yr holl algorithmau sy'n gwneud yr holl bethau hyn crazy, mae'n dod yn ddefnyddiol iawn i ofyn y cwestiwn, "Pa mor hir y maent yn ei gymryd?" Rydym yn cynrychioli bod â rhywbeth a elwir yn nodiant asymptotic. Felly, mae hyn yn golygu bod - yn dda, gadewch i ni ddweud ein bod yn rhoi ein algorithm rhywfaint o fewnbwn iawn, iawn, iawn fawr. Rydym yn awyddus i ofyn y cwestiwn, "Pa mor hir y mae'n mynd i gymryd? Faint o gamau a gymer ein algorithm i redeg fel swyddogaeth maint y mewnbwn? " Felly, y ffordd gyntaf y gallwn ddisgrifio amser yn rhedeg yw gyda mawr O. Ac mae hyn yn ein hamser rhedeg gwaethaf-achos. Felly, os ydym am i ddatrys amrywiaeth, ac rydym yn rhoi ein algorithm arae dyna mewn trefn ddisgynnol pan ddylai fod er mwyn esgynnol, mae hynny'n mynd i fod yn yr achos gwaethaf. Mae hyn yn ein rhwymo uchaf yn uchafswm hyd o amser y bydd ein algorithm cymryd. Ar y llaw arall, mae hyn yn Ω yn mynd i ddisgrifio orau-achos amser yn rhedeg. Felly, os ydym yn rhoi amrywiaeth didoli eisoes i algorithm didoli, Bydd faint o amser mae'n cymryd i ddatrys hyn? Ac mae hyn, yna, yn disgrifio is rhwymo ar amser rhedeg. Felly dyma rai yn unig o eiriau sy'n disgrifio rhai adegau cyffredin yn rhedeg. Mae'r rhain yn nhrefn esgynnol. Yr amser cyflymaf yn olynol, rydym wedi cael ei alw'n gyson. Mae hynny'n golygu dim ots faint o elfennau ydym yn rhoi ein algorithm, ni waeth pa mor fawr ein amrywiaeth yw, ei ddidoli neu wneud beth bynnag rydym yn ei wneud at y casgliad bob amser yn cymryd yr un faint o amser. Felly, gallwn gynrychioli mai dim ond gyda 1, sydd yn gyson. Rydym hefyd yn edrych ar amser yn rhedeg logarithmig. Felly, rhywbeth fel chwiliad deuaidd yn logarithmig, lle rydym yn torri'r broblem yn hanner bob tro ac yna bethau dim ond fynd yn uwch oddi yno. Ac os ydych chi'n erioed wedi ysgrifennu O o unrhyw algorithm ffactoraidd, i chi debyg na ddylai ystyried hyn fel eich gwaith bob dydd. Pan fyddwn yn cymharu amseroedd rhedeg ei bod yn bwysig cadw mewn cof y pethau hyn. Felly os oes gen i algorithm sy'n O (n), a rhywun arall wedi algorithm o O (2n) yw'r rhain mewn gwirionedd yn asymptotically cyfatebol. Felly, os ydym yn dychmygu n i fod yn rhif mawr fel eleventy biliwn: felly pan rydym yn cymharu eleventy biliwn i rywbeth fel eleventy biliwn + 3, yn sydyn nad yw 3 yn wir yn gwneud gwahaniaeth mawr anymore. Dyna pam rydym yn mynd i ddechrau ystyried y pethau hyn yn gyfwerth. Felly mae pethau fel hyn cysonion yma, mae 2 x hyn, neu ychwanegu 3, yn unig yw'r rhain cysonion, ac mae'r rhain yn mynd i ollwng i fyny. Felly dyna pam pob un o'r 3 rhedeg yr adegau hyn yr un fath ag yn dweud eu bod O (n). Yn yr un modd, os oes gennym 2 gwaith rhedeg eraill, gadewch i ni ddweud O (n ³ + 2n ²), gallwn ychwanegu + N, + 7, ac yna mae gennym amser arall rhedeg dyna'n union O (n ³). unwaith eto, mae'r rhain yr un peth gan fod y rhain - nid yw'r rhain yr un fath. Mae'r rhain yn yr un pethau, sori. Felly, mae'r rhain yn yr un fath oherwydd y ³ n yn mynd i dra-arglwyddiaethu y ² 2n. Beth yw'r un peth yw os ydym wedi cynnal adegau fel O (n ³) ac O (n ²) gan fod hyn yn ³ n yn llawer mwy na hyn ² n. Felly, os oes gennym ddehonglwyr, yn sydyn mae hyn yn dechrau i fod o bwys, ond pan rydym yn unig yn delio â ffactorau fel yr ydym yn i fyny yma, yna nid yw'n mynd i mater oherwydd eu bod yn jyst yn mynd i roi'r gorau iddi. Gadewch i ni edrych ar rai o'r algorithmau ydym wedi ei weld hyd yn hyn a siarad am eu hamser rhedeg. Y ffordd gyntaf o chwilio am nifer mewn rhestr, a welsom, roedd chwiliad llinol. A gweithredu chwiliad llinol yn hynod syml. Rydym yn unig wedi restr, ac rydym yn mynd i edrych ar bob elfen unigol yn y rhestr nes i ni ddod o hyd i'r nifer rydym yn chwilio amdano. Felly mae hynny'n golygu bod yn yr achos gwaethaf, mae hyn yn O (n). A gallai yr achos gwaethaf yma fod os yw'r elfen yn yr elfen olaf, yna defnyddio chwiliad llinol mae'n rhaid i ni edrych ar bob elfen unigol nes inni gyrraedd yr un diwethaf er mwyn gwybod ei fod mewn gwirionedd yn y rhestr. Ni allwn roi'r gorau i hanner ffordd ac yn dweud, "Nid yw'n debyg yno." Gyda chwiliad llinol mae'n rhaid i ni edrych ar yr holl beth. Mae'r amser yn rhedeg gorau-achos, ar y llaw arall, yn gyson oherwydd yn yr achos gorau yr elfen rydym yn chwilio am yn unig yr un cyntaf yn y rhestr. Felly mae'n mynd i fynd â ni yn union 1 cam, waeth pa mor fawr yw'r rhestr yn os ydym yn chwilio am yr elfen gyntaf bob tro. Felly, pan fyddwch yn chwilio, cofiwch, nid oes angen bod ein rhestr yn cael ei datrys. Oherwydd ein bod yn syml, yn mynd i edrych dros bob elfen unigol, ac nid oes llawer o bwys mha drefn yr elfennau hynny ynddo Mae algorithm chwilio mwy deallus yw rhywbeth fel chwiliad deuaidd. Cofiwch, mae gweithredu chwiliad deuaidd yw pan fyddwch yn mynd i ddal ati i edrych ar ganol y rhestr. Ac am ein bod yn edrych ar y canol, yr ydym yn mynnu bod y rhestr yn cael ei datrys neu fel arall nid ydym yn gwybod lle mae'r canol yn, ac mae'n rhaid i edrych dros y rhestr gyfan i ddod o hyd iddo, ac yna ar yr adeg honno ni jyst yn gwastraffu amser. Felly os mae gennym restr datrys ac rydym yn dod o hyd i'r canol, yr ydym yn mynd i gymharu'r canol i'r elfen rydym yn chwilio am. Os yw'n rhy uchel, yna gallwn anghofio hanner cywir oherwydd rydym yn gwybod bod os yw ein elfen eisoes yn rhy uchel a phopeth ar y dde yr elfen hon hyd yn oed yn uwch, yna nid oes angen i ni edrych yno anymore. Lle ar y llaw arall, os yw ein elfen yn rhy isel, rydym yn gwybod popeth i'r chwith o'r elfen honno hefyd yn rhy isel, felly nid yw'n wir yn gwneud synnwyr i edrych yno, naill ai. Fel hyn, gyda phob cam a phob tro y byddwn yn edrych ar y man canol ar y rhestr, rydym yn mynd i dorri ein problem yn ei hanner oherwydd yn sydyn rydym yn gwybod criw cyfan o rifau na all hynny fod yn un yr ydym yn chwilio amdano. Yn pseudocode byddai hyn yn edrych rhywbeth fel hyn, ac oherwydd ein bod yn torri ar y rhestr yn hanner bob tro, ein achos gwaethaf neidio rhedeg amser o llinol i logarithmig. Mor sydyn mae gennym log-mewn camau er mwyn dod o hyd i elfen mewn rhestr. Mae'r amser yn rhedeg gorau-achos, fodd bynnag, yn dal yn gyson oherwydd yn awr, gadewch i 'jyst yn dweud mai'r elfen rydym yn chwilio amdano yw bob amser yn y canol union y rhestr wreiddiol. Felly, gallwn dyfu ein rhestr mor fawr ag y dymunwn, ond os yw'r elfen rydym yn chwilio am ar y canol, yna mae'n ond yn mynd i fynd â ni gam 1. Felly dyna pam rydym ni'n O (n log) a Ω (1) neu gyson. Gadewch i ni mewn gwirionedd yn rhedeg chwiliad deuaidd ar y rhestr. Felly, gadewch i ni ddweud ein bod yn chwilio am yr elfen 164. Y peth cyntaf rydym yn mynd i wneud yw dod o hyd i'r man canol ar y rhestr hon. Fel mae'n digwydd bod y man canol yn mynd i ddisgyn rhwng y 2 rhifau, felly gadewch i ni dim ond fympwyol ddweud, bob tro y man canol yn syrthio rhwng 2 rhifau, gadewch i ni dim ond talgrynnu i fyny. Mae angen i ni sicrhau ein bod yn gwneud hyn bob cam o'r ffordd. Felly, rydym yn mynd i rownd i fyny, ac rydym yn mynd i ddweud bod 161 yn nghanol ein rhestr. So 161 <164, a phob elfen i'r chwith o 161 Mae hefyd yn <164, felly rydym yn gwybod nad yw'n mynd i helpu ni o gwbl i ddechrau edrych dros yma oherwydd yr elfen rydym yn chwilio am na all fod yno. Felly, beth gallwn ei wneud yw y gallwn anghofio am y cyfan hanner chwith o'r rhestr, ac yn awr yn ystyried o'r dde y ymlaen 161. Felly eto, mae hyn yn y man canol, gadewch i 'jyst talgrynnu i fyny. Nawr 175 yn rhy fawr. Felly, rydym yn gwybod nad yw'n mynd i helpu ni edrych yma neu yma, fel y gallwn dim ond ei daflu hwnnw oddi arnynt, ac yn y diwedd byddwn wedi cyrraedd y 164. Unrhyw gwestiynau am chwiliad deuaidd? Gadewch i ni symud ymlaen o chwilio drwy restr eisoes yn ei ddidoli i mewn gwirionedd yn cymryd rhestr o rifau mewn unrhyw drefn a gwneud y rhestr yn nhrefn esgynnol. Mae'r algorithm cyntaf i ni edrych ar ei alw fath swigen. A fyddai hyn yn symlach o'r algorithmau a welsom. Fath Bubble yn dweud bod pan fydd unrhyw 2 elfen y tu mewn i'r rhestr allan o le, sy'n golygu bod nifer uwch i'r chwith o nifer is, yna rydym yn mynd i eu cyfnewid, oherwydd mae hynny'n golygu y bydd y rhestr yn "Mwy ddidoli" nag yr oedd o'r blaen. Ac rydym yn jyst yn mynd i barhau â'r broses hon eto ac eto ac eto nes yn y pen draw y math o elfennau swigen yn eu lleoliad cywir ac mae gennym restr datrys. Mae'r amser yn rhedeg o hyn yn mynd i fod yn O (n ²). Pam? Wel, oherwydd yn yr achos gwaethaf, rydym yn mynd i gymryd pob elfen, ac rydym yn mynd i roi diwedd ar i fyny gymharu â phob elfen arall yn y rhestr. Ond yn yr achos gorau, mae gennym restr datrys eisoes, swigen fath yn jyst yn mynd i fynd drwy'r unwaith, yn dweud "Na. Doeddwn i ddim yn gwneud unrhyw cyfnewidiadau, felly rwy'n ei wneud." Felly mae gennym amser gorau-achos rhedeg Ω (n). Gadewch i ni redeg fath swigen ar restr. Neu gyntaf, gadewch i ni dim ond yn edrych ar rai pseudocode yn gyflym iawn. Rydym yn awyddus i ddweud ein bod am gadw golwg ar, ym mhob fersiwn o'r ddolen, cadw golwg ar a ydym wedi newid unrhyw elfennau. Felly, y rheswm am hynny yw, yr ydym yn mynd i stopio pan nad ydym wedi cyfnewid unrhyw elfennau. Felly, ar ddechrau ein dolen nid ydym wedi cyfnewid unrhyw beth, felly byddwn yn dweud bod yn ffug. Nawr, rydym yn mynd i fynd trwy'r rhestr a chymharu elfen I i elfen i + 1 ac os yw'n wir bod yna nifer fwy i'r chwith o nifer lai, yna rydym yn jyst yn mynd i gyfnewid eu cyfer. Ac yna rydym yn mynd i gofio ein bod yn cyfnewid elfen. Mae hynny'n golygu bod angen i ni fynd drwy'r rhestr o leiaf 1 mwy o amser oherwydd bod y cyflwr yr ydym yn dod i ben yw pan fydd y rhestr gyfan yn cael ei datrys eisoes, golygu nad ydym wedi gwneud unrhyw chyfnewidiadau. Felly dyna pam mae ein cyflwr i lawr yma yw 'tra bod rhai elfennau wedi cael eu cyfnewid.' Felly nawr gadewch i ni dim ond yn edrych ar hyn yn rhedeg ar restr. I gael y rhestr 5,0,1,6,4. Fath Bubble yn mynd i ddechrau yr holl ffordd ar y chwith, ac mae'n mynd i gymharu yr elfennau i, felly 0 i i + 1, sydd yn elfen 1. Mae'n mynd i ddweud, wel 5> 0, ond ar hyn o bryd 5 yw y chwith, felly mae angen i mi gyfnewid y 5 a'r 0. Pan fyddaf yn eu cyfnewid, yn sydyn i mi gael y rhestr gwahanol. Nawr 5> 1, felly rydym yn mynd i gyfnewid eu cyfer. Nid yw 5 yn> 6, felly nid oes angen i ni wneud unrhyw beth yma. Ond 6> 4, felly mae angen i gyfnewid. Unwaith eto, mae angen i redeg drwy'r rhestr gyfan yn y pen draw ddarganfod bod y rhain yn allan o drefn, rydym yn eu cyfnewid, ac ar y pwynt hwn mae angen i redeg drwy'r rhestr o amser 1 mwy i wneud yn siŵr bod popeth sydd yn ei drefn, ac ar y math swigen pwynt wedi dod i ben. Mae algorithm gwahanol ar gyfer cymryd rhai elfennau a didoli hwy yn fath dethol. Y syniad y tu ôl math dewis yw ein bod yn mynd i adeiladu i fyny cyfran datrys y rhestr 1 elfen ar y tro. A'r ffordd yr ydym yn mynd i wneud hynny yw trwy adeiladu i fyny 'r segment chwith y rhestr. And y bôn, mae pob - ar bob cam, rydym yn mynd i gymryd yr elfen lleiaf rydym wedi gadael Nid yw hynny wedi'i setlo eto, ac rydym yn mynd i symud i mewn i'r segment datrys. Mae hynny'n golygu bod angen i barhaus ddod o hyd i'r elfen heb ei threfnu o leiaf ac yna cymryd yr elfen honno o leiaf ac yn eu cyfnewid gyda beth bynnag chwith-y rhan fwyaf o elfen nad yw'n cael ei ddatrys. Mae'r amser yn rhedeg o hyn yn mynd i fod O (n ²) oherwydd yn yr achos gwaethaf mae angen i ni gymharu pob elfen unigol i bob elfen arall. Oherwydd ein bod ni'n dweud os ydym yn dechrau yn hanner chwith y rhestr, mae angen i fynd drwy'r segment cywir gyfan i ddod o hyd i'r elfen lleiaf. Ac yna, unwaith eto, mae angen i ni fynd dros y segment cywir cyfan a gadw i fynd dros y drosodd a drosodd a throsodd. Mae hynny'n mynd i fod yn n ². Rydym yn mynd i angen ar gyfer y tu dolen arall ar gyfer dolen sy'n awgrymu n ². Yn yr achos gorau meddwl, gadewch i ni ddweud ein rhoi rhestr datrys eisoes; nid ydym mewn gwirionedd yn gwneud unrhyw well na n ². Oherwydd fath dethol Nid oes ffordd o wybod bod yr elfen lleiaf yw dim ond un yr wyf yn digwydd i fod yn edrych ar. Mae'n dal i fod angen gwneud yn siŵr bod hyn mewn gwirionedd y lleiaf. A'r unig ffordd i wneud yn siŵr ei fod yn y lleiaf, gan ddefnyddio'r algorithm, yw edrych ar bob elfen unigol eto. Felly mewn gwirionedd, os byddwch yn rhoi - os byddwch yn rhoi fath ddewis rhestr datrys eisoes, nid yw'n mynd i wneud unrhyw well na rhoi rhestr nad yw'n cael ei ddatrys eto. Gyda llaw, os yw'n digwydd i fod yn wir bod rhywbeth O (rhywbeth) ac omega o rywbeth, gallwn ddweud yn fwy cryno ei fod yn θ o rywbeth. Felly, os ydych yn gweld bod yn dod i fyny yn unrhyw le, dyna beth mae hynny'n ei olygu yn unig. Os yw rhywbeth yn theta o n ², mae'n ddau O mawr (n ²) a Ω (n ²). So achos gorau ac achos gwaethaf, nid yw'n gwneud gwahaniaeth, yr algorithm yn mynd i wneud yr un peth bob tro. So dyma beth y gallai pseudocode ar gyfer trefnu dewis edrych. Rydym yn y bôn yn mynd i ddweud fy mod yn awyddus i ailadrodd dros y rhestr o'r chwith i'r dde, ac ar bob fersiwn o'r ddolen, dw i'n mynd i symud yr elfen lleiaf yn y rhan hon datrys y rhestr. Ac ar ôl i mi symud rhywbeth yno erioed, mae angen imi edrych ar yr elfen honno eto. Oherwydd cyn gynted ag y cyfnewid elfen i mewn i'r segment chwith y rhestr, mae'n ddatrys oherwydd ein bod yn gwneud popeth yn nhrefn esgynnol drwy ddefnyddio isafsymiau. Felly fe ddwedodd yr ydym ni, iawn, rydym yn yn safle i, ac mae angen i ni edrych ar yr holl elfennau i'r dde oi er mwyn dod o hyd i'r lleiafswm. Felly mae hynny'n golygu ydym am edrych o i + 1 i ddiwedd y rhestr. Ac yn awr, os yw'r elfen ein bod ar hyn o bryd yn edrych ar yn llai na'n lleiafswm hyd yn hyn, sydd, cofiwch, rydym yn dechrau oddi ar lleiaf i ddim ond fod beth bynnag elfen rydym ar hyn o bryd; 'n annhymerus' gymryd yn ganiataol mai dyna'r lleiaf. Os byddaf yn dod o hyd i elfen sy'n llai na hynny, yna yr wyf i'n mynd i ddweud, iawn, yn dda, yr wyf wedi dod o hyd i isafswm newydd. Rydw i'n mynd i cofio lle isafswm hwnnw oedd. Felly nawr, unwaith y byddaf wedi mynd drwy'r segment heb eu didoli iawn, Allaf ddweud fy mod i'n mynd i gyfnewid yr elfen lleiaf gyda'r elfen sydd yn sefyllfa i. Mae hynny'n mynd i adeiladu i fyny fy rhestr, fy rhan datrys y rhestr o'r chwith i'r dde, ac nid ydym byth angen i chi edrych ar elfen eto unwaith y bydd yn y gyfran honno. Unwaith y byddwn wedi cyfnewid ei. Felly, gadewch i ni redeg fath ddewis ar y rhestr hon. Mae'r elfen glas yma yn mynd i fod yn i, a'r elfen coch yn mynd i fod yr elfen lleiaf. Felly, fi yn dechrau yr holl ffordd ar ochr chwith y rhestr, felly ar 5. Nawr mae angen i ni ddod o hyd i'r elfen heb ei threfnu o leiaf. Felly, rydym yn dweud 0 <5, felly 0 yw fy isafswm newydd. Ond ni allaf roi'r gorau yno, oherwydd hyd yn oed er y gall rydym yn cydnabod bod 0 yw'r lleiaf, angen arnom i redeg drwy bob elfen arall yn y rhestr i wneud yn siŵr. Felly, 1 yn fwy, 6 yn fwy, 4 yn fwy. Mae hynny'n golygu bod ar ôl edrych ar yr holl elfennau hyn, rwyf wedi penderfynu 0 yn y lleiaf. Felly, yr wyf i'n mynd i gyfnewid y 5 a'r 0. Ar ôl i mi cyfnewid hynny, yr wyf i'n mynd i gael rhestr newydd, ac yr wyf yn gwybod nad wyf byth yn angen edrych ar bod 0 eto oherwydd ar ôl i mi gyfnewid, yr wyf wedi trefnu ac rydym yn ei wneud. Nawr dim ond fel y digwydd bod yr elfen las unwaith eto yw'r 5, ac mae angen i ni edrych ar y 1, 6 a 4 i benderfynu bod 1 yw'r elfen lleiaf lleiaf, felly byddwn yn cyfnewid y 1 a'r 5. Unwaith eto, mae angen i ni edrych ar - cymharu'r 5 i 6 a 4, ac rydym yn mynd i gyfnewid y 4 a'r 5, ac yn olaf, cymharu hynny 2 rhifau a chyfnewid eu tan i ni gael ein rhestr datrys. Unrhyw gwestiynau am fath dethol? Iawn. Gadewch i ni symud i'r pwnc diwethaf yma, a dyna dychweliad. Dychweliad, cofiwch, mae hyn yn beth meta iawn lle mae swyddogaeth dro ar ôl tro yn galw ei hun. Felly, ar ryw adeg, tra bod ein fuction yn galw dro ar ôl tro ei hun, mae angen rhywfaint o bwynt lle rydym yn rhoi'r gorau i ffonio ein hunain. Oherwydd os nad ydym yn gwneud hynny, yna rydym yn jyst yn mynd i barhau i wneud hyn am byth, ac mae ein rhaglen, nid yn unig yn mynd i roi'r gorau. Rydym yn galw hyn yn gyflwr yr achos sylfaenol. Ac mae'r achos sylfaenol yn dweud, yn hytrach na galw swyddogaeth eto, Im 'jyst yn mynd i ddychwelyd rhywfaint o werth. Felly, unwaith y byddwn wedi dychwelyd gwerth, rydym wedi peidio galw ein hunain, a gall y gweddill y galwadau a wnaed gennym hyd yn hyn hefyd yn dychwelyd. Y gwrthwyneb yr achos sylfaenol yw'r achos ailadroddus. Ac mae hyn yw pan rydym eisiau gwneud galwad arall i'r swyddogaeth ein bod ar hyn o bryd mewn Ac yn ôl pob tebyg, er nad bob amser, am ddefnyddio gwahanol ddadleuon. Felly, os ydym yn cael swyddogaeth o'r enw f, ac f Dim ond galw cymryd 1 ddadl, ac rydym yn unig yn cadw galw f (1), f (1), f (1), a 'i jyst fel y digwydd bod y ddadl 1 yn disgyn i mewn i achos recursive, ni fyddwn byth yn yn dal yn mynd i roi'r gorau iddi. Hyd yn oed os oes gennym achos sylfaenol, mae angen i ni wneud yn siŵr bod y pen draw rydym yn mynd i daro yr achos sylfaenol. Nid ydym yn unig yn cadw aros yn yr achos hwn ailadroddus. Yn gyffredinol, pan fyddwn yn galw ein hunain, rydym yn fwy na thebyg yn mynd i gael dadl gwahanol bob tro. Dyma swyddogaeth syml iawn ailadroddus. Felly, bydd hyn yn gyfrifo ffactor o nifer. Up top yma rydym wedi ein achos sylfaenol. Yn yr achos fod n ≤ 1, nid ydym yn mynd i alw ffactoraidd eto. Rydym yn mynd i stopio; rydym yn jyst yn mynd i ddychwelyd rhywfaint o werth. Os nad yw hyn yn wir, yna rydym yn mynd i daro ein hachos ailadroddus. Hysbysiad yma nad ydym yn unig yn galw ffactoraidd (n), gan na fyddai hynny'n ddefnyddiol iawn. Rydym yn mynd i alw ffactoraidd o rywbeth arall. Ac fel y gallwch weld, yn y pen draw os ydym yn pasio rhywbeth ffactoraidd (5) neu, rydym yn mynd i alw ffactoraidd (4) ac yn y blaen, ac yn y pen draw rydym yn mynd i daro yr achos sylfaenol. Felly, mae hyn yn edrych yn dda. Gadewch i ni weld beth sy'n digwydd pan fyddwn mewn gwirionedd yn rhedeg y. Mae hyn yn y pentwr, a gadewch i ni ddweud mai prif mynd i alw swyddogaeth hon gyda dadl (4). Felly, unwaith y ffactor gweld a = 4, bydd ffactoraidd galw ei hun. Yn awr, yn sydyn, mae gennym ffactoraidd (3). Felly mae'r swyddogaethau yn mynd i barhau i dyfu nes yn y pen draw rydym yn taro ein achos sylfaenol. Ar y pwynt hwn, mae gwerth dychwelyd o hyn yw'r ffurflen (NX gwerth dychwelyd o hyn), gwerth dychwelyd o hyn yw NX y gwerth hwn yn ôl. Yn y pen draw mae angen i ni daro ryw nifer. Ar y brig yma, yr ydym yn dweud dychwelyd 1. Mae hynny'n golygu bod unwaith y byddwn yn dychwelyd y nifer hwnnw, gallwn pop hyn oddi ar y pentwr. Felly, mae hyn ffactoraidd (1) yn cael ei wneud. Pan gaiff 1 ffurflenni, mae hyn yn ffactor (1) yn dychwelyd, mae hyn yn dychwelyd i 1. Mae gwerth dychwelyd o hyn, cofiwch, roedd NX gwerth dychwelyd hyn. Felly yn sydyn, mae hyn yn guy yn gwybod fy mod am ddychwelyd 2. Felly cofiwch, yn dychwelyd gwerth hyn yn unig NX dychwelyd y gwerth i fyny yma. Felly nawr gallwn ddweud 3 x 2, ac yn olaf, dyma y gallwn ei ddweud mae hyn yn unig yn mynd i fod yn 4 x 3 x 2. Ac unwaith y ffurflenni, rydym yn mynd i lawr i tu mewn cyfanrif un o brif bibellau. Unrhyw gwestiynau am dychweliad? Mae pob hawl. Felly, mae mwy o amser ar gyfer cwestiynau ar y diwedd, ond bellach bydd Joseph yn cynnwys y pynciau sy'n weddill. [Joseph Ong] Mae pob hawl. Felly nawr ein bod wedi siarad am recursions, gadewch i ni siarad ychydig am yr hyn uno fath yn. Cyfuno fath yn y bôn yn ffordd arall o ddatrys rhestr o rifau. A sut mae'n gweithio yw, gyda merge fath gennych restr, a beth rydym yn ei wneud yw yr ydym yn dweud, gadewch i ni rannu'r hyn yn 2 hanner. Byddwn yn gyntaf yn mynd uno fath eto ar yr hanner chwith, yna byddwn yn rhedeg uno fath ar yr hanner dde, ac sy'n rhoi i ni yn awr 2 hanner sy'n cael eu datrys, ac yn awr rydym yn mynd i gyfuno hynny hanner gyda'i gilydd. Mae'n braidd yn anodd ei weld heb enghraifft, felly byddwn yn mynd drwy'r cynigion a gweld beth sy'n digwydd. Felly rydych yn dechrau gyda rhestr hon, rydym yn ei rannu'n 2 hanner. Rydym yn cynnal uno fath ar yr hanner cyntaf ar y chwith. Felly dyna hanner chwith, ac yn awr rydym yn eu rhedeg drwy'r rhestr hon eto sy'n cael ei basio i mewn i uno fath, ac yna rydym yn edrych, unwaith eto, ar ochr chwith y rhestr hon ac rydym yn rhedeg uno fath arno. Nawr, rydym yn mynd i lawr i restr o 2 rifau, ac yn awr y hanner chwith dim ond 1 elfen hir, ac ni allwn rhannu rhestr sy'n dim ond 1 elfen i hanner, felly rydym yn unig yn dweud, pan fydd gennym 50, sydd dim ond 1 elfen, mae'n datrys eisoes. Unwaith y byddwn ni'n ei wneud gyda hynny, gallwn weld ein bod yn gallu symud ymlaen i hanner dde y rhestr, a 3 yn cael ei ddidoli hefyd, ac felly, yn awr bod y ddau hanner y rhestr yn cael eu datrys gallwn ymuno â'r rhifau ôl at ei gilydd. Felly, rydym yn edrych ar 50 a 3; 3 yn llai na 50, felly mae'n mynd yn gyntaf ac yna 50 yn dod i mewn Nawr, sy'n cael ei wneud, rydym yn mynd yn ôl i fyny at y rhestr honno a math mae'n 1/2 iawn. 42 yn ei rhif ei hun, felly mae'n datrys eisoes. Felly, yn awr rydym yn cymharu y 2 a 3 yn llai na 42, er mwyn cael eu rhoi yn gyntaf, bellach yn 42 yn cael ei rhoi i mewn, a 50 yn cael ei rhoi i mewn Nawr, mae hynny'n datrys, rydym yn mynd yr holl ffordd yn ôl at y top, 1337 a 15. Wel, rydym yn awr yn edrych ar hanner chwith y rhestr; 1337 ei ben ei hun felly mae'n datrys a'r un gyda 15. Felly, yn awr rydym yn cyfuno y 2 rhifau i ddatrys y rhestr wreiddiol, 15 <1337, felly mae'n mynd yn gyntaf, ac yna yn mynd i mewn 1337 Ac yn awr rydym yn datrys y ddau hanner y rhestr wreiddiol i fyny top. A'r holl rhaid i ni ei wneud yw cyfuno'r rhain. Rydym yn edrych ar y 2 niferoedd y rhestr hon, 3 <15, felly mae'n mynd i mewn i'r amrywiaeth fath yn gyntaf. 15 <42, felly mae'n mynd i mewn Yn awr, 42 <1337, sy'n mynd i mewn 50 <1337, felly mae'n mynd i mewn Ac sylwi ein bod dim ond yn cymryd 2 rif oddi ar y rhestr hon. Felly nid ydym yn unig yn ail rhwng y 2 rhestrau. Rydym yn unig yn edrych ar y dechrau, ac rydym yn cymryd yr elfen sy'n llai ac yna ei roi yn ein casgliad. Nawr rydym wedi uno holl haneri ac rydym yn ei wneud. Unrhyw gwestiynau am uno fath? Ydw? [Myfyrwyr] Os yw'n rhannu i grwpiau gwahanol, pam nad ydynt ond rhannu unwaith a bod gennych 3 a 2 mewn grŵp? [Gweddill y cwestiwn annealladwy] Y rheswm - felly y cwestiwn yw, pam na allwn ni ond eu cyfuno yn y cam cyntaf ar ôl i ni eu cael? Y rheswm y gallwn wneud hyn, yn dechrau ar yr elfennau chwith y rhan fwyaf o'r ddwy ochr, ac yna cymryd yr un llai ac yn ei roi i mewn, yw ein bod yn gwybod bod y rhain yn rhestrau unigol yn gorchmynion didoli. Felly, os wyf i'n edrych ar yr elfennau chwith y rhan fwyaf o'r ddau hanner, Rwy'n gwybod eu bod yn mynd i fod yr elfennau lleiaf o'r rhestrau hynny. Felly gallaf eu rhoi yn y mannau elfen leiaf o'r rhestr mawr. Ar y llaw arall, os wyf yn edrych ar y 2 rhestrau yn yr ail lefel dros yno, 50, 3, 42, 1337 a 15, nid y rhai yn cael eu didoli. Felly, os wyf yn edrych ar 50 a 1337, yr wyf i'n mynd i roi 50 i fy rhestr gyntaf. Ond nid yw hynny'n gwneud synnwyr mewn gwirionedd, gan fod 3 yw'r elfen lleiaf allan o bob un o'r rheiny. Felly yr unig reswm y gallwn wneud y cam hwn cyfuno oherwydd bod ein rhestrau yn cael eu datrys eisoes. Pa un yw pam mae'n rhaid inni fynd i lawr yr holl ffordd i'r gwaelod oherwydd pan fydd gennym dim ond un rhif, byddwch yn gwybod bod un rhif mewn ac o ei hun eisoes yn rhestr datrys. Unrhyw gwestiynau? Na? Cymhlethdod? Wel, gallwch weld, ar bob cam mae nifer diwedd, ac rydym yn rhannu'r rhestr yn log 1/2 n amseroedd, a dyna lle rydym yn cael y log x n n cymhlethdod. A byddwch yn gweld yr achos gorau ar gyfer uno fath yn n log n, a dim ond fel y digwydd bod yr achos gwaethaf, neu'r Ω dros yno, hefyd n mewngofnodi n. Rhywbeth i gadw mewn cof. Gan symud ymlaen, gadewch i ni fynd ymlaen at rai ffeil sylfaenol super I / O. Os ydych yn edrych ar Scramble, byddwch yn sylwi bod gennym ryw fath o system lle y gallech ysgrifennu i ffeil log os ydych yn darllen drwy'r cod. Gadewch i ni weld sut y gallech chi wneud hynny. Wel, mae gennym fprintf, y gallwch chi feddwl fel dim ond printf, ond dim ond argraffu i ffeil yn lle hynny, ac felly f ar y dechrau. Mae hyn yn fath o god yma, beth mae'n ei wneud yw, fel y byddech wedi gweld yn Scramble, mae'n mynd drwy eich argraffu amrywiaeth 2-dimensiwn olynol gan rhes beth fydd y ffigurau. Yn yr achos hwn, printf yn argraffu ar eich terfynell neu hyn a alwn yn yr allbwn safonol adran. Ac yn awr, yn yr achos hwn, y cyfan mae'n rhaid i ni ei wneud yw disodli printf gyda fprintf, dweud wrthynt beth y ffeil rydych eisiau argraffu i, ac yn yr achos hwn dim ond prints allan i'r ffeil yn hytrach na ei brintio ar eich terfynell. Wel, yna mae hynny'n codi'r cwestiwn: Ble rydym yn cael y math hwn o ffeil o, dde? Rydym yn pasio logio i mewn i hyn fuction fprintf, ond doedd gennym ni ddim syniad o ble y daeth. Wel, yn gynnar yn y cod, yr hyn a oedd gennym oedd y darn o cod dros yma, yn y bôn yn dweud bod agor y ffeil yn galw log.txt. Beth rydym yn ei wneud ar ôl hynny yw mae'n rhaid i ni wneud yn siŵr bod y ffeil yn cael ei hagor mewn gwirionedd yn llwyddiannus. Felly gallai fod yn methu am resymau lluosog; nad oes gennych ddigon o le ar eich cyfrifiadur, er enghraifft. Felly mae'n bob amser yn bwysig cyn i chi wneud unrhyw weithrediadau gyda'r ffeil ein bod yn gwirio a yw'r ffeil yn agor yn llwyddiannus. Felly beth y bydd, mae hynny'n ddadl i fopen, wel, gallwn agor ffeil mewn sawl ffordd. Yr hyn y gallwn ei wneud yw, gallwn ei throsglwyddo w, sy'n golygu diystyru'r ffeil os yw'n allanfeydd eisoes, Gallwn pasio a, y maent yn atodi at ddiwedd y ffeil yn hytrach na gor-redol hynny, neu gallwn nodi r, sy'n golygu, gadewch i ni agor y ffeil fel darllen yn unig. Felly, os yw'r rhaglen yn ceisio gwneud unrhyw newidiadau i'r ffeil, gweiddi arnyn nhw a pheidiwch â gadael iddyn nhw wneud hynny. Yn olaf, unwaith y byddwn ni'n ei wneud gyda'r ffeil, da gwneud gwaith arno, mae angen i ni sicrhau ein bod yn cau'r ffeil. Ac felly ar ddiwedd eich rhaglen, rydych yn mynd i basio eu unwaith eto ffeil hon a agorodd i chi, a dim ond ei gau. Felly, mae hyn yn rhywbeth pwysig bod yn rhaid i chi wneud yn siŵr eich bod yn ei wneud. Felly cofiwch gallwch agor ffeiliau, ac yna gallwch ysgrifennu at y ffeil, wneud gweithrediadau yn y ffeil, ond yna mae'n rhaid i chi gau'r ffeil ar y diwedd. Unrhyw gwestiynau ar ffeil sylfaenol I / O? Ydw? [Gwestiwn Myfyrwyr, annealladwy] Hawl yma. Y cwestiwn yw, lle mae hyn yn ffeil log.txt ymddangos? Wel, os ydych yn unig roi log.txt, mae'n creu yn yr un cyfeiriadur gwaith gweithredadwy. Felly, os you're - >> [gwestiwn Myfyrwyr, annealladwy] Ydw. Yn yr un folder, neu yn yr un cyfeiriadur, fel y'i galwch hi. Nawr cof, stac, ac domen. Felly, sut mae cof a nodir yn y cyfrifiadur? Wel, gallwch ddychmygu cof fel math y bloc hwn yma. Ac er cof mae gennym yr hyn a elwir y domen yn sownd dros yno, ac i'r stac sy'n lawr yno. Ac mae'r domen yn tyfu i lawr ac i'r stac yn tyfu i fyny. Felly, fel Tommy a grybwyllir - oh, yn dda, ac mae gennym y 4 segmentau eraill y byddaf yn mynd i mewn eiliad - Fel Tommy dywedais yn gynharach, eich bod yn gwybod sut mae ei swyddogaethau eu galw eu hunain ac yn galw ei gilydd? Maent yn adeiladu y math hwn o ffrâm pentwr. Wel, os galwadau prif foo, foo yn cael ei roi ar y corn. Foo yn galw bar, bar yn cael ei roi ar y corn, ac sy'n cael ei roi ar y pentwr ar ôl. Ac wrth iddynt ddychwelyd, mae pob un yn cael eu cymryd oddi ar y pentwr. Beth mhob un o'r lleoliadau hyn a chof dal? Wel, y brig, sef y segment testun, yn cynnwys y rhaglen ei hun. Felly y cod peiriant, mae hynny'n yno, ar ôl i chi lunio eich rhaglen. Nesaf, unrhyw ymgychwyn newidynnau byd-eang. Felly, rydych wedi newidynnau byd-eang yn eich rhaglen, ac yn dweud fel, a 5 =, sy'n cael eu rhoi yn y segment, ac i'r dde o dan y, oes gennych unrhyw ddata uninitialized byd-eang, sydd ychydig yn int, ond nid ydych yn dweud ei fod yn hafal i unrhyw beth. Sylweddoli y rhain yn newidynnau byd-eang, felly maen nhw'n tu allan i brif. Felly, mae hyn yn golygu unrhyw newidynnau byd-eang sy'n cael eu datgan, ond nid ydynt yn ymgychwyn. Felly, beth sydd yn y domen? Cof neilltuwyd ar sail malloc, y byddwn yn dod i mewn ychydig bach. Ac yn olaf, gyda stac oes gennych unrhyw newidynnau lleol ac unrhyw swyddogaethau y gallech ei alw yn unrhyw un o'u baramedrau. Y peth olaf, nad ydych yn wir rhaid i chi wybod beth yw'r newidynnau amgylchedd yn ei wneud, ond pryd bynnag y byddwch yn rhedeg rhaglen, mae yna rywbeth cysylltiedig, fel dyma'r enw defnyddiwr y person a oedd yn rhedeg y rhaglen. Ac mae hynny'n mynd i fod yn fath o ar y gwaelod. O ran cyfeiriadau cof, sef gwerthoedd hecsadegol, gwerthoedd ar y dechrau gorau ar 0, ac maent yn mynd yr holl ffordd i lawr i'r gwaelod. Yn yr achos hwn, os ydych chi ar y system 32-bit, y cyfeiriad ar y gwaelod yn mynd i fod yn 0x, wedi'i ddilyn gan af, oherwydd dyna 32 catiau, sydd 8 bytes, ac yn yr achos hwn 8 bytes cyfateb i 8 digid hecsadegol. Felly, i lawr yma rydych chi'n mynd i gael, fel, 0xffffff, ac i fyny yno rydych chi'n mynd i gael 0. Felly beth yw'r arwyddion? Efallai na fydd rhai ohonoch wedi ymdrin â hyn yn adran o'r blaen. ond rydym yn mynd drosto mewn darlith, felly mae pwyntydd yn unig yw data fath a sy'n storio, yn hytrach na rhyw fath o werth fel 50, mae'n storio'r cyfeiriad rhywfaint o leoliad yn y cof. Fel bod y cof [annealladwy]. Felly, yn yr achos hwn, yr hyn rydym wedi'i yw, mae gennym pwyntydd i'r cyfanrif neu * int, ac mae'n cynnwys cyfeiriad hwn hecsadegol o 0xdeadbeef. Felly, yr hyn sydd gennym yw, erbyn hyn, mae hyn yn bwynt pwyntydd ar ryw leoliad mewn cof, a bod yn unig, mae'r gwerth 50 yn y lleoliad hwn cof. Ar rai systemau 32-bit, ar yr holl systemau 32-bit, awgrymiadau cymryd ddarnau 32 neu 4 bytes. Ond, er enghraifft, ar system 64-bit, awgrymiadau yna 64 o ddarnau. Felly dyna rhywbeth youll 'angen at cadw mewn cof. Felly, ar system ben-bit, pwyntydd yn darnau pen hir. Pointers yn fath o galed i dreulio heb bethau ychwanegol, felly gadewch i ni fynd trwy enghraifft o dyrannu cof deinamig. Pa dyrannu cof deinamig yn gwneud i chi, neu beth rydym yn galw malloc, mae'n gadael i chi dyrannu rhyw fath o ddata y tu allan i'r set. Felly y data hwn yn fath o fwy parhaol ar gyfer y cyfnod y rhaglen. Oherwydd fel y gwyddoch, os ydych yn datgan x tu mewn swyddogaeth, a bod yn dychwelyd swyddogaeth, nad ydych bellach yn cael mynediad at y data a gafodd ei storio yn x. Pa awgrymiadau gadewch i ni ei wneud yw yn gadael i ni storio gwerthoedd cof neu siop mewn segment gwahanol o gof, sef y domen. Nawr ar ôl i ni y dychwel allan o swyddogaeth, cyn belled fod gennym pwyntydd i'r lleoliad hwnnw mewn cof, yna yr hyn y gallwn ei wneud yw y gallwn edrych ar y gwerthoedd yno. Gadewch i ni edrych ar enghraifft: Dyma ein cynllun cof eto. Ac mae gennym swyddogaeth hon, y prif. Beth mae'n ei wneud yw - iawn, mor syml, dde -? Int x = 5, bod yn unig newidyn ar y pentwr yn y prif. Ar y llaw arall, yn awr rydym yn datgan pwyntydd sy'n galw y giveMeThreeInts swyddogaeth. Ac felly yn awr rydym yn mynd i mewn i swyddogaeth hon ac rydym yn creu ffrâm pentwr newydd ar ei chyfer. Fodd bynnag, yn y ffrâm pentwr, rydym yn datgan int * dros dro, sydd yn mallocs 3 gyfanrifau i ni. Felly, bydd faint o int yn rhoi i ni faint o bytes y int yw, a malloc yn rhoi i ni fod bytes llawer o le ar y domen. Felly, yn yr achos hwn, rydym wedi creu digon o le ar gyfer 3 cyfanrifau, ac mae'r domen yn ffordd i fyny yno, a dyna pam yr wyf wedi tynnu ei uwch i fyny. Unwaith y byddwn ni'n ei wneud, rydym yn dod yn ôl i fyny yma, dim ond angen 3 ints dychwelyd, ac yn dychwelyd y cyfeiriad, yn yr achos hwn ynghylch i ble y cof. Ac rydym yn gosod pwyntydd = newid, ac i fyny yno rydym wedi dim ond un arall pwyntydd. Ond beth mae hynny'n ei dychwelyd swyddogaeth yn cael ei bentyrru yma ac yn diflannu. Felly dros dro yn diflannu, ond rydym yn parhau i gynnal cyfeiriad y lle y 3 gyfanrifau y tu mewn prif gyflenwad. Felly, yn y set, yr awgrymiadau yn cwmpasu lleol ar gyfer y ffrâm pentwr, ond mae'r cof y maent yn cyfeirio yn y domen. Ydy hynny'n gwneud synnwyr? [Myfyrwyr] Allech chi ailadrodd hynny? >> [Joseph] Ydw. Felly, os wyf yn mynd yn ôl dim ond ychydig bach, byddwch yn gweld bod dros dro a ddyrannwyd peth cof ar y domen i fyny yno. Felly, pan fydd y swyddogaeth hon, giveMeThreeInts ffurflenni, y stac yma yn mynd i ddiflannu. Ac gydag ef unrhyw un o'r newidynnau, yn yr achos hwn, mae'r pwyntydd a ddyrannwyd yn y ffrâm pentwr. Mae hynny yn mynd i ddiflannu, ond ers i ni ddychwelyd dro ac rydym yn gosod pwyntydd = dros dro, pwyntydd sy'n awr yn mynd i ddangos y cof un lleoliad fel dros dro oedd. Felly nawr, er ein bod yn colli dros dro, y pwyntydd lleol, rydym yn dal i gadw y cyfeiriad cof yr hyn yr oedd pwyntio i'r tu mewn y pwyntydd amrywiol. Cwestiynau? Gall hynny fod yn fath o bwnc ddryslyd os nad ydych wedi mynd dros yn adran. Gallwn, eich TF fydd yn bendant yn mynd drosto ac wrth gwrs, allwn ni ateb cwestiynau ar ddiwedd y sesiwn adolygu ar gyfer hyn. Ond mae hyn yn fath o bwnc cymhleth, ac mae gen i mwy o enghreifftiau sydd yn mynd i ddangos i fyny a fydd yn helpu i egluro beth awgrymiadau mewn gwirionedd. Yn yr achos hwn, awgrymiadau yn cyfateb i arrays, fel y gallaf jyst arfer hon pwyntydd fel yr un peth â arae int. Felly rwy'n mynegeio i mewn i 0, a newid y cyfanrif cyntaf i 1, newid y cyfanrif ail 2, a'r cyfanrif 3 i 3. Felly mwy o wybodaeth am awgrymiadau. Wel, yn cofio Binky. Yn yr achos hwn rydym wedi dyrannu pwyntydd, neu rydym yn datgan pwyntydd, ond i ddechrau, pan Fi jyst datgan pwyntydd, nid yw'n pwyntio i unrhyw le yn y cof. Mae'n gwerthoedd garbage yn unig y tu mewn iddo. Felly, nid oes gennyf unrhyw syniad lle mae'r pwyntydd yn pwyntio i. Mae ganddo gyfeiriad sydd wedi'i llenwi yn unig gyda 0 a 1 yn lle cafodd ei ddatgan i ddechrau. Ni allaf wneud unrhyw beth gyda hyn nes i mi alw malloc arno ac yna mae'n rhoi i mi ychydig o le ar y domen lle y gallaf roi gwerthoedd y tu mewn. Yna, unwaith eto, nid wyf yn gwybod beth sydd y tu mewn y cof. Felly, y peth cyntaf yn rhaid i mi ei wneud yw gwirio p'un a yw'r system wedi cael digon o gof i roi i mi yn ôl 1 cyfanrif yn y lle cyntaf, a dyna pam fy mod yn gwneud hyn yn gwirio. Os pwyntydd yn null, mae hynny'n golygu nad oedd digon o le neu rhyw wall arall digwydd, felly ddylwn i adael allan o fy rhaglen.  Ond os oedd llwyddo, yn awr y gallaf ddefnyddio'r pwyntydd a pha pwyntydd * yn ei wneud yn mae'n dilyn lle mae'r cyfeiriad yn i ble bod y gwerth hwnnw'n, ac mae'n gosod fod yn gyfartal i 1. Felly dros yma, rydym yn gwirio os yw'r cof yn bodoli. Unwaith y byddwch yn gwybod ei fod yn bodoli, gallwch roi i mewn iddo pa gwerth yr ydych am ei roi i mewn iddo yn yr achos hwn 1. Unwaith y byddwn ni'n ei wneud ag ef, mae angen i chi ryddhau y pwyntydd oherwydd mae angen i ni fynd yn ôl i'r system y cof eich bod yn gofyn amdanynt yn y lle cyntaf. Oherwydd nad yw'r cyfrifiadur yn gwybod pan fyddwn ni'n ei wneud ag ef. Yn yr achos hwn rydym yn benodol yn dweud wrtho, iawn, rydym yn ei wneud gyda'r cof. Os yw rhai broses arall ei angen, mae rhai rhaglen arall ei angen, mae croeso i fynd yn ei flaen a mynd ag ef. Yr hyn y gallwn hefyd ei wneud yw unig a fedrwn gael y cyfeiriad o newidynnau lleol ar y set. X Felly int y tu mewn y ffrâm pentwr o brif bibellau. A phan fyddwn yn defnyddio'r ampersand, hyn a gweithredwr, beth mae'n ei wneud yw mae'n cymryd x, ac x yn unig yw peth data mewn cof, ond mae ganddo gyfeiriad. Mae lleoli yn rhywle. Felly, drwy ffonio & x, beth yw hyn yn ei rhoi i ni y cyfeiriad x. Drwy wneud hyn, ein bod yn gwneud pwynt pwyntydd i'r lle x yw yn y cof. Nawr rydym yn unig yn rhywbeth fel * x, rydym yn mynd i gael 5 yn ôl. Mae'r seren a elwir dereferencing hynny. Eich bod yn dilyn cyfeiriad a byddwch yn cael y gwerth ei storio yno. Unrhyw gwestiynau? Ydw? [Myfyrwyr] Os nad ydych yn gwneud y peth 3-sylw at y ffaith, a yw'n dal i lunio? Ydw. Os nad ydych yn gwneud y peth 3-pwyntydd, mae'n dal i fynd i lunio, ond byddaf yn dangos i chi beth sy'n digwydd mewn eiliad, a heb wneud hynny, dyna beth yr ydym yn galw yn gollwng cof. Nid ydych chi'n rhoi'r system cefnogi ei gof, felly ar ôl tra bod y rhaglen yn mynd i gronni cof nad ydynt wedi defnyddio, a gall dim byd arall ei ddefnyddio. Os ydych chi wedi gweld erioed Firefox gyda 1.5 miliwn cilobeit ar eich cyfrifiadur, yn y rheolwr dasg, dyna beth sy'n mynd ymlaen. Mae gennych gollwng cof yn y rhaglen pan nad ydyn nhw'n trin. Felly sut mae pwyntydd gweithio rhifyddol? Wel, rhifyddeg pwyntydd yn fath o mynegeio tebyg mewn arae. Yn yr achos hwn, mae gen i pwyntydd, a beth ddylwn i ei wneud yw fy mod yn gwneud pwynt pwyntydd i'r elfen gyntaf o'r amrywiaeth o 3 gyfanrifau yr wyf wedi dyrannu. Felly, yn awr yr hyn yr wyf yn ei wneud, seren pwyntydd yn newid dim ond yr elfen gyntaf yn y rhestr. Star pwyntydd 1 pwynt dros yma. Felly pwyntydd dros yma, pwyntydd 1 yn fwy na yma, pwyntydd 2 wedi dod i ben yma. Felly, dim ond ychwanegu 1 yw'r un peth â symud ar hyd y casgliad. Beth rydym yn ei wneud yw, pan fyddwn yn gwneud pwyntydd 1 byddwch yn cael y cyfeiriad dros yma, ac er mwyn cael y gwerth yma, chi roi seren i mewn o'r mynegiant gyfan i dereference hynny. Felly, yn yr achos hwn, rwy'n gosod y lleoliad cyntaf yn y arae i 1, ail leoliad i 2, a lleoliad trydydd 3. Yna beth rwy'n ei wneud dros yma yw fy mod i'n argraffu ein pwyntydd +1, a dim ond yn rhoi i mi 2. Nawr rwy'n incrementing pwyntydd, felly pwyntydd hafal pwyntydd +1, sy'n symud yn ei flaen. Ac felly yn awr, os wyf argraffu pwyntydd +1, pwyntydd 1 yn awr yn 3, sydd yn yr achos hwn yn argraffu 3. Ac er mwyn rywbeth rhad ac am ddim, mae'r pwyntydd fy mod yn rhoi Rhaid fod yn pwyntio ar ddechrau'r y rhesi yr wyf yn got yn ôl o malloc. Felly, yn yr achos hwn, pe bawn i alw 3 dde yma, ni fyddai hyn yn iawn, oherwydd ei fod yn nghanol y rhesi. Rhaid i mi dynnu i gyrraedd y lleoliad gwreiddiol y fan a'r lle cyntaf cychwynnol cyn y gallaf ei rhyddhau. Felly, dyma enghraifft mwy o ran. Yn yr achos hwn, rydym yn dyrannu 7 cymeriadau mewn amrywiaeth cymeriad. Ac yn yr achos hwn yr hyn rydym yn ei wneud yw ein bod yn dolennu dros y 6 cyntaf ohonynt, ac rydym yn eu gosod i Z. Felly, ar gyfer int i = 0, i> 6, i + +, Felly, pwyntydd + fi fydd yn unig yn rhoi i ni, yn yr achos hwn, pwyntydd, pwyntydd +1, pwyntydd +2, pwyntydd +3, ac yn y blaen ac yn y blaen yn y ddolen. Beth mae'n mynd i wneud yw ei fod yn cael y cyfeiriad hwnnw, dereferences i gael y gwerth, a newidiadau sy'n werth i Z. Yna ar y diwedd yn cofio hyn yn llinyn, dde? Mae pob llinynnau wedi dod i ben â chymeriad null terfynu. Felly, beth rwy'n ei wneud yn pwyntydd 6 I rhoi'r cymeriad terminator null mewn Ac yn awr beth rwy'n ei wneud yn y bôn dros yma yn gweithredu printf ar gyfer llinyn, dde? Felly, pryd mae printf awr pan mae'n cyrraedd diwedd y llinyn? Pan fydd yn taro cymeriad null terfynu. Felly, yn yr achos hwn, fy mhwyntiau pwyntydd gwreiddiol i ddechrau'r casgliad. I argraffu y nod cyntaf allan. I symud dros un. I argraffu y cymeriad allan. I symud drosodd. Ac yr wyf yn parhau i wneud hyn nes i mi gyrraedd y diwedd. Ac yn awr y diwedd pwyntydd * yn dereference hyn ac yn cael y cymeriad null terfynu yn ôl. Ac felly mae fy dolen tra bod yn rhedeg dim ond pan na bod y gwerth hwnnw'n cymeriad null terfynu. Felly, yn awr yr wyf adael allan o'r ddolen. Ac felly os wyf yn tynnu 6 o hwn pwyntydd, I fynd yn ôl yr holl ffordd i'r dechrau. Cofiwch, yr wyf i'n gwneud hyn oherwydd rhaid i mi fynd i'r dechrau er mwyn rhyddhau ei. Felly, yr wyf yn gwybod a oedd yn llawer. A oes unrhyw gwestiynau? Os gwelwch yn dda, ie? [Myfyrwyr annealladwy cwestiwn] Allwch chi ddweud bod uwch? Mae'n ddrwg gennym. [Myfyrwyr] Ar y sleid olaf dde cyn i chi ryddhau y pwyntydd, ble cawsoch chi mewn gwirionedd yn newid gwerth y pwyntydd? [Joseph] Felly, ar y dde yma. >> [Myfyrwyr] O, iawn. [Joseph] Felly, mae gen i pwyntydd minws minws, ar y dde, sy'n symud y peth yn ôl un, ac yna yr wyf rhyddhau ei, gan fod hyn yn pwyntydd rhaid tynnu sylw at y dechrau y rhesi. [Myfyrwyr] Ond ni fyddai ei angen wedi i chi roi'r gorau ar ôl y llinell. [Joseph] Felly, os wyf wedi dod i ben ar ôl hyn, byddai hyn yn cael ei ystyried yn gollwng cof, oherwydd doeddwn i ddim yn rhedeg rhad ac am ddim. [Myfyrwyr] I [annealladwy] ar ôl y tair llinell gyntaf lle cawsoch pwyntydd 1 [annealladwy]. [Joseph] Uh-huh. Felly, beth y cwestiwn yna? Mae'n ddrwg gennym. Na, na. Ewch, ewch, os gwelwch yn dda. [Myfyrwyr] Felly, nid ydych yn newid y gwerth awgrymiadau. Fyddech chi ddim wedi gorfod gwneud pwyntydd minws minws. [Joseph] Ie, yn union. Felly, pan fyddaf yn gwneud pwyntydd +1 a pwyntydd +2, Dydw i ddim yn gwneud pwyntydd yn hafal pwyntydd +1. Felly, mae'r pwyntydd yn unig yn aros pwyntio ar ddechrau'r y rhesi. Dim ond pan fyddaf yn gwneud a mwy a mwy bod yn gosod y gwerth yn ôl y tu mewn i'r pwyntydd, ei fod mewn gwirionedd yn symud hyn ymlaen. Mae pob hawl. Mwy o gwestiynau? Unwaith eto, os yw hyn yn fath o llethol, bydd hyn yn cael eu cynnwys yn y sesiwn. Gofynnwch i'ch cyd-ddysgu am y peth, a gallwn ateb cwestiynau ar y diwedd. Ac fel arfer nid ydym yn hoffi ei wneud y peth minws. Mae hyn wedi ei gwneud yn ofynnol i mi gadw golwg ar faint rwyf wedi gwrthbwyso yn y rhesi. Felly, yn gyffredinol, mae hyn yn unig i esbonio sut mae pwyntydd rhifyddeg. Ond yr hyn rydym fel arfer yn hoffi ei wneud yw ein bod yn awyddus i greu copi o'r pwyntydd, ac yna byddwn yn defnyddio'r copi pan fyddwn yn symud o gwmpas yn y llinyn. Felly, yn y achos y byddwch yn defnyddio'r copi i argraffu y llinyn cyfan, ond nid oes raid i ni ei wneud fel pwyntydd minws 6 neu gadw llygad ar faint yr ydym yn symud yn hyn, dim ond oherwydd ein bod yn gwybod bod ein pwynt gwreiddiol yn cael ei sylw at y ffaith o hyd i ddechrau'r rhestr ac yr ydym yn newid oedd y copi hwn. Felly, yn gyffredinol, yn newid copïau o'ch pwyntydd gwreiddiol. Peidiwch â cheisio datrys o fel - peidiwch newid copïau gwreiddiol. Mae ceisio newid dim ond copďau o'ch gwreiddiol. Felly, byddwch yn sylwi pan fyddwn yn pasio y llinyn i mewn i printf Nid oes rhaid i chi roi seren o'i flaen fel y gwnaethom gyda'r holl dereferences eraill, dde? Felly, os ydych yn argraffu'r s llinyn% gyfan yn disgwyl yn gyfeiriad, ac yn yr achos hwn pwyntydd neu yn yr achos hwn fel amrywiaeth o gymeriadau. Cymeriadau, cols * s, a rhesi yn yr un peth. Pointer yw cymeriadau, a arrays cymeriad yn yr un peth. Ac felly, y cyfan mae'n rhaid i ni ei wneud yw pasio yn y pwyntydd. Nid oes rhaid i ni basio yn yr un pwyntydd * neu unrhyw beth fel 'na. Felly, araeau ac awgrymiadau yn yr un peth. Pan fyddwch chi'n gwneud rhywbeth fel x [y] dros yma am array, yr hyn y mae'n ei wneud o dan y cwfl yn ei fod yn dweud, iawn, mae'n amrywiaeth cymeriad, felly mae'n pwyntydd. Ac felly x yr un peth, ac felly yr hyn y mae'n ei wneud yw ei fod yn ychwanegu y x i, sef yr un peth â symud ymlaen mewn cof bod llawer. Ac yn awr x + y rhoi rhyw fath o gyfeiriad, ac rydym yn dereference y cyfeiriad neu dilynwch y saeth i ble y lleoliad hwnnw yn y cof yw, ac rydym yn cael y gwerth allan o'r lleoliad yn y cof. Felly, felly mae'r ddau yn union yr un peth. Mae'n dim ond siwgr cystrawennol. Maent yn gwneud yr un peth. Maent yn unig syntactics gwahanol ar gyfer pob eraill. Felly, beth all fynd o'i le gyda awgrymiadau? Fel, lawer. Iawn. Felly, pethau drwg. Nid yw rhai pethau drwg y gallwch ei wneud yn gwirio os yw eich galwad malloc dychwelyd null, dde? Yn yr achos hwn, rwy'n gofyn i'r system i roi i mi - beth yw y rhif hwnnw? Fel 2 biliwn o weithiau 4, oherwydd maint y cyfanrif yw 4 bytes. Rwy'n gofyn iddo am debyg 8000000000 bytes. Wrth gwrs, nid fy nghyfrifiadur yn mynd i fod yn gallu ei roi imi y cefn lawer o gof. Ac nid oeddem yn gwirio os yw hyn yn null, felly pan fyddwn yn ceisio dereference yn y fan honno - ddilyn y saeth i ble mae'n mynd i - nid oes gennym y cof. Dyma'r hyn yr ydym yn galw dereferencing pwyntydd nwl. Ac mae hyn yn ei hanfod yn gwneud i chi segfault. Mae hwn yn un o'r ffyrdd y gallwch segfault. Pethau drwg eraill y gallwch chi ei wneud - oh yn dda. Yr oedd hynny'n dereferencing pwyntydd nwl. Iawn. Pethau drwg eraill - yn dda, at atgyweiria ond eich bod yn rhoi siec i mewn 'na sy'n gwirio p'un a yw'r pwyntydd yn null ac yn gadael allan o'r rhaglen pe bai'n digwydd bod malloc yn dychwelyd pwyntydd nwl. Dyna y comic xkcd. Mae pobl yn deall yn awr. Trefnu o. Felly, cof. Ac yr wyf yn mynd dros hyn. Rydym yn galw malloc mewn cylch, ond bob tro rydym yn galw malloc rydym yn colli golwg ar ble y pwyntydd yn pwyntio at, oherwydd ein bod yn clobbering ei. Felly, yr alwad gychwynnol i malloc yn rhoi i mi cof dros yma. Fy awgrymiadau pwyntydd i hyn. Nawr, nid wyf yn rhyddhau, felly yn awr yr wyf yn galw malloc eto. Nawr mae'n cyfeirio dros yma. Nawr fy nghof yn pwyntio dros yma. Pwyntio dros yma. Pwyntio dros yma. Ond rydw i wedi colli golwg ar y chyfeiriadau pob un o'r cof dros yma fy mod yn dyrannu. Ac felly yn awr nid oes gennyf unrhyw gyfeiriad atynt anymore. Felly, ni allaf rhyddhau nhw y tu allan i'r ddolen. Ac felly er mwyn trwsio rhywbeth fel hyn, os byddwch yn anghofio i gof am ddim a byddwch yn cael y datgeliad hwn cof, Mae'n rhaid i chi ryddhau cof mewnol y ddolen unwaith y byddwch yn ei wneud ag ef. Wel, dyma beth sy'n digwydd. Yr wyf yn gwybod llawer ohonoch casineb hyn. Ond yn awr - yay! Byddwch yn cael fel 44,000 cilobeit. Felly, rydych rhyddhau ar ddiwedd y ddolen, ac mae hynny'n mynd i jyst ddim y cof bob tro. Yn y bôn, nid yw eich rhaglen yn cael yn gollwng cof anymore. Ac yn awr rhywbeth arall y gallwch chi ei wneud yw rhyddhau peth cof eich bod wedi gofyn am ddwywaith. Yn yr achos hwn, rydych yn rhywbeth malloc, byddwch yn newid ei werth. Byddwch yn rhyddhau unwaith oherwydd dywedasoch eich bod yn ei wneud ag ef. Ond yna rydym yn rhyddhau eto. Mae hyn yn rhywbeth sy'n eithaf gwael. Dyw hi ddim yn mynd i ddechrau segfault, ond ar ôl tra bod yr hyn yw hyn yn cael ei rhyddhau ddwbl hyn yn llygru eich strwythur domen, a byddwch yn dysgu ychydig mwy am hyn os ydych yn dewis i gymryd dosbarth fel CS61. Ond yn y bôn ar ôl tra bydd eich cyfrifiadur yn mynd i fynd yn ddryslyd am yr hyn y lleoliadau cof yn lle a lle mae'n cael ei storio - lle mae data yn cael ei storio yn y cof. Ac felly rhyddhau pwyntydd ddwywaith yn beth drwg nad ydych am ei wneud. Nid yw pethau eraill a all fynd o'i le yn defnyddio sizeof. Felly, yn yr achos hwn byddwch malloc 8 bytes, a dyna yr un peth â dau rif cyfan, dde? Felly, mae hynny'n gwbl ddiogel, ond a yw'n? Wel, fel Lucas trafod ar wahanol saernïaeth, gyfanrifau o wahanol hyd. Felly, ar yr offer yr ydych yn ei ddefnyddio, cyfanrifau tua 4 bytes, ond ar rai system arall y gallent fod yn 8 bytes neu efallai y byddant yn 16 bytes. Felly, os mai dim ond defnyddio'r rhif hwn dros yma, Efallai y rhaglen hon yn gweithio ar y peiriant, ond nid yw'n mynd i ddyrannu digon o gof ar rai system arall. Yn yr achos hwn, dyma'r hyn y mae'r gweithredwr sizeof ei ddefnyddio ar gyfer. Pan fyddwn yn galw sizeof (canolradd), beth mae hyn yn ei wneud yn  mae'n rhoi i ni faint o cyfanrif ar y system bod y rhaglen yn rhedeg. Felly, yn yr achos hwn, bydd sizeof (int) yn dychwelyd 4 ar rywbeth fel y peiriant, ac yn awr 4 y ewyllys * 2, sydd 8, sydd yn unig yw faint o le sy'n angenrheidiol ar gyfer dau rif cyfan. Ar system wahanol, os int yn debyg 16 bytes neu 8 bytes, 'i' jyst yn mynd i ddychwelyd bytes digon i storio y swm hwnnw. Ac yn olaf, structs. Felly, os ydych chi eisiau i storio bwrdd sudoku mewn cof, sut ydym yn gwneud hyn? Efallai y byddwch yn meddwl fel newidyn ar gyfer y peth cyntaf, newidyn ar gyfer yr ail beth, newidyn ar gyfer y trydydd peth, newidyn am y peth bedwaredd - drwg, cywir? Felly, un gwelliant y gallwch ei wneud ar ben hyn yw gwneud o 9 x 9 amrywiaeth. Mae hynny'n iawn, ond beth os ydych eisiau i gysylltu pethau eraill gyda bwrdd sudoku hoffi'r hyn yr anhawster y bwrdd yw, neu, er enghraifft, beth yw eich sgôr, neu faint o amser mae wedi cymryd chi i ddatrys y bwrdd? Wel, beth allwch chi ei wneud yw y gallwch chi greu strwythur. Beth allaf i ddim yn y bôn ddweud yw Rwy'n diffinio strwythur hwn dros yma, ac rwy'n diffinio bwrdd sudoku sy'n cynnwys bwrdd sydd yn 9 x 9. A beth mae wedi ganddo awgrymiadau ar gyfer enw y lefel. Mae hefyd yn x ac y, sef y cyfesurynnau lle fy mod yn iawn yn awr. Mae hefyd wedi treulio amser [annealladwy], ac mae cyfanswm nifer y symudiadau rwyf wedi mewnbynnu hyd yn hyn. Ac felly yn yr achos hwn, gallaf grwpio criw cyfan o ddata i mewn dim ond un strwythur yn hytrach na chael ei hoffi hedfan o gwmpas mewn fel newidynnau gwahanol na allaf gadw golwg. Ac mae hyn yn gadael inni gael dim ond cystrawen neis ar gyfer math o bethau gwahanol cyfeirio mewnol y strwythur. Yn unig y gallaf ei wneud board.board, ac yr wyf yn cael y bwrdd Sudoku yn ôl. Board.level, i mi gael pa mor anodd ydyw. Board.x a board.y yn rhoi i mi y cyfesurynnau lle y gallai i yn y bwrdd. Ac felly rwy'n cael mynediad hyn a alwn yn feysydd yn y strwythur. Mae hwn yn diffinio sudokuBoard, sy'n fath sydd gennyf. Ac yn awr ein bod ni yma. Mae gen i amrywiol o'r enw "bwrdd" o sudokuBoard fath. Ac felly nawr gallaf gael mynediad i'r holl feysydd sy'n gwneud i fyny strwythur hwn dros yma. Unrhyw gwestiynau am structs? Ydw? [Myfyrwyr] I int x, y, i chi ddatgan ddau ar un llinell? >> [Joseph] Uh-huh. [Myfyrwyr] Felly, allech chi jyst yn gwneud hynny â phob un ohonynt? Fel yn x, amseroedd coma y cyfanswm hwnnw? [Joseph] Ie, fe allech chi yn bendant yn gwneud hynny, ond y rheswm yr wyf yn rhoi x ac y ar yr un llinell - a'r cwestiwn yw y gall pam ein bod dim ond gwneud hyn ar yr un llinell? Pam nad ydym yn unig yn rhoi pob un o'r rhain ar yr un llinell yn x ac y yn perthyn i'w gilydd, ac mae hyn yn unig yw arddull yn fwy cywir, ar un ystyr, oherwydd ei fod yn grwpio dau beth ar yr un llinell y math tebyg o ymwneud â'r un peth. Ac yr wyf yn jyst rhannu'r rhain ar wahân. Mae'n dim ond beth arddull. Mae'n weithredol yn gwneud unrhyw wahaniaeth o gwbl. Unrhyw gwestiynau eraill ar structs? Gallwch ddiffinio Pokédex gyda strwythur. Mae Pokémon nifer ac mae ganddo lythyr, yn berchennog, math. Ac yna os oes gennych amrywiaeth o Pokémon, gallwch wneud i fyny Pokédex, dde? Iawn, oer. Felly, cwestiynau ar structs. Mae'r rhain yn ymwneud â structs. Yn olaf, GDB. Beth mae GDB gadael i chi ei wneud? Mae'n gadael i chi dadfygio eich rhaglen. Ac os nad ydych wedi defnyddio GDB, byddwn yn argymell gwylio y tymor byr a dim ond yn mynd dros yr hyn GDB yw, sut rydych yn gweithio ag ef, sut y gallech ei ddefnyddio, ac yn ei brofi ar raglen. Ac felly pa GDB yn gadael i chi ei wneud yw ei fod yn gadael oedi y [annealladwy] i fyny eich rhaglen a llinell ymarferol. Er enghraifft, rwyf am i weithredu fel oedi ar linell 3 o fy rhaglen, ac er fy mod mod yn llinell 3 gallaf argraffu holl werthoedd sydd yno. Ac felly yr hyn a alwn yn hoffi oedi mewn llinell yn cael ei rydym yn galw hyn yn rhoi torbwynt ar y llinell ac yna gallwn argraffu'r newidynnau ar gyflwr y rhaglen ar y pryd. Gallwn wedyn oddi yno camu drwy'r rhaglen llinell wrth linell. Ac yna gallwn edrych ar gyflwr y pentwr ar y pryd. Ac felly er mwyn defnyddio GDB, yr hyn rydym yn ei wneud yw ein ffonio clang ar y ffeil C, ond mae'n rhaid i basio y ggdb-faner. Ac unwaith y byddwn ni'n ei wneud gyda ein bod yn jyst hidla gdb ar y ffeil allbwn sy'n deillio ohono. Ac felly byddwch yn cael rhywfaint màs tebyg o destun fel hyn, ond mewn gwirionedd y cyfan sydd raid i chi ei wneud yw teipio gorchmynion ar y dechrau. Egwyl yn rhoi prif torbwynt yn y prif. Rhestr 400 yn rhestru'r linellau o god o amgylch llinell 400. Ac felly yn yr achos hwn gallwch edrych o gwmpas a dweud, oh, Rwyf am osod torbwynt yn llinell 397, sef y llinell hon, ac yna eich rhaglen yn rhedeg i mewn y cam hwnnw ac mae'n mynd i dorri. Mae'n mynd i oedi yno, a gallwch argraffu, er enghraifft, gwerth isel neu uchel. Ac felly mae criw o orchmynion angen i chi wybod, a bydd y sioe sleidiau mynd i fyny ar y wefan, felly os ydych am i gyfeirio at y rhain neu os hoffech eu rhoi ar eich taflenni twyllo, mae croeso. Cool. Dyna oedd Cwis Adolygu 0, a byddwn yn ffon o gwmpas os oes gennych unrhyw gwestiynau. Mae pob hawl.  [Cymeradwyaeth] [CS50.TV]