[Powered by Google Translate] [4. §] [Kevesebb Comfortable] [Nate Hardison] [Harvard Egyetem] [Ez a CS50.] [CS50.TV] Rendben, szívesen vissza szakasz. Az e heti részben fogunk csinálni egy pár dolgot. Megyünk az első bedugni Problem Set 2, amely a Caesar és Vigenère probléma set. És akkor fogunk belevetik magukat Quiz 0 vélemények , és eltölteni egy kis időt kanülök újbóli amit beszéltünk az egyes előadások eddig, és mi is ezt a néhány probléma az előző évi vetélkedők. Így nektek van egy jó módja annak, hogy felkészüljenek ezt. Elindításához, már elindult egy pár jó megoldás Az előző probléma beállított, Problem Set 2, ebbe a térbe. Ha a srácok az összes találatot meg ezt a linket, , és ha rákattint a nevem, és kattintson az én első felülvizsgálata meglátja caesar.c, ami pontosan az, amit én néztem. Beszéljük ezt nagyon gyorsan. Ez csak egy mintaoldatot. Ez nem feltétlenül a tökéletes megoldás. Sok különböző módon lehet írni ezt, de van néhány dolog, hogy én akartam, hogy kiemelje hogy láttam, ahogy én osztályozás, a gyakori hibákat, hogy azt hiszem, Ez a megoldás nem nagyon jó munkát a kezelés. Az első, amelynek valamilyen fejléc megjegyzés a tetején. A vonalak 1-től 7 látja a részleteket, pontosan mi ez a program csinál. Egy jó bevett gyakorlat, amikor írsz C kód függetlenül attól, hogy a program nem tartalmaz egyetlen fájlt, vagy függetlenül attól, hogy van osztva több fájl az, hogy valamilyen orientáló comment a tetején. Ez is az emberek, akik mennek, és írja a kódot a valós világban. Ez az, ahol azt fogják tenni szerzői jogi információkat. Az alábbiakban a # magában. On line 16 van ez a # define, amit akkor jön vissza, mindössze egy kicsit. És akkor, ha a funkció indul, ha fő indul, mert ez a program már minden szereplő egy funkció Az első dolog, ami történik, és ez nagyon köznyelvi, és jellemző a C program vevő a parancssori argumentumok, hogy azonnal ellenőrzi Az érvelés gróf argc. Itt azt látjuk, hogy ez a program vár 2 érveket pontosan. Emlékezz van, hogy az első érv, hogy ez a különleges 1 ez mindig a program neve, ami alatt fut, a neve a futtatható fájlt. És hogy ez mire jó ez megakadályozza, hogy a felhasználó a program futtatása több vagy kevesebb érveket. Az ok, azt akarjuk, hogy ellenőrizze ezt rögtön, mert nem tudjuk valójában elérni ezt argv tömb itt megbízhatóan amíg mi már ellenőrizhető, hogy milyen nagy. Az egyik gyakori hibák láttam az emberek azonnal menjen és megragad argv [1]. Ők azt megragad a legfontosabb érv az a tömb, és nem az, hogy az én ellenőrizni azt, és akkor megtenné a teszt argc valamint a következő tesztet, függetlenül attól, hogy az első paraméterként volt valóban egy egész szám egy időben, és ez nem működik, mert abban az esetben, hogy nincs argumentumok akkor lehet lementeni egy érv, hogy nem létezik, vagy próbál megragad az egyik, hogy nincs ott. A másik nagy dolog, amit meg kell észrevenni, hogy a mindig a kinyomtatni kívánt valamilyen hasznos hibaüzenet a felhasználó számára, hogy eligazodjanak őket. Biztos vagyok benne, már minden run programokat, ahol hirtelen lefagy, és megkapod ezt a nevetséges kis párbeszédablakban előugrik, és azt mondja Valami rettenetesen rejtélyes és talán ad egy hibakód vagy valami ilyesmi , hogy nincs értelme. Ez az, ahol szeretné, hogy valami hasznos és célzott, hogy a felhasználó, hogy amikor futtatni mennek "Oh," face tenyerét. "Pontosan tudom, mit tegyek. Tudom, hogy erősít ez." Ha nem nyomtat egy üzenetet, akkor a végén tényleg így a felhasználó, hogy menjen vizsgálja meg a forráskódot , hogy kitaláljuk, mit rontottam el. Van még néhány alkalommal, hogy akkor használni a különböző hibakódok. Itt csak használt ilyet mondani, volt egy hiba, volt egy hiba, hiba történt. Nagyobb programok, sokszor programokat hívják más programok által, vissza fog térni valamilyen különleges hibakódok különböző forgatókönyvek programból kommunikálni, amit egyébként csak használja egy szép magyar üzenet. Cool. Ahogy dolgozunk le, láthatjuk hogy húzza ki a kulcsot. Teszteljük, hogy ha a kulcs illeszkedik. Kapunk egy üzenetet a felhasználónak. Az ok, csináljuk e do while ciklus-, és ez olyan dolog, amit fedezi egy kicsit, de kiderül, hogy ha a beírt ellenőrző D ha kap, hogy getString prompt a terminál hogy mi valójában nem ez küld egy speciális karakter a programhoz. Úgy hívják az ELF, vagy a fájl vége karakter. És ebben az esetben, a mi üzenetünk karakterlánc null lesz, így ez nem olyasmi, amit ellenőrzik a problémás tűzte ki maga elé. De megyünk tovább, most, hogy már kezdett beszélni mutatók és dinamikus memória kiosztás a halom, ellenőrzésekor null, ha van egy funkció, amely esetleg vissza null értékként van valami, akkor szeretnénk, hogy a szokás csinál. Ez itt elsősorban illusztráció. De ha nem lát getString a jövőben, Tehát a probléma Set 4-es, akkor szeretné, hogy tartsa ezt szem előtt. Ismét, ez nem probléma a probléma Set 3 vagy hiszen még nem fedezte még. Végül eljutunk a rész, amikor eljutunk a fő titkosítási hurok, és van egy pár dolog folyik itt. Először is navigálhat a teljes üzenet szövegébe is. Itt már tartotta a strlen hívást a feltétellel, amely számos már rámutatott, nem egy nagyszerű módja annak, hogy megy. Kiderült, hogy ebben az esetben ez nem is nagy, részben azért, mert mi módosítja a tartalmát az üzenet maga belül a for ciklus, így ha van egy üzenet, hogy ez 10 karakter hosszú, először kezdjük, hogy a hurok strlen tér vissza mi? 10. De ha majd módosítsa az üzenetet, azt mondjuk módosíthatja 5. jellegét, , és dobjon egy \ 0 karaktert az 5. pozíció, egy későbbi iterációs strlen (üzenet) nem fog visszatérni, amit meg is tett az első alkalom, hogy megismételte, de ez inkább vissza 5 mert dobta, hogy null terminátor, és a karakterlánc hosszának meghatározása az álláspontja, hogy a \ 0-ra. Ebben az esetben ez egy nagyszerű módja annak, hogy megy, mert mi módosítja a helyére. De te észre, hogy ez valójában meglepően egyszerű titkosításához ha nem kap a matematika helyes. Minden, ami szükséges, hogy ellenőrizze-e vagy sem a levelet, hogy nézel a nagybetűs vagy kisbetűs. Az ok már csak ellenőrizni az adott, és nem kell, hogy ellenőrizze a Az az alfa eset, mert ha egy karakter nagybetűs, vagy ha ez kisbetűs akkor ez biztosan egy betű, mert nincs nagybetűs és kisbetűs számjegy. A másik dolog, amit teszünk, és ez egy kicsit trükkös, A most már módosították a standard Caesar titkosítás formula hogy mi adta a probléma set specifikáció. Mi a különbség az, hogy le kell vonni A nagybetűs ügyben A főváros, és aztán ki A tőke Vissza a végén. Tudom, hogy néhányan ezt megtette a kódot. Volt valakinek ezt a beadványt? Te tetted ezt. Meg tudod magyarázni, hogy ez mit jelent, Sahb? Kivonásával ki, mert csináltam egy mod jog után, van, hogy ki, hogy így kap [köhögés] állásba. És akkor hozzáadásával vissza később tolódott át az egyik, amit akart. Igen, pontosan. Mi Sahb azt mondta, hogy amikor a hozzáadni kívánt mi üzenetet, és a legfontosabb, valamint majd a mod, hogy a mod, hogy a NUM_LETTERS, ha nem átméretezni az üzenetet a megfelelő 0-25 tartomány első, akkor talán a végén kapok egy nagyon furcsa szám mivel az értékeket, amelyeket keresünk, amikor nézzük üzenet [i], ha megnézzük az i-edik karaktere a sima szöveges üzenet, az érték valahol ebben a tartományban 65-122 alapuló ASCII értékeket nagybetűk A-tól Z-ig kisbetű. És amikor mod azt 26 vagy NUM_LETTERS, mivel ez volt a # define a jobb felső itt, hogy fog nekünk egy értéket, ami a 0-25 tartományban, és szükségünk van egy módja annak, hogy majd bővíteni, hogy vissza és kap ez a megfelelő ASCII tartományban. A legegyszerűbb módja, hogy az, hogy csak a skála le mindent -ba a 0-25 tartományban kezdeni, majd váltani mindent vissza a végén. Egy másik gyakori hiba, hogy láttam az emberek befut, hogy ha nem ténylegesen ezt méretezés azonnal és hozzá az üzenetet és a kulcsfontosságú együtt, és felveszi őket, mondjuk, egy char változó, a probléma az, hogy a azóta is üzenet [i] egy viszonylag nagy számot kezdődik a- emlékszem, hogy ez legalább 65 ha ez egy nagybetűs karakter- ha van egy nagy kulcsot, mondjuk, valami ilyesmit 100, és adjunk hozzá a 2 együtt egy aláírt char fogsz kapni egy túlfolyó. Fogsz kapni egy értéket, ami nagyobb, mint 127, amely a legnagyobb értéke, hogy a char változó képes tárolni. Ismét, ezért azt akarom, hogy az a fajta dolog, hogy kezdődik. Néhány ember kapott körül az esetben, ha ezzel egy mást és tesztelése hogy ha ez lenne túlcsordulás előtt csinálja, de így kap körül, hogy. És akkor ez a megoldás is kinyomtatható az egész szöveg a legvégén. Más emberek kinyomtatható karakter egy időben. Mindkettő félelmetes. Ezen a ponton, srácok bármilyen kérdése van, észrevételek erről? Things tetszik, amit nem szeret? Volt egy kérdés. Talán hiányzott ez alatt a magyarázatot, de hogyan működik ez a program Átugrani a terek csatlakozó a legfontosabb, hogy a hossza a szöveget? Ez csak Caesar rejtjel. >> Ó, sajnálom, igen. Igen, látni fogjuk, hogy. A Caesar titkosítás kaptunk körül, mert csak tükrözött karakter. Mi csak forgatni őket, mintha nagy-vagy kisbetűs. Ti érzés nagyon jó ebben? Nyugodtan másolni a haza, vegye be, hasonlítsa össze, hogy mit írt srácok. Határozottan, bátran küldje el kapcsolatos kérdésekre is. És ismét, rájönnek, hogy a cél itt a probléma készletek nem kap titeket, hogy írjon tökéletes kódot a probléma készletek. Ez egy tanulási tapasztalat. Igen. Vissza a do while ciklus, ha értéke null, így null csak semmit nem jelent, csak nyomd meg az Entert? Null egy speciális mutató értékét, és az általunk használt null amikor azt szeretnénk mondani van egy pointer változó mutat semmit. És így általában azt jelenti, hogy ez a változó, ez az üzenet a változó üres, és itt, mert mi a CS50 speciális string típusú, mi a CS50 string típusú? Láttad, mi ez, ha David húzta vissza a fedelet az előadás? Ez egy funky-ez a mutató, igaz? Oké, igen. >> Ez egy char *. És így nagyon tudtuk helyettesíteni ezt Itt a char * üzenet és így a getString funkciót, ha nem kap egy sikeresen stringet a felhasználó, nem tudja feldolgozni a string, és az egyik eset, amikor nem tud feldolgozni egy karakterláncot az, ha a felhasználó beírja a file végére jellegű, az ellenőrzési D, ami nem az, amit általában csinálni, de ha ez megtörténik, akkor a függvény visszatérési e null értéket, mert így a mondás "Hé, nem kaptam egy string." Mi történne, ha nem teszünk message = null, ami olyan dolog, amit nem csinál még? Miért lenne ez a probléma? Mert tudom, hogy beszéltünk egy kicsit az előadás memóriavesztés. Igen, csináljuk ezt, és lássuk, mi történik. Basil a kérdés az volt, mi történik, ha valójában nem is this message = null teszt? Menjünk felfelé a csúcsra. Ti szólhatnak hozzá ezt. Igazából akkor mentse el a felülvizsgálatot. Ez lesz a Revision 3. Mit kell majd tennie, hogy futtatni ezt a programot akkor kell kattintania a fogaskerék ikonra ide, és akkor kell hozzá egy érv hozzá. Itt van, hogy ez a legfontosabb érv, mivel szeretnénk átadni egy parancssori argumentum. Itt fogom, hogy ez a 3-as szám. Szeretem a 3. Most zoom vissza, fut a program. Úgy fut, összeállítása, az épület. Itt vagyunk. Ez arra vár, hogy kéri. Ha írja be valami ilyesmit hello-hol, hogy menjen? Ó, a programot túl sokáig tartott, hogy fusson. Én jawing túl sokáig. Itt megy ez. Most írja be a hello. Látjuk, hogy titkosítja megfelelően. Most mi történik, ha nem teszünk azonnali getString vissza null? Ne feledje, hogy azt mondtam, hogy mi volt, hogy a gomb megnyomásával ellenőrzés D ugyanabban az időben. Én lapozzunk ide. Majd futtassa újra. Building. Ott megy ez. Most, amikor megüt ellenőrzési D Van ez a vonal, amely azt mondja opt/sandbox50/bin/run.sh, Segmentation fault. Láttátok-e már? [Student] Miért nincs->> Tessék? [Student] Miért nincs core dump ebben az esetben? A core dump jelentése a kérdés miért nincs core dump itt? A kérdés az, hogy lehet, de a mag kiíratás egy fájl hogy lesz tárolva a merevlemezen. Ebben az esetben mi már tiltva core dump a távon szerver, hogy mi nem az emberek seg hibás és kiépítése tonna core dump. De lehet, hogy kap egy. Core szeméttárolót a fajta dolog, amit gyakran letiltása, és néha te. A szegmentációs hiba, hogy válaszoljak a kérdésedre, Basil, azt mondja, hogy megpróbáltuk elérni a mutató hogy nem volt beállítva, hogy pont semmit. Emlékszel Muci a videó, amikor Muci próbál megy hozzá egy mutató, ami nem mutat semmit? Ebben az esetben azt hiszem, műszakilag a mutató mutat valamit. Ez mutat null, ami műszakilag 0, de ez határozza meg, hogy abban a szegmens, amely nem hozzáférhető az a program, így kap egy szegmentációs hiba azért, mert te nem a memóriát, hogy ez egy érvényes részes mint a heap szegmens vagy a verem szegmens vagy az adatok szegmensben. Cool. Bármilyen további kérdése van Caesar? Menjünk tovább. Nézzük Rev. 2 nagyon gyorsan. Ez Vigenère. Itt Vigenère megyünk keresztül, ezt elég gyorsan, mert újra, Vigenère és Caesar meglehetősen hasonlóak. Header megjegyzés előtt, # Define előtt van, hogy ne használja ezeket a mágikus számok. A szép dolog mondani akartunk költözni egy másik ábécé, vagy valami ilyesmi. Ahelyett, hogy menjen manuálisan módosíthatja a 26 által a kódot tudtuk megváltoztatni ezt 27 vagy ejtse le ha az általunk használt különböző ábécék, különböző nyelveken. Ismét megvan az ellenőrzést az érvelés gróf és igazán akkor szinte ezt a sablont. Elég sok minden programot írsz, kell- ha úgy parancssori argumentumok-sorozat egyes vonalak hogy olvas, mint ez a legelején. Ez az egyik első józanság teszteket akarsz csinálni. Itt mi nem is tettünk róla, hogy a kulcsszó érvényes volt, és ez volt a második ellenőrzik, hogy megcsináltuk. Figyeljük meg újra, hogy elbúcsúztunk ezt honnan argc és 2. Ne feledje, hogy ebben az esetben egy dolog, hogy meg kellett tennem, hogy helyette használatának ai akartuk, hogy érvényesítse az egész string, és annak érdekében tenni, hogy ténylegesen menni karakterenként át a húr. Nincs jó módja annak, hogy hívja valamit rajta mivel még, például, hogy i egy vissza fog térni 0 ha nem tudja feldolgozni az egész, úgy, hogy nem is működik. Ismét szép üzenet közölve a használókkal, hogy pontosan mi történt. Akkor itt, megint, mi is kezeli az esetben, ha a felhasználó beír egy ellenőrző D véletlenszerű karakter. És akkor Charlotte volt a kérdés korábban arról, hogy hogyan sikerül kihagyja terek a mi karakterlánc itt. Ez kedves volt hasonló ahhoz, amit tettünk a Myspace programmal hogy mi volt a szakaszban, és az, ahogy ez működött az, hogy mi követte a betűk száma, amit látott. Ahogy sétált az üzenetet húr, ahogy odament karakterenkénti követtük az index része a hurok, és akkor is nyomon a betűk száma, így a nem speciális karaktereket, nem számjegyek, nem-szóköz hogy látta a külön változót. És akkor ez a megoldás módosítja a kulcs kap egy aktuális kulcs értéke, és nem, hogy on the fly, közvetlenül előtte ezután titkosítani az aktuális üzenetet karaktert. Vannak olyan megoldások, amelyek tökéletesen kedvezményes túl amely módosítja a kulcsot, amikor vizsgálatát a kulcs érvényességét. Amellett, ügyelve arra, hogy a karaktert, és a kulcsszó volt egy alfabetikus karaktert az is kiderült, hogy egy egész A 0-25 tartomány ugorjon tekintettel kell csinálni, hogy később ebben a ciklusban. Ismét itt látsz, ez tényleg pontosan ugyanazt a kódot hogy mi használt Caesar ezen a ponton. Te csinálod pontosan ugyanaz a dolog, így az igazi trükk kitalálni hogyan kell bekapcsolni a kulcsszó egy egész. Az egyik dolog, hogy mi volt itt, hogy egy kicsit sűrű ez megismételtük ezt a kifejezést, azt hiszem, nevezhetjük azt, 3 külön-szor vonalakon 58, 59, és 61.. Tud valaki magyarázni, hogy pontosan mit jelent ez a kifejezés? Ez hozzáférés egy karaktert, ahogy mondtad. Igen, ez [hallhatatlan] egy karaktert a kulcsszó, és így ez betűk száma látható, mert te csak mozog A következő kulcsszóval: ha már látta a levelet, így fog hatékonyan kihagyja terek és ilyesmi. Igen, pontosan. És akkor egyszer láttad a kulcsszó üres imént mod így hátrál körül. Pontosan. Ez egy tökéletes magyarázat. Mi Kevin azt mondta, hogy azt akarjuk, hogy index a kulcsszó. Azt akarjuk, hogy a num_letters_seen karaktert, ha úgy tetszik, de ha num_letters_seen meghaladja a hossza a kulcsszó, módon jutunk vissza a megfelelő tartományban használjuk a mod operátor hatékonyan köré. Például, mint a rövid, a kulcsszó bacon, és ez 5 betű hosszú. De láttuk 6 betű a mi szöveges ezen a ponton és titkosított 6. Mi lesz a vége, hozzáférés a num_letters_seen, amely 6, mod a hossza a kulcsszó, 5, és így lesz 1, és így mit fogunk csinálni a fogunk eléréséhez az első karakter belső kulcsszó ezen a ponton. Rendben, bármilyen kérdése Vigenère mielőtt lépni? Ti érzés nagyon jó ebben? Cool, nagyszerű. Azt szeretnénk, hogy győződjön meg arról, hogy ti egyre a lehetőséget, hogy lássa kód hogy azt gondoljuk, jól néz ki, és a lehetőséget, hogy tanuljanak belőle. Ez lesz az utolsó fogjuk használni terek egyelőre, és megyünk átmenet most, és fogok menni cs50.net/lectures így nem tehetünk egy kis kvíz felülvizsgálatát. A legjobb módja, azt hiszem, hogy kezdeni ezzel kvíz értékelést hogy jön ehhez Előadások oldalra, cs50.net/lectures, és alatt minden héten fejezetek, így ha megnézem itt a 0. héten, Látom, hogy van egy lista, hogy mi témák tárgyalt Hét 0. Ha bármelyik ezek a témák úgy tűnik, ismeretlen az Ön számára akkor biztosan szeretné, hogy menjen vissza, és kutat a jegyzet, és esetleg még akkor is fusd át az előadások, nézni őket újra, ha azt szeretnénk, hogy kedvet kapjanak, mi folyik az egyes e téma. Azt fogják mondani továbbá ebben az évben az egyik hűvös források megvan ezek a rövidnadrág, hogy már létre, és ha megnézi a 0. héten, nem rendelkezik a témák, de van jó néhány közülük, néhány trükkösebb is, így figyeljük ezeket a nadrág újra egy jó módja, hogy neked fel a sebességet. Különösen fogok valósult meg a dugó a 3 az alsó, mert én tettem azokat. De ha küzd binárisan, bit, hex, ez a fajta dolog, bináris remek hely a kezdéshez. ASCII van egy másik, hogy jó, hogy többet is. Akár azt is nézni nekem 1.5x sebesség, ha megyek túl lassú az Ön számára. Mivel ez a felülvizsgálat, nyugodtan tedd ezt. Csak kezdeni tényleg gyorsan fogunk menni egy pár ilyen kvíz problémák csak azért, hogy gyorsan lemorzsolódás ezeken. Például, nézzük meg, hogy a probléma, 16 Van egészen itt a fórumon. Van ez a következő számítás bináris, és meg akarjuk mutatni bármilyen munkát. Oké, megyek, hogy ez egy lövés. Srácok kell követniük együtt papír, és mi ezt nagyon gyorsan. Azt akarjuk, hogy hajtsa végre az alábbi számítás bináris. Megvan 00110010. És fogok hozzá, hogy 00.110.010. A matematikai zsenik követő mentén at home, ez ténylegesen megszorozzuk 2-vel. Kezdjük. Megyünk, hogy ugyanezt az algoritmust kívül, amit mi ha hozzá tizedes számok együtt. Tényleg az egyetlen különbség az, hogy mi visszahurkoló körül egyszer már 1 + 1 helyett egyszer eljutunk 10-ig. Ha elkezdjük a jobb, nagyon gyorsan, mi az első számjegy? [Tanuló] 0. >> [Nate H.] 0. Nagyszerű, a második számjegy? [Student] 1. [Nate H.] Ez egy 1? 1 + 1? [Student] 10. [Nate H.] Pontosan, tehát mi a szám, hogy írok jog alatt a 2 közül ki együtt? [Student] 1, 0, vagy 0, majd folytassa az 1. [Nate H.] 0 és végrehajtani a 1, pontosan. Ezután egyet, Basil, te fel. Mi a harmadik? >> [Basil] 1. [Nate H.] 1, tökéletes. Kevin? [Kevin] 0. >> [Nate H.] 0, Charlotte? [Charlotte] 0. >> [Nate H.] Ja, és mit tegyek? [Student] Az 1. [Nate H.] És mit tegyek? És aztán folytatni az 1. Tökéletes, Sahb? >> [Sahb] Most van 1. [Nate H.] És tegyek valamit itt? [Sahb] Aztán a következő egy van 1, mert átvitt 1. [Nate H.] Nagy, ezért itt be tudjuk fejezni azt. Cool. [Tanuló] e 0 + 0 = 0? 0 + 0 = 0. 1 + 1, ahogy mondtad, 10, vagy 1, 0, igen. 10 egy helytelen elnevezés, mert nekem 10: a 10-es számú, és ez a trükkje, hogy hogyan vagyunk képviselő, amikor írunk rá. Mi képviseljük a 2-es szám 1, 0, és a 10-es számú némileg eltérő. Milyen fajta szép körülbelül bináris hogy tényleg nem sok esetekben meg kell tanulni. Van 0 + 0 = 0, 0 + 1 = 1, 1 + 1 értéke 0, és majd hordoznak 1, és akkor lehet látni itt a harmadik oszlopban jobbról volt ez 1, 1, és 1. És 1 + 1 + 1 egy 1, és szállítására másik 1. Ha csinálsz bináris kívül elég egyszerű. Csinálnék még egy pár ilyen a józanság megtekintéséhez magatokat mielőtt mész, mert ez Valószínűleg valami, látni fogjuk a kvíz. Most ezt következő egy is. Csináljuk problémája 17. Fogjuk átalakítani a következő bináris szám decimális. Megvan 10100111001. Ne feledje, a bináris videót tettem Mentem keresztül, egy pár példát, és bemutatta, hogyan minden működik, ha csinálod decimális. Amikor dolgozik decimális Azt hiszem, Ezen a ponton az életünkben, így folyékonyan beszél arról, hogy ez elég könnyű elkendőz a mechanika, hogyan is működik. De ahhoz, hogy egy gyors bedugni, ha megvan a 137-es ez valójában azt jelenti, és ez szintén a decimális- A 137-ban tizedes azt jelenti, hogy van 1 x 100 + 3 x 10 + 7 x 1. Ez mind tartózkodik a képernyőn. És aztán, ha megnézi ezeket a számokat itt, 100, 10 és 1, akkor láthatjuk, hogy ők tulajdonképpen minden hatáskörét 10-ig. Én már 10 ², 10 ¹ és 10 a nulla. Van egy hasonló, az ilyesmit bináris, kivéve, hogy a bázis, ahogy mi nevezzük, a 2 helyett 10-ig. Ezek a 10s hogy én írtam ide az alján, A 10 ², 10 ¹, 10 a nulla, 10 a mi alap, és a kitevő, 0, 1, vagy 2, az által implikált helyzete számjegy a szám, amit írni. 1, ha nézzük, ez az 1, a 2. pozícióba. A 3-ban az 1. pozíció, és a 7-ben a 0. helyzetben. Így kapjuk a különböző kitevők alább a bázisok. Miután mindez we'll-valójában, tudod mit? Megteszünk-hol a visszavonás gomb menni? Ott megy ez. Imádom ezt a visszavonás dolog. Ezt követően azt hiszem, nekem legalább a legegyszerűbb módja annak, hogy kezdeni konvertáló bináris szám vagy egy hexadecimális számot, ahol a bázis 16 és nem 10 vagy 2, hogy menjen előre, és írja ki A bázisok és művelői az összes számot az én bináris számot a tetején. Ha elkezdjük balról jobbra újra, ami elég counterintuitive, Majd állítsa vissza fekete ide, megvan a 2 a 0. pozíció és akkor mi van 2 ¹, 2 ², és majd a 2 a 3, 2-a 4-2 az 5, 6, 7., 8., 9., és 10.. Ezek a számok írtam ki az összes exponensek. Én csak írtam a bázis itt az első 3 csak helyet. Ezen a ponton én megyek előre, és én tényleg fog törölni a dolgokat, hogy mi volt a decimális, ha nem baj. Már minden megvan. Akik ezt nézni interneten Biztos vagyok benne, képes lesz visszaforgatni velem, ha szeretné. Váltás vissza a tollat. Nos, mit tudunk tenni, ha a fiúk nem teljesen, hogy gyorsítsa meg a 2 hatványai, ez teljesen jó. Ez történik. Megértem. Egyszer volt egy állásinterjúra, ahol azt mondták, tudnom kellene valamennyi hatáskörét, 2 egészen 2 a 30.. Nem volt munkám van. Különben is, ti is megy előre, és nem a matek itt, de bináris nem igazán értelme, , és az sem, hogy van értelme a decimális vagy hexadecimális sem, hogy nem a matek, hogy hol van nullát. Láthatjuk van 0 itt a 0 itt, 0 itt, 0 itt, 0 itt, 0 itt. Miért lehet, hogy nincs értelme, hogy ezt a konkrét matematikai kiszámításához a megfelelő 2-hatvány adott helyzetben? Pontosan, mint Charlotte mondta, ez 0 lesz. Lehet is menteni magát az időt, ha számítási hatáskörök 2 nem az erősséged. Ebben az esetben csak meg kell kiszámítani, hogy 2-től a 0, ami-? [Student] 1. [Nate H.] 1, 2-a 3, amelyet az-? [Student] 8. >> [Nate H.] 8. 2 a 4? [Student] 2. Sajnálom, 1. [Nate H.] 2 a 4 16, pontosan. 2 az 5, Kevin? >> 32. [Nate H.] 32, 2 a 8? [Student] 32 x 8, 256. [Nate H.] Tökéletes. És 2. 10? [Student] 1024. [Nate H.] Ja, 1024. Amint megvan ezek a számok tudjuk összefoglalni őket fel. És ez az, ahol ez nagyon fontos, hogy csinál egy pár dolgot. Az egyik megy lassú, és ellenőrizze a munkát. Azt lehet mondani, hogy van egy 1 a végén ez a szám, úgyhogy érdemes kap egy páratlan szám, mint az én eredményeként azért, mert az összes többi is lesznek páros számok tekintettel arra, hogy ez egy bináris szám. A másik dolog az, ha kap, hogy ezt a pontot a teszt és akkor írtam ki ilyen messzire és te fogy az idő nézd meg a pontok számát, hogy ez a probléma, érdemes. Ez a probléma, amint látod, ha fordítsa vissza a laptop nagyon gyorsan, ez a probléma 2 pont, tehát ez nem az a fajta kiegészítés ha kell megy keresztül, ha tényleg szorít az idő. De mi vissza akar váltani az iPad, és megyünk keresztül nagyon gyorsan. Szeretem ezt a kis számok 1. mert úgy találják, hogy könnyebb. Szeretem a 32 és 8, mert együtt jár elég könnyen, és kap 50. 16 és 1 lesz 17. Ott kap 57, és akkor a többit e, így nem tehetünk 57, 156. Gyerünk. Ember, hát lássuk. Volt 57, 256, és 1024. Ezen a ponton inkább csak megy keresztül. Fogalmam sincs. Tisztán kell olvasni fel ezt. 7, 6, 4, kapsz 17. 1, 5, 5, 2, 13. Aztán kap 3, akkor kap 1. 1337. Húsvéti tojás, valaki? Aki ismeri ezt a számot? Chris felismeri a számot. Mit jelent ez, Chris? [Chris] Leet. Leet, így ha ezt nézd meg, úgy néz ki leet. Hacker cucc. Vigyázz, hogy az ilyen dolgok a félidős vagy a teszt inkább. Ha látja, hogy ilyen dolgokat, és kíváncsi, "Huh" esetleg tényleg jelent valamit. Nem tudom. David szereti üzembe be! Ez egy jó módja annak, hogy józan ellenőrizni. Mint rendben, látom, mi folyik itt. Ez hét 0/Week 1 cucc. Ha vissza szeretne térni a laptop most kicsinyítés, és néhány más dolog. Van ASCII, amit csináltam sok a probléma készletek. Ez a fogalom a tőke A. Mi ez valójában? Tudva, hogy ez a decimális egész szám. 65, amit ez leképezve az ASCII táblázat és ez így, hogy a számítógép írja azt, és ez hogyan már megússzák ténylegesen írásban a karakter A főváros és a karakter kisbetűsre a Néhány ezek a megoldások és probléma készletek, amit csináltál. Egy pár más dolog. Van nyilatkozatok, logikai kifejezések, feltételek, hurkok, változók és szálak. Ezeket minden úgy tűnik, hogy van értelme a legtöbb? Néhányan ezt a terminológiát egy kicsit funky időnként. Szeretném azt hinni, a nyilatkozat a legtöbb valami pontosvesszővel végződjön. Olyan kifejezés, mint x = 7, amely meghatározza a változó, feltehetőleg hívott x = 7. Feltehetően x szintén egyfajta, amely tárolja a 7-es számú, így ez egy int vagy esetleg egy úszó vagy egy rövid, vagy char, valami ilyesmi. A logikai kifejezés ezekkel a kettős egyenlő és bumm egyenlő vagy a nem egyenlő, kisebb, nagyobb, kisebb vagy egyenlő, minden ilyesmi. Feltételek akkor is, ha más nyilatkozatok. Azt ne feledd, hogy nem lehet egy máshol nem megfelelő, ha. Hasonlóképpen, akkor nincs más, ha nem megfelelő, ha. Loops, felidézni a 3 féle hurok voltunk kalapálás beléd Az utolsó pár szakaszok és probléma készletek. Használata nem pedig, amikor egyre felhasználói input, használatával miközben hurkok, amíg egy adott feltétel igaz, , majd használja azokat, hurkok, ha kell tudjuk, melyik iteráció a hurok te aktuálisan így gondolok rá. Vagy ha csinálsz egy minden karakter egy string akarok valamit, minden egyes eleme egy tömb akarok valamit az elemet. Témák és események. Ezek már nem tartoznak olyan kifejezetten C, de ne feledje, ez a semmiből. Ez a fogalom, különböző szkripteket. Ez is ezt a fogalmat a műsorszolgáltató az esemény. Vannak, akik nem használják műsorszolgáltatás a projektek kezdetben, amely teljesen hűvös, de ezek 2 különböző módon kezelik ezt a nagyobb probléma az úgynevezett konkurencia, ami hogyan kap programok végrehajtására vagy látszólag végre ugyanabban az időben? Különböző feladatok futtatása, miközben más feladatok is futnak. Így az operációs rendszer úgy tűnik, hogy működik. Ez az oka annak ellenére, például, Megvan a böngésző fut, én is bekapcsolni Spotify és játszani egy dalt. Ez inkább egy fogalmi dolog, hogy megértsék. Szeretnék venni egy pillantást a szálak rövid Ha szeretne többet megtudni ezt. Lássuk csak, azt hiszem, volna probléma ezzel az egyik ilyen. Ismét azt hiszem, szálak és események nem olyasmi, amit fedezi a C csak azért, mert ez jóval nehezebb, mint a Scratch. Nem kell aggódni, hogy ott, de határozottan megérteni a fogalmakat, érti, mi folyik itt. Mielőtt folytatnánk, bármilyen kérdése 0. héten anyagot? Mindenki érezte, elég jó? Megértése változók és mi a változó? Lépjünk tovább. 1. hét. Egy pár dolog, hogy itt nem voltak különösen vonatkozik A kvíz felülvizsgálat szükségszerűen és több fogalmi dolgot gondolni. Az első ez a fogalom, amit forráskód, fordítók és tárgykód vannak. Valaki? Basil. Is tárgykód-értem forráskód mit raksz bele csenget, és tárgykód, amit csenget teszi ki, hogy a számítógép tudja olvasni a program. Pontosan. Forráskód a C kód, amely ténylegesen írja fel. Tárgykód mit kap ki csenget. Ez a 0s és 1s, hogy bináris formátumban. Akkor mi történik, ha van egy csomó objektum fájlok, mondod összeállítása projekt vagy program, amely több forráskód fájlokat, amelyeket megegyezés kapnak. c fájl kiterjesztését. Ezért van caesar.c, vigenère.c. Ha írsz Java programok megadja nekik a kiterjesztést. Java. Python programok kiterjesztése. Py gyakran. Miután több. C fájlokat, akkor fordítani őket. Zengés kiköpi mindezt bináris szemét. Akkor azért, mert csak szeretné 1 program megvan a linker linkre mindezek objektum fájlokkal együtt ba 1 futtatható fájlt. Ez is, hogy mi történik, amikor a CS50 könyvtárat, pl. A CS50 könyvtár mind ez, mind. H header file , hogy olvassa el, hogy a # includecs50.h. És akkor ez is egy speciális bináris könyvtárfájlt hogy a már lefordított amely 0s és 1s, és hogy a-l flag, tehát ha megyünk vissza a Terek, nézünk nagyon gyorsan , hogy mi folyik itt, amikor nézzük a csengés parancsot, mi van ez a mi forráskód fájl itt. Ezek egy rakás fordító zászlók. És aztán a legvégén, ezek-l zászlók linkre, A tényleges bináris fájlokat e 2 könyvtárak, a CS50 könyvtár, majd a matematikai könyvtár. Megértése minden típusú fájlokat "cél A fordítási folyamat az, amit akar majd, hogy képes legyen azt legalább egy magas szintű áttekintését. Forráskód bejön objektum kódja jön ki. Tárgykód fájlok összeköti, és kapsz egy gyönyörű, futtatható fájlt. Cool. Ez is, ahol lehet kapni hibákat több ponton A fordítási folyamat. Ez az, ahol például, ha Ön ezt összekötő zászló, A CS50 zászló, és kihagyja azt a közös, vagy ha éppen fut a kód, ez az, ahol kapsz egy hiba az összekötő szakasz, és a linker fogja mondani, hogy "Hé, te hívott függvény getString ez a CS50 könyvtárban. " "Azt mondtad, ez volt a CS50 könyvtár, és nem találom a kódot is." Ez az, ahol be kell kapcsolni azt, és ez külön egy fordító hibát, mert a fordító nézi szintaktikai és ilyesmi. Jó tudni, hogy mi folyik itt, amikor. Más dolog tudni. Azt mondanám, akkor feltétlenül szeretnénk, hogy egy pillantást a rövid szóló typecasting végzett Jordan megérteni, hogy mit ints vannak a motorháztető, milyen karakterek vannak a háttérben. Amikor beszélünk ASCII, és ténylegesen nézd meg az ASCII táblázat hogy mit csinál ad nekünk a motorháztető alatt megjelenés meg, hogy a számítógép valóban képviseli a tőke A. és a karakteres, 7 és egy vessző és egy kérdőjel. A számítógép is különleges módon képviselni A 7-es szám, mint egy egész. Ez egy különleges módon képviseli a 7-es szám, mint egy lebegőpontos szám, és ezek nagyon eltérőek. Typecasting hogy hogyan mondod el a számítógép "Hé, azt akarom, hogy konvertálni egyik képviselet másik ábrázolás. " Miért nem veszünk egy pillantást. Azt is vessen egy pillantást a rövid a könyvtárak, valamint a rövid a fordító. Azok beszélni a folyamat összeállítása, mi az a könyvtár, és menj át ezek közül néhány kérdésre, hogy lehet, hogy kérdezte. Kérdések 1. hét anyagot? Vannak olyan témák itt, hogy úgy tűnik ijesztőnek szeretné fedezni? Próbálom fújni keresztül a legtöbb ilyen korábbi témák, hogy mi lehet jutni mutatók és csinál egy kis rekurzió. Gondolatok? Bármi fedezésére? Itt az ideje egy kis csokit talán? Ti dolgoznak rajta. Fogom tartani kortyolgatva én kávét. 2. hét. Jó ötlet, jó hívást. A 2. héten beszéltünk egy kicsit többet funkciókat. Az első néhány probléma készletek mi nem igazán írjon semmilyen funkciót egyáltalán kivételével, amelyek funkciója? [Student] Main. >> Main, pontosan. És láttuk, a különböző jelmezek fő visel. Itt az egyetlen, amelyben nincsenek argumentumai, és azt mondjuk void között a zárójelben és akkor ott van a másik, ahol akarok venni parancssori argumentumok, és ahogy láttam, hogy ott van, int argc és string argv tömb vagy most, hogy valóban ki vannak téve string az char *, hogy fogjuk írjuk azt char * argv majd zárójelben. A probléma Set 3, srácok látott egy csomó funkciók, és végre egy csomó funkció, dolgozzon, felnéz, tülekedés. A prototípus minden írásbeli ott van. Amit akartam beszélni itt funkciókkal nagyon gyorsan az, hogy van 3 részből őket, amikor írsz egy függvényt. Meg kell adni a visszatérési típusát a funkciót. Meg kell adnia egy nevet a funkciót, majd meg kell adnia a paraméterek listája vagy a paraméter listában. Például, ha én, hogy írjon egy funkciót összefoglalni egy csomó egészek , majd visszatér hozzám az összeg, hogy mi lenne a visszatérési típus ha akartam összefoglalni egész, majd vissza az összeget? Ezután a nevét a funkciót. Ha megy előre, és levelet, zöld, ez a rész a visszatérési típus. Ez a rész a név. És akkor zárójelbe ahol adok az érveket, gyakran rövidítve args, néha params a paraméterek. És ha van, akkor csak meg az egyik. Ha több akkor külön mindegyik vesszővel. És minden paraméter adod 2 dolog, amelyek, Kevin? [Kevin] Meg kell adni a típusát, majd a nevet. És akkor a nevét, és a név az a név, hogy fogsz használni hivatkozni ez az érv összegén belül funkciót, a funkció, amelyet éppen ír. Nem kell a-például, ha megyek Összefoglalva, mondjuk egy sor egész-Majd do int tömb, és adok magamnak néhány kapcsos zárójelek ott- akkor, amikor elmegyek egy tömb az összeg függvény Azt adja át az első helyzetben a paraméterek listája. De a tömböt, hogy igazolványt, nem kell, hogy legyen a neve arr. ANL lesz, hogyan, nézze meg ezt az érvet a szervezetben a funkciót. A másik dolog, hogy meg kell figyelembe venni, és ez némileg eltér funkciókat, de azt hiszem, hogy ez egy fontos pont, az, hogy a C-ben, amikor írok egy függvényt, mint ez honnan tudom, hogy hány elem van ebben a tömbben? Ez némileg egy beugratós kérdés. Beszéltünk erről egy kicsit a múlt heti részben. Honnan tudom, hogy az elemek száma belsejében egy tömb C? Van-e mód? Kiderül, hogy nincs mód tudni. Meg kell adnod azt külön-külön. Van egy trükk, amit tehetünk ha az ugyanazt a funkciót, amely a tömbben nyilvánították, és te dolgozik egy stack tömb. De ez csak akkor működik, ha az ugyanazt a funkciót. Miután át egy tömböt egy másik funkciót vagy ha már bejelentett egy tömb és tedd tömb a halom, amit használt malloc  és ez a fajta dolog, akkor valamennyi fogadás ki van kapcsolva. Akkor valójában átadni körül egy különleges érv vagy egy másik paramétert mondani, milyen nagy a tömb. Ebben az esetben, azt akarom, hogy használd a vesszőt-Sajnálom, ez megy ki a képernyőn itt- és én át egy másik érvet  és hívja meg int len ​​a hosszát. Egy dolog, hogy esetleg jön a kvíz azt kéri, hogy írjon, vagy végre egy adott funkció nevezett valamit. Ha nem adja meg a prototípus, így ezt az egészet itt, ez az egész káosz nevezzük a függvény nyilatkozatot vagy a függvény prototípus, ez az egyik első dolog, akkor szeretné köröm le, ha ez nem adott az Ön rögtön a kvíz. A másik trükk Megtanultam, hogy a azt mondom, nem kapsz egy prototípus a funkciót, és azt mondjuk: "Hé, neked kell írni." Bent a kapcsos zárójelek, hogy van a kvíz ha azt veszi észre, hogy van egy visszatérési típusa és azt tapasztalja, hogy a visszatérési típus van valami más, mint üres, ami azt jelenti, hogy a függvény nem ad vissza semmit, majd az egyik dolog, amit feltétlenül akarok a levelet valamiféle return utasítás legvégén a funkciót. Return, és ebben az esetben, akkor tesz egy üres, mert azt akarjuk, hogy töltse ki az üres. De ez lesz gondolsz a helyes utat, hogy hogyan fogom megközelíteni ezt a problémát? És ez emlékezteti Önt fogsz kell vissza értéket a hívó a funkciót. Aha. >> [Student] e stílust kell alkalmazni, ha írunk kódot a kvíz? Mint például a behúzás és ilyesmi? >> [Student] Igen. Nem, nem annyira. Azt gondolom, hogy sok-e olyasmi, amit majd kifejteni a teszt napján, de általában aggódni # tartalmaz és ez a fajta dolog, ez a fajta külső. [Student] van szüksége a hozzászóláshoz kézzel írt kódot? Szüksége van, hogy észrevételeket a kézírásos kódot? Kommentálva mindig jó, ha aggódsz részlegesen elismerheti vagy szeretne kommunikálni a szándék a gréder. De én ismét tisztázni fogja a kvíz magát, és a kvíz napon, de én nem hiszem, hogy akkor kell szólhatnak hozzá, nem. Általában nem, de ez határozottan az a fajta dolog, ha tud kommunikálni a szándék, mint a "Hé, ez az, ahol megyek vele." És néha, amely segíthet a részleges hitel. Cool. Basil. [Basil] Mi a különbség a kimondó, mondjuk, int lang Az érvek, illetve paramétereinek versus nyilvánító változó a funkció? Wow, kávé lement a légcső. [Basil] Like amelyet dolgokat akarunk létrehozni érveket. Igen, ez egy nagy kérdés. Hogyan válassza ki milyen dolgokat szeretne tenni az érveket szemben milyen dolgokat kell tennie belsejében a funkció? Ebben az esetben szereplő mindkét argumentumként mert ők valamit, hogy aki használni fogja az összeget funkció meg kell határoznia azokat a dolgokat. Az összeg függvény, mint beszélgettünk, nem tudhatja, mekkora a tömb nem lesz annak hívó vagy akárki használja az összeg funkciót. Ez nem lehet tudni, milyen nagy, hogy a tömb. Az ok, amiért át e hosszon itt érvként azért van, mert ez valami, hogy mi alapvetően mondja a hívó függvény, aki használni fogja az összeget funkció, "Hé, nem csak meg kell adni nekünk egy tömb A ints, akkor is el kell mondani, hogy mekkora a tömb, amit adtál nekünk. " [Basil] Ezek lesznek mindketten parancssori argumentumok? Nem, ezek a tényleges érvek, hogy akkor adja át a funkciót. Hadd tegyek egy új oldalt itt. [Basil] Mint neve is át- [Nate H.] Ha van int main (void), és fogok tenni a saját return 0 ide az alján, és mondd akarom hívni az összeget funkciót. Azt akarom mondani, int x = sum (); Ahhoz, hogy a SZUM függvény azt át kell adni mind a tömbben, hogy szeretnék összefoglalni és a hossza a tömb, tehát ez az, ahol feltételezve, hogy volt egy sor ints, mondjuk Volt int numbaz [] = 1, 2, 3, fajta felhasználása feltört fel szintaxis ott, akkor tenném nyelven összeg szeretnék átadni mind numbaz és a 3-as szám hogy elmondja az összeg funkció "Oké, a tömb Azt akarom összefoglalni." "Itt van a mérete." Van ennek értelme? Ez azt választ a kérdésére? Sok szempontból ez párhuzamos mit csinálunk a fő amikor már a parancssori argumentumok. A program, mint Caesar titkosítást, például azt, hogy szükség van parancssori argumentumok nem lenne képes tenni semmit. Valójában nem tudom, hogyan kell titkosítani, ha nem mondja meg, mit kulcs használata vagy ha nem mondja meg, mit karakterlánc akartál titkosítani. Kéri a bemenet, ez az, ahol megvan 2 különböző mechanizmusok meghozatalának bemenet a felhasználó, az olyan információkat a felhasználó elől. A probléma szett 1 láttuk ezt getInt, getString, getFloat módja megkérdezése a bemeneti, és hogy hívják a standard input stream. Ez kicsit más. Ez valami olyasmi, amit tehetünk, egy időben, szemben a ha hivatkozhat a program, amikor elindítja a program fut. A parancssori argumentumok minden van megadva, amikor elindítja a programot futás. Már összekeverjük a két említett. Mikor használjuk érvek egy funkcióhoz, ez ugyanúgy, mint parancssori argumentumok a fő. Ez az, amikor élni a funkciót meg kell mondani, hogy hogy pontosan mi szükséges ahhoz, hogy a feladatai ellátásához. A másik jó dolog, hogy nézd meg, és én hagyom, hogy nézd meg a szabadidődben, és ez borította a kvíz-volt ez a fogalom hatálya alól és a helyi változók versus globális változók. Ne figyeljen erre. Most, hogy megvagyunk e más dolgok, A 3. hét kezdtünk beszélni keresés és válogatás. Keresés és rendezés, legalábbis CS50, nagyon bevezetés néhány a több elméleti része a számítógép-tudomány. A probléma a keresést, a probléma a válogatás nagy, kanonikus problémák. Hogyan lehet megtalálni egy adott számot egy sor milliárd egész? Hogyan lehet megtalálni egy adott nevet belsejében egy telefonkönyv ez tárolt laptop? És így bevezetni ezt a fogalmat az aszimptotikus futási idő igazán számszerűsíteni, hogy mennyi ideig, milyen nehéz ilyen probléma van, meddig vesznek megoldani. Ebben, azt hiszem, 2011-es kvíz van egy probléma, hogy azt hiszem, érdemi amely nagyon gyorsan, ami ez, problémamegoldás 12. Ó nem, ez az Omega. Itt beszélünk a lehető leggyorsabb futási idő egy adott algoritmus, majd a lehető leglassabb üzemidejét. Ez az Omega és az O tényleg csak hivatkozások. Ők jelölési parancsikonokat mondván: milyen gyorsan a lehető legjobb ügy algoritmusunk run, és milyen lassú a legrosszabb esetben is a mi algoritmus futni? Csináljuk egy pár ilyen, és ezeket is kiterjed A rövid az aszimptotikus jelölést, amelyet én nagyon ajánlom. Jackson volt egy igazán jó munkát végzett. A bináris keresés, beszélünk bináris keresés mint egy algoritmus, és mi általában beszélni róla szempontjából a nagy O. Mi az a nagy O? Mi az a leghosszabb futási idő a bináris keresés? [Student] N ²? Bezárás, azt hiszem, hasonló. Ez sokkal gyorsabb, mint ezt. [Student] Binary? >> Ja, bináris keresés. [Student] Ez log n. Log n, így mit log n jelent? Ez felezi meg minden iteráció. Pontosan, így a lehető leglassabb esetben, azt mondják, ha van egy rendezett tömbben egy millió egészek, és a szám, amit keres az vagy az első elem a tömbben, vagy az utolsó elem a tömbben. Ne feledje, hogy a bináris keresés algoritmus működik nézi most a középső elem, látta, ha ez a meccs, amit keres. Ha igen, akkor nagy, megtalálta. A legjobb esetben, hogy milyen gyorsan működik a bináris keresés futni? [Diákok] 1. 1, ez az állandó idő, nagy O 1. Igen. [Diák] Nekem van egy kérdésem. Amikor azt mondod log n, érted képest 2-es alapú, ugye? Igen, úgy, hogy ez a másik dolog. Azt mondjuk log n, és azt hiszem, amikor én voltam a középiskolában Mindig is feltételezte, hogy log volt bázis 10. Igen, igen, jelentkezzen alap 2 tipikusan az, amit használ. Ismét megy vissza a bináris keresés, ha keres vagy az elem a legvégén, vagy az elemet a legelején, mert indul a közepén és akkor dobja melyik fele nem felel meg a kritériumoknak, amit keres, és megy a következő fél, és a következő félévben, és a következő félévben. Ha én keresem a legnagyobb elem a millió integer tömb Fogom felére ez legfeljebb log 1 millió alkalommal mielőtt véglegesen tesztelése és látom, hogy az elem keresem van a legnagyobb, vagy a legmagasabb index a tömb, és hogy lesz log n, jelentkezzen 1 millió alkalommal. Bubble sort. Srácok emlékszem a buborék rendezési algoritmus? Kevin, tudsz adni nekem egy gyors bedugni, hogy mi történt a buborék rendezési algoritmus? [Kevin] Alapvetően ez megy át mindent a listán. Úgy néz ki, az első kettő. Ha az első nagyobb, mint a második, hogy swap őket. Ezután összehasonlítja második és a harmadik, ugyanaz a dolog, swap, harmadik és negyedik, egészen. Nagyobb számok nyomon követi majd a végére. És miután azonban sok hurok kész. Pontosan, szóval mi Kevin azt mondta, hogy fogjuk nézni nagyobb szám buborék végéig a tömb. Például, nem bánja, séta nekünk ezt a példát, ha ez a tömb? [Kevin] You viszem 2 és 3. 3 nagyobb, mint 2, ezért cserélni őket. [Nate H.] Jobb, ezért csere ezeket, és így kap 2, 3, 6, 4, és 9. [Kevin] Ezután hasonlítsa össze a 3 és 6. 3 kisebb, mint 6, így hagyjuk őket, és 6 és 4, akkor azt cserélni őket, mert a 4 kisebb, mint 6. [Nate H.] Rendben, tehát kapok 2, 3, 4, 6, 9. [Kevin] És 9 nagyobb mint 6, így hagyja. És mennék vissza az újra. [Nate H.] Am tettem ezen a ponton? >> [Kevin] Nem És miért nem vagyok kész ezen a ponton? Mert úgy néz ki, mint az én tömb rendezve. Én néztem rá. [Kevin] Menj át újra, és győződjön meg róla, hogy nincs több swap mielőtt teljesen megáll. Pontosan, így meg kell, hogy megy keresztül, és győződjön meg arról, hogy nincsenek-ügyletek hogy tudod, hogy ezen a ponton. Ez tényleg csak a szerencsés, ahogy mondtad, hogy végül Csak kellene, hogy 1 áthaladnak és mi rendezve. De, hogy ezt az általános esetben akkor tényleg meg kell ezt újra és újra. És valóban, ez volt egy példát a lehető legjobb esetben, mint láttuk a problémát. Láttuk, hogy a lehető legjobb ügy n. Mentünk át a tömb 1 alkalommal. Mi az a lehető legrosszabb esetében ez az algoritmus? [Kevin] N ². És mit jelent, hogy néz ki? Mi lenne egy tömböt úgy néz ki mint, hogy telne n ² idő? [Kevin] [hallhatatlan] rendezve. Pontosan, úgyhogy ha lenne a tömb 9, 7, 6, 5, 2, 1. A 9 lenne buborék egészen. Az elegyet 1 iteráció mi volna 7, 6, 5, 2, 9. Majd a 7 lenne buborék fel, 6, 5, 2, 7, 9, és így tovább, és így tovább. Meg kéne, hogy menjen át az egész tömb n-szer, és akkor tényleg kap valamivel pontosabb, mint ez a mert egyszer már elköltözött a 9 egészen bele az utolsó lehetséges helyzetben tudjuk, hogy soha nem kell összehasonlítani ezt az elemet újra. Ha egyszer elkezdünk bugyogott a 7-ig tudjuk, hogy képes megállítani, ha a 7-igaza van, mielőtt a 9 hiszen már összehasonlítottuk a 9 rá. Ha ezt olyan intelligens módon, ez nem igazán, azt hiszem, hogy sok időt. Nem fogod összehasonlítani az összes lehetséges [hallható] kombinációk minden egyes alkalommal, amikor megy keresztül minden iteráció. De mégis, amikor arról beszélünk, ezen felső határ azt mondjuk, hogy nézed n ² összehasonlítások végig. Menjünk vissza, és mivel kezdünk egy kicsit rövid idő alatt Azt mondanám, akkor feltétlenül menjen át a többi ebben a táblázatban, töltse ki mindent. Gondolj példák. Gondolj konkrét példák. Ez nagyon praktikus és hasznos csinálni. Rajzold ki. Ez a fajta tábla, mint te menj át a számítástechnikában akkor tényleg elkezd ismeri ezeket fejből. Ezek azok a kérdések kapsz interjúkat. Ezek olyan dolgok, hogy jó tudni, és arra gondolok, az él az esetekben valóban rájönni, hogyan kell gondolkodni tudva, hogy a buborék rendezheti a lehető legrosszabb tömb rendezni az, hogy az egyik, hogy ez fordított sorrendben. Mutatók. Beszéljünk egy kicsit a mutató. Az utolsó néhány perc van itt Tudom, hogy ez olyan dolog, együtt fájl I / O, hogy meglehetősen új. Amikor beszélünk mutató az oka akarunk beszélni mutatók azért van, mert az egyik, amikor dolgozunk C mi tényleg egy viszonylag alacsony szinten, mint a legtöbb modern programozási nyelv. Vagyunk valójában képesek manipulálni a változók a memóriában, kitalálni, hogy hol ők ténylegesen található a RAM. Miután elment, hogy az operációs rendszer osztályok meglátja , hogy ez megint csak egyfajta absztrakció. Ez valójában nem ez a helyzet. Megvan a virtuális memória, ami elrejti a részleteket tőlünk. De most akkor feltételezhető, hogy ha van egy program, Például, ha elindulnak a Caesar titkosító program- Majd kapcsolja vissza a iPad valóban gyors- hogy a kezdet kezdetén a program, ha van, mondjuk, 4 gigabájt RAM a laptop, kapsz félre ezt a nagy darab, és hívjuk ezt a RAM. És kezdődik egy helyen fogunk hívni 0, és végződik egy hely, hívjuk 4 gigabyte. Én tényleg nem tud írni. Ember, mely csapkodott. Amikor a program végrehajtja Az operációs rendszer carves up RAM, és ez határozza meg a különböző szegmensek különböző részeit a program létét Le van ez a terület egyfajta senki földje. Amikor elmész egy kicsit távolabb van megvan valójában az a hely, ahol a kódot a program életében. Ez a tényleges bináris kód, hogy futtatható fájl ténylegesen lesz töltődik be a memóriába futtatásakor a program, és él a kód szegmensben. És ahogy a program végrehajtja a processzor nézi ezt a kódot részes hogy kitaláljuk, mi a következő utasítás? Mi a következő sort úgy kell végrehajtani? Van még egy adat szegmens, és ez az, ahol a karakterlánc konstansok kap tárolni, amit használ. Aztán feljebb van ez a hely az úgynevezett kupac. Mi hozzáférés memória ott használatával malloc, majd felé legtetején a program ott van a verem, és ez az, ahol már játszott a legtöbb elején. Ez nem skála, vagy ilyesmi. Sok ez nagyon gép függő, operációs rendszer függő, de ez viszonylag mennyire dolgok chunked fel. Ha fut a program, és állapítsa meg a változó nevű x- Fogom felhívni a másik mezőben lent, és ez lesz a RAM is. És fogok nézni. Majd felhívni recés vonalak jelzik, ez csak egy kis része a RAM és nem az egészet, ahogy felhívni a tetején. Ha kijelentem, egy egész nevű változó x, akkor, amit valójában kap egy leképezés tárolt szimbóluma táblázatban a programom amely összeköti a nevét x ennek a régiónak a memória, hogy én már kidolgozott itt a függőleges vonalak. Ha van egy sor kódot a saját programot, amely azt mondja, x = 7 A processzor tudja: "Ó, oké, tudom, hogy x él ezen a helyen a memóriában." "Én megyek előre, és írjon a 7 ott." Honnan tudja, hogy mi ez a helyszín van a memória? Nos, ez mindezt fordítási időben. A fordító gondoskodik felosztása, ahol az egyes változók menni és létrehozhatna egy különleges mapping vagy inkább összeköti a pontokat között, egy szimbólum, és hová megy, a változó neve és ha ez fog élni a memóriában. De kiderül, hogy mi is valójában elérheti a mi programokban is. Ez lesz fontos, amikor elkezdünk beszélni néhány adatszerkezetek, amelynek fogalmát, hogy fogunk bemutatni a későbbiekben. De most, hogy mit tudok, hogy tudok létrehozni egy mutatót ezen a helyen, x. Például, létrehozhat egy pointer változó. Amikor létrehozunk egy pointer változót használjuk a csillag jelölést. Ebben az esetben ez azt mondja, megyek, hogy hozzon létre egy mutatót int. Ez a típus, mint bármely más. Azt, hogy ez egy változó, mint y, és aztán állítsa megegyezik a címet, egy címet. Ebben az esetben tudjuk meg y pont az x azáltal, hogy a címét x, amelyhez köze jel, és aztán állítsa y mutasson rá. Mi ez lényegében azt jelent, ha megvizsgáljuk a RAM ez létrehoz egy külön változót. Meg fog nevezni y, és ha ezt a kódsort végrehajtja ez valóban létre fog hozni egy kis mutató, amelyhez jellemzően készít, mint a nyíl, és azt állítja, hogy pont y x. Igen. [Student] Ha x már a mutató, csak nem kíván int * y = x ahelyett, hogy a jelet? Igen. Ha x már egy mutató, akkor készlet 2 mutató megegyezik egymással, amely esetben y nem mutatnak x, de utal arra, hogy bármi x mutat. Sajnos kifogytunk az időből. Azt mondanám, ezen a ponton, akkor erről beszélni offline, de azt mondanám, kezdődjön meg a munka révén ezt a problémát, # 14. Láthatjuk, van-e már egy kicsit töltve itt. Láthatjuk, hogy amikor azt mondjuk, 2 mutatók, int * x * és y, és vegye figyelembe, hogy a mutató a * mellett a változó volt valami, ami történt az elmúlt évben. Kiderült, hogy ez hasonló ahhoz, amit csinálunk ebben az évben. Nem számít, ha írsz a * amikor kimondja a mutatót. De írt a * mellett a típus mert ez egyértelművé teszi, hogy te nyilvánító pointer változó. Láthatjuk, hogy kimondja a 2 mutatókat ad nekünk 2 doboz. Itt, amikor elindultunk x egyenlő malloc ez mit mond a hatályon kívül helyezését memória a kupac. Ez a kis doboz itt, ebben a körben, található a kupac. X mutat rá. Ne feledje, hogy y még mindig nem mutat semmit. Ahhoz, hogy memória tárolja a számot 42-ba x szeretnénk használni, amit jelölést? [Diák] * x = 42. Pontosan, * x = 42. Ez azt jelenti, kövesse a nyilat, és dobja 42 ott. Itt, ahol mi meg y és x már y mutat x. Ez megint olyan, mint amit Kevin mondott, amikor elindultunk y egyenlő x-szel. Y nem mutat x. Inkább ez rámutatva, hogy milyen x mutat is. És akkor végül ez utóbbi rovatban van 2 lehetséges dolog, amit tehettünk. Az egyik, mondhatnánk * x = 13. A másik dolog, mondhatnánk, Alex, tudod, mit tehetünk itt? Mondhatjuk * x = 13 or- [Student] Mondhatni int bármi. [Nate H.] Ha ezt nevezik int változót tudnánk csinálni. Azt is mondhatnánk, * y = 13, mert ők mind mutat ugyanazon a helyen, így lehet használni akár változó eljutni oda. Aha. >> [Student] Mi lenne kinézni, ha csak mondjuk int x 13? Ez lenne nyilvánításáról egy új változót nevű x, ami nem működik. Mi volna az ütközést, mert kijelentette, x, hogy egy mutató itt. [Student] Ha csak volt ez a kijelentés önmagában mi lenne kinézni szempontjából a kör? Ha lenne x = 13, akkor mi volna egy dobozt, és ahelyett, hogy egy nyíl jön ki a dobozból leszünk rajzolni, mint csak a 13. [Student] A mezőbe. Oké. Köszönöm, figyel, és sok szerencsét a Quiz 0. [CS50.TV]