DAVID MALAN: Rendben. Tehát ez CS50, és ez Most a hét elején három. Tehát eddig, most már Készítettem programokat C úgy néz ki, egy kicsit valami ilyesmi itt. Szóval van egy pár éles tartalmazza a tetején. Van int, fő, érvénytelen, és akkor valamit csinálni a közepén, néhány kis kódrészletet az adott funkció. De kulcsfontosságú volt az a tény, hogy mi már azt semmisnek itt. Így érvénytelen, mind az ebben az időben, meghatározza, hogy ez a program, futás közben, csak akkor lehet végrehajtani keresztül a nevét. Akkor nem írja más szavakkal vagy számok után a program nevét, amikor futtatja. Így például, ha a program voltak összeállítani egy nevű fájlt Helló, meg tudná csinálni ./hello, de ez van. Az egyetlen módja, hogy meg Segíti a program az hívja a funkciót. Például, hogy milyen funkciót már mi is használnak eddig hogy közreműködött a felhasználó? Közönség: A string. DAVID MALAN: Ahhoz, hogy szöveget, vagy kap int, vagy láttad mások, akkor is, ha nem használják őket még, kap, mint a hosszú, hosszú, és a hasonlók. De tegyük fel, hogy mi tényleg akar kezdeni írás programok, amelyek kicsit sokoldalú, és, őszintén szólva, egy kicsit mint a parancsokat, hogy már már egyre remélhetőleg egy kicsit hozzászokott. Mint a cd tér Dropbox. Ez természetesen, változások a könyvtár, feltételezve, hogy te vagy John Harvard otthonában könyvtár, a Dropbox mappában. Közben egy hasonló parancs létrehoz egy új könyvtárat pset2, ahogy lehet, hogy már vagy hamarosan a probléma meg két. Készíts Helló, persze, a parancs hogy épít a program neve helló fájlból nevű helló pont c. És minden ilyen esetben, most is megvolt ad érvet az úgynevezett parancsot, a villogó prompt, , hogy hogy tudja, mit kell építeni, és így hogy mkdir tudja, mit mappát létrehozni, és így, hogy a CD tudja ahol akarsz menni. De eddig azt mondogatja hogy fő, az alapértelmezett funkció, van egy üres kifejezés belsejében ezek a zárójelek, ami azt jelenti, hogy nem tud semmilyen érvet. Tehát a mai naptól, mit fogunk csinálni van, mi fog kezdeni támogatja a dolgok, mint ez is. Tény, hogy ebben az esetben, amit általában nem manuálisan, Tedd már ezt Számunkra nincs egy, hanem egy, kettő, három további vonósok után a program neve csengés. Szóval hogyan lehet ezt megvalósítani? Nos, a mai naptól, azokban az esetekben, ahol szeretnénk hogy bemenet a úgynevezett parancssor, megyünk elkezd hozzá itt mi van yellow-- helyett űrt int argc vessző karakterlánc argv nyitva tartó záró zárójel. Most ez érdekes egy pár oka. Az egyik, hogy fog írjunk programok, amelyek egy kicsit dinamikusabb. De még feltűnően, ez meg fog nyitni most egy beszélgetést, hogy mi tömbök tud igazán használni, amit a húr valóban a motorháztető alatt, amíg a jövő héten, amikor elkezdjük búvárkodás a még mélyebb, mint a hogy a gép hogy minden ez a cucc munka. De most, hadd dolgozzon, talán a kép. Ha írsz egy programot A fő nyilvánított Ily módon, úgy, hogy fő két argumentuma egy int és-- milyen adattípus a második érv? Közönség: Array. DAVID MALAN: Array. Tehát úgy néz ki első pillantásra, mintha egy húr, de észre a szögletes zárójelben. Emlékezzünk utoljára be fogalma egy tömb. És tömbök szögletes zárójelek pár környezetben. Lehet használni a tér zárójelben, hogy menjen be egy tömb és kap egy adott elem, mint konzol 0 vagy konzol 1-es vagy 2-konzol. De láttuk, ha röviden, a múlt héten, hogy Ön is használja ezeket szögletes zárójelben állapítsa meg a tömb méretét, ha tudod előre, hogy hány ints vagy hány vonósok, vagy amit valójában akar. Így kiderül, ott a egy harmadik összefüggésben itt hogy nincs több belső A szögletes zárójelben. Ha megad, mint én itt, a nevét valami hasonló argv, ami csak egy divatos módon mondván érv vektor, ami egy másik képzelet módja mondván, egy sor érvet, nyitó zárójel záró zárójel csak azt jelenti, hogy nem feltétlenül előre tudni, hogy milyen nagy a tömb lesz, de tudod, hogy lesz egy tömb. Tehát, ha nem tudja a szám ne tedd oda, nyitott konzol záró zárójel azt jelenti, hogy argv nem karakterlánc, hanem egy sor húrok. Tehát szintaktikailag, ha gondoljon vissza a múlt héten, ez nagyon hasonlít a mondás valami hasonló int korosztály nyitott zárójel, és akkor valami azt követően. Mit is jelent ez néz ki? Nézzük valóban készít egy képet. Tehát, ha fut a program a Fő miután két érvet meghatározott belső e zárójel, akkor lényegében legalább két darabokat memória adta neked a motorháztető alatt. Egy, ahogy én felhívja mivel ez téglalap, lesz, hogy hívják argc. És ahogy egy gyors bedugni, mi az adat típusa argc? Szóval ez egy int. Így a szám megy menni argc-- felváltva arra, hogy áll a vita számít. Közben én készült argv tömbként. És nem igazán tudom hogy mennyi ideig lesz, így a mai célokra dot dot dot. Ez lehet, hogy bizonyos hosszúságú. De már képen legalább négy téglalapok. Így argv egy darab memória tárolja string string karakterlánc dot dot dot, és argc csak egy darab A memória egy egész szám. Tehát most, most egy kicsit pontosabban. Ha, ha már vonósok ebben tömb, az úgynevezett argv, azt akarom, hogy őket külön-külön, mint a múlt héten, fogjuk használni jelölés mint argv konzol 0 hogy az első dolog, amit egy tömbben. Argv konzol 1, hogy a második dolog, és így tovább. A kulcs itt, hogy mi még mindig 0 indexed-- mi még mindig számít a 0-ra. Így most csak a ténylegesen tenni valamit ebben. Ha én lefordítani a program neve Hello nevű fájlt Helló pont c, és aztán futtatni a programot DOT perjel Helló, Mit jelent a számítógép, a laptop, néz ki, mint a motorháztető alatt a pillanat futok pont slash szia és üsd le az Enter? Nos, ez talán mit lehetne leírni a tartalom a számítógép memória, vagy RAM-- Random Access Memory. Más szóval, a számítógép, valahogy neked varázslatos, helyezi az 1. számú argc, AKA argcount, és ez teszi a szó szoros értelmében a húr ./hello ARGV konzol 0-ra. Fogalmam sincs, őszintén szólva, mi az argv tartó 1 vagy 2 vagy 3, mert ha a felhasználó nem gépelt semmit mellett ./hello, fogjuk feltételezni, hogy ezek a legvalószínűbben szemetet értékeket, hogy úgy mondjam. Ezek a darabok memória létezik, de ez nem rajtunk múlik nézni őket, mert az argcount csak egy. Most, közben, ha levelet egy program futtatása, cd, ami pontosabban a parancs, a villogó prompt-- cd tér Dropbox--, amikor elindul, hogy hatékonyan, amikor a cd program fut, argc, belsejében a számítógép memóriája, az a a legtöbb legrövidebb második a 2-es szám. És akkor argv tartó Õ CD, ARGV tartó 1-nek Dropbox, és persze a parancs befejeződött, így az összes ez a memória lényegében elmegy és használják valami mást. És ezért mondom Csak egy pillanatra. Közben, ha nem teszünk mkdir pset2, A kép úgy néz ki, közel azonos, de különböző húrok benne argv. Ha megteszem csengés kötőjel helló Helló pont c, ugyanezt a gondolatot. Több dolog van töltve argv és argc, persze, 4. Más szóval, még akkor is, ha ez a tömb Lehet, hogy pont pont pont, az egyes változó hosszúságú, hogy úgy mondjam, Ön mindig tudja, hol a vége van, mert argc fog mondani mi pont abba kell hagynod nézi elemek argv. Csak akkor nézd meg négy összességében ebben az esetben. Úgyhogy most egy pillantást, talán egy egyszerű program. Az egyik, hogy csak azt mondja, helló hogy valaki, mint Zamyla. Szóval azt állítják, fogok írni egy programot Egy pillanat, amelyen keresztül tudtam csinálni ./hello tér Zamyla, és majd szeretnék a programom, hogy nyomtassa ki valamit szuper-egyszerű, mint a "Hello, Zamyla." Most, a múltban már használt getstring. Tehát a múltban, akkor is, ha Ön új a programozás, Valószínűleg te is felkap egy program, amely getstring majd használja printf köszönni Zamyla. De ne használja getString ezúttal. Hadd inkább bemegy a Appliant és nem tartalmazzák a standard I O pont h. Hadd is CS50 pont h. Most int main, és most én vagyok nem fog csinálni érvénytelen ma. Ehelyett fogom csinálni int argc karakterlánc argv nyitva tartó záró zárójel, hogy nem ad számot. És most itt van a úgynevezett csinálni. Mit fogok csinálni most vagyok fog tenni egy kis ugrás a hit, Fogom feltételezni, hogy a felhasználó fogja használni ezt a programot helyesen, és én csak fog do printf Helló,% sn. Tehát semmi új nincs. De azt akarom, hogy most is, amit szó a felhasználó beír után a program nevét. Tehát, ha én ./hello tér Zamyla, én szeretnénk valahogy programból való idézzük idézet vége "Zamyla." így mehet az én érvelés vektor, a tömb vonósok, és ha a parancs, Ismét volt ./hello hely Zamyla, milyen számot akarok hogy hozzanak argv itt? Közönség: 1.. DAVID MALAN: 1, mert tartó 0. kiderül lesz az a program nevét, ahogy láttuk. Tehát konzol 1 az első szó hogy én, a felhasználó beírt. Én megyek előre, és mentse meg. Én megyek be a mappába ahol elhelyezte ezt a fájlt. Azt fogom tenni, hogy helló 3. Comp IO rendben. ./hello Zamyla Enter billentyűt. Mit csináltam rosszul? Én elfogták a meglepetés magam csak egy pillanatig. Mit csináltam rosszul? Közönség: név. DAVID MALAN: A fájl valójában az úgynevezett hello3.c. És én, hogy csak a következetesség, mert már volt hello.c által a múlt az online kódot. Szóval erősít ez ./hello konzol kötőjel 3 Zamyla. Az Enter billentyűt. És most már helló, Zamyla. Közben tudom változtatni ezt a legyen Rob, vagy tényleg bármilyen más szó. De nézzük meg a sarokban eset. Mi lehet vársz fog történni, ha Nem írja senki nevét egyáltalán? Közönség: Error. DAVID MALAN: Hiba valamiféle, talán. Lássuk. Az Enter billentyűt. Null. Tehát printf ténylegesen egy kis védő minket itt, és a szó szoros értelmében a nyomtatás nyitott zárójel null, de még rosszabb dolgok történnek. És csak azért, hogy bizonyítani amit feltétlenül nem kéne, menjünk a itt és indítsa szaglászik. Nem igaz? Ha tudom, hogy a képet memória lényegében ez, argv tartó 1-nek Zamyla, ARGV tartó 0-nak ./hello vagy ./hello-3. Mi van a konzol 2-ben? Így tudok válaszolni, hogy kérdés magamat, ugye? Én is csak megváltoztatni a 1 2. Most már újrafordíthatod Helló 3, ./hello3 Nézzük nagyítás és nyomja meg az Entert. Hoppá. Nincs idézőjel. Érdekes. Szóval ez a fajta hűvös mi van még itt. Szóval, mi van még benne az én laptop? Mentsük el a konzol 3. Tedd hello3, ./hello-3. Kíváncsi. És most térjünk igazán bold-- 50. Szóval ez tényleg búvárkodás mély be a számítógép memóriájában. 50. indexeket. Tehát, hogy helló 3 ./hello-3. Kíváncsi. Rendben, most én vagyok fog kapni meggondolatlan. Menjünk 5000. Rendben. Ezért hadd újrafordítani. Tedd hello3, ./hello-3. OK. Most néhányan közületek, előfordulhat, egy villanykörte megy le. Hányan vannak Látta ezt az üzenetet korábban? OK. Igen, miért? Odds are-- és ott különböző dolog, hogy okozhatja ezt, és nyilvánvalóan te jó company-- van világosan okozott az úgynevezett a szegmentációs hiba. És hosszú történet rövid ma, megérintette a szegmens memória hogy nem kellett volna. Amennyiben a szegmens csak azt jelenti, egy darab memória, amit nem kellett volna. Most a számítógép biztosítja, hogy ha én fuss ./helloZamyla hogy én tud fogni argv legyen konzol 0. és ARGV konzol 1. De argc érték 2, ez azt jelenti, én vagyok csak allowed-- ez a fajta, a becsület system-- érintse tartó 0. és konzol 1. Ha megy minden tovább, ott van feltétlenül lesz a memória is. My RAM létezik fizikailag a számítógép. De ki tudja, mi van ott? Sőt, én futó több program egy időben. Talán van seen-- ha nem lennék ezt a Appliant de az én Mac vagy PC-- Esetleg van látta a tartalmát egy e-mailt. Lehet, hogy láttam egy pillanatra üzenet, amit nemrég küldött. Bármi, ami lehet elhúzódó körül a memóriában volna elérhető útján ez önkényes szögletes zárójel jelölés. Vagy, ami még rosszabb, lehet, hogy találtam az egyik jelszó hogy én nemrég beírtam, hogy a a program már a memóriában tárolt így hitelesítésére engem, és akkor csak ilyen hagyta A RAM amíg kilép a program. És valóban, ez az egyik a veszélyt, és egy a hatáskörök Az egy nyelv, mint a C- Van szabad hozzáférést A teljes tartalom A program memória, és mi rossz fiúk még nem azokban cases-- különösen akkor, ha kap a webes programozás vége felé a félév, akkor újra ezt topic-- van piszkálni körül, potenciálisan valaki számítógép memória és talál olyan furcsa dolgok mint láttuk ott. Vagy ami még rosszabb még, jelszavak, hogy vagy ő is majd, hogy nem rossz dolog. Tehát nyilvánvalóan nem kellett volna ezt, mert furcsa dolgok kezdenek történni. Valóban, ez egy program összeomlik. Ez lenne az egyenértékű A Mac OS és a Windows a program ablaka, csak eltűnik. Váratlan hiba történt. A parancssori környezet látunk valami ilyesmit. De ezért, hogy én vagyok csak meg kell érinteni memória, ami nem az enyém. Szóval védekezni ez a kicsit másképp nézi a program itt. Szóval, megint a csontváz hogy láttuk earlier-- és én már kiemelt ezúttal int. És ezúttal Main valóban vissza értéket. Annak ellenére, hogy a legtöbb előadás példa, amit még egyszer sem használt vissza semmit a fő. Mi csak írni printf közel kapcsos zárójel és ennyi. De szabad, amit a fordító csinál az Ön számára, hatékonyan, visszatér 0 az Ön számára. Kiderült out-- és ez egy kicsit counterintuitive--, hogy a 0 jó. Ez nem azt jelenti, hamis önmagában. 0 a jó, és a nem-0 érték, a világ úgy döntött, jelentheti a hibát. Tehát, ha valaha is elrontotta valamit a számítógépen, vagy a program most halt meg, és már ütött néhány téves ablak a képernyőn, mondván: hiba negatív 49 vagy hiba 23-- néhány látszólag önkényes value-- ez mert a programozó kódolt érték, mint a negatív 49 vagy pozitív 23. képviseli tetszőleges számú, merem állítani, 4 milliárd lehetséges dolgok hogy ami rossz a program. Szóval, hogyan lehet, hogy veszek Használja ki ezt magamnak? Nos, hadd nyit egy programot hogy írtam előre, és piszkálni körül az interneten az úgynevezett Helló 4. És ez szinte teljesen megegyezik, kivéve, hogy Ennek van egy kis hiba-ellenőrzés. Ebben az esetben, én már ismét kijelentette, a fő, hogy két érv, de ez alkalommal, a 17. sorban, értesítés Csinálok egy kis józanság csekket. Én ügyelve arra, hogy argc értéke = 2. Mert ha igen, hogy azt jelenti, hogy nyugodtan érintse meg nem csak konzol 0, de konzol 1. És megy előre, és nyomtassa ki, Ebben az esetben, vagy Rob Zamyla vagy bármi szót gépelt ki. És most csak azért, hogy egy kicsit helyes, Megyek kifejezetten vissza 0 jelenti minden rendben van. Semmi rossz nem történt. De a hagyomány, megyek vissza 1, vagy őszintén bármely nem 0 érték, ha valami baj történik. Most a felhasználó nem fog igazán észre, mi folyik itt. Valóban, ha bemegy a könyvtárba, mi nagyítás, és nem teszik Helló 4, ./hello-4 Zamyla úgy viselkedik, mint gondolom. De ha inkább nem írja bármit, semmi sem történik, de nem lezuhan. És ha én inkább valami mint Rob egy proktor A Thayer-- megosztása önkényes információ. De értesítés, ARGV 1, 2, 3, 4, és 5 most már létezik a memóriában. Ez is, az nem az, amit a program szerint, mert már ellenőrizte, hogy argc értéke = 2, vagy sem. Szóval most már védő ellen. Most, mint egy félre, akkor a programmer-- vagy inkább mi az users-- soha többé nem látom, hogy 0 vagy 1, de egy nevű eszköz debugger, vagy egyéb eszközök, mint látni fogjuk előtt hosszú, akkor a programozó lehet látni, hogy mi lesz baj belül a program. Tehát, bármilyen kérdése van argc? Igen. Közönség: Láttam, ahol nem volt a karakter, [nem hallható] csak azt mondta, húr csillag d, mint karakter csillag vessző. Vannak azonos itt? DAVID MALAN: vannak. A kérdés tehát az, hogy van néha látott programok mint ez, hogy nem mondjuk karakterlánc argv konzol hanem mondjuk valami mint char csillag argv konzol. És van még más változatok, hogy lehet látni. Ők valóban egyenértékűek. Most már ezek a fajta képzés kerekek a formájában a húr a CS50 könyvtár, de alig több mint egy hét vagy úgy megyünk, hogy távolítsa el az obstrukció teljesen és ténylegesen nézzük meg, mi a karakter és a csillag vannak, és hogy ezek hogyan érintik a memória képviselet általában. Tehát mi jön vissza, hogy a. További kérdések a mi ARGV vagy argc? Igen. Közönség: Miért is vissza hiba [nem hallható]? DAVID MALAN: Miért tette hibaüzenetet only-- oh! Az előző esetben, amikor voltak futzing körül memóriával, miért csak egy hibaüzenet amikor én tényleg írt egy nagy szám? A rövid válasz az, hogy csak szerencsém volt. Általánosságban elmondható, hogy egy számítógép memóriát darabokban, és ez adott nekem egy elég nagy darab, hogy Kaptam el, anélkül, hogy észrevették, A megható konzol 2 konzol 3, konzol 50, de amint toltam szerencsém, mentem túl a határait a darab memória Az operációs rendszer adta nekem. És ez az, amikor az erősítve le, és azt mondta, nem. Szegmentációs hiba. Igen. Közönség: Hogyan működik a számítógép tudják az értékét argc? DAVID MALAN: Hogyan működik a számítógép értékének megismeréséhez argc? Amikor futtatja a programot, hogy a program, a természet a villogó prompt, adják a tömb szavak, amelyeket beírt A gyors, hogy volt gépelt a billentyűket. És ez így van az operációs rendszer, amely lényegében feltölti legfontosabb érveit az Ön számára. Szóval ez az egyik szolgáltatás hogy kapsz, valami titokban a motorháztető alatt a az operációs rendszer. További kérdések? Igen. Közönség: Mit jelent a core dump jelent? DAVID MALAN: Mit core dump jelent? Szóval ez egy jó kérdés. És hadd menjek vissza a ebben a könyvtárban van. És észre fogod venni, hogy Van egy új fájlt is. Ez csakugyan hívják mag, és ez valójában általában egy tisztességes méretű fájlt. Amely lényegében egy pillanatkép tartalmát a program memória vagy RAM amikor az lezuhant. És ez hasznos lesz, potenciálisan, diagnosztikai, egyszer beszélünk egy későbbi előadás és részben a hibakeresés, mert akkor ténylegesen a egyenértékű egy digitális boncolás az a fájl, hogy segítsen kitalálni mit csináltál rosszul a programban. Igen. Közönség: Van argc a parancs maga, vagy akkor nevezd meg valamit? DAVID MALAN: Jó kérdés. Van argc parancs önmagában vagy akkor nevezd meg valamit? Ez biztosan nem egy parancsot. Ez egyszerűen egy változó név vagy az érvelés nevét, és így teljesen mi Nevezhetjük ezt ize, nevezhetjük ezt sáv, amelyek általában hogy a go-to szavak, hogy a számítógép tudós megy. De a hagyomány, az általunk használt argc és argv. De ez csak egy ember egyezmény, semmi több. Rendben. Szóval kiderült, én voltam mondja egy kis fehér lie-- és őszintén szólva, a jövőben, látni fogod, óta azt mondjuk más hazugságokat. De most, megyünk hogy húzza vissza egy ilyen. Ebben az esetben is, ha azt korábban futott egy program, mint ./hello vagy ./hello-3 Zamyla, mi volt a tartalma a számítógép memóriájában néz nagyjából hasonló ezt. Hanem arra, amit a string. Mit is mondunk egy héttel ezelőtt, amit egy karakterlánc valójában a motorháztető alatt? Közönség: Array of karakter. DAVID MALAN: Ez egy tömb karakter, igaz? Tehát lehet, hogy egy sor vonósok, de viszont a húr egy tömb karaktereket. Tehát, ha azt szeretné, hogy legyen anális amikor rajzolok ezt a képet, Én tényleg kell rajz ez egy kicsit több, mint ez, ahol minden ilyen indexek az én argv tömb, van egy egész húr önmagában hogy maga is egy tömb. És most a fehér hazugság mondunk ma az, hogy a kép nem meg egészen, mint ez. Tény, hogy a kis négyzet rendszerint nem a nagy téglalap ott. De majd jön vissza, hogy nemsokára. De ez ./hello backslash 0, hogy mivel a különleges karakter kijelölte a végén egy húr, és van egy másik sorra Zamyla nevét. Szóval, mit jelent ez? Nos, hadd menjen előre, és nyit két másik példát Az online hozzáférhető. Az egyik az úgynevezett argv1.c és a másik jelentése argv2. Ez egy szuper egyszerű program, amely eltér a korábbi programok az, hogy most én vagyok a argc és argv itt. És most integrálja a hurok A 18. sor, az i = 0-ig argC. És mit fogok csinálni ezzel kódsort itt? Angolul. Ez a nyilvánvalóan használatát mutatja argc. De angol, mit csinál ha futtatni ezt a programot? Igen? Közönség: Meg fog kinyomtatni a képernyőn, ahányszor csak akar. DAVID MALAN: Pontosan. Tehát bármit szavak, írja a parancssorba, akkor fog kérődzik őket rám soronként. Szóval, menjünk előre, és csinálni. Hadd menjek be a könyvtárba és nem teszik argv1 ./argv1. És most hadd tartsa egyszerű. Csináljuk sem először. Tette nyomtassa ki az egy dolog, és hogy ez valóban az a program nevét, mert ez a konzol 0-ra. Ha most azt mondják, ize, meg fog tenni a két, és ha azt mondom foo bar, azt fogja mondani a három dolgot. Most, hogy kissé érdekes, talán. De emlékeztetnek arra, hogy argv egy tömb vonósok, de a karakterlánc egy sor karakter, így tudjuk, hogy a dolgokat egy fokkal és alkalmazza az alapvető logika, és kóddal úgy néz ki, egy kicsit rejtélyes, kétségkívül. De azáltal, hogy a beágyazott hurok, valami hasonló hogy mit lehet előhívni Mario, Például, ha nem így. Így most észre a 19, én vagyok ismét iterálás érveimet, a 0-ig argC. És most sorban 21-- vagyok hitelfelvétel a trükk az utolsó week-- Én ellenőrzése, ami a hossza argv konzol i. Én tárolja, hogy a válasz n. És akkor én integrálása a j on n-ig, ahol j 0 inicializálunk. Így egyezmény számolás. Ha már használta azt, ha van egy beágyazott loop, nem tudod használni megint, egyébként akkor cucc, potenciálisan az érték nincs a belső hurok. Tehát én vagyok a j-egyezmény. Lehet használni k. Ha több, mint k, akkor valószínűleg túl sok fészkelő, jellemzően. De most, észre a printf vonal némileg eltérő. Én nem nyomtat% s vagyok nyomtatás% c, amit, természetesen, helyőrzője a karakter. És most észre szintaxis. Új. Még nem láttam ilyet. De logikailag, ez csak azt jelenti, kap az i-edik karakterlánc argv és kap a j-edik mi? Közönség: Karakter. DAVID MALAN: Karakter abban húr. Tehát a szögletes zárójelek majd a szögletes zárójelek, ez a búvárkodás először a argv a húrok, majd a második szögletes zárójelben j a búvárkodás a karakterek a az adott string argv. És akkor, csak a jó intézkedés, Én nyomtat egy új sort itt. Tehát most hadd menjen előre, és nyissa egy kicsit nagyobb ablak így látjuk ezt a műveletet. Hadd menjek ebbe a mappába. És most, hogy argv-2-- whoops-- hogy argv-2 ./argv 2. Az Enter billentyűt. És ez egy kicsit nehéz olvasni függőlegesen, de ez valóban a nevét programot, majd egy üres sor. Most hadd menjen előre, és ezt a semmit. Hasonlóan nehezen olvasható, de valóban nyomtatás egy karakter soronként. És ha bár, ez most nyomtatás azok soronként. Így az elvihető itt nem annyira hogy wow, nézd meg ezt a szép új trükk ahol lehet kapni a tartalom A tömb speciális karakterek, hanem az, hogy elvisszük az alapvető ötletek, mint indexelés egy tömb, majd indexeli egy tömb, ami ebben a tömbben, és csak, hogy ugyanazon ötletek kissé bonyolultabb példákat. De az alapok valóban nem változott, még a múlt hét óta. Most ez a fajta időszerű, abban, emlékszem, a hét nulla játszottunk egy telefonkönyv, mint ez. És bár ez nyilvánvalóan fizikai darab papír, akkor milyen gondolni Telefonkönyv tömbként. Természetesen, ha úgy döntesz, hogy újraimplementálni ez darab ilyen darab papír egy számítógép, valószínűleg akkor használni valamit mint egy tömb tárolja az összes ilyen neveket és telefonszámokat egészen keresztül Z. Szóval ez jó, mert a ez lehetővé teszi számunkra a lehetőséget, talán, hogy fontolja meg, hogyan lehet ténylegesen alkalmazni valami ilyesmi. Mint egy sor ajtók itt. Tehát, ha én could-- kell egy önként gyere fel. Lássuk. Egy ismeretlen arc talán, ismeretlen arc talán. Mit szólnál a narancssárga? Itt. Narancssárga inget, gyere fel. Menjünk előre, és most mozog ezek az ajtók szélére, mozgatni ezeket az útból egy pillanatra. Mi a neve? AJAY: DAVID MALAN: Ajay. David. Örülök, hogy találkoztunk. Rendben. Tehát mögött hat ajtók digitálisan a screen-- vagy inkább hét ajtó a screen-- egy csomó számot. És én nem mondtam semmit A advance-- egyeztetett? AJAY: Semmi előre. DAVID MALAN: Csak azt akarom, hogy ne most az, hogy megtaláljuk a számomra, és nekünk, tényleg, a szám 50, egy lépéssel egy időben. AJAY: Number 50? DAVID MALAN: A 50-es. És akkor kiderülhet, mi a mögött mindegyik ajtó egyszerűen érintse meg a képernyőt az ujjával. A fenébe. [Nevetés] [Taps] Nagyon jól sikerült. OK. Van egy szép ajándék díj az Ön számára. Választanod a filmek is tárgyalt a múlt héten. AJAY: Ó, ember. Ó, én még soha nem láttam Spaceballs. DAVID MALAN: Spaceballs. Rendben. Így várj csak egy pillanatra. Hogy-- tegyük ezt a tanítható moment-- hogyan megy a megtalálni a szám 50? AJAY: Úgy döntöttem, véletlenszerűen. DAVID MALAN: Szóval úgy döntött, véletlenszerűen és szerencsém volt. AJAY: Igen. DAVID MALAN: OK. Kiváló. Tehát most már, hogy ne ütött szerencsés, mi mást történhetett volna, mögött ezek az ajtók? Ha megyek előre, és mutatják ezek a számok itt, ők valójában véletlenszerű sorrendben. És a legjobb, amit lehet kész, őszintén szólva, ez a végső soron, a legrosszabb esetben, ellenőrzi őket. Szóval van szuper szerencsés, ami Mi nem nevezném egy algoritmus. Igen, gratulálok. De most let's-- humor engem, ha lehet. Menjünk ezen a lapon itt. És itt vannak a számok egyértelműen , amit úgy tűnik, hogy egy véletlenszerű sorrendben, és voltak. De most, ha én inkább igény hogy ezek az ajtók mögött olyan számok vannak rendezve. A cél most az, hogy is hozzánk a szám 50. De csak algoritmussal és mondja el, hogyan fogsz róla. És ha megtalálja, akkor tartsa a film. Ha nem találod, akkor add vissza. AJAY: Úgyhogy ellenőrizni a végén Először is, annak meghatározására, hogy there's-- [Nevetés és taps] DAVID MALAN: Tessék. Vessünk egy pillantást egy A Ajay elődei, Sean, aki nem volt olyan szerencsés. OK, így a feladat itt, Sean, a következő. Én rejtett mögött ajtók száma hét, de élj néhány ilyen ajtók illetve egyéb nem-negatív számok. És a cél az, hogy gondolni ezt felső sorban a számok csak egy tömb. Mi csak a sorozat darab papírra számok mögött. És a cél az, csak a felső tömb itt, találja meg a hetes szám. És mi majd lesz kritika hogyan kezdjen csinálja. Keressen meg minket a hetes szám, kérem. Nr. 5, 19, 13. Ez nem egy trükkös kérdés. 1.. Ezen a ponton a pontszám nem nagyon jó, így akár meg is tartani fog. 3. Menj tovább. Őszintén szólva, nem tudok segíteni, de csoda mire is gondolt. SEAN: tudom elvenni csak a legfelső sorban. DAVID MALAN: Csak a felső sorban. Szóval van három maradt. Így találja meg 7. [Közönség kiáltások JAVASLATOK] Tehát mind a két volt csodálatos nagyon különböző okok miatt. Szóval, ez az, ahol abbahagyta az imént, és a kulcs betekintést itt volt, ezek az ajtók voltak számok mögöttük, amelyeket rendezett, az ideális elvihető, amelyek, hogy meg tudná csinálni alapvetően jobb ez a második example-- és valóban, ez volt Sean első próbálkozás a véletlen számok ugyanolyan before-- de amint mivel ezek a számok sorrendje, ugyanúgy, mint a telefonkönyv, mit tudsz nyilvánvalóan nem? Vagy hogyan lehet kihasználni ezt a tudást? Igen. Közönség: Menj félúton [nem hallható]. DAVID MALAN: Igen. Pontosan. Tehát Ajay legelső meglátása volt hogy ellenőrizze a végén, ha jól emlékszem, és akkor valami kész A példa gyorsan. De ha elkezdtük csinálni ezt többet módszeresen Ezen a vonalon de talán a kiindulási középen, mert ők sorrendje, amint felfedi a szám 16, ezért azt tudom-- és tegyük pontosan hogy-- mi ezért tudják, hogy 50, a mai eset, van, hogy az a jobb. Tehát csak mint hét nulla, ha mi tépte a telefonkönyv fél és dobta a fele probléma van, ugyanaz a gondolat itt. Tudjuk dobni a másikon A probléma el. És talán, amit talán nem algoritmikusan, ha tudod, hogy 50 legyen jobbra, ha ez bárhol, , megpróbál ott, a közepén a fennmaradó ajtók. Természetesen magasabb 50 mint 42, így tudjuk dobja ezt a többi negyedévében a probléma el, és végül, azonosítani valami hasonló 50. De, mint a telefonkönyv, ezeket a számokat kaptak, hogy nekünk már rendezett sorrendben, ami hagy minket A kérdés, hogyan kap dolgokat rendezett sorrendben? És, őszintén szólva, milyen áron? Ez az egyik dolog, hogy átadta a telefonkönyv majd lenyűgözni a barátok találva Telefonszám nagyon gyorsan, nem igaz? Könnyezés 32 oldal, hogy megtalálja a személy a 4 milliárd oldalt, azt mondta, volt egy extrém példa. De mennyi idő telt el Verizon rendezni, hogy a telefonkönyv? Mennyi idő telt el minket rendezni a hét számot? Ez a kérdés, hogy mi már eddig teljesen figyelmen kívül hagyja. Úgyhogy erre a kérdésre válaszolni most. És kifogytunk a film most, de van egy kis stressz labda. Ha, mondjuk, nyolc önkéntesek nem bánnám, csatlakozik hozzánk itt? Menjünk előre, és igen, mi a helyzet a négyen, három te itt? Kap néhány új arc. És négyen ott? És now-- ne elfogultság itt-- és szám nyolc itt a vég. Gyere fel. Rendben. Szóval mi van itt mindannyian egy szám. Ha azt szeretné, hogy menjen előre, hogy ez a szám. Mi a neve? Artie: Artie. DAVID MALAN: Artie, oké. Te vagy az 1. AMIN: Amin. DAVID MALAN: Amin. David. Te vagy 2-es szám. És megy előre, ahogy én viszont Ön a papírlap, sorban magatokat előtte a zene áll az ugyanabban a sorrendben, mint ott. Andy: Szia, Andy. DAVID MALAN: Andy, örülök, hogy látlak. 3. szám. JACOB: Jacob. DAVID MALAN: Jacob, 4-es számú. Üdvözöljük a fedélzeten. GRANT: Grant. DAVID MALAN: Grant. 5. szám. Alanna: Alanna. DAVID MALAN: Alanna, 6-os szám. Frances: Frances. DAVID MALAN: Frances, 7-es számú. És? Rachel: Rachel. DAVID MALAN: Rachel, 8-as számú. Rendben. Menj előre, és magad ebben a sorrendben. Hadd tegye egyetlen megmaradt zeneállvány a helyén. Hol van egy állvány? OK. Menj előre, és csak tedd a számokat ahol a közönség láthatja őket, a zene áll kifelé. És remélhetőleg, az első józanság ellenőrzés itt-- 4, 2, 6. Oh-oh. Várj egy percet. Jelenleg nincs egy 8. Azt kell, hogy kilakoltatására Önt A példa valahogy. Nr. Nem, semmi gond. Lássuk. Meg tudjuk csinálni ezt. Készenlét. Ott vagyunk. Helyes. Rendben. Szóval, most már 8, 1, 3-7, 5. OK. Kiváló. Tehát a kérdés kéznél van, a milyen költség, és keresztül milyen módszerrel, tudjuk valójában rendezni ezeket a számokat ide hogy mi lehet a fajta munka hátra, végül, és decide-- ez tényleg Lenyűgöző, hogy valóban hatékony, hogy tudok osztani és meghódítani a telefonkönyv? Ez tényleg hatékony, hogy Tudok megosztani, és uralkodni ezeket a digitális darabok A papírt a fedélzeten ha talán fog kerülni nekünk szerencse az idő vagy energia vagy a CPU-t hogy valóban kap adataink a néhány rendezett sorrendben? Szóval fel ezt a kérdést. Tehát először le, ezek a számok nagyjából véletlenszerű sorrendben, és én fogom javasolni egy algoritmus, vagy folyamat amellyel meg tudjuk rendezni ezeket az embereket. Megyek megközelíteni ez nagyon naivan. És én fogom felismerni hogy ez a fajta sokat nekem betakar eszembe körül teljes adatállomány egyszerre. De tudod mit? Megyek, hogy néhány nagyon egyszerű marginális javítások. 4 és 2 elromlott, ha a cél az, hogy megy 1 8. Tudod mit? Megyek, hogy itt srácok cserélni, ha váltani fizikailag álláspontok és a darab papír. Most a 4. és a 6., ezek sorrendben. Fogom hagyni azokat is. 6. és 8, azok érdekében. Elhagyja őket is. 8. and1, elromlott. Ha két nem bánja csere. Most 8 és 3, ha ti is cserélni. 8 és 7, ha ti is cserélni. 8 és 5, ha ti is cserélni. Most vagyok kész? Nem, természetesen nem. De tettem a helyzet jobb, ugye? Mi volt a neve, a 8? Rachel: Rachel. DAVID MALAN: Szóval Rachel hatékonyan bugyborékolt fel elég messzire, egészen a végéig a sor a számok itt. És hogy a probléma ilyen megoldott. Nos, nyilvánvalóan, 2 még mindig szükség van mozogni egy kicsit, és a 4. és a 6. és 1.. De úgy tűnik, hogy ütött a kicsit közelebb a megoldáshoz. Szóval ezt azonos naiv heurisztikus újra. A 2. és a 4., OK. 4 és 6, OK. 6 és 1, mm-mm. Nézzük csere. 6 és 3 mm-mm. Nézzük csere. A 6. és 7. rendben van. 7 és 5, dehogy. Nézzük csere. És most a 7. és 8.. És mi a neved? Frances: Frances. DAVID MALAN: Frances. Tehát most Frances van még egy jobb helyzet, mert most a 7. és a 8. helyesen bugyborékolt fel a csúcsra. Tehát a 2. és a 4., OK. 4 és 1, hadd csere. 4 és 3, hadd csere. 4. és a 6., akkor rendben. 6. és 5. Nézzük csere. És most ezek a srácok jó. Már majdnem ott vagyunk. 2 és 1, elromlott, így cserélni. És most hadd tegye a józanság csekket. A 2. és 3, 3 és 4, 4 és 5, 5 és 6, 6 és 7, 8. OK, így végeztünk. De milyen áron tettem rendezni ezeket a számokat itt? Nos, hány lépést tettem potenciálisan hogy a rendezés során ezeket az embereket? Nos, akkor jöjjön vissza erre a kérdésre. De őszintén szólva, ha van egy kis unott, az felfedve az a fajta, hogy ez nem talán a leghatékonyabb algoritmus. És valóban, őszintén szólva, én izzadok annál is inkább, séta oda-vissza. Ez nem érzi különösen hatékony. Szóval próbálj ki valami mást. Ha ti is vissza magatoknak, hogy a nyolc értékeket. Jó munkát. Vessünk egy pillantást digitálisan, mindössze egy pillanatra, mielőtt próbáljunk meg valami mást, hogy mi történt. Fel itt, te arról, hogy a megjelenítés a nyolc emberre amelynek kék és piros sávok számát. A magasabb az oszlop, Minél nagyobb a szám. Minél rövidebb az oszlop, Minél kisebb a szám. És mit fogsz látni, hogy a véletlen sorrendben több mint nyolc. Meg fogod látni ezeket a bar egyre rendezve ugyanazon algoritmus, vagy állítsa utasítások, amelyek hívjuk ezentúl buborék sort. Tehát észre, minden második, vagy úgy, két rudak megvilágította piros, összehasonlított a számítógép. És ha a nagy bár és a kis bár ki annak érdekében, ők is cserélték nekem. Most ez hihetetlenül unalmas nézni ezt, természetesen, nagyon hosszú, de észre az takeaway-- nagy rúd mozog jobbra, kis bárok mozog balra. Nézzük megszakítja a folyamatot és ezt felgyorsíthatja sokkal gyorsabb lesz, így mi is kap a magas szintű értelemben, hogy mit, Valóban, buborék sort csinál. Sőt, ez bugyogott fel a jobb oldali listán, vagy a tömb, a nagyobb bárok. És fordítva, a kis rudak fortyogó útjukat lefelé balra, bár gyorsabb ütemben mint azt korábban tette. Így nehezebb látni az emberek, de vizuálisan ez valóban mit történik. De próbáljuk alapvetően más megközelítést most. Próbáljuk meg egy másik algoritmus, ahol van, hogy srácok kezdeni ezen eredeti pozíciókat, ami ebben a sorrendben itt. És menjünk előre most. És én fogom csinálni valamit még egyszerűbb, nem igaz? Visszatekintve, csere páronként újra és újra, szinte egy kis ügyes. Nézzük a dolgok még naivan, ahol, ha azt akarom, hogy rendezni ezeket az embereket, hadd keresd a legkisebb elem. Tehát most, 4 a legkisebb szám, amit láttam. Fogom elfelejteni, hogy. No, 2 jobb, és ne feledje, hogy. 1 még kisebb. 3, 7, 5. OK. Az egyet mi is a neved? Artie: Artie. DAVID MALAN: Artie. Szóval, Artie, megy előre. Megyek, hogy húzza meg a sorból. Ha lehetne gyere vissza. És azt kell, hogy helyet adjon neki. Van egy döntési pont itt. Hogyan lehet, hogy mi legyen hely az Artie itt az elején, ahol 1-es szám tartozik? Közönség: Shift. DAVID MALAN: OK, akkor is elmozdulhatnak mindenki. De javaslatot optimalizálás. Hogy úgy érzi, egy kicsit bosszantó számomra, hogy kérje négy ember mozgatni egészen. Mi mást tehettem volna? Közönség: váltani őket. DAVID MALAN: váltani őket. És mi a neved? JACOB: Jacob. DAVID MALAN: Jacob, mozogni. Sokkal hatékonyabb, csak hogy Jacob csere helyek Artie, szemben kényszerítve mind a négy emberek, köszönöm szépen, hogy pontos helyét. Mi a szép a Artie most, ő az ő helyére. Csináljuk újra. 2, ez a legkevesebb, amit láttam. 3, 7, 5. OK. 2. határozottan a legkisebb. Nem kell, hogy csináljanak valamit. Csináljuk újra. 6. Legkisebb? 8. Dehogy. 4? Ooh. Hadd emlékszem 4. 3. Hadd emlékszem 3. 7, 5. Legkisebb számot én már látható ez bérlet 3. Ha azt gyere ki. Hová megyünk, hogy van? És mi a neved? Alanna: Alanna. DAVID MALAN: Alanna vagyunk lesz, hogy kilakoltatására Önt. De ez a hatékonyabb, csak csere két ember, mint, hogy több ember valójában kikerüljék át. Most ezt újra. Megyek válassza a 4, így gyere ki. És ki fog mozogni? Number 8, természetesen. Ha most meg 5-ös szám, gyere ki. 8-as szám fog kapni kilakoltatták újra. Én most megkeresem a 6 helyett. 7. a helyén. 8 a helyén. Amit most csináltunk most úgynevezett kiválasztás sort, és ha vizualizálni ezt, ez majd, hogy egy kicsit más. Menjünk előre, és ebből a menü itt, ez visualization-- változtassuk meg ezt hogy-- gyerünk, Firefox. Változtassuk meg ezt a fajta kiválasztás. És nézzünk felgyorsítani, mint korábban, és indítsa el a megjelenítés most. És ez algoritmusnak más hangulata van. Minden iteráció, őszintén szólva, ez még egyszerűbb. Én csak kiválasztja a legkisebb elem. Most őszintén, van egy kis szerencse, hogy idő, az, hogy a szuper-gyors rendezve. Az elemek a véletlen. Ez nem az, ahogy mi végül látni, alapvetően gyorsabb. De nézzük egy harmadik és utolsó megközelítés itt, hogy mi folyik itt. Szóval, menjünk előre, és állítsa vissza a srácok egyik utolsó alkalom, hogy ebben a sorrendben van. És most megyek egy kicsit okosabb, csak azért, hogy még kerekebb legyen a algoritmusokat. Fogom tenni. Megyek, hogy ne menjen oda-vissza annyira. Őszintén szólva, én vagyok fáradt mindezt mozgás. Én csak megy, hogy milyen vagyok adott elején a listán, és én fogom rendezni hogy akkor és ott. Tehát itt vagyunk. 4. szám. Megyek illessze be 4. egy rendezett lista. Kész. Azt állítom, és most csak azért, hogy ezt a több világos, ez a része a lista. Ez egyfajta ostoba igény, de valóban 4 rendezve listája méretű egy. Most megyek, hogy a 2-es szám. 2. szám Én most fog helyezze be a megfelelő helyre. Szóval, ha nem 2 tartozik? Nyilvánvaló, hogy itt van. Így megy előre, és menjen vissza, ha lehet. És miért nem mentek csak úgy a zenét áll veled ebben az időben. És ne erőszakosan helyezze te a lista elején. Így egy kicsit több munka. Kellett mozgatni Jacob körül, és mi a neve? AMIN: Amin. DAVID MALAN: Amin. De legalább nem megy oda-vissza. Csak, hogy a dolgokat, ahogy megy. Csak helyezze őket a megfelelő helyen. 6, ez valójában nagyon egyszerű. Nézzük helyezze te ott, ha Csak azt akartam, hogy álljon arrébb egy kicsit. Number 8, szintén nagyon egyszerű. Ott van. A fenébe. 1-es szám nem tudjuk csak swap Amin itt, mert hogy fog elrontani a sorrendben. Így van, hogy egy kicsit okos. Szóval, Artie, ha lehetne másolatot egy pillanatra. Menjünk előre és sebességváltó most, ellentétben a korábbi algoritmusok, hogy helyet csináljon Artie itt az elején. Így a végén a nap, én vagyok ilyen amit én akartam kerülni előtt. És így én algoritmus fajta fordított, intellektuálisan, attól, ami eredetileg volt. Csak ezzel a változó egy másik ponton. Most vagyok 3. Ó, a francba. Van, hogy több munkát újra. Úgyhogy tolja ki. Térjünk 8, 6, 4-- oh oh-- és 3 fog menni ott. Így legalább némi megtakarítás ebben az időben. 7, nem túl sok a tennivaló. Tehát, ha azt szeretnénk, hogy a pop hát, hadd helyezze meg. És végül, 5, ha akar pop vissza, mi kell váltani, te, te, míg öt a helyén van. Tehát most, hogy ez egy magas szintű grafikusan, csináljuk algoritmus vizualizáció még egyszer. Szóval ez a mi nevezni beillesztés sort. Majd futtatni ugyanolyan gyors, és indítsa el itt. És ez is, más a hangulata. Ez a fajta egyre jobb és jobb, de ez soha nem tökéletes amíg nem megy és sima az említett hiányosságok. Mert megint, én csak a vevő milyen Én kap balról jobbra. Szóval nem ilyen szerencsés hogy minden tökéletes volt. Ezért kellett ezeket a kis mispositions hogy meghatározott idővel. Tehát az összes ilyen algoritmusok úgy tűnik, hogy fut kissé eltérő ütemben. Sőt, ami mondasz, a legjobb vagy a leggyorsabb eddig? Bubble sort, az első? Selection sort, a második? Beillesztés sort, a harmadik? Hallom valami kiválasztás fajta. Más gondolatok? Így kiderül, hogy a az összes ilyen algoritmusok alapvetően ugyanolyan hatékony, mint a minden other--, vagy éppen ellenkezőleg, mint ahogy nem hatékony, mivel minden más, mert nem tehetünk alapvetően jobb, mint a három Ezen algoritmusok. És ez egy kicsit egy fehér hazugság is. amikor azt mondom, a hatékony vagy nem hatékony, ez legalább szuper nagy n. Amikor már csak nyolc ember van, vagy talán 50 vagy így bár a képernyőn, akkor feltétlenül észre különbséget ezek közül három algoritmus. De az N, az emberek száma, vagy a számok száma, vagy az embereknek a száma a telefonban könyv, vagy a számát weboldalak a Google adatbázisa egyre nagyobb és nagyobb, látni fogjuk, hogy e három algoritmusok valójában elég gyenge. És mi tehetünk alapvetően jobb, mint az. Vessünk egy pillantást, végül hogy mi ezeket az algoritmusokat esetleg úgy hangzik, mint a keretében néhány más valamint ennek útján megjelenítés itt hogy bevezet minket Számos algoritmus. Menjünk előre, és gratulálok a résztvevők itt, akik mind sorrendje maguk nagyon jól. Ha azt szeretné, hogy egy búcsú ajándékot. Tudod tartani a számokat is. És mit fog látni, vagy inkább hallani, most, az, hogy mivel tesszük hangok minden egyes ilyen rudak majd társítását a szoftver, különböző frekvenciájú hang, akkor csomagolja az elméd még audioly körül, amit minden ilyen dolgok néz ki. Melyek közül az első az illesztési fajta [HANGOK] Ez a buborék fajta. [HANGOK] Selection sort. [HANGOK] Úgynevezett merge sort. [HANGOK] Gnome sort. [HANGOK] Ez az a CS50. Látni fogjuk, hogy szerdán. Narrátor: A Most, "Deep Gondolatok, "a Daven Farnham. Miért ez a for ciklus? Miért ne lehetne jobb? Lennék öt hurok. [Nevetés]