[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]