[Powered by Google Translate] [§ 4] [Vähem Mugav] [Nate Hardison] [Harvardi Ülikool] [See on CS50.] [CS50.TV] Olgu, tere tulemast tagasi lõik. Sel nädalal osa me teeme paar asja. Me läheme esmalt meelde Ülesanded nr 2, mis on Caesari ja Vigenère lahendamist. Ja siis me lähme sukelduma viktoriin 0 läbivaatamine ja veeta natuke aega kokkuvõtet tehes, mida me rääkisime Iga loenguid nii kaugele, ja me ka teha mõningaid probleeme alates eelmise aasta viktoriine. Nii teiega on hea viis selleks ette valmistada. Et alustada, ma olen käivitatud paar head lahendused eelneva lahendamist, Ülesanded 2, sellesse ruumi. Kui te kõik tabanud seda linki, ja kui sa vajutad mu nimi ja klõpsa minu esimene läbivaatamine näete caesar.c, mis on täpselt see, mida ma otsin. Räägime seda tõesti kiiresti. See on lihtsalt proov lahendus. See ei pruugi ideaalne lahendus. Seal on palju erinevaid viise, kuidas kirjutada sellest, kuid seal on mõned asjad, mida ma tahtsin rõhutada et ma nägin, kui ma hindasin, üldine viga, et ma arvan, see lahendus ei väga head tööd käitlemise. Esimene on lasknud mingi header kommentaar ülaosas. Ridadel 1 kuni 7. näed üksikasju, mida täpselt see programm teeb. Hea tava, kui olete kirjalikult C kood sõltumata sellest, kas teie programm sisaldub ühes failis või kas see on jagatud üle mitu faili on mingisugune suunata kommentaar ülaosas. See on ka inimesi, kes lähevad välja ja kirjutada koodi reaalses maailmas. See on koht, kus nad panen autoriõiguse info. Allpool on # sisaldab. Rea 16 seal on see # define, mis me tuleme tagasi vaid veidi. Ja siis, kui käivitub, kui peamised algust sest see programm on kõik, mis moodustavad ühe funktsiooni Kõige esimene asi, mis juhtub, ja see on väga idiomaatiline ja tüüpiline C programmi mis võtab käsurea argumente-on, et see kohe kontrollib jaoks argument loota, argc. Siin näeme, et see programm on oodata 2 argumendid täpselt. Pea meeles, see on esimene argument see on eriline see on alati programmi nime, mis kuramuse jooksma, nimi käivitatava faili. Ja mis see on see hoiab ära kasutaja töötab programm rohkem või vähem argumente. Põhjus, miks me tahame kontrollida seda kohe, sest me ei saa tegelikult kasutada seda argv array siin usaldusväärselt kuni meil kontrollida, et näha, kui suur see on. Üks levinumaid vigu ma nägin, oli inimesi oleks kohe minema ja haarata argv [1]. Nad tahaks haarata võti argument välja massiivi ja ei i kontrollida seda, ja siis nad teeksid test argc samuti järgmise katse, kas esimene argument oli tõepoolest täisarv samal ajal, ja see ei tööta, sest puhul, mis ei ole argumendid esitatud teil haarata väide, et ei ole olemas või üritab haarata üks, mis ei ole seal. Teine suur asi, et sa peaksid teate, et tahad alati välja printida mingi kasulik veateate kasutaja orienteeruda neid. Olen kindel, et olete kõik käivitada programme, kus äkki see kokku jookseb, ja sa saad selle naeruväärse vähe dialoogi, et hüppab ja ütleb midagi kohutavalt segasena ja võibolla annab sulle veakoodi või midagi sellist et ei ole mõtet. See on koht, kus sa tõesti tahad pakkuda midagi kasulik ja sihitud kasutaja nii et kui nad juhivad seda nad lähevad "Oh," face palm. "Ma tean täpselt, mida teha. Tean, kuidas määrata see." Kui te ei prindi sõnum, siis lõpuks tegelikult jättes kasutajal minna uurima oma lähtekoodi aru saada, mis valesti läks. On ka mõned ajad, et saad kasutada erinevaid veakoode. Siin me lihtsalt kasutas ühte öelda oli viga, seal oli viga, oli viga. Suuremad programmid, sageli programme, mis on kutsunud teisi programme, tagasi mingisugune eriline veakoodide erinevate stsenaariumide programmiliseks suhelda, mida sa muidu lihtsalt kasutada kena inglise sõnum. Lahe. Kuna me töötame alla, näete me tõmmake võti välja. Meil proovida, kas võti sobib. Me saame sõnumi kasutaja. Põhjus, miks me teeme seda see ei samas loop-ja see on midagi, mida me katta aastal natuke-aga selgub, et kui kirjutad kontrolli D kui sa selle getString kiire edasi terminal mida see tegelikult ei ole see saadab erimärk programmile. Seda nimetatakse ELF või faili lõppu iseloomu. Ja sel juhul meie sõnum string on null, nii see ei olnud midagi, mida me kontrollida probleemiga seadnud. Aga kui me läheme edasi, nüüd oleme hakanud rääkima viiteid ja dünaamiline mälu eraldamise kohta hunnik, kontrollides null, kui teil on funktsioon, mis võivad tagastab null kui väärtus on midagi, mida sa tahad saada harjumus teeb. See on siin peamiselt illustreerimiseks. Aga kui sa ei näe getString tulevikus, nii alates Ülesanded nr 4, sa tahad seda silmas pidama. Jällegi, see ei ole küsimus Ülesanded nr 3 kas sest me ei kuulu veel. Lõpuks saame seda osa, kus me saame peamine krüpteerimine silmus, ja seal on paar asja siin toimub. Esiteks, me kinnitada, kogu sõnumi string ise. Siin me oleme hoidnud strlen kõne seisukorras, mis number teil on märkinud, ei ole suurepärane võimalus minna. Selgub, antud juhul see ka ei ole suur, osaliselt, sest me muuta sõnumi sisu ise sees jaoks silmus, nii et kui meil on sõnum, mis on 10 tähemärki pikk, Esmakordselt alustame et silmus strlen naaseb mida? 10. Aga kui me seejärel muuta sõnumi, ütleme me muuta oma 5. iseloomu, ja me visata \ 0 märk 5. positsiooni, edaspidiseks iteratsiooni strlen (sõnum) ei naase, mida ta tegi Kõige esimene kord, kui me itereerida, kuid selle asemel tagastab 5, kuna me viskasid selles null terminaator ja stringi pikkusest, määratletud poolt seisukohta, et \ 0. Sel juhul on see suurepärane võimalus minna, sest me muuta seda kinni. Aga te märkate, et see on tegelikult üllatavalt lihtne varjata kui saad matemaatikat õige. Kõik, mis vaja on kontrollida, kas kirjas, et te vaatate on suur-või väiketähed. Põhjus, miks me ainult kontrollida seda ja me ei pea kontrollima on alfa puhul, sest kui märk on suur või kui see on väiketäht siis see on kindlasti tähte, sest meil ei ole suuri ja väikeseid numbreid. Teine asi, mida me teeme ja see on natuke keeruline- on meil modifitseeritud standard Caesar salakiri valem et me andis lahendamist spetsifikatsioon. Mis on erinev on see, et me lahutame aastal suur juhul kapitali, ja siis lisasime kapitali tagasi lõpus. Ma tean, mõned oled seda teinud oma koodi. Kas keegi teist seda teha oma ettepanekuid? Sina tegid seda. Kas oskate selgitada, mida see teeb, Sahb? Lahutatakse ära, sest sa tegid mod kohe pärast seda, te peate võtma seda, et kuidas sa saad [köha] asendisse. Ja siis lisada see hiljem tagasi sa nihkunud üle ühe, mis sa tahtsid. Jah, täpselt. Mis Sahb ütlesin, et kui me tahame lisada meie sõnum ja meie peamiste kokku ja siis mod, et moderaator et NUM_LETTERS, kui me ei varu meie sõnum sobivasse 0-25 vahemikus esimene, siis me võiksime lõpuks saada väga imelik number sest väärtused, mis me vaatame, kui me vaatame sõnum [i] kui me vaatame nda iseloomu meie tavaline tekst sõnum on väärtus kusagil see 65-122 vahemik põhineb ASCII väärtused suur kaudu väiketähti z. Ja nii kui me mod see 26 või NUM_LETTERS, kuna see oli meie # define ülaosas paremal siin, et läheb meile väärtus, mis on aastal 0-25 vahemikus, ja me peame viis siis skaala, mis tagasi üles ja saada see sobiv ASCII vahemikku. Lihtsaim viis seda teha on lihtsalt skaleerida kõike ette arvesse 0-25 vahemikus alustada, ja siis suunata kõik varundada lõpus. Teine levinud viga, et ma nägin inimesi tekib on see, et kui sa tegelikult ei tee seda tagi kohe ja lisate teade ja sisestage kokku ja lisate neid, ütleme, arvesse char muutuja probleem, et on alates teate [i] on suhteliselt suur arv alustada- Jäta see vähemalt 65, kui see on suurtähtede- kui teil on suur võti, ütleme, midagi 100, ja lisate need 2 kokku ühte allkirjastatud char sa lähed, et saada ülevoolu. Sa lähed, et saada väärtus, mis on suurem kui 127, mis on suurim väärtus, mis char muutuja mahub. Jällegi, sellepärast et sa tahad teha, et selline asi alustada. Mõned inimesed said ümber Sellisel juhul tehes kui muidu ja katsetamine et näha, kas see ülevool enne seda tehes, kuid sel viisil saab ümber selle. Ja siis see lahendus me välja trükkida kogu stringi päris lõpus. Teised inimesed välja trükkida täht korraga. Mõlemad on vinge. Sel hetkel, te poisid on küsimusi, märkusi selle kohta? Asjad sulle meeldib, mida sa ei meeldi? Mul oli küsimus. Võib-olla ma igatsesin seda ajal oma seletus, aga kuidas see programm jäta ruumi ühendada võti teksti pikkusest? See on vaid Caesari šiffer. >> Oh, vabandust, jah. Jah, me näeme seda. Kui Caesar salakiri saime ümber, et kuna me ainult keerata tähemärki. Me ainult keerutada, kui nad olid suur-või väiketähed. Te tunne päris hea selle kohta? Julgelt kopeeri see kodu, siis võtke see, võrrelda seda, mida kutid kirjutas. Kindlasti saatke küsimusi ka. Ja jälle aru, et eesmärk siin oma probleem seab ei saa te kirjutada täiuslik koodi oma probleem seab. See on õppimise kogemus. Jah. Tagasi ei samas loop, kui see võrdub null, nii null tähendab lihtsalt midagi, nad lihtsalt enter? Null on eriline osuti väärtus, ja me kasutame null, kui me tahame öelda meil pointer muutuja, mis osutab, et mitte midagi. Ja nii tavaliselt see tähendab, et see muutuja, sellest sõnumist muutuja on tühi, ja siin, sest me kasutame CS50 spetsiaalne string tüüpi, Mis on CS50 string tüüpi? Kas olete näinud, mis see on, kui David tagasi tõmmata kapuuts loeng? See on funky-see on osuti, eks? Okei, jah. >> See on char *. Ja nii tõesti me võiks asendada see siin koos char * sõnum ja nii getString funktsiooni, kui see ei edukalt saada stringi kasutaja, ei saa sõeluda string, ja üks juhtum, kus ta ei saa sõeluda string on, kui kasutaja trükib faili lõppu iseloomu, kontrolli D mis ei ole midagi, mida sa tavaliselt teed, kuid kui see juhtub siis funktsioon tagastab selle null väärtusega viis öelda "Kuule, ma ei saanud string." Mis juhtuks, kui me ei pane kirja = null, mis on midagi, mida me pole teinud veel? Miks see oleks probleem? Sest ma tean, et me rääkisime natuke ka loeng mälu lekkeid. Jah, teeme seda ja vaatame, mis juhtub. Vassili küsimus oli, mis juhtub, kui me tegelikult ei ole sellest sõnumist = null testi? Olgem liikuda üles üles. Te saate kommenteerida seda. Tegelikult, ma jätan selle läbivaatamist. See on Kontroll 3. Mida sa pead tegema, et programmi käivitada on teil klõpsata see käik ikooni siia üles, ja sa pead lisama argument ta. Sa pead andma see võti argument kuna tahame läbida käsurea argument. Siin ma annan see number 3. Mulle meeldib 3. Nüüd suum jälle välja, töötab programm. See töötab, koostamise, ehitamise. Läheb lahti. See ootab, et küsitakse. Kui ma kirjuta midagi tere-kust, et minna? Oh, mu programmi võttis liiga kaua aega joosta. Olin jawing liiga kaua. Siin see läheb. Nüüd ma kirjuta tere. Me näeme, et see krüpteerib sobivalt. Nüüd mis juhtub, kui me teeme kiiret getString naasta null? Pea meeles, ma ütlesin, et me tegime seda, vajutades nupule D samal ajal. Ma liikuge üles siin. Me teeme seda jälle. Ehitus. Seal ta läheb. Nüüd, kui ma tabanud kontrolli D Mul on see rida, mis ütleb opt/sandbox50/bin/run.sh, segmenteerimine süü. Kas te olete näinud, et enne? [Student] Miks pole->> Vabandust? [Student] Miks ei ole krahh tabab sel juhul? Core dump on-küsimus on miks ei krahh tabab siin? Küsimus on, et võib olla, kuid krahh tabab fail mis saab salvestatud kõvakettale. Sellisel juhul oleme blokeeritud tuum puistab aasta perspektiivis server, nii et me ei pea inimesed seg faulting ja ülesehitamisel tonni tuum puistab. Aga te võite saada üks. Core prügimäed on selline asi, mida saab sageli keelata, ja mõnikord sa teed. Killustatust süü, et vastata teie küsimusele, basiilik, ütleb, et me püüdnud ligi pääseda pointer et ei olnud seatud osutada midagi. Mäleta Binky on video kui Binky püüab minna juurdepääs pointer see pole osutades midagi? Sel juhul ma arvan, et tehniliselt osuti osutab millelegi. See osutab null, mis on tehniliselt 0, kuid mis on määratletud olema segment, mis ei ole kättesaadavad Teie programm, nii saad killustatust süü sest sa ei mälukaardi, mis on kehtivas segmendi nagu hunnik segment või korstna segment või Andmesideteenustest. Lahe. Enam küsimusi Caesar? Liigume edasi. Vaatame Revision 2 tõesti kiiresti. See on Vigenère. Siin Vigenère me kõndida läbi selle päris kiiresti, sest jällegi, Vigenère ja Caesar on üsna sarnased. Päise kommentaar on enne, # Define on enne kasutamist vältida nende maagiline arv. Tore asi on öelda tahtsime minna erinevat tähestikku või midagi sellist. Selle asemel et minna käsitsi muuta kõik 26 on koodis saaksime muuta selle 27 või tilk ta maha kui olime kasutades erinevaid tähestikke, erinevates keeltes. Jällegi, meil on see kontroll argument loota, ja tõesti saab peaaegu seda mallina. Päris palju iga programmi sa kirjutad peaks olema- kui ta võtab käsurea argumente, mõned jada read et kõlab nagu see alguses. See on üks esimesi meelerahu testid sa teha tahad. Siin me ei olnud me kindlaks teinud, et märksõna oli kehtiv ja see oli teise kontrolli, mis me tegime. Teade jälle, et me eraldada see alates argc ja 2. Pange tähele, et sellisel juhul üks asi, mis me tegema pidime oli selle asemel kasutamise i tahtsime kinnitada kogu stringi, ja selleks, et teha, mida tegelikult on vaja minna tähemärgi haaval üle string. Ei ole hea viis helistada midagi peal sest isegi näiteks i tagastab 0 kui ta ei saa sõeluda täisarv, nii et isegi ei tööta. Jällegi kena sõnum teatades kasutajale täpselt juhtus. Siis siin, jälle, me ka käsitleda juhtumit, kus kasutaja liigid kontrolli D juhusliku iseloomu. Ja siis Charlotte oli küsimus varem, kuidas meil õnnestub vahele ruumid meie string siin. See oli selline sarnane sellega, mida tegime koos Myspace programmi et me tegime punktis, ja nii see töötas on see, et me leidsime mitmeid kirju, et me tahaks näha. Nagu me kõndinud üle sõnumi string, nagu me kõndinud üle tähemärgi haaval, me leidsime indeks osana meie jaoks silmus, ja siis me ka jälgida tähtede arv, nii mitte-erimärke, mitte-numbrit, mitte-valge ruum et me tahaks näha eraldi muutujana. Ja siis see lahendus muudab võti saada tegelik võti täisarv, ja see, et lennult, õigus enne, kui see läheb siis krüptida tegelik sõnum iseloomu. On mõned lahendused, mis olid täiesti liiga suur et oleks muuta võti üles kui testitakse võtme kehtivus. Lisaks veenduge, et iseloomu ja märksõna aastal tähte ta ka välja, et arvesse täisarv aastal 0-25 vahemiku jätke oleks vaja teha, et hiljem selle eest silmuse. Jällegi, sa näed siin see on tõesti täpselt sama kood et me kasutada Caesar selles punktis. Sa teed täpselt sama asja, nii tõeline trikk on figuring kuidas muuta märksõna täisarv. Üks asi, mis me tegime siin, et on natuke paks on meil kordas seda fraasi, ma arvan, võiks nimetada seda, 3 eraldi korda liinidel 58, 59 ja 61. Kas keegi seletada, mis täpselt seda fraasi teeb? See tutvumise iseloomu, nagu sa ütlesid. Jah, see on [kuuldamatu] märk märksõna, ja nii see arv tähti näha, sest sa oled ainult liigub piki märksõna kui olete näinud kirja, nii et läheb tõhusalt vahele tühikud ja värki. Jah, täpselt. Ja siis kui oled näinud märksõna tühjaks sa lihtsalt mod nii liigutad tagasi umbes. Täpselt. See on täiuslik seletus. Mis Kevin ütles, et me tahame indeks märksõna. Me tahame saada num_letters_seen iseloomu, kui soovite, aga kui num_letters_seen pikem märksõna, kuidas me naasta sobiv vahemik me kasutame mod operaator tõhusalt ümbritsev. Näiteks nagu lühikese, meie märksõna on peekon, ja see on 5 tähte pikad. Aga me oleme näinud 6 tähte oma lihtteksti selles punktis ja krüpteeritud 6. Me lõpuks tutvumise num_letters_seen, mis on 6, mod pikkus märksõna, 5, ja nii me jõuame 1, ja nii me teeme on me juurdepääs esimese märgi sees ja meie märksõna sel hetkel. Olgu, lisaküsimusi Vigenère enne kui edasi liigume? Te tunne päris hea selle kohta? Lahe, tore. Ma tahan veenduda, et te ei saada võimalus näha koodi et me arvame, näeb hea välja ja on võimalus õppida. See saab olema viimane saadame kasutades ruumid praegu, ja me ei kavatse ülemineku nüüd, ja ma lähen minema cs50.net/lectures et saaksime teha natuke viktoriini läbi. Parim viis Ma arvan, et alustada teed viktoriini läbivaatamine on tulnud seda Loengud lehel cs50.net/lectures, ja all iga nädal rubriigid, nii et kui ma vaatan siin 0-nädalal, Ma näen, et meil on teemade nimekirja me käsitlesime 0-nädalal. Kui mõni neist teemadest tunduda võõras teile saate kindlasti tahan minna tagasi ja küürimine loengumaterjalid ja võimalusel isegi Lukaista loenguid, vaadata neid uuesti, kui soovite et tekib tunne, mis toimub kõigi kõnealuste teemade kohta. Ütlen täiendavalt käesoleva aasta üks lahe ressursse meil on need lühikesed, et me oleme loonud, ja kui te vaatate Nädal 0, meil ei ole kõiki teemasid, aga meil on üsna vähe neid, mõned keerukam tooted, et vaadates neid lühikesi pükse uuesti on hea võimalus saada teile kiirendamiseks. Eelkõige ma lähen kasutusele plug 3 põhjale, sest ma tegin neid. Aga kui sa oled hädas binaarne, bitid, hex, et sellist kraami, binaarne on hea koht alustamiseks. ASCII on veel üks, mis on hea vaadata ka. Võite isegi vaadata mind 1.5x kiirusega kui ma lähen liiga aeglane sind. Kuna see on ülevaade, võid vabalt teha. Lihtsalt alustada tõesti kiiresti, me läheme läbi paar neist viktoriin probleeme lihtsalt kiiresti läbi hammustada neid. Näiteks vaatame probleem 16. et mul on õigus siin laual. Meil see järgmise arvutuse binaarne, ja me tahame näidata mingit tööd. Okei, ma annan selle maha. Te peaksite järgima koos paber, ja me teeme seda tõesti kiiresti. Tahame teha järgmise arvutuse binaarne. Mul 00110010. Ja ma lähen lisada see 00110010. Sest matemaatika geeniused pärast mööda kodus, see on tegelikult korrutatakse 2-ga. Alustame. Me läheme järgima samu Lisaks algoritm, mida me teeme kui me lisame kümnendkraadides koos. Tõesti ainus erinevus on selles, et me loop tagasi umbes kui meil on 1 + 1 asemel, kui saame 10. Kui hakkame paremalt, tõesti kiiresti, mis on esimene number? [Student] 0. >> [Nate H.] 0. Hea, teine ​​number? [Student] 1. [Nate H.] Kas see on 1? 1 + 1 on? [Student] 10. [Nate H.] Täpselt nii, siis milline on number, mis ma kirjutan paremale alla 2 neist liidetakse? [Student] 1, 0 või 0 ja seejärel läbi 1. [Nate H.] 0 ja viia 1, täpselt. Järgmine üks üles, basiilik, oled valmis. Mis kolmas? >> [Basiilik] 1. [Nate H.] 1, täiuslik. Kevin? [Kevin] 0. >> [Nate H.] 0, Charlotte? [Charlotte] 0. >> [Nate H.] Jah, ja mida ma pean tegema? [Student] 1. [Nate H.] Ja mida ma pean tegema? Ja siis ma teha 1. Täiuslik, Sahb? >> [Sahb] Nüüd on teil 1. [Nate H.] Ja ma pean tegema midagi siin? [Sahb] Järgneva ühe teil on 1, sest sa üle 1. [Nate H.] Hea, et siin saame lõpetada see üles. Lahe. [Student] Kas 0 + 0 = 0? 0 + 0 = 0. 1 + 1, nagu sa ütlesid, on 10 või 1, 0, pigem. 10 on eksitav, sest mulle 10 tähendab number 10, ja see on veidrus, kuidas me seda väljendada kui me kirjutamist. Me esindame number 2 1, 0 ja number 10 on veidi teistsugune. Mis liiki kena umbes binaarne on see, et seal tõesti ei ole, et paljud juhtudel, mida vaja teada. Seal on 0 + 0 = 0, 0 + 1 = 1, 1 + 1 on 0, ja seejärel läbi 1 ja siis näete siin kolmandas veerus paremalt meil oli see 1, 1 ja 1. Ja 1 + 1 + 1 on 1, ja kannad veel 1. Kui sa teed binaarne Lisaks päris lihtne. Ma teeksin veel paar nende meelerahu kontrollida ise enne kui minna, sest see on ilmselt midagi, me näeme viktoriini. Nüüd teeme seda järgmisel üks samuti. Teeme probleem 17. Me läheme teisendada järgmiste kahendarvu koma. Mul 10100111001. Pea meeles, et binaarne video, mis ma tegin Läksin läbi paar näidet, ja ma näitasin kuidas kõik toimib, kui sa teed seda koma. Kui te töötate koma esindatus Ma arvan, et me oleme Sel hetkel meie elus nii valdavad seda, et see on üsna lihtne ilustada mehaanika, kuidas see tegelikult toimib. Aga mida teha kiire sulgege, kui mul on number 137 see tegelikult tähendab ja jälle, see on koma esindatus- number 137 kohaga tähendab, et mul on 1 x 100 + 3 x 10 + 7 x 1. See on kõik, kes viibivad ekraan. Ja siis, kui te vaatate neid numbreid siin, 100, 10 ja 1, siis näeme, et nad on tegelikult kõik volitused 10. Mul on 10 ², 10 ¹ ja 10 nulli. Meil on sarnane asi, binaarne, välja arvatud, et meie baasi, nagu me seda kutsume, on 2 asemel 10. Need 10s, et ma kirjutasin siia alla, See 10 ², 10 ¹, 10 nulli, 10 on meie baas, ja eksponent, 0, 1 või 2, on võimalik tuletada positsiooni kohaline number, et me kirjutame. 1, kui me vaatame seda, seda 1 on 2. koht. 3 on 1. positsiooni, ja 7 on 0. positsiooni. See, kuidas me saame erinevate eksponendid allpool meie aluseid. Pärast kõike seda we'll-tegelikult, tead mida? Me teeme Kust minu undo nupp minna? Seal ta läheb. Ma armastan seda undo asi. Pärast seda ma arvan, minu jaoks vähemalt Lihtsaim viis alustada konverteeriva kahendarvu või kuueteistkümnendarvuna kus baas on 16 ja mitte 10 või 2 on edasi minna ja kirjutada alused ja eksponendid jaoks kõik numbrid minu kahendarvu ülaosas. Kui hakkame vasakult paremale uuesti, mis on selline ebaloomulik, Ma muudan tagasi must siia, meil on 2 kuni 0. seisukohta, ja siis on meil 2 ¹, 2 ², ja siis 2 kuni 3, 2 4, 2 5, 6, 7, 8, 9, ja 10. Need numbrid olen kirjutanud välja kõik eksponendid. Ma ainult kirjutas alused siin esimese 3 lihtsalt ruumi. Sel hetkel ma lähen edasi minna ja ma olen tegelikult läheb kustutada asju, mis me tegime koma, kui see on okei. Olete kõik said aru. Need teie vaadates online Olen kindel, et saab kerida mind, kui soovite. Switching tagasi pen. Nüüd, mida me saame teha, kui te ei ole täiesti kiirendamiseks oma volitusi 2 see on täiesti lahe. See juhtub. Mõistan. I kord oli tööintervjuu, kus mulle öeldi, et ma peaks teadma kõik volitused, 2. kuni läbi 2 30.. See ei olnud töö sain. Igatahes, kutid minna ja ei matemaatikat siin, kuid binaarne see ei ole tõesti mõtet, ja ega see mõttekas koos koma või kuueteistkümnendsüsteemis kas, teha matemaatika, kus sa oleksid nullid. Näete mul on 0 siin, 0 siin, 0 siin, 0 siin, 0 siin, 0 siin. Miks võib see ole mõtet teha tegelik matemaatika arvutamiseks asjakohane võimsus 2 kõnealuse seisukoha? Täpselt, nagu Charlotte ütles, et see on 0. Samahästi säästa ennast aega, kui arvutamisel volitusi 2 ei ole Teie tugev külg. Sel juhul me ainult vaja arvutada seda 2 astmes 0, mis on-? [Student] 1. [Nate H.] 1, 2, 3 milles on-? [Student] 8. >> [Nate H.] 8. 2 4? [Student] 2. Mul on kahju, 1. [Nate H.] 2 4 on 16, täpselt. 2 5, Kevin? >> 32. [Nate H.] 32, 2 8? [Student] 32 x 8, 256. [Nate H.] Perfect. Ja 2 10? [Student] 1024. [Nate H.] Jah, 1024. Kui meil on need numbrid saame need kokku liita kõik üles. Ja see on koht, kus see on tõesti oluline teha paar asja. Üks on minna aeglane ja kontrolli oma tööd. Te võite öelda, et seal on 1 lõpus see number, nii et ma peaks kindlasti saada paaritu arv kui minu tulemus, sest kõik teised need hakkavad olema paarisarvud arvestades, et see on binaarne number. Teine asi, mida teha on, kui sa saad selle punktini test ja olete kirjutanud seda välja nii kaugele ja sa otsa aega vaata arvu punkte, et see probleem on väärt. See probleem, nagu te näete, kui ma flip tagasi minu sülearvuti tõesti kiiresti- see probleem on väärt 2 punkti, nii see ei ole mingisugune lisaks siis peaks olema läbimas kui sa oled tõesti vähe aega. Aga me minna tagasi iPadi ja läheme läbi väga kiiresti. Mulle meeldib teha väike arv 1. sest ma leian, et lihtsam. Mulle meeldib 32 ja 8, sest nad lähevad koos päris kergesti, ja me saame 50. 16 ja 1 saab 17. Seal saame 57, ja siis me saame teha ülejäänud seda, et saaksime teha 57 156. Tule. Mees, noh, vaatame. Meil oli 57, 256, ja 1024. Sel hetkel, ma pigem lihtsalt läbi minema. Mul pole aimugi. Ma ilmselt vaja lugeda üles seda. 7, 6, ja 4, saad 17. 1, 5, 5, 2, 13. Siis saame 3, ja siis saame 1. 1337. Lihavõttemuna, keegi? Igaüks tunnistavad selle numbri said? Chris tunneb numbri. Mis see tähendab, Chris? [Chris] Leet. Leet, nii et kui te vaatate seda, tundub leet. Hacker kraami. Vaata ette, et sellist kraami Kontrolltöö või viktoriin, pigem. Kui näed sellist kraami ja sa ei tea "Huh," et võiks ka midagi tähendab. Ma ei tea. David meeldib seda sinna See on hea viis meelerahu seda kontrollida. Nagu okei, ma näen, mis toimub. See nädal 0/Week 1 kraam. Kui me minna tagasi meie sülearvuti nüüd, suumimiseks ja paar muud asja. Seal on ASCII, mis me oleme teinud palju probleemi komplekti. See mõiste kapitali A. Mis on see tõesti? Teades, et see koma täisarv. 65 on see, mis see on kaardistatud ka ASCII tabel, ja see on seega, kuidas arvuti kirjutab ta, ja see, kuidas oleme olnud saada minema tegelikult kirjalikult iseloomuga kapitali ja iseloomu väiketähtedeks mõnel neist lahendustest ja probleem komplekti, mis olete teinud. Paar muud asjad. Meil avaldused, tõeväärtus väljendeid, tingimused, silmad, muutujad ja niidid. Need kõik tundub loogiline enamasti? Osa sellest terminoloogia on kuidagi imelikult aegadel. Mulle meeldib mõelda avaldust enamasti midagi, mis lõpeb semikooloniga. Avaldused nagu x = 7, mis seab muutuja, arvatavasti nimetatakse x = 7. Arvatavasti x on ka tüüp, mis mahutab number 7, nii et see on int või isegi ujuki või lühike või char, midagi sellist. Boolean väljend kasutab neid topelt võrdne ja pauk on võrdne või mitte võrdne, väiksem kui, suurem kui, väiksem või võrdne, kõik sellist kraami. Tingimused on siis, kui muud avaldused. Ma mäletan, et sa ei saa olla muud ilma vastava kui. Samamoodi ei saa olla muud kui ilma vastava kui. Loops, mäletate 3 liiki silmuste me oleme haamriga sulle sisse viimase paari lõigud ja probleem seab. Kasutades ära samal ajal, kui te saate kasutaja sisend, kasutades samal ajal silmuseid kuni teatud tingimus on tõene, ja siis kasutades neid silmuseid, kui peate tead mis iteratsiooni silmus Praegu asute, kuidas ma mõtlen selle üle. Või kui sa teed iga märk on string ma tahan teha midagi, iga element massiivi ma tahan teha midagi selle elemendi. Lõngad ja üritusi. Need oleme hõlmamata nii selgesõnaliselt C, aga mäletan seda nullist. See on mõiste, millel on erinevad skripte. See on ka see mõiste ringhääling sündmus. Mõned inimesed ei kasutanud ringhäälingut nende projektide esialgu mis on täiesti lahe, kuid need on 2 erinevat viisidest see suurem probleem nimega kokkulangevus, mis on, kuidas sa saad programme käivitada või näiliselt täita samal ajal? Erinevad ülesanded töötab samal ajal kui teised ülesanded ka töötab. See, kuidas teie operatsioonisüsteemi tundub töötavat. Seetõttu, kuigi näiteks Sain oma brauseri töötab, võin ka sisse lülitada Spotify ja mängida laulu. See on rohkem kontseptuaalne asi mõista. Ma võtaks pilk niidid lühikeseks Kui soovite rohkem teada seda. Vaatame, ma usun, et oleks võinud olla probleem selles ühes neist. Jällegi, ma arvan, niidid ja sündmused ei ole midagi, mida me katta C lihtsalt sellepärast, et see on oluliselt raskem kui nullist. Sa ei peaks muretsema selle sinna, kuid kindlasti mõista mõistete, aru, mis toimub. Enne kui edasi liigume, küsimusi 0-nädalal materjal? Igaüks tunne päris hea? Mõistmise muutujad ja mida muutuja on? Liigume edasi. 1. nädal. Paar asja siin mis ei olnud eriti hõlmatud aastal viktoriin läbivaatamise tingimata ja ka on rohkem põhimõtteline asju mõelda. Esimene on see mõiste, mida lähtekoodi, koostajad ja objekti kood on. Igaüks? Basiilik. Kas objekti kood-ma mõtlen lähtekoodi on see, mida sa pannakse rõkkama, ja objekti kood, mida rõkkama paneb välja nii, et arvuti ei loe programm. Täpselt. Lähtekood on C-koodi, mida tegelikult tüüp üles. Objekti kood on see, mida sa välja rõkkama. See on 0. ja 1s selles kahendvormingus. Mis siis juhtub, kui sul on hunnik objekt failid, öelda sa koostamise projekti või programmi, mis kasutab mitut lähtekoodi failid, keda tavapäraselt antakse. c faililaiend. Sellepärast on meil caesar.c, vigenère.c. Kui olete kirjalikult Java programmide te neile pikendamist. Java. Pythoni programmid on laiendiga. Py sageli. Kui teil on mitu. C failide koguda neid. Rõkkama sülitab välja kõik see binaarne rämps. Siis kuna tahad ainult 1 programm teil on linker link kõik need objekti faili kokku arvesse 1 käivitatava faili. See on ka mis juhtub, kui te kasutate CS50 näiteks raamatukogus. CS50 raamatukogu on nii, et. H päisefail et sa loed, et # includecs50.h. Ja siis on ka spetsiaalne binaarne raamatukogu fail mis on koostatud, et on 0. ja 1s, ja et-l lipu, nii et kui me läheme tagasi Spaces ja vaatame tõesti kiiresti kell, mis toimub siin, kui me vaatame meie rõkkama käsk, mida meil on see meie lähtekoodi fail siin. Need on hunnik kompilaatori lipud. Ja siis päris lõpus, need-l lipud lüli tegelik binaarfailid need 2 raamatukogud, CS50 raamatukogu ja seejärel matemaatika raamatukogu. Mõistmise iga tüüpi faile "eesmärk aastal koostamise protsess on midagi, mida sa tahad, et oleks võimalik anda vähemalt kõrgetasemelise ülevaate. Lähtekood on sisse Objekti kood väljub. Objekti kood faile ühendaks, ja sa saad ilus, käivitatava faili. Lahe. See on ka, kus saad vigu mitu punkti aastal koostamise protsessist. See on koht, kus näiteks, kui te võtate välja see ühendab lipp, CS50 lipp, ja jätate selle ruumi või kui näed oma koodi, see on koht, kus sa saad viga ühendab etapp, ja linker ütleb: "Kuule, sa helistasid funktsioon getString see on CS50 raamatukogu. " "Sa ütlesid, et see oli CS50 raamatukogu ja ma ei leia koodi." See, kui teil on siduda seda, ja see on eraldi alates kompilaator vea tõttu kompilaator vaatab süntaks ja sellist kraami. On hea teada, mis toimub, millal. Muud asjad teada. Ütleksin, mida kindlasti soovite võtta pilk lühike typecasting teha Jordan mõista, mida ints on kapoti alla, mida tähemärki on kapoti alla. Kui me räägime ASCII ja me tegelikult vaatate ASCII tabel, mida see teeb annab meile kapoti alla vaadata , kuidas arvuti tegelikult kujutab kapitali ja number 7 ja koma ja küsimärk. Arvuti on ka erilised esindama number 7 täisarvuna. See on eriline võimalus esindada number 7 kui murdarv, ja need on väga erinevad. Typecasting on, kuidas sa ütled arvuti "Hei, ma tahan, et sa teisendada ühest esindamine teise esindatuse. " Miks me ei võta pilk see. Tahaks ka võtta pilk lühike raamatukogude ja lühike koostajad. Need jutud koostamise protsess, mida raamatukogu on, ja minna üle mõnele neist küsimustest, et võite saada küsis. Küsimused nädal 1 materjal? Kas on mingeid teemasid siin et tunduda hirmuäratav soovite katta? Püüan puhuda läbi enamik neist varem teemasid nii, et saame viiteid ja teha natuke rekursioon. Mõtted? Midagi katta? Aeg mõned šokolaadi äkki? Te töötate läbi. Ma lähen hoida jõime minu kohvi. 2. nädalal. Hea kõne hea kõne. 2. nädalal me rääkisime natuke rohkem funktsioone. Esimese paari probleem seab me tegelikult ei kirjuta neid ülesandeid, mida kõik peale, mis funktsioon? [Student] Main. >> Ääres, täpselt. Ja nii oleme näinud erinevaid kostüüme et peamine kannab. Seal on üks, kus ta võtab ühtegi argumenti, ja me lihtsalt öelda tühine vahel sulgudes, ja siis seal on teine, kus me ei taha võtta käsurea argumente, ja nagu me nägime, et see on kus sa pead int argc ja string argv array või nüüd, et me oleme tegelikult avatud string olema char *, et see on me kavatseme alustada kirjalikult seda char * argv ja seejärel sulgudesse. Aastal Ülesanded nr 3, kutid nägid hunnik funktsioone, ja sa ellu hunnik funktsioone, joonistada, otsida, rüselus. Prototüübid olid kõik kirjalikud seal sinu jaoks. Mis ma tahtsin rääkida siin funktsioonidega tõesti kiiresti on see, et seal on 3 osi neid, kui kirjutada funktsioon. Pead määrama tagastamise tüüpi funktsioon. Pead määrama nime funktsioon, ja siis on teil täpsustada argument nimekirja või parameetrite nimekirja. Näiteks kui ma kirjutan funktsiooni Kokkuvõttes kamp täisarvud ja siis tagasi mind summa, mida oleks minu tulu liik kui ma tahtsin kokku täisarvud ja siis tagasi summa? Siis funktsiooni nimi. Kui ma minna ja kirjutada roheline, see osa on naasmise tüüp. See osa on nimi. Ja siis sulgudes on koht, kus ma annan argumendid, sageli lühendatult args, mida mõnikord nimetatakse parameetrid jaoks parameetreid. Ja kui sul on üks, sa lihtsalt täpsustada üks. Kui teil on mitu siis eraldi iga üks koma. Ja iga argumendi annad 2 asja, mis on-Kevin? [Kevin] Sa pead andma tüüp ja seejärel nimi. Ja siis nime ja nimi on nimi, et sa lähed kasutada viidata sellele argumendile jooksul summa funktsioon, jooksul funktsioon, mis sa praegu kirjalikult. Sa ei pea, sest näiteks kui ma lähen Kokkuvõttes öelda, array täisarvud-Me teeme int massiiv, ja ma annan endale mõned looksulg seal- siis kui ma mööda massiivi funktsiooni SUM Ma andke seda esimesel kohal argument nimekirja. Aga massiiv, et ma läbima ei pea olema nimi arr. Arr saab olema kuidas viitan sellele argumendile kehas funktsioon. Teine asi, et me peame arvestama, ja see erineb veidi funktsioone, kuid ma arvan, et see on oluline punkt, on see, et C kui ma kirjutan funktsiooni niimoodi kuidas ma tean, kui palju elemente on see massiivi? See on mõnevõrra konksuga küsimus. Me rääkisime sellest natuke eelmise nädala jagu. Kuidas ma tean mitmeid elemente sees massiivi C? Kas on võimalik? Tuleb välja, et seal on kuidagi teada. Sa pead läbima seda eraldi. Seal on trikk, mida saate teha kui sul sama funktsiooni mis massiiv on tunnistatud, ja te töötate korstnat massiivi. Aga see töötab ainult siis kui sul on sama funktsioon. Kui te kaotate massiivi teise funktsiooni või kui oled deklareeritud massiiv ja paned selle massiivi kohta hunnik, oled kasutanud malloc  ja sellist kraami, siis kõik ennustused on välja lülitatud. Siis sa tegelikult läbima ümber eriline argument või teise parameetri räägin teile, kuidas suur massiiv on. Sel juhul ma tahan kasutada koma-Vabandust, see läheb lahti ekraani siin- ja ma edasi teise argumendi  ja nimetavad seda int len ​​jaoks pikk. Üks asi, mis võiks tulla aasta viktoriin küsib kirjutada või rakendada eelkõige funktsiooni nimetatakse midagi. Kui me ei anna teile prototüüp, nii et kogu see asi siin, kogu see jama nimetatakse funktsiooni deklaratsiooni või funktsiooni prototüüp, see on üks esimesi asju, mida sa tahad, et küünte alla, kui see ei ole antud teile kohe edasi tegema. Teine trikk ma olen õppinud on see, et öelda, et me teeme teile prototüüp funktsioon, ja me ütleme: "Hei, sul seda kirjutada." Toas looksulg et olete viktoriin kui te märkate, et on tulu liik ja märkad, et tagastab tüüp on midagi muud kui tühine, mis tähendab, et funktsioon ei tagasta midagi, siis üks asi, mida kindlasti tahan teha, on kirjutada mingi tulu avaldust päris lõpus funktsiooni. Tagasi, ja sel juhul me paneme tühja sest me tahame täita tühjaks. Aga see saab teid mõtlema õige tee, kuidas ma kavatsen sellele probleemile läheneda? Ja see tuletab sulle meelde, sa lähed on naasta väärtus helistaja funktsiooni. Jah. >> [Student] Kas stiili kohaldata, kui me kirjalikult koodi viktoriin? Nagu taandus ja sellist kraami? >> [Student] Jah. Ei, mitte nii palju. Ma arvan, et palju-see on midagi, me selgitada kohta viktoriini päeval, kuid tavaliselt muretsema # sisaldab ja sellist kraami, see on selline väljaspool. [Student] Kas teil on vaja kommenteerida oma käsitsi kirjutatud kood? Kas teil on vaja kommenteerida oma käsitsi kirjutatud kood? Kommenteerides on alati hea, kui sa oled mures osalisi boonuspunkte või soovite suhelda oma kavatsusest teehöövel. Aga ma jällegi selgitab kohta viktoriini ise ja viktoriin päev, aga ma ei usu, et teil on vaja kirjutada kommentaare, ei. Tavaliselt mitte, aga see on kindlasti selline asi, kus saate suhelda oma kavatsuste, nagu "Hei, see on koht, kus ma lähen temaga." Ja mõnikord, mis aitavad osalise krediiti. Lahe. Basiilik. [Basiilik] Mis vahe on deklareerides, ütleme, int lang argumentide või parameetreid võrreldes kuulutab muutuja funktsioon? Vau, kohv läks kõri. [Basiilik] Nagu mis asju me tahame panna argumendid. Jah, see on hea küsimus. Kuidas valida milliseid asju soovite panna argumendid versus milliseid asju, mida peaks tegema sees funktsioon? Sel juhul me lisada mõlemad argumentidena sest nad on midagi, mida igaüks, kes kavatsevad neid tooteid kasutada funktsiooni SUM vaja täpsustada need asjad. Funktsiooni SUM, nagu me rääkisime, on kuidagi võimalik teada kui suur massiiv on see läheb oma helistaja või kes iganes kasutab funktsiooni SUM. See on kuidagi võimalik teada, kui suur see massiiv on. Põhjus võtame selle pikkus siin argumendina sest see on midagi, mida me põhimõtteliselt ütleb helistaja funktsioon, kes kavatsevad neid tooteid kasutada funktsiooni SUM "Hei, mitte ainult sa pead andma meile massiivi kohta ints, siis on ka meile öelda, kui suur massiiv, et olete andnud meile on. " [Basiilik] Need mõlemad on käsurea argumente? Ei, need on tegelikud argumendid, et sa ei liigu funktsioon. Lubage mul teha uus leht siin. [Basiilik] Nagu nimi ei liigu- [Nate H.] Kui mul on int main (void), ja ma lähen panna minu return 0 siin all allosas, ja öelda, et ma tahan helistada summa funktsiooni. Ma tahan öelda, int x = SUM (); Et kasutada funktsiooni SUM mul läbida nii massiiv, et ma tahan Kokkuvõttes ja pikkus array, nii et see on koht, kus eeldades, mul oli valikut ints, Ütleme, et oli int numbaz [] = 1, 2, 3, selline kasutamine, et häkkinud süntaks seal, siis mida ma teeksin on summa ma tahaks läbida nii numbaz ja number 3 öelda summa funktsiooni "Okei, siin on massiiv Ma tahan, et sa summeerida." "Siin on selle suurus." Kas see on loogiline? Kas see vastab su küsimusele? Paljuski see paralleel, mida me teeme koos peamiste kui meil on käsurea argumente. Programmi nagu Caesar salakiri, näiteks, et vaja käsurea argumente ei saa midagi teha. See ei tea, kuidas krüptida kui sa ei ütle seda mida võti kasutada või kui sa ei ütle seda mida string sa tahtsid varjata. Küsimine sisendit, see on koht, kus meil on 2 erinevat mehhanismid võtmise sisend kasutaja, et leidsite teavet kasutaja. Sest Ülesanded nr 1 nägime seda GetInt, getString, GetFloat viis ergutada sisend, ja seda nimetatakse kasutades standardsete sisend oja. See on veidi teistsugune. See on midagi, mida saate teha korraga mitte kui sa tugineda programm, kui hakkate programm töötab. Käsurea argumente kõik on täpsustatud, kui hakkate programmi algust. Oleme olnud segades kaks neist. Kui me kasutame argumente funktsioon, see on palju nagu käsurea argumente peamine. See on, kui sa tugineda funktsiooni kasutamiseks tuleb öelda seda mida täpselt ta vajab oma ülesannete täitmiseks. Teine hea asi, mida vaadata ja ma lasen te vaatate seda oma vabast ajast, ja see oli kaetud viktoriini-oli see mõiste ulatus ja kohalike muutujate versus globaalsed muutujad. Kas pöörama tähelepanu seda. Nüüd, kui meil käid sellele muud kraami, 3. nädalal hakkasime rääkima otsing ja sorteerimine. Otsimine ja sorteerimine, vähemalt CS50, on väga palju sissejuhatuseks mõned rohkem teoreetiline osa arvutiteadus. Probleemi otsimine, probleemi sortimine on suured, kanooniline probleeme. Kuidas leida kindlat numbrit massiivi miljardeid täisarvud? Kuidas leida konkreetse nime sees telefoniraamat mis on salvestatud teie sülearvuti? Ja nii me tutvustada seda mõistet asümptootilisest perspektiivis korda tegelikult arvuliselt kui kaua, kui raske nende probleem on, kui kaua nad lahendada. Aastal, ma usun, 2011 aasta viktoriini seal on probleem, et ma arvan, väärib hõlmavad väga kiiresti, mis on see, probleem 12. O ei, see on Omega. Siin me räägime võimalikult kiire töö aeg Konkreetse algoritmi ja siis aeglaseim võimalik töötamise ajal. See Omega ja O on tõesti ainult otseteed. Nad notational otseteed öeldes kui kiiresti parimal võimalikul juhul ka meie algoritm perspektiivis ja kuidas aeglane halvim võimalik juhtum meie algoritm joosta? Teeme paar neist, ja need olid ka kaetud Lühi-asümptootilisest märge, mis ma väga soovitada. Jackson tegi tõesti head tööd. Mis Kahendotsingupuu, me räägime Kahendotsingupuu nagu oleks algoritm, ja me tavaliselt räägime sellest poolest suur O. Mis on suur O? Mis on aeglaseim võimalik läbijooksuaeg kahekomponentsete otsing? [Student] N ²? Sule, ma arvan sarnane. See on palju kiirem. [Student] Binary? >> Jah, binaarne otsing. [Student] See on log n. Logi n, nii et mida teeb log n tähendab? See poolitatud see iga iteratsiooni. Täpselt, seda aeglasem võimalik juhul, öelda, kui teil on sorteeritud massiiv miljonist täisarvud ja number otsite kas kõige esimene element massiivi või väga viimase elemendi massiivist. Pea meeles, binaarne otsing algoritm töötab vaadates keset element, nähes, kui see on mäng, mis te otsite. Kui on, siis tore, et sa selle leidsid. Parimal võimalikul juhul, kui kiiresti ei Kahendotsingupuu perspektiivis? [Õpilased] 1. 1, see on pidev ajal suur O 1. Jah. [Student] Mul on küsimus. Kui sa ütled logi n, sa mõtled suhtes baas 2, eks? Jah, nii see on teine ​​asi. Me ütleme log n, ja ma arvan, et kui ma olin keskkoolis Olen alati eeldada, et samamoodi oli base 10. Jah, nii jah, logaritm alusel 2 tavaliselt on see, mida me kasutame. Jällegi läheb tagasi Kahendotsingupuu, kui otsite kas element päris lõpus või osa alguses, kuna hakkate keskel ja siis viskama kumb pool ei vasta, et te otsite, ja sa lähed järgmise poole ja järgmise poole ja järgmise poole. Kui Otsin suurim element miljonit täisarv massiivis Ma lähen poole võrra see kõige logi 1000000 korda enne kui ma lõpuks proovida, et element Otsin on suurim ja kõige kõrgema indeksiga massiivi ja mis viib logi n logige 1 miljonit korda. Mull sorteerida. Kas te kutid mäleta mull sorteerida algoritm? Kevin, kas sa annad mulle kiire sulgege see, mis juhtus mull sorteerida algoritm? [Kevin] Põhimõtteliselt see läheb läbi kõik nimekirjas. Vaadeldakse kahte esimest. Kui esimene on suurem kui teine ​​see vahetab need. Seejärel võrreldakse teise ja kolmanda, sama asi, vahetuslepingud, kolmas ja neljas, kogu tee alla. Suuremad numbrid jälgib lõpuni. Ja pärast aga paljud liinid sa oled teinud. Täpselt, nii et mida Kevin ütles, et me vaatan suuremad numbrid mull kuni lõpuks massiiv. Näiteks, kas sa lubad kõndides meid läbi Näiteks, kui see on meie massiivi? [Kevin] Sa võtan 2 ja 3. 3 on suurem kui 2, siis vahetada neid. [Nate H.] Just, nii et me vahetada neid, ja nii saame 2, 3, 6, 4 ja 9. [Kevin] Siis saab võrrelda 3 ja 6. 3 on väiksem kui 6, siis jäta neid, ja 6 ja 4, siis tahaks vahetada neid, sest 4 on väiksem kui 6. [Nate H.] Just, nii et ma saan 2, 3, 4, 6, 9. [Kevin] ja 9 on suurem kui 6, siis jätad ta. Ja sa tahaks tagasi minna läbi see uuesti. [Nate H.] Kas ma teinud sel hetkel? >> [Kevin] nr Ja miks ma ei teinud sel hetkel? Sest tundub, et minu massiiv on sorteeritud. Ma vaatan seda. [Kevin] selle uuesti läbi ja veenduge, et seal ei ole enam vahetuslepingud Enne, kui saate täielikult peatada. Täpselt, nii et sa pead edasi minema läbi ja veenduge, et puuduvad vahetuslepingud et saad teha selles punktis. See oli tõesti lihtsalt õnnelik, nagu sa ütlesid, et oleme jõudnud ainult pea tee 1 läbida ja me sorteerida. Aga et seda teha üldises juhul me tegelikult ei pea seda tegema ikka ja jälle. Ja tegelikult, see oli näide parimal võimalikul juhul nagu nägime probleem. Me nägime, et parim võimalik juhtum n. Käisime läbi massiivi 1 kord. Mis on halvim võimalik juhtum selle algoritmi? [Kevin] N ². Ja mida see välja näeb? Mida massiivi nägema, et võtaks n ² ajal? [Kevin] [kuuldamatu] sorteerida. Täpselt nii, kui mul oleks massiivi 9, 7, 6, 5, 2, 1. 9 Kas mull kõik teed üles. Pärast 1 iteratsiooni me tahaks olla 7, 6, 5, 2, 9. Siis 7 Kas mulksuma, 6, 5, 2, 7, 9, ja nii edasi ja nii edasi. Meil oleks minna läbi kogu massiivi n korda, ja tegelikult võite pisut täpsem kui see sest kui me oleme liikunud 9 kogu tee üles võetud viimase võimaliku positsiooni me teame, et me ei pea kunagi võrreldakse seda osa uuesti. Kui hakkame vahustamine 7 kuni me teame, et me ei saa peatada, kui 7 on õigus enne 9 kuna me oleme juba võrreldes 9 ta. Kui sa seda teha nutikas viis see ei ole tõesti, ma arvan, et palju aega. Sa ei lähe võrrelda kõiki võimalikke [kuuldamatu] kombinatsioonid iga kord, kui minna läbi iga iteratsiooni. Aga ikkagi, kui me räägime selle ülemise me ütleme, et vaatate n ² võrdlusi kogu aeg. Lähme tagasi, ja kuna me oleme hakanud saada veidi lühike aeg Ütleksin siis tuleb kindlasti minna läbi ülejäänud seda tabelit, täitke see kõik välja. Mõtle näiteid. Mõtle konkreetseid näiteid. See on tõesti mugav ja kasulik teha. Joonista välja. See on omamoodi tabel, et kui sa lähed läbi infotehnoloogia sa peaksid tõesti hakata tean neid peast. Need on tüüpi küsimustele saad intervjuudes. Need on asjadele, mida on hea teada, ja mõelda nende serv juhtudel tõesti figuring kuidas mõelda teades, et mull sorteerida halvim võimalik massiivi sorteerida koos, mis on üks, mis on vastupidises järjekorras. Näiturid. Räägime natuke vihjeid. Viimase paari minuti meil siin Tean, et see on midagi koos faili I / O, mis on üsna uus. Kui me räägime viiteid põhjus, miks me tahame rääkida viiteid sest üks, kui me töötame C me oleme tõesti on üsna madal võrreldes moodsaim programmeerimiskeeli. Oleme tegelikult võimalik manipuleerida muutujad mälus, aru saada, kus nad tegelikult asuvad meie mälu. Kui olete läinud tegema operatsioonisüsteemi klassid näete et see on jällegi mingi abstraktsioon. See pole tegelikult nii. Meil virtuaalne mälu, mis on peidus nende andmete meilt. Aga nüüd võite eeldada, et kui sul on programm, Näiteks, kui sa käivitada oma Caesari šiffer programmi- Ma saan tagasi oma iPad tõesti kiiresti- et alguses oma programmi, kui sul on, ütleme, 4 GB RAM sülearvuti, teil tühistada selle tüki, ja me nimetame seda RAM. Ja see algab kohas me kavatseme kutsuda 0, ja see lõpeb koht, et me kutsume 4 gigabaiti. Ma tõesti ei saa kirjutada. Mees, see on häkkinud. Kui teie programm täidab operatsioonisüsteemi carves kuni RAM, ja see määrab erinevate segmentide erinevate osade oma programmi, et elame Alla siin selles valdkonnas on selline eikellegimaal. Kui te lähete natuke kaugemal siin sul tegelikult koht, kus koodi oma programmi ellu. See tegelik kahendkoodi, et käivitatav fail tegelikult laaditakse mällu kui te käivitate programmi, ja ta elab kood segment. Ja kui teie programm täidab protsessor vaatab seda koodisegmendi selgitada, milline on järgmine juhis? Mis on järgmine rida koodi ma pean täitma? Seal on ka Andmesideteenustest, ja see on koht, kus need stringi konstandid saada talletatud et olete kasutanud. Ja siis kaugemal seal selle koha nimi on hunnik. Me juurdepääsu mälu seal kasutades malloc, ja siis suunas väga üles oma programmi seal korstna ja see on kui me oleme mänginud kõige algusest. See ei ole mõõtkava või midagi. Palju see on väga masin sõltuv, operatsioonisüsteemi sõltuv, kuid see on suhteliselt kuidas asjad chunked üles. Kui te käivitate programmi ja te deklareerite muutuja nimega x- Ma lähen juhtida teise kasti allapoole, ja see saab olema RAM samuti. Ja ma lähen vaatan. Me teha sakilised jooned, mis näitab see on vaid väike osa RAM ja mitte kõik seda teeme järeldusi ülaosas. Kui Kinnitan täisarv muutuja nimega x, siis mida ma tegelikult saada on kaardistamine mis on salvestatud sümbol tabel minu programm mis ühendab nimi x sellesse piirkonda mälu, et ma olen tõmmatud siin vahel vertikaalne baarid. Kui mul on rida koodi oma programmi, mis ütleb, x = 7 protsessor teab "Oh, okei, ma tean, et x elus selles kohas mällu." "Ma lähen edasi minna ja kirjutada 7 seal." Kuidas see tea asukohta see on mälu? Noh, see on kõik tehtud kompileerimise ajal. Kompilaator hoolitseb eraldades kus iga muutujad lähevad ja luua spetsiaalne kaardistamise või pigem punktide ühendamine vahel sümbol ja kus see toimub, muutuja nimi ja kus see läheb elama mälu. Aga tuleb välja, et me saame tegelikult kasutada seda oma programmis samuti. See muutub oluliseks siis, kui hakkame rääkima mõned andmestruktuure mis on mõiste, mis me kavatseme tutvustada hiljem. Aga nüüd, mida sa ei tea on see, et ma saan luua kursor sellesse kohta, x. Näiteks võin luua kursori muutuja. Kui me loome pointer muutuja me kasutame täht märke. Sel juhul see ütleb, et ma lähen luua viit int. See tüüp lihtsalt nagu iga teine. Anname see muutuja nagu y, ja siis seadsime see võrdne aadress, et aadress. Sel juhul saame y osutada x võttes aadress x, mis me teeme selle märgi, ja siis seadsime y juhtida sellele. Mida see sisuliselt ei ole, kui me vaatame meie RAM see loob eraldi muutujana. See saab nimetada seda y, ja kui see rida koodi täidab see on tegelikult kavatse luua väike osuti mida me tavaliselt teha kui nool, ja see seab y osutada x. Jah. [Student] Kui x on juba pointer, sa lihtsalt ei int * y = x asemel ampersand? Jah. Kui x on juba pointer, siis saate komplekt 2 suunanäitajaks üksteisega võrdsed, sellisel juhul y ei osuta x, kuid see viitaks iganes x osutab. Kahjuks on aeg otsas. Mida ma ütleksin siinkohal, saame rääkida sellest foorumis, kuid ma ütleksin tööle läbi selle probleemi, # 14. Näete seal juba natuke täita teile siin. Te näete, et kui me kuulutame 2 suunanäitajaks, int * x ja * y, ja pange tähele, et juhtides * kõrval muutuja oli midagi, mis tehti möödunud aastal. Selgub, et see on sarnane sellega, mida me teeme sel aastal. See ei ole tähtis, kus sa kirjutad * kui sa kuulutatakse kursor. Aga me oleme kirjutanud * kõrval tüüp sest mis teeb väga selgeks, et sa kuulutatakse pointer muutuja. Te näete, et deklareerides 2 näpunäiteid annab meile 2 kasti. Siin, kui me seame x võrdub malloc mida see ütleb on heita mälu hunnik. See väike kast siin, see ring, asub hunnik. X osutab ta. Pange tähele, et y ei ole veel osutades midagi. Et saada mälu-talletamiseks nr 42 arvesse x meil oleks kasutada mis märge? [Student] * x = 42. Täpselt, * x = 42. See tähendab Järgige noolt ja viska 42 seal. Siin kus me seame y ja x on meil y osutades x. Jällegi, see on nagu see, mida Kevin ütles kus seadsime y võrdub x. Y ei osutades x. Pigem see osutavad sellele, mida x osutades samuti. Ja siis lõpuks see viimane kast on 2 võimalikku asju, mida me võiksime teha. Üks on võime öelda * x = 13. Teine asi on see võime öelda, Alex, sa tead, mida me võiksime teha siin? Võiks öelda * x = 13 või- [Student] Võiks öelda, int iganes. [Nate H.] Kui nii nimetatakse int muutuja võiksime seda teha. Võiksime ka öelda * y = 13, sest nad on nii osutades samas kohas, nii et me võiksime kasutada kas muutuva sinna jõuda. Jah. >> [Student] Mida see välja näeb, kui me lihtsalt öelda, int x 13? See oleks kuulutatakse uus muutuja nimega x, mis ei tööta. Meil oleks kokkupõrge sest me kuulutasime x olevat pointer siin. [Student] Kui me lihtsalt pidin selle avalduse ise siis mis see välja näeb nii ringi? Kui meil oleks x = 13 siis oleks meil kast, ja selle asemel, nool tulevad karbist me tahaks joonistada kui lihtsalt 13. [Student] karbis. Okei. Täname vaadates, ja hea õnne viktoriin 0. [CS50.TV]