DAVID Humala: Olgu. Seega see on CS50, ja see on nüüd algust nädalal kolm. Nii et seni, me Enda kirjutatud programme C et vaadata veidi midagi sellist siin. Nii et meil on paar teravad sisaldab ülaosas. Meil on int, peamine, tühine ja siis midagi teha keskel, mõned natuke koodi sees selle funktsiooni. Aga võti on asjaolu, et oleme rääkinud void siin. Nii tühine, kõik see aeg, täpsustab et see programm, kui joosta, saab avada ainult läbi oma nimi. Sa ei saa tüüp muid sõnu või numbrite pärast programmi nime, kui töötab ta. Nii näiteks, kui olid programmi kompileeritud fail nimega hello, sa võiksid teha ./hello, kuid see on see. Ainus võimalus, et sa võiksid anda oma panus selle programmi on helistades funktsioon. Näiteks milline funktsioon oleme kasutanud seni saada sisend kasutaja? Sihtrühm: Hangi string. DAVID Humala: Et saada string või saada int või olete näinud teised, isegi kui te pole neid veel, nagu saada pikad, pikad ja sarnased. Aga oletame, et me tegelikult soovite alustada kirjutamise programmid, mis on veidi rohkem mitmekülgne ja ausalt öeldes veidi rohkem nagu käsud, et olete olnud saada loodetavasti veidi harjunud. Nagu cd ruumi Dropbox. See loomulikult muutusi oma kataloogi, eeldades sa oled John Harvard koju kataloog, oma Dropbox kausta. Vahepeal näiteks järgmine käsk luuakse uus kataloog nimega pset2, nagu te võib-olla juba või varsti probleemide seatud kaks. Tee Tere, muidugi on käsk mis ehitab programmi nimega hello alates faili nimega hello dot c. Ja igas nimetatud juhtudel, nüüd, et meil oli pakkuda argument nn käsurida, vilgub kiiresti, nii et make teab, mida ehitada, ja nii et mkdir teab, mida kausta luua, ja et cd teab kus sa tahad minna. Aga seni, me hoiame öelda mis peamine, vaikimisi funktsiooni, on tühine väljendus sees need sulgudesse, mis tähendab, et see ei võta mingeid argumente. Nii algab täna Mida me teeme on, me ei kavatse hakata toetades selliseid asju isegi. Tegelikult, antud juhul, mida tavaliselt ei trükkima, Tee on seda teinud Meie jaoks ei ole üks, vaid üks, kaks, kolm täiendavat stringid pärast programmi nimega rõkkama. Niisiis, kuidas me seda saavutada? Noh, mis algab täna kui me tahame anda panus kaudu nn käsurealt me ei kavatse alustada lisades siin, mis on kollases asendades tühine int argc komaga string argv sulg sulg. Nüüd see on huvitav paar põhjustel. Üks, see läheb meile kirjutada programme, mis on veidi rohkem dünaamiline. Aga rohkem compellingly, see saab avada nüüd vestluses, et mida massiive võib tõesti kasutada, mida string tegelikult on all kapuuts, alles järgmisel nädalal, kui me hakkame sukeldumine veelgi sügavamale, kuidas masin et kõik see kraam tööd. Aga nüüd, joonistame, ehk pilt. Kui Sa kirjutad programmi peamiste deklareeritud Sel viisil, nii et peamine Kasutada saab kaht argumenti, int ja-- mida andmetüüp on teine ​​argument? Sihtrühm: Array. DAVID Humala: Array. Seega tundub esmapilgul, nagu see on string, kuid teate nurksulgudes. Meenuta viimast korda võtsime kasutusele mõiste massiivi. Ja massiive kasutada nurksulgudes paari kontekstides. Sa võid kasutada ruudu sulgudes minna massiivi ja saada konkreetne element, nagu sulg 0 või sulg 1 või sulg 2. Kuid me nägime, kui lühidalt, eelmisel nädalal, et sa ka kasutada neid nurksulgudes kuni tunnistada suurus massiiv, kui sa tead ette, kui palju ints või kui palju stringe või mida iganes sa tegelikult tahavad. Nii selgub seal on kolmanda kontekstis siin millel puudub numbri sees on nurksulgudes. Kui määrate, nagu ma olen siin, nimi midagi argv, mis on lihtsalt fancy viis öeldes argumentvektor, mis on veel üks fancy viis öeldes hulga argumente, sulg sulg lihtsalt tähendab, et sa ei pruugi ette teada, kui suur massiivi saab olema, aga sa tead, et see saab olema massiiv. Nii et kui te ei tea, number ei pane see sinna, avatud sulg sulg tähendab, et argv ei ole string, kuid massiivi stringe. Nii süntaktiliselt, kui te tagasi mõelda möödunud nädalal see on väga sarnane öeldes midagi int vanuses sulg, ja siis midagi järel. Mida see välja näeb? Olgem tegelikult joonista pilt. Nii et kui sa jooksed selle programmi Main olles kaks argumenti määratletud sees need sulgudesse, siis sisuliselt on vähemalt kaks tükkideks mälu andis teile all kapuuts. Üks, kui panen viiki, sest see ristkülik, läheb nn argc. Ja just nii kiire sulgege, Milline on andmete tüüpi argc? Nii et see on int. Nii number läheb minna argc-- pöördeid tähelepanu asjaolule, et seisab argument arvu. Vahepeal olen juhtinud argv massiiv. Ja ma tõesti ei tea, kui kaua see saab olema, nii tänase eesmärkidel dot dot dot. See võib saada mõne pikkus. Aga ma olen pildil vähemalt neli ristkülikut. Nii argv patakas mälu, mis salvestab string string string dot dot dot, ja argc on vaid üks patakas mälu täisarv. Nüüd, olgem veidi täpsem. Sel juhul, kui mul on stringid Selles massiivi nimega argv, ma tahan neid individuaalselt, nagu eelmisel nädalal, me ei kavatse kasutada märke nagu argv sulg 0 saada esimene asi massiivi. Argv sulg 1 saada Teine asi, ja nii edasi. Võti on siin olles oleme ikka 0 indexed-- me ikka loodame 0. Vaatame nüüd tegelikult panna midagi selles. Kui ma oleksin kompileerida programmi nimega tere fail nimega hello dot c, ja siis ma saan selle programmi dot kaldkriips hello, mida see minu arvuti, minu arvuti, näeb all kapuuts Praegu ma saan dot kaldkriips tere ja vajuta Enter? Noh, see on võib-olla mida me võiksime kirjeldada kui sisu arvuti mällu või RAM-- muutmälu. Teisisõnu arvutis kuidagi sulle võluväel, paneb number 1 argc, AKA argcount, ja see paneb sõna otseses mõttes string ./hello sisse argv sulg 0. Mul pole aimugi, ausalt öeldes, mis on aastal argv sulg 1 või 2 või 3, sest kui kasutaja ei ole tipitud midagi peale ./hello, me eeldame, et need kõige tõenäolisemalt prügi väärtused nii rääkida. Need tükkideks mälu olemas, kuid see pole meie teha vaatama neid, sest argcount on ainult üks. Nüüd, vahepeal, kui ma kirjuta joosta teise programmi, CD, mis on enam korralikult käsk, Teie vilgub prompt-- cd ruumi Dropbox-- kui ma saan, et tõhusalt, kui cd programm käivitatakse, argc, sees minu arvuti mällu, on Kõige briefest teine ​​number 2. Ja siis argv sulg o on cd, argv sulg 1 on Dropbox, ja siis loomulikult käsklus lõpule jõudnud, nii et kõik see mälu sisuliselt kaob ja kasutatakse midagi muud. Ja sellepärast ma ütlen vaid sekundi murdosa. Vahepeal, kui me teeme mkdir pset2, pildil näeb peaaegu sama, kuid erineva stringid sees argv. Kui ma rõkkama kriips hello tere dot c, sama mõte. Veel kraami täidetakse argv ja argc muidugi on 4. Nii teisisõnu kuigi seda massiivi võiks dot dot dot, mõnede muutuva pikkusega, nii et rääkida, tead alati, kus lõpuks see on, sest argc ei ütle teile millisel hetkel sa pead lõpetama Vaadates elemente argv. Võite vaadata ainult neli kokku sel juhul. Nii et olgem nüüd vaatleme, ehk lihtne programm. Üks, mis lihtsalt ütleb tere keegi nagu Zamyla. Nii et ma väita, ma lähen kirjutada programm vaid hetk, mille kaudu ma võiks teha ./hello ruumi Zamyla, ja siis ma tahan minu programm välja printida midagi super-lihtne, nagu "tere, Zamyla." Nüüd minevikus oleme kasutatakse getString. Nii minevikus, isegi kui sa oled uus programmeerimine, koefitsiendid võid klopsima programmi, mis kasutab getString ja siis kasutab printf tere öelda Zamyla. Aga ärgem kasutada getString seekord. Lubage mul selle asemel minna Appliant ja ärge hulka standard O dot h. Lubage mul ka CS50 dot h. Nüüd int main ja nüüd olen ei tee void täna. Selle asemel, ma teen int argc string argv sulg sulg, pole täpsustatud number. Ja nüüd siin on mu niinimetatud teha. Mida ma teen nüüd, ma olen teeme natuke liigaasta usu, Ma eeldan, et kasutaja kavatse kasutada seda programmi õigesti, ja ma olen lihtsalt kavatse teha printf tere% sn. Nii et midagi uut. Aga ma tahan nüüd panna mis iganes sõna kasutaja tipib pärast programmi nimi. Nii et kui ma teen ./hello ruumi Zamyla, I taha kuidagi programmiliselt juurdepääs Tsiteerin lõppeb "Zamyla." nii et ma ei lähe minu argument vektor, minu massiivi stringe, ja kui käsk, jälle oli ./hello ruumi Zamyla, Mis number ma tahan panna argv siin? Sihtrühm: 1. DAVID Humala: 1, sest sulg 0 Selgub saab olema Programmi nimi, nagu me nägime. Nii sulg 1 on esimene sõna et mina, kasutaja on kirjutatud. Ma lähen edasi minna ja salvestada see. Ma lähen minema minu kausta kus ma olen paigutatud seda pilti. Ma ei tee hello 3. Comp IO on OK. ./hello Zamyla Enter. Mis ma valesti tegin? Olin üllatusena mina hetkeks seal. Mis ma valesti tegin? Sihtrühm: nimi. DAVID Humala: faili tegelikult nn hello3.c. Ja ma tegin seda lihtsalt järjepidevus, sest me oleme oli hello.c on sisse Viimase online kood. Nii et olgem määrata see ./hello sulg kriips 3 Zamyla. Sisesta. Ja nüüd on meil hello, Zamyla. Samas, ma ei saa seda muuta on Rob või tõesti mõni muu sõna. Kuid olgem kaaluma nurga puhul. Mis võiks ootate juhtub siis, kui Ma ei kirjuta kellegi nimi üldse? Sihtrühm: Error. DAVID Humala: viga mingisugune võib-olla. Vaatame. Sisesta. Null. Nii printf tegelikult on vähe kaitsev meist siin, ja sõna otseses mõttes printimiseks avatud paren null, kuid veel hullem asju võib juhtuda. Ja lihtsalt näidata midagi, mida sa absoluutselt ei tohiks teha, lähme sisse siin ja alustada poking ümber. Eks ole? Kui ma tean, et pilt mälu on sisuliselt see, argv sulg 1 on Zamyla, argv sulg 0 on ./hello või ./hello-3. Mis on sulg 2? Nii et ma võin vastata, et küsitleda ise, eks? Ma ei lihtsalt muuta 1 kuni 2. Nüüd saan kompileerida hello 3, ./hello3 Olgem suurendada ja vajuta Enter. Ups. No quote märk. Huvitav. Nii et see on omamoodi lahe näha, mida muidu on siin. Mis siis veel sees minu sülearvuti? Hoiame seda sulg 3. Tee hello3, ./hello-3. Uudishimulik. Ja nüüd lähme tõesti bold-- 50. Nii et see on tõesti sukeldumise sügav minu arvuti mällu. 50 indeksid. Nii et tere 3 ./hello-3. Uudishimulik. Olgu, nüüd ma olen lihtsalt hakka hoolimatu. Lähme 5000. Olgu. Nii et lubage mul kompileerida. Tee hello3, ./hello-3. OK. Nüüd mõned teist, siis võib olema lambipirn läheb maha. Kui paljud teist on näinud seda enne sõnumi? OK. Niisiis, miks? Ennustus oled-- ja seal on erinevad asjad, mis võib põhjustada seda, ja siis sa oled hea firmale-- meil selgelt põhjustatud mida nimetatakse killustatust süü. Ja pikk jutt lühikeseks, täna, ma on puudutanud segment mälu et ma ei peaks olema. Kui segment tähendab lihtsalt patakas mälu, et ma ei peaks olema. Nüüd arvuti tagab, et kui ma joosta ./helloZamyla et ma ei puutu argv olema sulg 0 ja argv sulg 1. Aga argc on väärtus 2, mis tähendab, et ma olen ainult allowed-- see on omamoodi au system-- puudutada sulg 0 ja sulg 1. Kui ma minna kaugemale, seal absoluutselt kavatse olla mälu olemas. Minu RAM olemas füüsiliselt aastal arvutisse. Aga kes teab, mis seal on? Tõepoolest, ma olen töötab mitu programmid korraga. Ma võib-olla seen-- kui ma ei tehes seda Appliant kuid minu Mac või PC-- ma võib-olla näinud sisu email. Ma oleks võinud näha instant sõnum, mida ma olen viimasel ajal saadetud. Midagi, mis võiks olla ikka ringi mälu oleks külastatud teel see suvalise nurksulg märke. Või veel hullem, võib teil olla leidis üks mu paroolid et ma hiljuti kirjutasid, et programm oli mällu salvestatud nii autentida mind, ja siis lihtsalt selline jättis RAM kuni ma lõpetan selle programmi. Ja tõepoolest, see on üks oht ja üks volitusi kasutades keeles nagu C. Sul on piiramatu juurdepääs kogu sisu kohta programmi mällu ja mida pahad saavad isegi teha need cases-- eriti siis, kui me saada veebi programmeerimine poole semestri lõpuks, paneme vaadata seda topic-- on tuhnima, potentsiaalselt kellegi arvuti mälu ja leida selline uudishimulik asjad nagu me nägime seal. Või veel hullem veel, paroolid, et ta või ta saab seejärel kasutada, et teha halbu asju. Nii selgelt ma ei oleks seda teinud, sest imelik asjad hakkavad juhtuma. Tõepoolest, see on programm, krahh. See oleks samaväärne Mac OS või Windows programmi aken lihtsalt kaovad. Ootamatu tõrge. In käsurea keskkond näeme midagi sellist. Aga sellepärast, ei ma lihtsalt puudutades mälu, mis ei kuulu mulle. Nii et olgem kaitsta vastu natukene teistmoodi vaadates seda programmi siin. Nii et jällegi, skelett et me nägime earlier-- ja ma olen rõhutanud seekord int. Ja kogu selle aja peamine on tõepoolest tagastatakse raha. Kuigi enamik meie loengu näiteid pole me kunagi kasutatud tagasi midagi peamine. Me lihtsalt kirjutada printf lähedal lokkis traksidega ja ongi kõik. Aga tasuta, mida koostaja on teinud teile, tõhusalt, on tagasi 0 teile. Lülitab minemas-- ja see on natuke counterintuitive-- et 0 on hea. See ei tähenda, vale per se. 0 on hea ja mis tahes muude 0 väärtus, maailm on otsustanud, võib tähendada viga. Nii et kui sa oled kunagi segi midagi püsti oma arvutis, või programm on lihtsalt suri sinu ja olete saanud mõned ekslikud aknas ekraanile, öeldes viga negatiivne 49 või viga 23-- näiliselt suvalise value-- see sest programmeerija on kodeeritud väärtus nagu negatiivne 49 või positiivne 23 esindada iga number, julgen öelda, 4 miljardit võimalik asju mis võiks valesti minna programmi. Niisiis, kuidas võiks võtan ära seda ise? Noh, lubage mul avada programm et ma kirjutasin ette, ja tuhnima Internetis nimega hello 4. Ja see on peaaegu identsed, välja arvatud see, selle sain natuke viga kontrollimiseks. Sellisel juhul, ma olen jälle deklareeritud Peamised kui võtta kaks argumenti, kuid seekord on line 17, teade Ma teen natuke meelerahu kontrolli. Ma teen kindlaks, et argc võrdub võrdub 2. Sest kui see on, et tähendab, et ma ei saa ohutult puudutada mitte ainult sulg 0, kuid sulg 1. Ja ma minna ja välja printida, sel juhul Zamyla või Rob või mis iganes sõna ma kirjutada välja. Ja nüüd lihtsalt saada veidi õige, Ma lähen selgesõnaliselt tagasi 0 tähendama, et kõik on hästi. Midagi halba ei juhtunud. Aga tavapäraselt, ma lähen tagasi 1 või ausalt väline 0 väärtus, kui midagi läks valesti. Nüüd kasutaja ei kavatse tõesti märgata, mis toimub. Tõepoolest, kui ma lähen sellesse kataloogi me suurendada ja ei tee hello 4, ./hello-4 Zamyla käitub nagu ma eeldan. Aga kui ma selle asemel ei kirjuta midagi, midagi tundub juhtuda, kuid see ei ole viga. Ja kui ma selle asemel tee midagi nagu Rob on Proctor aastal Thayer-- jagamine suvalise info. Aga teate, argv 1, 2, 3, 4 ja 5 peaks nüüd olemas mälu. Ka see pole see, mida minu programm eeldab, sest ma olen kontrollinud, kas argc võrdub võrdub 2 või mitte. Nii et ma olen nüüd kaitsta selle vastu. Nüüd, kui kõrvale jätta, siis me programmer-- õigemini me users-- kunagi näha, et 0 või 1, kuid kasutades tööriista nimega siluri, või muid vahendeid, nagu me näeme enne pikk, siis programmeerija võib tegelikult näha, milline võiks olla valesti sees oma programmi. Niisiis, ükskõik küsimustele argc? Jah. Sihtrühm: Ma olen näinud, kus nad ei ole olnud iseloomu, [kuuldamatu] lihtsalt ütles string star d, nagu iseloomu tärn koma. Kas nad on samaväärsed siin? DAVID Humala: Need on. Seega on küsimus selles, pead aeg-ajalt näinud programmid nagu see, et ei ole öelda string argv sulg kuid selle asemel midagi öelda nagu char star argv sulg. Ja seal on isegi teiste variante, mida võiks näha. Nad on tõepoolest samaväärsed. Sest nüüd on meil neid omamoodi Apupyörät in kujul stringi CS50 raamatukogu, vaid veidi üle nädala või nii me eemaldame selle obstruktsioon kokku ja tegelikult pilk char ja täht on ja kuidas need puudutavad mälu esindamine üldisemalt. Nii et me tuleme tagasi selle. Muud küsimused meie argv või argc? Jah. Sihtrühm: Miks ta tagasi viga [kuuldamatu]? DAVID Humala: miks see tagasi viga ainus-- oh! Eelmisel juhul, kui me olid futzing ümber mäluga, Miks ta ainult tagasi viga kui ma tegelikult kirjutada suur number? Lühike vastus on, et me lihtsalt vedas. Üldiselt arvuti eraldab mälu tükkideks, ja ta andis mulle piisavalt suur patakas, et Sain ära, ilma et märkaksid, liigutav sulg 2, sulg 3, sulg 50, kuid niipea, kui ma tõugatav minu õnn, ma läksin üle piirid patakas mälu operatsioonisüsteem oli mulle andnud. Ja siis see külge maha ja ütles, no. Segmenteerimine viga. Jah. Sihtrühm: Kuidas arvuti teavad väärtus argc? DAVID Humala: Kuidas arvuti teavad väärtus argc? Kui sa jooksed programmi, et programmi iseloomust vilgub kiiresti, antakse massiivi sõnu, mis olid kirjutatud käsureale, mis oli trükitud käsureale. Ja nii see on teie operatsioonisüsteemi süsteemi, mis sisuliselt populates peamised argumendid teile. Nii et see on üks teenuseid et sa saad, omamoodi salaja all kapuuts operatsioonisüsteemi. Muud küsimused? Jah. Sihtrühm: Mis core dump tähendab? DAVID Humala: Mis core dump tähendab? Nii et see on hea küsimus. Ja lubage mul minna tagasi Selle kataloogi siin. Ja märkad, et Mul on uus fail olemas. See on tõesti nn tuum ja see on tegelikult tavaliselt korraliku suurusega faili. See on sisuliselt läbilõige sisu mu programmi mällu või RAM kui see alla kukkus. Ja see on kasulik, potentsiaalselt diagnoosimisel, kui me rääkima tulevikus loeng ja lõik umbes silumine, sest tegelikult võite seda teha samaväärne digitaalse lahkamise toimiku kohta, mis aitavad aru saada, mida sa valesti tegid oma programmi. Jah. Sihtrühm: Kas argc käsk ise, või saate nimi see midagi? DAVID Humala: Hea küsimus. Kas argc käsk ise, või saate nimi see midagi? See ei ole kindlasti käsk. See on lihtsalt muutuja Nimi või argument nimi, ja nii absoluutselt me seda nimetada suva, Võiksime seda riba, mis kipuvad olla go-to sõnad, et arvuti teadlane läheb. Aga Tavapäraselt me ​​kasutame argc ja argv. Aga see on lihtsalt inimese printsiibist, ei midagi enamat. Olgu. Nii selgub, olen olnud räägib natuke valge lie-- ja ausalt öeldes ka tulevikus, näete oleme rääkinud teiste süütute valedega. Aga nüüd, me ei kavatse koorida tagasi üks neist. Sel juhul, kui ma varem jooksis programm nagu ./hello või ./hello-3 Zamyla pidime sisu minu arvuti mällu otsin umbes nagu see. Aga mäletate, mida string on. Mida me ütleme, nädal tagasi, mida string tegelikult on all kapuuts? Sihtrühm: Array tähemärki. DAVID Humala: See on array tähemärki, eks? Nii et me võiksime olla massiivi stringid, vaid omakorda jada on array tähemärki. Nii et kui ma tõesti tahan olla anal kui ma joonistan seda pilti, Ma peaks tõesti joonistus see natuke meeldib see, kusjuures kõigis nendes indeksid minu argv massiiv, on iseenesest terve string mis ise on massiiv. Ja nüüd hädavale Me ütleme täna on see, et pilt ei vaata päris niimoodi. Tegelikult natuke ruudud on tavaliselt väljaspool suuri ristkülikuid seal. Aga me tuleme tagasi, et enne pikk. Aga see on ./hello längkriipsu 0, mis on eriline märk, mis piiritleb lõpuks string, ja meil on veel üks pärast Zamyla nimi. Mida see tähendab? Noh, lubage mul minna ja avada veel kaks näidet mis on kättesaadavad Internetis. Üks on nn argv1.c ja teine ​​on argv2. See on super-lihtne programm, mis erineb eelmiste programmide et nüüd ma kasutan argc ja argv siin. Ja nüüd ma lõimub silmus vastavalt 18, alates i = 0 on kuni Argc. Ja mida ma nüüd tegema Selle koodirida siin? Inglise keeles. See muidugi näitab kasutada argc. Aga inglise keeles, mis ei see teha, kui ma saan selle programmi? Jah? Sihtrühm: See saab printida ekraan nii mitu korda kui soovid. DAVID Humala: Täpselt. Nii et mis iganes sõnu ma kirjuta käsureale, see on läheb oksendama neid mulle üks rea kohta. Nii et olgem minna ja seda teha. Lubage mul minna oma kataloogi ja ei tee argv1 ./argv1. Ja nüüd, olgem hoida lihtsa. Teeme midagi alguses. Ta tegi välja trükkida üks asi, ja see on tõesti programmi nime, sest see on sulg 0. Kui ma nüüd öelda, suva, et see saab teha need kaks, ja kui ma ütlen foo bar, see läheb ütlema, et need kolm asja. Nüüd ongi mõnevõrra huvitav, võibolla. Aga meenutan, et argv on massiivi stringe, kuid string on massiiv tähemärki, et saaksime asju pügala ja taotleda, et põhilised loogika ja muuta koodi, et tundub veidi segasena küll. Kuid võttes pesastatud loop, mis sarnaneb mida sa võiks meenutada, Mario, Näiteks, kui sa tegid seda nii. Nüüd teate real 19, ma olen jälle iterating üle minu argumente, 0 on kuni Argc. Ja nüüd kooskõlas 21-- ma olen laenates trikk eelmisel week-- Olen kontrollimiseks, mis on pikkus argv sulg i. Ma ladustamiseks et vastus n. Ja siis ma integreerida alates j kohta kuni n, kus j on vormindatud 0. Niisiis, konventsioon lugedes. Kui olete kasutanud i, kui teil on nested loop, siis te ei saa ma jälle muidu pead Tellida potentsiaalselt väärtust väljaspool sisemist silmus. Nii et ma kasutan j kokkuleppeliselt. Me võime kasutada k. Kui sul on rohkem kui k, siis ilmselt on liiga palju pesitsevate, tavaliselt. Aga nüüd, märkate mu printf line on veidi erinev. Ma ei prindi% s, ma olen trükkimiseks% c, mis loomulikult on kohatäide char. Ja nüüd teate seda süntaksit. Uus. Me ei ole näinud seda enne. Aga loogiliselt, see tähendab lihtsalt saada nda stringi argv ja saada JTH mida? Sihtrühm: Iseloom. DAVID Humala: märk, et string. Niisiis, kasutades nurksulgudes järgneb nurksulgudesse see on sukeldumine esimene arvesse argv on stringid, ja siis teine Nurksulgudes koos j on sukeldudes tähemärki et eriti stringi argv. Ja siis, just hea meede, Ma printimise uue rea siin. Nüüd lubage mul minna ja avada kuni veidi suurem aken nii näeme selles tegevuses. Lubage mul minna samasse kausta. Ja nüüd ei tee argv-2-- ups teha argv-2, ./argv 2. Sisesta. Ja see on natuke raske lugeda vertikaalselt, kuid see on tõepoolest nimi Programm, millele järgneb tühi rida. Nüüd lubage mul minna ja teha suva. Samamoodi on raske lugeda, kuid see on tõepoolest printimise üks märk rea kohta. Ja kui ma ei bar, see on nüüd trükkimine need rida-realt. Nii Buffee siin ei ole nii palju et wow, vaata seda kena uus trikk kus saad at sisu massiivi erimärke, vaid selles, kuidas me võtame neid põhilisi ideid, nagu indekseerimine massiivi, ja siis indekseerimise sisse massiiv, mis oli selles massiiv, ja lihtsalt kohaldades samu ideid veidi keerukamaid näiteid. Aga põhitõdesid tõesti ei muutunud, isegi pärast viimase nädala jooksul. Nüüd on see omamoodi õigeaegne, aastal, et tuletada meelde, et nädal null Mängisime telefoniraamat niimoodi. Ja kuigi see on ilmselt füüsilise paberitükke, saab omamoodi mõelda telefoniraamat massiiv. Kindlasti, kui sa olid implementeerid Selle tükki neid paberitükke aastal arvuti, arvatavasti sa kasutad midagi nagu massiivi salvestada kõik need Nimede ja numbrite kõik viis läbi Z. Nii et see on tore, sest see võimaldab meil võimalus, võib-olla, et mõelda, kuidas te võite tegelikult ellu midagi sellist. Nagu seeria uksed siin. Nii et kui ma kas-- vajame üks vabatahtlikuna tule üles. Vaatame. Võõras nägu ehk võõras nägu ehk. Kuidas oranžilt? Siin. Orange särk, tule üles. Lähme edasi nüüd ja liikuda Nende uste üle külje, liiguta neid välja viis hetkeks. Mis su nimi on? Ajay: DAVID Humala: Ajay. David. Meeldiv kohtuda. Olgu. Nii et meil on taga need kuus uksed digitaalselt screen-- või pigem seitsme uksed screen-- terve hunnik numbreid. Ja ma olen sulle midagi aastal advance-- kokku? Ajay: Midagi ette. DAVID Humala: Kõik, mida ma tahan, et sa nüüd on leida minu jaoks, ja meie, tõesti, nr 50, üks samm korraga. Ajay: Number 50? DAVID Humala: number 50. Ja te võite paljastada, mis on taga kõik need uksed lihtsalt puudutades sõrmega. Kurat. [Naer] [APPLAUSE] Väga hästi tehtud. OK. Meil on armas kingitus auhind teid siin. Teie valik filme me arutas eelmisel nädalal. Ajay: Oh, mees. Oh, ma pole kunagi näinud Spaceballs. DAVID Humala: Spaceballs. Olgu. Nii et hoidke lihtsalt üks hetk. Kuidas-- teeme seda sõnavõtlik moment-- kuidas sa minema umbes leida number 50? Ajay: valisin juhuslikult. DAVID Humala: Nii valisid juhuslikult ja vedas. Ajay: Jah. DAVID Humala: OK. Suurepärane. Nüüd, kui te poleks saanud õnnelik, mida veel oleks võinud juhtuda, taga uksed? Nii et kui ma edasi minna ja näitavad need arvud siin, nad tegelikult on juhuslikus järjekorras. Ja parim, mida võis teha, ausalt öeldes on poolt lõpuks halvimal juhul kontrollida neid kõiki. Nii et sul on super-õnnelik, mis ei ole see, mida me tahaks helistada algoritm. Jah Õnnitlused. Aga nüüd let's-- mu tuju, kui sa saaksid. Lähme seda vahekaarti siin. Ja siin on numbrid selgelt mis tundub olevat juhuslikus järjekorras ja nad olid. Aga nüüd, kui ma selle asemel nõue et taga need uksed on numbrid, mis on järjestatud. Eesmärk on nüüd ka meid leida number 50. Aga tee seda algoritmiliselt ja ütle meile, kuidas sa tahad seda. Ja kui sa leiad ta, hoia filmi. Sa ei leia seda, siis anna see tagasi. Ajay: Ma lähen, et kontrollida otsad Esiteks, et teha kindlaks, kas siin on-- [Naer APPLAUSE] DAVID Humala: lahke. Võtame pilk üks ning Ajay eelkäijate, Sean, kes ei olnud päris nii õnnelik. OK, nii et teie ülesanne siin, Sean, on järgmine. Olen peidus need uste arv seitse, aga peitunud mõned neist uksed samuti on muud negatiivsed arvud. Ja teie eesmärk on mõelda selle esirea numbreid lihtsalt massiivi. Oleme vaid jada tükki paberi numbritega nende taga. Ja teie eesmärk on ainult kasutades top massiivi siin, mind leida number seitse. Ja me siis läheb kriitika kuidas sa minema umbes teeb seda. Leia meid number seitse, palun. Ei 5, 19, 13. See ei ole trikiga küsimus. 1. Sel hetkel teie skoor ei ole väga hea, et sa võiksid samuti edasi. 3. Mine. Ausalt, ma ei saa aidata, kuid ei tea, mida sa isegi mõelda. Sean: ma ei kesta ainult ülemises reas. DAVID Humala: Ainult ülemises reas. Nii et sul on kolm vasakule. Nii et mind leida 7. [Sihtgrupp hüüab ETTEPANEKUD] Nii et need mõlemad olid hämmastav väga erinevatel põhjustel. Nii et see on koht, kus me jäi hetk tagasi ja Võtmeküsimuseks siin oli need uksed olid numbrid nende taga, mis on sorteeritud, ideaalne Buffee puhul, mis on, et sa võiksid teha fundamentaalselt parem Teise example-- ja tõepoolest, see oli Seani Esimene katse juhuslikult numbrid niisama varemgi- kuid niipea kui need numbrid on järjestatud, palju nagu telefoniraamat, Mida saate ilmselt teha? Või kuidas saab võimendada, et teadmisi? Jah. Sihtrühm: Lähed pooleldi [kuuldamatu]. DAVID Humala: Jah. Täpselt. Nii Ajay esialgne instinkt oli kontrollida otsad, kui ma mäletan, ja siis me justkui valmis Näiteks kiiresti. Aga kui me hakkasime seda rohkem metoodiliselt selles suunas, aga alustades ehk keskel, sest nad sorteeritud, niipea kui ilmneb number 16, me seetõttu tea-- ja teeme täpselt et-- me Seetõttu tean, et 50, tänapäeva juhul on saanud olla paremale. Nii nagu ka nädal nulli me rebis telefoniraamatust poole ja viskas poole probleem ära, sama mõte siin. Me ei viska seda pool Probleemi kaugusel. Ja ilmselt, mida te võiks teha algoritmiliselt, kui sa tead, et 50 peab olema paremale, kui see on kõikjal, on püüda seal, keset Ülejäänud uksi. Muidugi 50 on kõrgem kui 42, nii et me saame viska see ülejäänud kvartalis probleemi ära, ja lõpuks, kindlaks midagi 50. Aga just nagu telefoniraamat, need numbrid anti meile juba sorteeritud järjekorras, mis jätab meid küsimusega, kuidas te saada asjad sorteeritud järjekorras? Ja ausalt öeldes, millise hinnaga? See on üks asi olla meheks telefoniraamat ja siis muljet sõpradega leides telefoninumber tõesti kiiresti, eks? Rebimine 32 lehekülge, et leida isik välja 4 miljardit lehekülge, me ütlesime oli üks äärmuslik näide. Aga kui palju aega kulus Verizon sorteerida, et telefoniraamatust? Kui palju aega kulus meil sorteerida need seitse numbrid? See on küsimus, mida me oleme seni täiesti tähelepanuta. Nii et olgem sellele küsimusele vastata nüüd. Ja me kõik oleme välja filme nüüd, kuid meil on mõned stress pallid. Kui, ütleme, kaheksa vabatahtlikku ei pahanda meiega siin? Lähme edasi ja seda, kuidas te neli, kolm teist siin? Get mõned uued näod. Ja neli sa seal? Ja nüüd-- ärme diagonaal siin-- ja number kaheksa siia otsa. Tule. Olgu. Niisiis, mida me oleme siin igaüks teist on number. Kui soovid minna edasi, seda arvu. Mis su nimi on? Artie: Artie. DAVID Humala: Artie, eks. Sa oled number 1. AMIN: Amin. DAVID Humala: Amin. David. Sa oled number 2. Ja edasi minna, kui ma käsi sa paberilehte, liinile endid ees muusika seisab samas järjekorras nagu seal. ANDY: Tere, Andy. DAVID Humala: Andy, see on tore näha. Number 3. JACOB: Jacob. DAVID Humala: Jacob, number 4. Tere tulemast pardale. GRANT: Grant. DAVID Humala: Grant. Number 5. Alanna: Alanna. DAVID Humala: Alanna, number 6. FRANCES: Frances. DAVID Humala: Frances, number 7. Ja siis? Raaheli Rachel. DAVID Humala: Rachel, number 8. Olgu. Lase käia ja end selles järjekorras. Lubage mul esitada üks ülejäänud muusika seista paigal. Kui teil on vaja seista? OK. Lase käia ja lihtsalt pane numbrid kus publik saab neid näha, muusika seisma jääks väljapoole. Ja loodetavasti meie esimene meelerahu kontrolli siin-- 4, 2, 6. Oh-oh. Oota nüüd. Meil ei ole 8. Ma pean tõstma teid Näiteks kuidagi. Ei Ei, see on OK. Vaatame. Me ei saa seda teha. Olge valmis. Vot nii. Õige. Olgu. Nii, nüüd on meil 8, 1, 3 7 5. OK. Suurepärane. Seega on küsimus käepärast on, kell millise hinnaga, ja milliste meetodit, me saame tegelikult sorteeri need numbrid siia et saaksime sellist tööd tagasi, lõpuks ja decide-- on see tõesti muljetavaldav, see on tõesti tõhus, et võin jagada ja vallutada telefoniraamatust? Kas see on tõesti tõhus, et Ma ei jaga ja valitse need digitaalne tükki paberi lauale, äkki see läheb meile maksma varanduse aega või energiat või protsessori tegelikult saada meie andmed mõnda sorteeritud järjekorras? Nii et olgem küsida seda küsimust. Nii et esimene välja, need numbrid on päris palju juhuslikus järjekorras ja ma lähen ettepaneku üks algoritmi või protsessi mille abil saame sorteeri need inimesed. Ma lähenema see ilus naiivselt. Ja ma lähen ära tunda et see on selline palju minu jaoks wrap minu arvates ümber Kogu andmestik korraga. Aga tead mis? Ma teen mõned väga lihtne marginaalne parandusi. 4 ja 2 on rikkis, kui Eesmärgiks on minna alates 1 kuni 8. Nii et sa tead, mida? Ma lähen, et olete poisid vahetada, kui lülitate füüsiliselt seisukohti ja oma paberitükke. Nüüd 4 ja 6, on need järjekorras. Ma jätan need olla. 6 ja 8, need on korras. Jäta neid olema. 8 AND1, rikkis. Kui te kaks ei oleks midagi vahetada. Nüüd 8 ja 3, kui te võiks vahetada. 8 ja 7, kui te võiks vahetada. Ja 8 ja 5, kui te võiks vahetada. Nüüd olen ma teinud olen? Ei, loomulikult mitte. Aga ma olen teinud olukord parem, eks? Mis su nimi oligi, number 8? Raaheli Rachel. DAVID Humala: Nii Rachel on tõhusalt mullidena üles päris palju, kõik viis lõpuks minu massiivi numbrid siin. Ja nii, et probleem on omamoodi lahendatud. Nüüd on selge, 2 vajab veel liikuda veidi, ja 4 ja 6 ja 1. Aga ma tundub, et on saanud lähemale lahendus. Nii et olgem kohaldatakse sama naiivne heuristiline uuesti. 2 ja 4, OK. 4 ja 6, OK. 6 ja 1 mm-mm. Olgem swap. 6 ja 3 mm-mm. Olgem swap. 6 ja 7 on OK. 7 ja 5, nope. Olgem swap. Ja nüüd 7 ja 8 alusel. Ja mis su nimi oligi? FRANCES: Frances. DAVID Humala: Frances. Nüüd Frances on isegi parem asendis, sest nüüd 7 ja 8 õigesti mullidena üles tippu. Nii et 2 ja 4, OK. 4 ja 1, olgem swap. 4 ja 3, olgem swap. 4 ja 6, et sa oled OK. 6 ja 5, olgem swap. Ja nüüd need mehed on head. Me oleme peaaegu kohal. 2 ja 1, rikkis, nii vahetada. Ja nüüd las ma teen terve mõistuse kontrolli. 2 ja 3, 3 ja 4, 4 ja 5, 5 ja 6, 6 ja 7, 8. OK, nii et me oleme valmis. Aga millise hinnaga ma tegin sorteeri need numbrid siia? Noh, mitu sammu tegin ma potentsiaalselt võtta kui sorteeritakse need inimesed? Noh, me tuleme tagasi selle küsimuse. Aga ausalt öeldes, kui sul natuke igav, see on liiki paljastavad, et see ei olnud võibolla kõige tõhusam algoritm. Ja tõesti, ausalt, ma higistamine enam jalgsi edasi-tagasi. See ei tundunud eriti tõhus. Nii et proovime midagi muud. Kui te võiks nullida endid nende kaheksa väärtused. Hea töö. Võtame pilk digitaalselt, vaid hetk enne kui me midagi muud proovida, juures, mis just juhtus. Siin, sa oled umbes, et näha, visualiseerimine nende kaheksa inimese kusjuures sinine ja punane tulbad numbrid. Pikem on riba, suurem number. Mida lühem on baar, väiksema arvu. Ja mida sa lähed, et näha, on juhuslikus järjekorras üle kaheksa neist. Sa lähed, et need baarid saada sorteeritud sama algoritmi, või juhistega, mis me kutsume nüüdsest mull omamoodi. Nii teate, iga sekund või nii, kaks baarid süttib punaselt, võrreldud arvuti. Ja siis kui suur baar ja väike baar on rikkis, neid vahetasid minu jaoks. Nüüd see on uskumatult tüütu vaadata seda, kindlasti, väga kaua, kuid teade takeaway-- suur baarid liikuda paremale, vähe baarid liikudes vasakult. Olgem katkestada see protsess ja seda kiirendada olla palju kiirem, et saaksime saada kõrgetasemelist tunnet, mida, Tõepoolest, mull omamoodi teeb. Tõepoolest, see vahustamine kuni paremal pool nimekirja või massiiv, suurem baarides. Ja vastupidi, vähe baarid vahustamine oma teed alla vasakule, kuigi kiiremini kui me varem tegime. Niisiis, raskem näha inimestega, kuid visuaalselt see on tõesti, mida juhtub. Aga proovime põhimõtteliselt erinevat lähenemist praegu. Proovime eri algoritm, mille oleme teie poisid alustada nende esialgse seisukohti, mis oli see, et siin. Ja olgem minna nüüd. Ja ma teen midagi veelgi lihtsam, eks? Tagantjärele vahetada paarikaupa uuesti ja jälle, peaaegu natuke kaval. Teeme asjad veelgi naiivselt, kus, kui ma tahan, et järjestada need inimesed, las ma otsin edasi võtta väikseima elemendi. Nii et praegu on, 4 on Kõige vähem olen näinud. Ma mäletan. Ei, 2 on parem, ja pidage meeles, et. 1 on veelgi väiksem. 3, 7, 5. OK. Keegi-- mis su nimi oligi? Artie: Artie. DAVID Humala: Artie. Niisiis, Artie, edasi minna. Ma lähen vedama teid välja rida. Kui sa saaksid siia tagasi tulla. Ja mul on vaja, et teha ruumi teda. Meil on otsuse punktis siin. Kuidas võiks me teha ruumi Artie siin alguses milles number 1 kuulub? Sihtrühm: Shift. DAVID Humala: OK, me realiseerumisel võib igaüks. Aga ettepanekuid optimeerimine. See tundub veidi tüütu minu jaoks küsida neli inimest liikuda kogu tee alla. Mida muud ma teha sain? Sihtrühm: Switch neid. DAVID Humala Lülita neid. Ja mis su nimi oligi? JACOB: Jacob. DAVID Humala: Jacob, liikuda. Palju tõhusam lihtsalt on Jacob swap kohtades Artie, mitte sundides kõik neli neist inimesed, tänan teid väga, et oma õigesse asendisse. Mis on tore Artie nüüd, ta on oma õiges asendis. Teeme seda uuesti. 2, mis on väikseim number Olen näinud. 3, 7, 5. OK. 2 on kindlasti väikseim. Ei pea tegema muud tööd. Teeme seda uuesti. 6. Väikseim? 8. Nope. 4? Ooh. Lubage mul meenutada 4. 3. Lubage mul meenutada 3. 7, 5. Väikseim number Olen näinud selle läbima on 3. Kui sa tuled välja. Kuhu me paneme sind? Ja mis sinu nimi on? Alanna: Alanna. DAVID Humala: Alanna, me oleme pean tõstma teid. Aga see on tõhusam, lihtsalt vahetada kaks inimest, kui on mitu inimest tegelikult vältima üle. Nüüd teeme seda jälle. Ma lähen, et valida 4, nii et tule välja. Ja kes läheb liikuda? Number 8, muidugi. Kui ma nüüd leida number 5, tule välja. Number 8 läheb visatakse uuesti. Ma nüüd leida number 6 koht. 7 asemel. 8 asemel. Mida me tegime nüüd on midagi, mida nimetatakse valiku sorteerida, ja kui me seda visualiseerida, see on läheb tunda veidi erinev. Lähme edasi ja selle menüü siin, see visualization-- Muutkem seda to-- tule, Firefox. Muutkem seda valikut sort. Ja olgem kiirendada nagu enne, ja alustada visualiseerimise nüüd. Ja see algoritm on erinev tunne seda. Iga iteratsiooni ausalt öeldes see on veelgi lihtsam. Ma lihtsalt valides väikseim element. Nüüd, ausalt öeldes, mul on natuke õnne, et ajal, et sorteerida ülikiire. Elemendid olid juhuslikult. See ei ole, kui paneme lõpuks vaata, põhimõtteliselt kiirem. Aga vaatame, kolmas ja viimane läheneda siin, et mis toimub. Nii et lähme edasi ja reset kutid üks viimane aeg olla selles, et siin. Ja nüüd, ma lähen olla natuke targem, lihtsalt ringi läbi meie algoritme. Ma lähen seda tegema. Ma ei lähe edasi ja tagasi nii palju. Ausalt, ma olen väsinud kõik liiklevad. Ma lihtsalt võtta, mida ma olen manustada algul loendist ja ma lähen sorteeri et siis ja seal. Nii et siin me oleme. Number 4. Ma lähen sisestada number 4 sisse järjestatud nimekirja. Valmis. Väidan nüüd, ja vaid teha see rohkem selge see osa minu nimekirja sorteeritakse. See on selline rumal väide, kuid tegelikult 4 sorteeritakse nimekiri suurus üks. Nüüd ma lähen võtta number 2. Number 2 Ma nüüd lähen lisada õiges kohas. Nii et kui ei 2 kuuluvad? Ilmselt on siin. Nii et laske käia ja liikuda tagasi, kui sa võiksid. Ja miks sa ei kutid lihtsalt võtta oma muusika seisab teiega seekord. Ja olgem sunniviisiliselt sisestada te viiakse algul nimekirjas. Nii et natuke rohkem tööd. Pidin liikuma Jacob ümber, ja mis su nimi on? AMIN: Amin. DAVID Humala: Amin. Aga vähemalt ma ei lähe edasi ja tagasi. Ma lihtsalt võttes asju nagu ma minema. Ma lihtsalt sisestamist õiges kohas. 6, see on tegelikult üsna lihtne. Lisame teil seal, kui te tahtsin minna üle veidi. Number 8, ka üsna lihtne. Seal. Kurat. Number 1 Me ei saa lihtsalt Vaheta Amin siin sest see läheb segi ajama järjekorras. Nii et me peame olema natuke targem. Niisiis, Artie, kui sa saaksid varundada hetkeks. Lähme edasi ja vahetustega nüüd, erinevalt meie eelmise algoritme, et teha ruumi Artie siinsamas alguses. Nii et lõpus päeval, ma olen selline seda, mida ma tahtsin, et vältida varem. Ja nii minu algoritm on omamoodi pööratud, intellektuaalselt, mis see algselt oli. Ma teen ainult käiguvahetus erinevas punktis. Nüüd ma olen 3. Oh, kurat. Me peame tegema rohkem tööd uuesti. Nii et olgem push teid ära. Liigume 8, 6, 4-- oh Oh-- ja 3 lähe sinna. Nii vähemalt mõningast kokkuhoidu seekord. 7, mitte liiga palju tööd teha. Nii et kui soovite pop tagasi, olgem lisada sind. Ja lõpuks, 5, kui te tahad hüpata tagasi, me pead minema, sa, sa kuni viis on paigas. Nüüd seda näha aadressil kõrge graafiliselt, Teeme seda algoritmi visualiseerimine üks lisaaega. Nii et see kutsume sisestamise omamoodi. Me kasutada seda sama kiire ja alustage siit. Ja see ka, on teistsugune tunne. See on omamoodi aina paremaks ja parem, kuid see on kunagi täiuslik kuni ma minna ja sile neid lünki. Sest jällegi, ma ainult võttes, mida Ma antakse vasakult paremale. Nii et ma ei saanud nii õnnelik et kõik oli täiuslik. Sellepärast meil oli neid vähe mispositions et me fikseeritud aja jooksul. Niisiis kõik need algoritmid tunduvad joosta veidi erinevas tempos. Tegelikult, mis sul öelda on parim või kiireim seni? Bubble sort, esimene? Valik omamoodi teine? Insertion sorti kolmas? Ma kuulsin, et mõned valikut kehvasti. Muud mõtted? Nii selgub, et kõik need algoritmid on põhimõtteliselt sama tõhusad kui Iga paneme või vastupidi, just nagu ebaefektiivne nagu teineteist sest me ei tee põhimõtteliselt parem kui kõik kolm Nende algoritme. Ja see on natuke hädavale, liiga. kui ma ütlen, kui tõhus või ebatõhusaks, mis on vähemalt super-suurte n väärtused. Kui meil on vaid kaheksa inimest siin, või äkki 50 või nii baarides ekraanil sa absoluutselt märgata erinevusi Neist kolm algoritme. Aga nagu n inimeste arv, või numbrite arv, või inimeste arvu telefoninumber raamat või arvu veebilehti Google'i andmebaas muutub suuremaks ja suuremaks, me näeme, et kõik need kolm algoritmid on tegelikult päris halb. Ja me saame teha põhimõtteliselt paremini. Võtame pilk lõpuks mida need algoritmid võiks tunduda sisse kontekstis mõned teised samuti teel käesoleva visualiseerimine siin , mis tutvustab meile arvu algoritme. Lähme edasi ja õnnitleda Meie osalejad siin, keda kõiki järjestatud ise väga hästi. Kui soovite võtta jumalagajätt kingitus. Saate hoida oma numbrid samuti. Ja mida sa näed, või õigemini kuulda, nüüd, on see, et kui me paneme helid iga nimetatud vardad ja seostab seda tarkvara, Erineva sagedusega heli, saad sa oma meelt rohkem audioly ümber, mida kõik need asjad nägema. Esimene on sisestamise omamoodi [TONES] See on mull omamoodi. [TONES] Valik sort. [TONES] Midagi, mida nimetatakse merge sort. [TONES] Gnome sort. [TONES] Ongi CS50. Me näeme teid kolmapäeval. Jutustaja: Ja nüüd, "Deep Mõtted, "mida Daven Farnham. Miks on nii, et loop? Miks mitte teha seda parem? Ma teeksin viie silmuse. [Naer]