[Powered by Google Translate] [4 skirsnis] [mažiau patogūs]
[Nate Hardison] [Harvardo universiteto]
[Tai CS50.] [CS50.TV]
>> Viskas gerai, pasveikinti atgal į skyrių.
Skyriuje šią savaitę mes ketiname padaryti keletą dalykų.
Mes ketiname pirmą Priminti problemą, 2,
kuris yra Cezaris ir Vigenere problema rinkinys.
Ir tada mes ketiname pasinerti į Viktorina 0 peržiūros
ir praleisti šiek tiek laiko Reziumuojam, ką mes kalbėjome apie
kiekviename iš paskaitų iki šiol, ir mes taip pat padaryti keletą problemų
nuo praeitų metų viktorinos.
Tokiu būdu jūs vaikinai turite geras būdas pasirengti.
>> Norėdami pradėti, aš įkelti kelis gerus sprendimus
už praėjusius problemą, problemą, 2, į šią erdvę.
Jei jus vaikinai paspauskite šią nuorodą,
ir jei jūs spustelėkite savo vardą ir spustelėkite savo pirmąjį peržiūros
pamatysite caesar.c, o tai, ką aš žiūriu.
Pakalbėkime apie tai tikrai greitai.
Tai tik mėginio tirpalas.
Tai nebūtinai yra puikus sprendimas.
Yra daug įvairių būdų, kaip rašyti tai,
tačiau yra keletas dalykų, kad aš norėjau atkreipti dėmesį į
kad aš mačiau, kaip man buvo klasifikavimo, paplitusių klaidų, kad aš manau,
šis sprendimas daro labai gerą darbą, tvarkymo.
>> Pirmoji yra kažkoks antraštės komentarą viršuje.
Geležinkelių linijose, 1 per 7 pamatysite detales,
Kas ši programa daro.
Geras įprasta praktika, kai rašote kodą C
neatsižvelgiant į tai, jeigu jūsų programa yra per vieną rinkmeną ar
nesvarbu ar tai būtų padalinta į kelis failus yra turėti tam tikrą rūšies
orientuojantis komentarą viršuje.
Tai taip pat yra žmonių, kurie eina ir rašyti kodą realiame pasaulyje.
Tai, kur jie bus įdėti informaciją apie autorines teises.
Žemiau yra # apima.
16 on-line ten tai # define, kurį mes grįš į tik šiek tiek.
Ir tada, kai funkcija prasideda, kartą pagrindinius prasideda,
, nes ši programa buvo pateikta tik vieną funkciją
Pats pirmas dalykas, tai atsitiks, ir tai yra labai turintis daug idiomų ir būdinga C programos
kad mano komandinės eilutės argumentai yra tai, kad ji iš karto patikrina
>> argumentų skaičius, argc.
Čia mes matome, kad ši programa tikisi 2 argumentus tiksliai.
Atminkite, kad pirmasis argumentas, kad ypatinga
kad visada programą, kuri buvo paleisti vardas
vykdomąjį failą pavadinimas.
Ir taip Kas tai yra, jis neleidžia vartotojui paleisti programą
daugiau ar mažiau argumentų.
Todėl norime, siekiant patikrinti, ar šios teisės toliau yra todėl, kad
mes faktiškai negali naudotis šia argv masyvas čia patikimai
kol mes patikrintos, siekiant įsitikinti, kaip didelis jis yra.
>> Vienas iš pasitaikančių klaidų, aš mačiau žmonės būtų iš karto eiti
ir patraukti argv [1].
Jie nori patraukti Pagrindinis argumentas iš masyvo, o aš patikrinti jį,
ir tada jie nori padaryti testus už argc, taip pat į kitą bandymo,
ar ne pirmas argumentas iš tiesų buvo sveikasis skaičius, tuo pačiu metu
ir kad nėra dirbti, nes tuo atveju, jei yra tiekiamos jokių argumentų
jums bus greiferiniai argumento, kad nėra ten arba bando patraukti vieną, kad yra ne ten.
>> Kitas svarbus dalykas, kad jūs turėtumėte pastebėti, kad
jūs visada norite spausdinti kažkokią naudingos klaidos pranešimą
vartotojo susivokti juos.
Aš tikiu, kad jūs visi paleisti programas, kur visi staiga ji sugenda,
ir gausite šį juokinga mažai dialogo langą, kuris pasirodo ir sako
suteikia jums kažkas baisiai paslaptingas ir gal klaidos kodą ar kažką panašaus, kad
kad neturi prasmės.
Tai vieta, kur jums tikrai norime suteikti ką nors naudinga
ir orientuota į vartotoją, kad, kai jie paleisti, jeigu jis eiti "O", veido palmių.
"Aš žinau, ką daryti. Aš žinau, kaip išspręsti šią problemą."
>> Jei jūs neturite spausdinti pranešimą, tada jūs galų gale iš tikrųjų
paliekant vartotojo eiti patikrinti savo kodą
išsiaiškinti, kas nutiko.
Taip pat yra keletas kartų, kad jums naudoti įvairių klaidų kodus.
Čia mes tiesiog pasakyti, kad įvyko klaida,
įvyko klaida, įvyko klaida.
Didesni programas, dažnai kitų programų, kurios yra vadinamos programos,
sugrįš tam tikrą specialių klaidų kodus, pagal įvairius scenarijus
programiškai, ko priešingu
tiesiog naudoti gražus pranešimą anglų kalba.
Cool.
Kaip mes dirbame žemyn, galite pamatyti, mes traukti KEY OUT.
Mes patikrinti, kad, jei raktas tinka.
Mes gauname pranešimą nuo vartotojo.
Priežastis, kodėl mes tai darome šiame do while cikle, ir tai yra kažkas, kad mes apims
šiek tiek, tačiau paaiškėja, kad jei įvesite kontrolės D
kai jūs gaunate kad GetString greitai terminalo
, ką tai iš tiesų yra, ji siunčia specialų simbolį
į programą.
Tai vadinama failo pobūdžio ELF arba pabaiga.
Ir tuo atveju, mūsų žinia eilutė bus niekinis,
taigi tai buvo ne tai, ko mes patikrinome, problemos užsibrėžė.
>> Bet, kaip mes einame, dabar, kad mes pradėjo kalbėti apie rodykles
ir dinaminės atminties paskirstymo krūvos,
patikrinti for null, kai jūs turite funkcija, kuri gali
grįžti null vertė yra kažkas, kad jūs norite gauti rengiasi tai įpročio.
Tai čia pirma iliustracija.
Bet, kai matote GetString ateityje,
problema dėl 4 Nustatykite, jūs norite turėti tai omenyje.
Vėlgi, tai nėra problemą, 3, nes nebūtume, kuriems jis dar klausimas.
Galiausiai, mes turime šioje dalyje, kai mes gauname į pagrindinį šifravimo kilpa,
ir yra pora dalykų vyksta čia.
Pirma, mes pakartoti per visą pranešimų seka pats stringas.
Čia mes nuolat strlen skambutį su sąlyga,
iš jūsų atkreipė dėmesį į ne puikus būdas eiti.
Pasirodo, šiuo atveju, jis taip pat nėra didelis,
iš dalies dėl to, kad mes pakeisti paties pranešimo turinį
viduje linijos, todėl, jei mes turime pranešimą, kuris yra 10 simbolių,
pirmas kartas, mes pradedame, kad už linijos strlen sugrįš ką?
10.
>> Bet jei mes tada pakeisti pranešimą, sako, kad mes pakeisime savo 5 charakterį,
ir mes mesti \ 0 pobūdžio 5-oje padėtyje,
strlen (pranešimas) apie tolesnį iteracijos nebus grąžinti, ką ji padarė,
labai pirmą kartą pakartota,
tačiau ji turės grąžinti 5, nes mes išmetė toje null terminatorius,
ir string ilgis yra apibrėžtas
tos \ 0 pozicijos.
Šiuo atveju, tai yra puikus būdas eiti, nes mes ją keisti vietoje.
Tačiau jūs pastebėsite, kad iš tikrųjų tai yra stebėtinai paprasta užšifruoti
jei jūs galite gauti matematika teisinga.
Viskas, reikia patikrinti, ar laišką, kad jūs ieškote
didžiąsias arba mažąsias raides.
>> Priežastis, turime tik patikrinti, kad ir mes neturime, siekiant patikrinti, ar
yra alfa byla yra dėl to, kad
jei simbolis yra didžiąsias arba jei tai mažosiomis raidėmis
tada tai tikrai abėcėlės raide,
nes mes neturime didžiąsias ir mažąsias skaitmenų.
Kitas dalykas, mes darome, o tai yra šiek tiek sudėtinga
yra mes pakeisti standartinį Cezario šifro formulę
kad mes davė problemą, specifikaciją.
Kuo skiriasi čia yra, kad mes atimti
didžiąsias atveju kapitalo, o tada mes pridėjome sostinę
Atgal į pabaigoje.
>> Aš žinau, keli iš jūsų tai padarė, savo kodą.
Ar kas nors iš jūsų tai padaryti savo darbus?
Tu tai padarei. Ar galite paaiškinti, kas tai daro, Sahb?
Atimant jį, nes tu mod jam pasibaigus,
turite imtis jį iš, kad jūs gaunate [kosulys] pozicija.
Ir tada pridedant jį atgal vėliau perėjo per vienas, kad jūs norėjo.
Taip, tiksliai.
Kas Sahb sakė buvo ta, kad, kai mes norime pridėti
mūsų žinia ir mūsų raktas kartu
ir tada mod, kad mod kad pagal NUM_LETTERS,
jei mes neturime mūsų pranešimą mastelį į atitinkamą 0 25 yra, pirma,
tada mes galime galų gale gauti tikrai keista skaičių
nes vertybės, kurios mes ieškome, kai mes žiūrime į pranešimą [i],
kai mes pažvelgti į mūsų paprasto tekstinio pranešimo forma-ajai pobūdžio,
vertė kažkur šio 65-122
remiantis didžiosiomis raidėmis nuo a iki z mažosiomis ASCII vertes.
Ir todėl, kai mes mod 26 arba NUM_LETTERS
nes tai buvo mūsų # define čia, viršuje, dešinėje pusėje
kad ketina duoti mums vertė turi būti nuo 0 iki 25 yra,
ir mes turime tada masto kad atgal į viršų
ir gauti atitinkamą ASCII diapazone.
Pats paprasčiausias būdas tai padaryti yra tiesiog masto viskas žemyn
į 0 25 yra pradėti,
ir tada perkelti viską atgal pabaigoje.
>> Kita dažnai pasitaikanti klaida, kad aš mačiau žmonių paleisti į tai, kad
jei jūs neturite iš tikrųjų šį mastelį iš karto
ir jūs įtrauksite pranešimą ir raktas kartu ir pridėsite juos, tarkim,
į char kintamasis, su problema
nuo žinute [i] yra gana didelis skaičius, pradėti
prisiminti, tai bent 65, jei jis didžiąsias pobūdis
jei turite didelį raktą, tarkime, kažką panašaus į 100,
ir jūs įtraukėte šių 2 kartu į pasirašė char, kad jūs ketinate gauti perpildymo.
Jūs ketinate gauti vertę, kad didesnis nei 127,
kuri yra didžiausia vertė, kad char kintamasis gali turėti.
Vėlgi, tai kodėl jūs norite padaryti, kad dalykas rūšiuoti prasideda.
Kai kurie žmonės gavo apie Tokiu atveju daro jei dar ir testavimo
pamatyti, jei ji būtų perkrautas, kad prieš darydama
tačiau šis būdas tampa aplink, kad.
Ir tada šio tirpalo atspausdinti visą eilutę pačioje pabaigoje.
Kiti žmonės atspausdinti simbolį vienu metu. Abu yra nuostabus.
Šiuo metu, jūs vaikinai turite kokių nors klausimų, pastabų apie šį?
Jums patinkančių dalykų, ką jums nepatinka?
>> Aš turėjau klausimą.
Gal aš praleidau per savo paaiškinimą, bet kaip veikia ši programa
praleisti tarpus prijungti raktą į teksto ilgio?
Tai tiesiog Cezario šifras. >> Oi, atsiprašau, taip.
Taip, mes matome, kad.
Cezario šifras aplink, kad, nes mes turime
mes tik apversta simbolių.
Mes tik pasukti, jei jie buvo didžiąsias arba mažąsias.
Jus vaikinai jaučiasi gana gerai apie tai?
Jauskitės laisvai kopijuoti šį namą, išgerkite ją,
palyginkite jį su ką vaikinai rašė.
Tikrai jaučiasi siųsti klausimus apie tai.
Ir vėl, suvokti, kad tikslas čia su savo problema nustato
yra ne gauti jus vaikinai parašyti puikus kodą jūsų problema rinkinių.
Tai mokymosi patirtis. Taip.
>> Atgal į do while cikle, jeigu ji yra lygi null,
taip null tiesiog tai nieko, jie tiesiog paspauskite "Enter"?
Null yra speciali rodyklė vertė,
ir mes naudojame null, jei mes norime pasakyti
žymeklis kintamąjį, kuri būtų nukreipta į nieką.
Ir todėl paprastai tai reiškia, kad šis kintamasis, šis pranešimas kintamasis
yra tuščias, ir čia, nes mes naudojame CS50 specialų string tipas,
kas yra CS50 string tipas?
Matėte, kas tai yra, kai Davidas iškedentas atgal gaubtą paskaitos?
Tai funky rodyklė, tiesa?
Gerai, yeah. >> Tai char *.
Ir taip tikrai galėtume pakeisti šį
čia su char * Žinutė
ir taip GetString funkcija, jei ji nėra sėkmingai gauti eilutę iš vartotojo,
jis negali apdoroti eilutę, ir vienas atvejis, kai ji negali apdoroti eilutę
yra, jei vartotojas įveda failo pobūdžio, kontrolės D deleguotieji nacionaliniai ekspertai,
kuri yra ne tai, ką jūs paprastai padaryti, bet, jei tai atsitiks
funkcija bus grąžinti šį null vertę kaip pasakyti būdu
"Ei, aš ne gauti eilutę."
Kas nutiktų, jei mes nedėkite žinutę = null,
, kuri yra kažkas, kad mes nebuvo daryti dar?
Kodėl tai galėtų būti problema čia?
Nes aš žinau, kad mes kalbėjome šiek tiek Paskaita apie atminties nutekėjimas.
Taip, galime tai padaryti, ir pažiūrėkime, kas atsitinka.
>> Bazilijaus klausimas buvo, kas atsitiks, jei mes ne iš tikrųjų turėti
šis pranešimas = null testas?
Leiskite slinkite aukštyn į viršų.
Jus vaikinai galite komentuoti šią formą.
Tiesą sakant, aš išsaugokite jį persvarstymo.
Tai bus 3 redakcija.
Tai, ką jūs turite padaryti, norint paleisti šią programą, jūs turite spauskite šią krumpliaračio piktogramą čia,
, ir jūs turite pridėti argumentą.
Jūs turite suteikti jai pagrindinį argumentą, nes mes norime perduoti komandinės eilutės argumentu.
Čia aš ruošiuosi suteikia jai numerį 3. Man patinka 3.
Dabar priartinimo atgal, veikia programa.
Ji veikia, rinkti, statybos.
Čia mes einame. Laukia, kad būtų raginama.
Jei aš tipo kažką panašaus hello-kur tai eiti?
O, mano programa, truko per ilgai paleisti. Aš buvau finansų įstaigos Mokėjimo per ilgai.
Here it goes.
Dabar aš tipo Hello.
Mes matome, kad ji užkoduota tinkamai.
Dabar, kas atsitiks, jei mes padaryti greitą GetString grąžina NULL?
Prisiminkite, aš sakiau, kad mes padarėme, kad tuo pačiu metu spausdami valdymas D.
Aš slinkti čia. Mes jį vėl.
Pastatas. Štai jis eina.
Dabar, kai aš paspauskite kontrolės D
Aš turiu šią eilutę, kad sako opt/sandbox50/bin/run.sh, segmentavimas kaltės.
Ar jums, vaikinai, matyti, kad prieš?
>> [Studentų] Kodėl yra ne->> Atsiprašome?
[Studentų] Kodėl yra ne core dump šiuo atveju?
Core dump klausimas yra kodėl yra ne core dump?
Klausimas yra tai, kad gali būti, bet core dump failą
, kad bus saugomi kietajame diske.
Šiuo atveju mes išjungtas pagrindinių sąvartynų
paleisti serveryje, kad mes negali būti žmonės seg klaida
ir kurti tonų pagrindinių sąvartynų.
, Bet jūs galite gauti vieną.
Core sąvartynų yra dalykai, kad jūs galite dažnai išjungti,
, o kartais ir jūs darote.
Segmentavimo kaltės, atsakyti į jūsų klausimą, Bazilikas,
sako, kad mes bandėme kreiptis į rodyklę
kad nebuvo nustatyta, kad rodytų į ką nors.
Prisiminti Binky vaizdo Binky bando
pasieksite žymeklį, kuris nėra nukreipta į ką nors?
Šiuo atveju aš manau, techniškai yra rodyklė, nukreipta į kažką.
Ji nukreipta null, kuri yra techniškai 0,
bet tai apibrėžta būti segmentui, kuri nėra prieinama
savo programą, taigi, galėsite gauti segmentavimo kaltės
nes nesate prieigą prie atminties, kad galiojančiame segmente
kaip krūvos segmentą ar kamino segmento ar duomenų segmento.
Cool.
Turite klausimų apie Cezario?
>> Pereikime. Pažvelkime 2 red tikrai greitai.
Štai Vigenere.
Čia Vigenere
mes vaikščioti per šią gana greitai, nes, dar kartą,
Vigenere ir Cezaris yra gana panašūs.
Header komentaras prieš,
# Define prieš, kad būtų išvengta naudojant šiuos magija numerius.
Malonus dalykas, sako, kad mes norėjome pereiti prie
kitoks raidynas ar kažkas panašaus.
Užuot eiti rankiniu būdu pakeisti visas 26 kodą
mes galime tai pakeisti iki 27 arba paleisti jį žemyn
jei mes buvome naudojant įvairių abėcėlių rašmenis, skirtingų kalbų.
Vėlgi, mes turime šio argumento skaičiaus patikrinimą,
ir tikrai jūs galite beveik į tai kaip šabloną.
Beveik kiekvienas programa rašote turėtų būti
jei jis trunka, kai kurie iš komandinės eilutės argumentai linijų seką
, kad tai skamba kaip pačioje pradžioje.
Kad vienas iš pirmųjų normalumas bandymų, jūs norite daryti.
>> Štai ką mes padarėme buvo mes pasistengėme, kad
raktažodis galioja, ir tai buvo antro patikrinimo, kad mes tai padarėme.
Atkreipkite dėmesį, vėl, kad mes tai atskirti nuo argc ir 2.
Atkreipkite dėmesį, kad šiuo atveju Vietoj to, vienas dalykas, kad mes turėjome daryti
naudojant i norėjome patvirtinti visą eilutę,
ir siekiant padaryti, kad jūs iš tikrųjų turi eiti charakterio charakterį
per eilutę.
Yra geras būdas skambinti kažką
nes net, pavyzdžiui, i sugrįš 0
, jei jis negali apdoroti sveikasis skaičius, kad nėra net dirbti.
Vėlgi, gražus pranešimą vartotojui tiksliai, kas nutiko.
Tada čia ir vėl, mes taip pat elgtis tuo atveju, jeigu
vartotojas įveda į kontrolinės D Alfa.
>> Ir tada Charlotte klausimas turėjo anksčiau apie tai, kaip mes sugebėsime praleisti tarpus
mūsų eilutę čia.
Tai buvo tipo panašus į tai, ką mes padarėme su "MySpace" programa
kad mes padarėme skyriuje, o kaip ši dirbo
tai, kad mes sekė raidžių skaičių, kad mes norime matyti.
Kaip mes vaikščioti per pranešimo eilutės, kaip mes vaikščioti per charakterio pobūdžio,
sekė indekso dalis mūsų kilpa, ir tada mes taip pat atidžiai stebimi
raidžių skaičius, taigi ne specialių simbolių, non-skaitmenys, White Space
kad mes norime matyti atskirame kintamojo.
Ir tada šis sprendimas pakeičia raktą
gauti realią pagrindinis sveikasis skaičius, ir ji, kad skristi,
į dešinę, kol ji tada eina į užšifruoti faktinį pranešimų pobūdį.
Yra kai kurie sprendimai, kurie buvo visiškai per didelis
, kad būtų pakeisti raktą bandant raktas galiojimo.
Be to, įsitikinkite, kad simbolių ir raktinis žodis
buvo abėcėlės raide ji taip pat pasirodė, kad į sveikojo skaičiaus
nuo 0 iki 25 yra tada pereikite atsižvelgdamas į tai, kad vėliau tai už linijos.
Vėlgi, jūs čia matote, tai tikrai lygiai toks pats kodas
, kad mes šiuo metu naudojamas Cezaris.
Darote tą patį dalyką, todėl realus triukas yra suprasti,
kaip paversti žodį į sveikasis skaičius.
>> Vienas dalykas, kad mes padarėme, kad čia yra šiek tiek tankus
tai mes pakartojo šią frazę, aš manau, galima pavadinti tai,
3 atskiri kartus ant 58, 59 ir 61 linijų.
Ar kas nors paaiškinti, ką tiksliai ši frazė nėra?
Jungiamasi prie simbolį, kaip sakei.
Taip, tai [nesigirdi] raktinį žodį pobūdis,
ir todėl iš laiškų matyti, nes jūs tik judančią išilgai
raktinis žodis, kai jūs mačiau laišką,
todėl, kad manimi vyksta efektyviai praleisti tarpus ir stuff like that.
Taip, tiksliai.
Ir tada, kai jūs mačiau raktažodžių tuščią jūs tiesiog mod, kad galite perkelti atgal aplink.
Tiksliai. Štai puikus paaiškinimas.
Kevin sakė, kad mes norime į raktažodį indeksas.
Mes norime gauti num_letters_seen pobūdį, jei norite,
bet jei num_letters_seen viršija raktinio žodžio ilgį,
kaip mes grįžti į atitinkamą intervalą mes naudojame mod operatorių
veiksmingai vyniojami aplink.
Pavyzdžiui, kaip per trumpą laiką, mūsų raktinis žodis yra šoninė,
ir 5 raidžių ilgio.
, Tačiau šiuo metu mes matėme 6 raides mūsų paprasto teksto
ir saugiame 6.
Mes galų gale patekti į num_letters_seen
kuri yra 6, mod raktinio žodžio ilgis, 5,
ir todėl mes gausite 1, ir tt, ką mes padarysime mes atsiųsime
atidarykite pirmasis simbolis viduje mūsų raktinį žodį tame taške.
>> Viskas gerai, bet kokie klausimai dėl Vigenere
Prieš mes pereiti?
Jus vaikinai jaučiasi gana gerai apie tai?
Cool, puikus.
Noriu įsitikinti, kad jus vaikinai gauti galimybę pamatyti kodą
kad mes manome, gerai atrodo ir turite galimybę pasimokyti iš to.
Tai bus paskutinis naudosite skyrių, šiuo metu,
ir mes ketiname pereiti dabar, ir aš ruošiuosi eiti į cs50.net/lectures
todėl mes galime padaryti šiek tiek viktorina peržiūros.
Geriausias būdas aš manau, kad pradėti daryti viktorina peržiūrą
turi ateiti į šį puslapį paskaitas, cs50.net/lectures,
ir po šios savaitės pozicijose, todėl, jei aš žiūriu čia 0 savaitės,
Matau, kad mes turime, kad mes, kuriems savaitė 0 temų sąrašą.
>> Jei kuri nors iš šių temų, atrodo nepažįstamas jums
jūs tikrai norite grįžti ir apibėgti paskaita ir galbūt
net nugriebti per paskaitas, žiūrėti juos dar kartą, jei norite
gauti už tai, kas vyksta su kiekviena iš šių temų jaustis.
Aš pasakysiu papildomai Šiais metais viena cool išteklių mes turime
yra tie, kad mes sukūrėme šortai, ir jei peržvelgsite savaitės 0,
mes neturime iš temų, bet mes turime gana keletą iš jų,
sudėtingiau, todėl žiūrėti šiuos šortai vėl
yra geras būdas jums pagreitinti.
Visų pirma, aš įdėti į kištuko už 3 ant dugno, nes aš tų.
Bet jei jūs kovoja su dvejetainiu, bitai, HEX, kad daiktų rūšis,
dvejetainis yra puiki vieta pradėti.
ASCII yra dar vienas, kad gerai, kad galėtumėte peržiūrėti per.
Jūs netgi galite žiūrėti man ne 1,5 x greičiu, jei aš per lėtai jums.
Kadangi tai peržiūros, nedvejodami padaryti, kad.
>> Tik pradėti labai greitai, mes ketiname eiti per porą šių viktorinų problemų
tik greitai bidonas per šiuos.
Pavyzdžiui, pažvelkime 16 problema, kad aš turiu teisę čia ant lentos.
Mes turime šį tokia skaičiavimo dvejetainiu,
ir mes norime parodyti bet kokį darbą.
Gerai, aš ruošiuosi duoti tai kulka.
Jūs vaikinai turėtų sekti kartu su popieriaus,
ir mes tai padaryti tikrai greitai.
Mes norime atlikti šiuos dvejetainis išskaičiavimą.
Turiu 00.110.010.
Ir aš ruošiuosi pridėti jai 00.110.010.
Dėl matematikos genijai kartu namuose,
Tai veiksmingai padauginus iš 2.
Pradėkime.
Mes ketiname laikytis tos pačios papildymas algoritmą, kad mes darome
kai mes kartu pridėti dešimtainių skaičių.
Tikrai vienintelis skirtumas yra tas, kad mes kilpa atgal aplink
kai mes turime 1 + 1, o ne, kai mes gauti iki 10.
>> Jei pradėsime iš dešinės, labai greitai, kas pirmasis skaitmuo?
[Studentų] 0. >> [Nate H.] 0.
Didelis, antrasis skaitmuo?
[Studentų] 1.
[Nate H.] Ar tai 1? 1 + 1?
[Studentų] 10.
[Nate H.] Būtent, tai kas yra skaitmenų, kad aš rašau iškart už 2, sudedami?
[Studentų] 1, 0, arba 0 ir tada atlikti 1.
[Nate H.] 0 ir vykdyti 1, tiksliai.
Šalia vienas į viršų, Bezili, jūs ne.
Kas yra trečia? >> [Bazilikas] 1.
[Nate H.] 1, tobula. Kevin?
[Kevin] 0. >> [Nate H.] 0, Charlotte?
[Charlotte] 0. >> [Nate H.] Taip, ir ką man daryti?
[Studentų] 1.
[Nate H.] O ką man daryti? Ir tada aš atlikti 1.
Tobula, Sahb? >> [Sahb] Dabar jūs turite 1.
[Nate H.] Ir man daryti nieko čia?
[Sahb] Tada kito, Jūs turite 1, nes jums perkelti 1.
[Nate H.] Didysis, todėl čia galime baigti jį.
Cool.
[Studentų] Ar 0 + 0 = 0?
0 + 0 = 0.
1 + 1, kaip sakei, 10, 1, 0, o.
10 yra neteisingas, nes man 10 - skaičių 10,
ir tai, kaip mes ją atstovaujanti kai mes raštu jį užsukimas.
Mes atstovaujame skaitmeniu "2", 1, 0, skaičius 10 yra šiek tiek kitoks.
>> , Kas yra malonu apie dvejetainis natūra yra tai, kad ten tikrai nėra, kad daugelis
atvejais reikia išmokti.
Yra 0 + 0 = 0, 0 + 1 = 1,
1 + 1 0, o po to atlikti 1,
ir tada jūs galite pamatyti čia trečioje skiltyje iš dešinės
mes tai 1, 1, 1.
Ir 1 + 1 + 1 yra 1,
ir galite atlikti dar 1.
, Kai jūs darote dvejetainis Be to, gana paprasta.
Norėčiau padaryti pora daugiau iš šių normalumas patikrinti save
prieš išvykdami, nes tai yra
turbūt kažkas, kad mes pamatyti viktorinoje.
Dabar galime tai padaryti kitą taip pat.
Darykime problema 17.
Mes ketiname paversti šią dvejetainį skaičių į dešimtainį.
Turiu 10100111001.
Prisiminti mane dvejetainis vaizdo, kad aš padariau
Perėjau per porą pavyzdžių, ir man parodė, kaip
viskas veikia, kai jūs darote tai, dešimtainės trupmenos.
Kai dirbate dešimtųjų atstovavimo manau, kad mes
Šiuo mūsų gyvenime taip laisvai, kad
tai gana lengva, kaip ji iš tiesų veikia mechanika Koloryzować.
>> Bet padaryti greitai Priminti, jei aš šį numerį 137
tai iš tikrųjų reiškia, ir vėl, tai yra dešimtųjų atstovavimo
, dešimtainis skaičius 137 reiškia, kad aš turiu 1 x 100 + 3 x 10 + 7 x 1.
Tai viskas, esančių ekrane.
Ir tada jei jums pažvelgti į šių numerių čia,
100, 10 ir 1, pamatysite, kad jie iš tikrųjų visi 10 įgaliojimai.
Turiu 10 ², 10 ¹, ir nuo 10 iki nulio.
Mes turime panašią dalykas rūšiuoti, dvejetainiu,
išskyrus tai, kad mūsų bazė, kaip mes jį vadiname, yra 2 vietoje iš 10.
Šie 10s, kad aš parašiau čia apačioje,
šis 10 ², 10 ¹, 10 į nulinę, 10 yra mūsų bazė,
eksponentė, 0, 1 arba 2,
yra numanomas skaitmenų skaičių, kad mes rašome pozicijos.
1, jei mes žiūrime į jį, tai 1 2 poziciją.
3 yra 1-a vieta, ir 7 yra į 0. padėtį.
Štai kaip mes gauti įvairių eksponatų mūsų bazių žemiau.
>> Po tai we'll iš tiesų tai, žinote, ką?
Mes padarysime kur mano atšaukti mygtuką eiti?
Štai jis eina.
Aš myliu šį atšaukti dalykas.
Po to, manau, kad bent jau man
Lengviausias būdas pradėti pertvarkyti dvejetainis skaičius
arba šešioliktainis skaičius, kai bazė yra 16
, o ne 10 arba 2, eiti į priekį ir surašyti
pagrindai visi mano dvejetainis skaičius viršuje skaičių ir eksponentų.
Jei pradėsime iš kairės į dešinę vėl,
kuris yra rūšies counterintuitive,
Aš "Back to Black čia, mes turime 2 į 0. padėtį,
ir tada mes turime 2 ¹, 2 ²
3, nuo 2 iki 4, 2 5 6 2 tada,
7, 8, 9 ir 10.
Aš parašiau iš Šie skaičiai yra visų eksponentų.
Aš tik rašė čia pirmoje 3 tik dėl erdvės pagrindus.
>> Šiuo metu aš ruošiuosi eiti į priekį, ir aš iš tikrųjų ketiname ištrinti
stuff, kad mes padarėme kablelio, jei, kad viskas gerai.
Jūs visi turime, kad.
Tiems iš jūsų, žiūrėti internete, aš tikiu, kad bus galima atsukti man, jei norite.
Pereiti atgal į švirkštimo priemonę.
Dabar, ką mes galime padaryti, jei jus vaikinai nėra visiškai pagreitinti savo įgaliojimus 2,
tai visiškai atvėsti.
Tai atsitinka. Aš suprantu.
Aš vieną kartą turėjo į pokalbį dėl darbo, kur man buvo pasakyta, turėčiau žinoti visus įgaliojimus 2
ne per nuo 2 iki 30-osios.
Tai buvo ne darbas, aš turiu.
Bet kokiu atveju, jus vaikinai gali eiti į priekį ir padaryti matematiką,
tačiau dvejetainiu ji tikrai ne prasmės,
ir remiantis ja negalima prasmės dešimtosios ar Šešioliktainis,
daryti matematikos, kur jūs turite nuliai.
Jūs galite pamatyti, turiu 0, 0 čia, 0, 0, 0, 0 čia.
Kodėl nėra prasmės daryti faktinį matematikos
apskaičiuoti atitinkamą galią 2 tos pozicijos?
Tiksliai, kaip Charlotte sakė, tai bus 0.
Gali taip pat sutaupyti laiko, jei apskaičiuojant įgaliojimus 2 nėra jūsų stiprioji pusė.
Šiuo atveju mes tik reikia apskaičiuoti už 2 0, kuris yra-?
[Studentų] 1.
[Nate H.] 1, 2 į 3?
[Studentų] 8. >> [Nate H.] 8.
2 4?
[Studentų] 2. Atsiprašau, 1.
[Nate H.] 2 į 4 - 16, tiksliai.
Nuo 2 iki 5 Kevinas? >> 32.
[Nate H.] 32, 2 su 8?
[Studentų] 32 x 8 256.
[Nate H.] Perfect.
Ir 2 su 10?
[Studentų] 1024.
[Nate H.] Taip, 1024.
>> Kai mes turime šiuos skaičius, mes galime suma juos visus.
Ir tai, kai tai tikrai svarbu padaryti keletą dalykų.
Vienas iš jų yra eiti lėtai ir patikrinti savo darbą.
Jūs galite pasakyti, kad 1 šio skaičiaus pabaigoje,
todėl aš tikrai turėtų gauti kaip mano rezultatas, nelyginis skaičius
nes visi kiti tie bus dar numeriai
atsižvelgiant į tai, kad tai yra dvejetainis skaičius.
Kitas dalykas, kurį reikia padaryti, tai, jei jums šiuo klausimu apie bandymą
ir parašiau jį taip toli
ir jūs bėga laikas
pažvelgti į taškų skaičių, kad ši problema yra verta.
Ši problema, kaip jūs galite pamatyti, jei aš apversti atgal į mano nešiojamas tikrai greitai
ši problema yra verta 2 taškų, todėl tai yra ne to rūšiuoti
jums turėtų būti išgyvena, jei jūs tikrai nedaug laiko.
Bet mes pereiti atgal į iPad, ir mes eiti per jį labai greitai.
>> Man patinka daryti nurodytas nedidelis skaičius pirmą kartą
, nes manau, kad būtų lengviau.
Man patinka 32 ir 8, nes jie eiti kartu gana lengvai, ir mes gauname 50.
16 ir 1 gauna 17.
Čia mes gauname 57,
ir tada mes galime padaryti tai poilsio, todėl mes galime padaryti 57, 156.
Come on.
Vyras, gerai, pažiūrėkime.
Mes turėjome 57, 256, ir 1024.
Šiuo metu, aš, o tiesiog eiti per.
Aš neturiu clue. Aš aiškiai reikia perskaityti apie tai.
7, 6, 4, gausite 17.
1, 5, 5, 2, 13.
Tada mes gauname 3, ir tada mes gauti 1.
1337 m.
Margutis, kas?
Kas nors pripažinti šį skaičių?
Chris atpažįsta šį numerį. Ką tai reiškia, Chris?
[Chris] Leet.
Leet, todėl, jei jums pažvelgti į tai, jis atrodo Leet.
Hacker dalykų. Saugokitės tokio laikotarpio vidurio arba viktorina, o stuff.
, Jei matote, kad daiktų rūšis ir jums įdomu, "Huh"
kad iš tiesų gali reikšti kažką.
Nežinau. Davidas mėgsta išleisti.
Tai geras būdas normalumas patikrinti jį.
Kaip ir gerai, aš galiu pamatyti, kas vyksta.
>> Štai savaitė 0/Week 1 stuff.
Jei mes pereiti atgal į mūsų kompiuterį dabar
nutolinti, ir pora kitų dalykų.
Yra ASCII, o mes jau daro daug su problema rinkinių.
Šis kapitalo A. sąvoka, tai tikrai?
Žinant, kad dešimtainis sveikasis skaičius.
65 yra tai, ką jis susietas su ASCII lentelėje,
ir tai, kaip kompiuteris jį rašo,
ir tai, kaip mes jau Getting Away With faktiškai raštu
simbolių kapitalas ir simbolių mažosiomis
kai kurie iš šių sprendimų ir probleminių įrangų, kad jūs jau daro.
Pora kitų dalykų.
Mes turime pareiškimus, Būlio išraiškos, sąlygas, kilpų, kintamieji ir siūlus.
>> Tie visi atrodo prasminga, kad didžioji dalis?
Kai kurie terminai yra šiek tiek funky kartais.
Man patinka galvoti, pareiškimas, kaip ir didžioji dalis kažką, kad baigiasi kabliataškiu.
Pareiškimai, pavyzdžiui, x = 7, kuri nustato kintamąjį,
matyt, vadinama x = 7.
Matyt, čia x yra taip pat, kad galima laikyti su skaičiumi 7,
todėl int arba galbūt lėšos arba trumpas arba char,
kažkas panašaus.
Būlio išraiška Šiuose dviviečiuose lygus
ir sprogimo lygi arba nelygu, mažiau nei didesnis nei
mažesnė arba lygi, kad daiktų rūšis.
Sąlygos tada IF ELSE ataskaitos.
Norėčiau prisiminti, kad jūs negalite turėti atitinkamą jei dar be.
Taip pat galite turėti Else jei be atitinkamo jei.
Kilpos, priminti, 3 rūšių kilpų buvome įspaudimo į tave
per pastaruosius keletą skyrių ir probleminių įrangų.
Naudojant nevalgyti, o kai jūs gaunate vartotojo įvestį,
, o kilpos iki tam tikros būklės, yra tiesa,
ir tada naudojant kilpas jei jums reikia
iteracija kilpos jūs esate, kaip aš apie tai galvoti.
Arba, jei jūs darote kiekvieną simbolį į eilutę, aš noriu kažką daryti,
kiekvieno noriu kažką padaryti, kad šio elemento masyvo elemento.
>> Verpalai ir renginiai.
Tai mes taip aiškiai netaikoma C,
bet nepamiršk, kad nuo nulio.
Tai įvairius raštus sąvoka.
Tai taip pat tai transliuoti įvykį sąvoka.
Kai kurie žmonės nesinaudojo pradžių transliuoti savo projektus,
kuris yra visiškai kietas,
tačiau tai yra 2 skirtingi būdai, kaip tvarkyti šią didesnė problema, vadinama lygiagrečiai,
kuri, kaip jūs gaunate programas vykdyti
arba atrodo įvykdyti tuo pačiu metu?
Įvairias užduotis veikia, o kitos užduotys taip pat veikia.
Tai, kaip jūsų operacinė sistema, atrodo, veikia.
Štai kodėl, nors, pavyzdžiui,
Aš gavau mano naršyklė veikia, taip pat galiu įjungti Spotify ir groti dainą.
Tai daugiau konceptualaus dalykas, kurį reikia suprasti.
Aš norėčiau pažvelgti į temas trumpų
, jei norite sužinoti daugiau apie tai.
>> Pažiūrėkime, manau, galėjo būti
viena iš jų, dėl šios problemos.
Vėlgi, manau, temas ir įvykiai yra ne kažkas, kad mes apims C
tik todėl, kad žymiai sunkiau nei nulio.
Jums nereikėtų jaudintis apie tai, tačiau tikrai suprasti sąvokas,
suprasti, kas vyksta.
Prieš mes pereiti, bet savaitgaliais 0 medžiaga klausimai?
Visi jausmas gana gera?
Supratimas kintamieji ir kintamasis yra?
>> Juda. Per savaitę 1.
Pora dalykų, kurie buvo ne itin
viktorina apžvalgoje būtinai ir taip pat yra daugiau konceptualūs dalykų, galvoti apie.
Pirmasis tai kodo, kompiliatorius ir objektinio kodo sąvoka.
Kas nors? Bazilikas.
Yra objekto kodas Aš turiu galvoje išeitinis kodas, yra, ką jūs įtraukėte į Apsukite metalinis garsas,
ir objekto kodo Apsukite metalinis garsas kelia, kad jūsų kompiuteris gali perskaityti programą.
Tiksliai.
Išeitinis kodas yra C kodas, kad jūs iš tikrųjų tipo iki.
Objekto kodas yra tai, ką jūs gaunate iš Apsukite metalinis garsas.
Tai 0s ir 1s toje dvejetainiu formatu.
Tada kas atsitinka, kai jūs turite objektų failų krūva,
tarkime, kad sudarant su projektu ar programa, kuri naudoja keletą kodą failus,
pagal susitarimą, atsižvelgiant į C failo plėtinį.
Štai, kodėl mes turime caesar.c vigenère.c.
Jei rašote Java programas jūs suteikiate jiems pratęsimą. Java.
Python programos turi plėtinį. Py dažnai.
>> Kai jūs turite daug C failus, renka juos.
Apsukite metalinis garsas išspjauna visą šį dvejetainis šiukšlių.
Tada, nes norite tik 1 programa
turite Linker nuorodą šių objekto failus kartu
į 1 vykdomąjį failą.
Tai, kas atsitinka, kai jūs naudojate CS50 biblioteką, pvz.
CS50 biblioteka yra tiek, kad h failo antraštės
, kad jūs perskaitėte, kad # includecs50.h.
Ir tada jis taip pat dvejetainis bibliotekos failą
kad buvo parengta, kad 0s ir 1s,
ir kad-l vėliava, todėl, jei mes grįžti į mūsų erdvėse ir mes žiūrime labai greitai
į tai, kas vyksta čia, kai mes žiūrime į mūsų Apsukite metalinis garsas komandą,
ką mes turime, tai mūsų šaltinio kodas failą čia.
Tai yra kompiliatoriaus vėliavėles krūva.
Ir tada pačiame gale, tai-l vėliavos nuorodą
faktiniai dvejetainiai failai 2 bibliotekos, CS50 bibliotekos ir matematikos biblioteka.
>> Suprasti kiekvieno tipo failus "Tikslas
rengimo procese yra tai, ką jūs norite, kad būtų galima
pateikiama bent jau aukšto lygio apžvalga.
Išeitinis kodas Įgijusi Objekto kodas išeina.
Objekto kodas failai susieti kartu, ir jums gražus, vykdomąjį failą.
Cool.
Čia taip pat galite gauti klaidos kelių taškų
rengimo procese.
Tai vieta, kur, pavyzdžiui, jei imti šio vienijančio vėliava
CS50 vėliava, ir jūs praleisti jį erdvėse arba kai jūs naudojate savo kodą,
tai yra, kai gausite klaidą susiejimo etape,
ir Linker sako: "Ei, tu vadinamas funkcija GetString
tai CS50 bibliotekoje ".
"Jūs man pasakė jis buvo CS50 bibliotekoje, ir aš negaliu rasti kodą".
Štai kur jūs turite sujungti jį, ir tai yra atskiras
iš kompiliatorius klaida, nes kompiliatorius žiūri sintaksė ir kad daiktų rūšis.
Tai gerai, kad žinoti, kas vyksta, kai.
>> Kiti dalykai, kuriuos reikia žinoti apie.
Sakyčiau, jūs tikrai norite pažvelgti Jordano, padaryti trumpas typecasting
suprasti, kas int yra po gaubtu,
ką simbolių yra po gaubtu.
Kai kalbame apie ASCII ir mes iš tikrųjų pažvelgti ASCII lentelę,
tai, ką daro, suteikia mums po gaubtu atrodo
kaip kompiuteris iš tiesų atstovauja kapitalą ir skaitmuo 7
ir kableliai ir klaustukas.
Kompiuteris taip pat turi ypatingų būdų atstovauti
numeris 7 kaip sveikasis skaičius.
Jis turi ypatingą būdą atstovauti 7 kaip slankiojo kablelio skaičius,
ir jie yra labai skirtingi.
Typecasting, kaip jūs pasakyti, kad kompiuteris "Ei, aš noriu jums konvertuoti
kitą atstovavimo iš vienos atstovavimo ".
Kodėl mes tuo išvaizdą.
>> Aš taip pat imtis ne dėl bibliotekų trumpas ir trumpas kompiliatorius išvaizdą.
Tiems, apie rengimo proceso aptarimas,
biblioteka yra, ir eiti per kai kuriuos iš šių klausimų, kad jūs galite gauti paprašė.
Turite klausimų apie savaitę 1 medžiagas?
Ar yra kokių nors čia temų, kad, atrodo nelengvas norite padengti?
Aš bandau smūgis per labiausiai iš šių ankstesnių temų, kad mes galime gauti
nurodymus ir padaryti šiek tiek rekursijos.
Mintys?
Viskas, ką padengti?
Kai šokolado gal laikas?
Jus vaikinai dirba per ją.
Aš ruošiuosi išlaikyti gurkšnojant mano kavos.
Per savaitę 2.
Teisingai, geras skambutis.
Savaitė 2 kalbėjome šiek tiek daugiau apie funkcijas.
>> Per pirmąsias kelias problemines rinkinių mes ne tikrai rašyti kokias nors savo funkcijas
nei kuri funkcija?
[Studentų] Pagrindinis >> Main, tiksliai.
Ir taip mes matėme skirtingus kostiumus, kad pagrindinis nešioja.
Yra vienas, per kuriuos jis jokių argumentų,
ir mes tiesiog pasakyti negaliojančiu tarp skliausteliuose,
ir ten kitas, kur mes norime imtis komandinės eilutės argumentai,
kaip matėme, tai kur jūs turite int argc ir styginių argv masyvas
ar dabar, kad mes iš tikrųjų patyrė sąlytį eilutę char *, kad ji yra
mes ketiname pradėti rašyti jį kaip char * argv ir tada skliausteliuose.
Problemą, 3, jus vaikinai pamatė funkcijų krūva,
ir įgyvendino funkcijų krūva, parengti, ieškoti, peštynės.
Prototipai buvo ten parašyta, už jus.
>> Ką aš norėjau kalbėti apie čia veikia tikrai greitai
, kad yra 3 dalys jiems, kai jums reikia parašyti funkciją.
Turite nurodyti grąžinimo tipo funkcija.
Turite nurodyti funkcijos pavadinimą, ir tada jūs turite nurodyti
argumentu sąrašas arba parametrų sąrašas.
Pavyzdžiui, jei aš buvo parašyti funkciją, apibendrinti sveikųjų skaičių krūva
ir tada grįžti į mane sumą, kas būtų mano grįžimo tipo
jei aš norėjau apibendrinti sveikieji skaičiai ir tada grąžinti sumą?
Tada funkcijos pavadinimas.
Jei aš einu į priekį ir rašyti žalia spalva, ši dalis yra grįžimo tipo.
Ši dalis yra pavadinimas.
Ir tada tarp skliausteliuose
kur aš pateikti argumentus,
args, kartais vadinama params parametrams dažnai trumpinamas kaip.
Ir, jei turite vieną, jums tiesiog nurodyti vieną.
Jei turite kelis atskirkite juos kableliais.
Ir kiekvieną argumentą, jūs suteikiate jai 2 dalykus, kurie yra-Kevin?
[Kevin] Jūs turite duoti tipą ir tada pavadinimą.
Ir tada vardas, vardas, pavardė, vardas, kad jūs ketinate naudoti
perduoti į šį argumentą per SUM funkcija
per funkcija, kad jūs šiuo metu rašote.
>> Jūs neturite pavyzdžiui, jei aš Apibendrinant,
pasakyti, sveikieji skaičiai-Mes masyvas padaryti int masyvas,
ir aš duosiu sau keletą garbanotas petnešos yra
tada, kai aš pereiti masyvą su SUM funkcija
Aš perduoti jį argumentų sąrašo pirmoje pozicijoje.
Bet matrica, kad galiu perduoti neturi turėti pavadinimą Atv.
Atv bus, kaip aš į šį argumentą per kūno funkcijos.
Kitas dalykas, kad mes turime atsižvelgti į tai,
, o tai yra šiek tiek skiriasi nuo funkcijų, bet aš manau, kad tai svarbus klausimas,
yra tai, kad C, kai aš rašau kaip šis funkciją
kaip man žinoti, kiek šio masyvo elementai yra?
Tai yra šiek tiek apgauti klausimą.
Mes kalbėjome apie tai šiek tiek praeitą savaitę skyriuje.
Kaip man žinoti, viduje C masyvo elementais?
Ar yra būdas?
>> Paaiškėja, kad nėra jokio būdo sužinoti.
Turite išlaikyti jį atskirai.
Yra apgauti, kad jūs galite padaryti
jei jūs į tą pačią funkciją, kurioje buvo paskelbtas masyvas,
ir dirbate su kamino masyvo.
Bet tai veikia tik tada, jei esate į tą pačią funkciją.
Vieną kartą praeiti masyvą kitos funkcijos arba jei jūs paskelbė masyvą
ir jūs galėsite įdėti, kad masyvas krūvą, jūs naudojote malloc
ir panašūs dalykai, tada visi statymai yra išjungti.
Tada jūs iš tikrųjų turi aplenkti
specialus argumentas ar kitas parametras
sakau jums, kaip didelis masyvas.
Šiuo atveju, aš noriu naudoti kableliais ı'm Atsiprašome, jis vyksta nuo ekrano čia
ir aš važiuoti, dar vienas argumentas,
ir vadina jį int ilg ilgio.
>> Vienas dalykas, kad gali sugalvoti viktorinoje
klausia jums rašyti ar įgyvendinti tam tikrą funkciją, vadinamą kažkas.
, Jei mes negalime suteikti jums prototipą, todėl visas šis dalykas čia,
visa ši netvarka yra vadinama funkcija deklaraciją arba funkcijos prototipas,
tai yra vienas iš pirmųjų dalykų, kad jūs norite priremti prie sienos, jei ji nėra suteikta
jums iš karto viktorinoje.
Kitas triukas, aš sužinojau, kad
sako, kad mes duoti jums funkcijos prototipas, ir mes galime pasakyti: "Ei, jūs turite jį įrašyti."
Viduje garbanotas petnešos, kad jūs turite viktorinoje
jei jūs pastebėsite, kad yra grįžimo tipo ir pastebite, kad grįžimo tipas
yra kažkas kita, nei tuštumos, o tai reiškia, kad funkcija negrąžina nieko,
tada vienas dalykas, jūs tikrai norite padaryti, tai parašyti
kai Grizimas rūšiuoti funkcija pačioje pabaigoje.
Grąža, ir šiuo atveju, mes įdėti tuščią, nes mes norime užpildyti tuščią.
Bet tai pasireiškia jūs galvojate tinkamu būdu apie tai, kaip aš ketina kreiptis į šią problemą?
Ir ji primena jums, jūs ketinate turi grąžinti reikšmę
skambinančiajam funkcijos.
>> Taip. >> [Studentų] Ar stilius, kai mes rašome kodą viktorina?
Tokie kaip atitraukimą, kad daiktų rūšis? >> [Studentų] Yeah.
Ne, ne tiek daug.
Manau, kad daug-tai yra tai, ką mes paaiškinti viktorinoje dieną,
bet paprastai nerimauti # apima ir panašūs dalykai, tai tipo iš išorės.
[Studentų] Ar norite komentuoti ranka kodą?
Ar norite komentuoti savo ranka kodą?
Komentuodamas visada yra gera, jei esate susirūpinę dalinė kredito
arba norite pranešti apie savo ketinimą į rūšiuotojas.
Bet aš, dar kartą, bus aiškiau viktorina viktorina dieną,
bet aš nemanau, kad jūs būsite Norėdami rašyti komentarus, ne.
Paprastai nėra, bet tai tikrai dalykas rūšiuoti, kai
galite bendrauti savo ketinimus, pavyzdžiui, "Ei, tai kur aš einu su juo."
O kartais, kad gali padėti su daline kredito.
Cool.
>> Bazilikas.
[Bazilikas] Koks skirtumas tarp deklaravimo, tarkim, int lang lang lang
kintamąjį per funkcija skelbiantis argumentus ar parametrų palyginti su?
Oho, kavos sumažėjo trachėjos.
[Bazilikas] Kaip ir ką mes norime įdėti į argumentus.
Taip, tai puikus klausimas.
Kaip jums pasirinkti, ką jūs norite įdėti į pateiktus argumentus
, palyginti su tai, ką, ką jums reikia padaryti viduje funkcijos?
Šiuo atveju mes abu jie kaip argumentus
nes jie yra kažkas, kad kiekvienas, kuris ketina pasinaudoti SUM funkcija
turi nurodyti šiuos dalykus.
>> Suma funkcija, kaip mes kalbėjome apie tai neturi žinoti kelią
kaip didelis masyvas gauna iš savo skambinančiojo ar kas naudoja SUM funkcija.
Jis neturi žinoti, kaip didelis, kad masyvas yra būdas.
Priežastis, kodėl mes išlaikyti šio ilgio, čia kaip argumentas
yra todėl, kad kažkas, kad mes iš esmės pasakoja funkcijos skambinantįjį,
kas ketina pasinaudoti funkcija SUM, "Ei, ne tik jūs turite duoti mums masyvą
int, jūs taip pat turite pasakyti mums, kaip didelis masyvas, kad jūs mums davė. "
[Bazilikas] Tie, bus ir komandinės eilutės argumentai?
Ne, tai yra faktiniai argumentai, kad galėtumėte pereiti į funkciją.
>> Leiskite man daryti naują puslapį.
[Bazilikas] Kaip pavadinimas būtų perduoti
[Nate H.] Jeigu aš turiu int main (void)
ir aš ruošiuosi įdėti į mano return 0 čia apačioje,
ir pasakyti, kad norite skambinti SUM funkcija.
Noriu pasakyti, int x = SUM ();
Norėdami naudoti SUM funkcija, turiu išlaikyti tiek masyvo, kad aš noriu Apibendrinant
ir masyvo ilgis, todėl tai yra ten, kur
darant prielaidą, kad aš turėjau int masyvas,
pasakyti, kad aš turėjo int numbaz [] = 1, 2, 3,
rūšies naudoti, kad nulaužė iki sintaksę teisę ten,
tada, ką noriu daryti, yra suma, aš noriu perduoti
tiek numbaz ir numeris 3
pasakyti SUM funkcija "Gerai, štai masyvas, aš noriu jums apibendrinti".
"Štai jo dydį."
Ar tai prasminga? Ar, kad atsakyti į jūsų klausimą?
>> Daugeliu atžvilgių jis veikia lygiagrečiai, ką mes darome su pagrindinis
kai mes turime perduoti komandinės eilutės argumentai.
, Kaip Cezario šifravimo programa, kad, pavyzdžiui, reikia
negalėtų nieko daryti, komandinės eilutės argumentai.
Ji negalėjo žinoti, kaip užšifruoti, jei tu negali pasakyti, kokį klavišą, kad naudoti
arba, jei tu negali pasakyti, kokia eilutė jums norėjo užšifruoti.
Paskatino indėlio, tai yra, kai mes turime 2 skirtingus mechanizmus
indėlį į nuo vartotojo, informaciją iš vartotojo.
Problemų, nes Set 1 mes matėme šį GetInt, GetString, GetFloat būdas
paskatino įvesties, ir tai vadinama naudojant standartinę įvesties srautą.
Tai šiek tiek skiriasi.
Tai kažkas, kad jūs galite padaryti vienu metu, o ne
kai jūs remtis programą, kai paleidžiate programa veikia.
Perduoti komandinės eilutės argumentai yra nurodyti, kai paleidžiate programa veikia.
Mes buvo sumaišant iš šių dviejų.
Kai mes naudojame argumentus prie funkcijos, tai panašiai kaip komandinės eilutės argumentai pagrindinis.
Tai kai jūs remtis funkciją, kurią reikia pasakyti,
kas tiksliai tai reikia, kad galėtų vykdyti savo užduotis.
Kitas geras dalykas, pažvelgti ir aš jums pažvelgti į savo laisvalaikį,
ir ji buvo taikoma viktorinoje buvo tą taikymo sąvoka
ir vietos kintamieji, palyginti su globalių kintamųjų.
Ar atkreipti dėmesį į tai, kad.
>> Dabar, kai mes gauti šios kitų dalykų,
3 savaitė pradėjome kalbėti apie paieškos ir rūšiavimo.
Paieškos ir rūšiavimo, bent jau CS50,
yra labai daug įvadas į kai kurių daugiau teorinių dalių kompiuterių mokslo.
Paieškai problema, rūšiavimo problema
yra didelis, kanoninės problemos.
Kaip jums rasti tam tikrą skaičių milijardų sveikieji skaičiai masyvo?
Kaip jums rasti konkretų pavadinimą viduje telefonų knygos
kad saugoma kompiuteryje?
Ir taip mes pristatyti šią sąvoką asimptotinio veikimo laikais
tikrai apskaičiuoti, kaip ilgai, kaip sunku tai problema,
kaip ilgai jie imasi spręsti.
, Manau,, 2011 "viktorina yra problema, kad aš manau, nusipelno
labai greitai, kuris yra tai viena, 12 problema.
O ne, tai Omega.
>> Čia mes kalbame apie greičiausią vykdymo metu
tam tikrą algoritmą, ir tada minimaliai įmanomą veikimo laikas.
Tai Omega ir O tikrai tik nuorodos.
Jie notacijos klavišai už sakydamas
kaip greitai geriausiu įmanomu atveju bus mūsų algoritmas paleisti,
ir kaip lėtai blogiausiu įmanomu atveju mūsų algoritmas paleisti?
Darykime porą iš jų, ir jie taip pat apima
trumpas asimptotinio notacijos, kurį aš labai rekomenduoju.
Jackson padarė tikrai gerą darbą.
Dvejetainis paieškos, mes kalbame apie dvejetainis paieškos algoritmas yra,
ir mes paprastai kalbėti apie tai savo didžiojo O.
Kas yra big O?
Kas yra lėčiausias priklausantis dvejetainis paieškos laiką?
[Studentų] N ²?
Uždaryti, aš manau, panašus į.
Tai daug greičiau nei, kad.
[Studentų] Dvejetainis? >> Aha, dvejetainis paieškos.
[Studentų] Tai log n.
Log n, todėl ką log n reiškia?
Tai dvigubai kiekvienos iteracijos.
Tiksliai, todėl minimaliai įmanomą atveju,
pasakyti, jei turite surūšiuoti masyvas
milijono sveikieji skaičiai ir skaičių jūs ieškote
yra arba labai pirmasis elementas masyve arba paskutinės elementas masyve.
Atminkite, kad dvejetainis paieškos algoritmas veikia žiūri viduryje elementas,
pamatyti, jei tai rungtynės, kad jūs ieškote.
Jei taip, tai tada puiku, jūs ją radau.
>> Geriausiu įmanomu atveju, kaip greitai veikia dvejetainis paieškos paleisti?
[Studentai] 1.
1, nuolatinio laiko, didelis O 1. Taip.
[Studentų] Turiu klausimą. Kai jūs sakote, prisijunkite n, turite galvoje pagrindo 2, tiesa?
Taip, todėl, kad kitas dalykas.
Mes sakome, log n, ir aš manau, kai man buvo vidurinėje mokykloje
Aš visada manė, kad žurnalas buvo pagrindas 10.
Taip, taip taip, prisijungti, pagrindo 2 paprastai yra tai, ką mes naudojame.
Dar kartą, grįžta į dvejetainis paieškos, jei jūs ieškote arba
elementas pačioje pabaigoje arba elementas pačioje pradžioje,
nes paleidus viduryje ir tada išmesdami
priklausomai nuo to, 1/2 neatitinka kriterijų, kad jūs ieškote,
ir jūs einate į kitą pusę ir į kitą pusę, o kitą pusę.
Jei aš ieškoti didžiausių elementas mln integer masyvas
Aš ruošiuosi perpus sumažinti ne daugiau kaip 1 milijoną kartų žurnale
kol aš pagaliau išbandyti ir pamatyti, kad elementas Aš ieškau
yra didžiausia arba į aukščiausią masyvo indekso,
ir kad imsis n žurnalą, prisijunkite 1 milijoną kartų.
>> Burbulas rūšiuoti.
Ar jus vaikinai prisiminti burbulo rikiavimo algoritmas?
Kevin, jūs galite duoti man greitai Priminti, kas atsitiko burbulas rūšiavimo algoritmas?
[Kevin] Iš esmės jis eina per visus sąraše.
Jis žiūri į pirmųjų dviejų.
Jei pirmasis yra didesnis nei antrąjį jis apsikeitimo sandorių juos.
Tada ji lygina Antra ir trečia, tą patį, apsikeitimo sandoriai,
trečia ir ketvirta, visą kelią žemyn.
Didesni numeriai sekti iki pabaigos.
Ir po Tačiau daugelis kilpų baigsite.
Tiksliai, todėl tai, ką Kevinas sakė, kad mes žiūrėti didesnius numerius
burbulas iki masyvo pabaigos.
Pavyzdžiui, tu nieko vaikščioti mus per Šiame pavyzdyje, jei tai yra mūsų masyvas?
[Kevin] Jūs Take 2 ir 3.
3 yra didesnis kaip 2, todėl jūs apsikeitimo juos.
[Nate H.] Teisė, todėl mes apsikeitimo jų ir taip mes 2, 3, 6, 4, ir 9.
[Kevin] Tada jūs palyginkite 3 ir 6.
3 yra mažesnis nei 6, todėl jūs juos palikti,
6 ir 4, norite apsikeitimo juos, nes 4 dalis, yra mažesnis nei 6.
[Nate H.] Teisė, todėl man 2, 3, 4, 6, 9.
[Kevin] ir 9 pakeitimų yra didesnis nei 6, todėl jūs palikti jį.
Ir norite grįžti per jį dar kartą.
>> [Nate H.] Ar aš šiuo metu? >> [Kevin] L.
Ir kodėl aš ne šiuo metu?
, Nes jis atrodo kaip mano masyvas yra rūšiuojama. Aš žiūri į jį.
[Kevin] Eiti per jį dar kartą ir įsitikinkite, kad yra ne daugiau apsikeitimo sandoriai
prieš jūs galite visiškai sustoti.
Tiksliai, todėl jums reikia nesustoti ir įsitikinkite, kad nėra apsikeitimo sandoriai
kad jūs galite padaryti šiuo metu.
Tai buvo tikrai tiesiog pasisekė, kaip sakei, kad mes galų gale
tik, kad 1 pro ir mes surūšiuoti.
Bet tai padaryti bendruoju atveju mes iš tikrųjų turime tai daryti vėl ir vėl.
Ir iš tiesų, tai buvo geriausiu įmanomu atveju pavyzdys,
kaip matėme problemos.
Mes matėme, kad geriausias įmanomas atvejis buvo n.
Mes perėjome masyvo 1 kartą.
Kas yra blogiausias atvejis šio algoritmo?
[Kevin] N ².
Ir ką tai atrodyti? Kas būtų masyvas atrodo kaip kad būtų atsižvelgiama n ² laiką?
[Kevin] [nesigirdi] surūšiuoti.
Tiksliai, todėl, jei aš turėjo masyvo 9, 7, 6, 5, 2,
pirma 9 burbulas visą kelią iki.
Po 1 iteracijos mes norime turėti 7, 6, 5, 2, 9.
Po 7 burbulas iki, 6, 5, 2, 7, 9, ir taip toliau ir taip toliau.
>> Mes turėtume eiti per visą masyvą n kartų,
ir jūs iš tikrųjų galite gauti šiek tiek tiksliau, nei tai
, nes kai mes persikėlė 9 visą kelią į savo paskutinę įmanomą padėtį,
mes žinome, kad mes niekada, kad palyginti su šio elemento vėl.
Kai mes pradedame burbuliuoja 7-
mes žinome, kad galime sustabdyti, kai 7 yra tiesiai prieš 9
nes mes jau palygino 9 į jį.
Jei jums tai padaryti protingas būdas tai nėra tikrai, manau, kad daug laiko.
Jūs esate nesiruošia palyginti visus galimus [nesigirdi] kombinacijas
kiekvieną kartą, kai jūs einate per kiekvienos iteracijos.
Bet vis tiek, kai mes kalbame apie tai viršutinė riba mes sakome, kad
jūs žiūrite n ² palyginimai visą kelią.
>> Eikime vėl, ir kadangi mes pradedame gauti šiek tiek trūksta laiko
Sakyčiau, jums tikrai turėtų eiti per likusį šios lentelės,
užpildyti it all out.
Pagalvokite pavyzdžių. Galvoti apie konkrečius pavyzdžius.
Tai tikrai patogu ir naudinga daryti.
Lygiosios jį.
Tai rūšiuoti lentelės, kad, kaip jūs einate per informatikos
jums tikrai turėtų pradėti šias mintinai žinoti.
Tai yra jums gauti interviu, klausimų rūšys.
Tai yra rūšių dalykų, kad yra gera žinoti,
ir galvoti apie tuos krašto atvejų, iš tikrųjų suprasti, kaip galvoti apie
žinant, kad burbulas rūšiuoti blogiausiu įmanomu masyvas
rūšiuoti su yra vienas, kad atvirkštine tvarka.
>> Patarimų. Pakalbėkime šiek tiek apie rodykles.
Per pastaruosius keletą minučių mes turime čia
Aš žinau, tai yra kažkas, kartu failą I / O, kad yra gana nauja.
Kai kalbame apie rodykles todėl norime kalbėti apie rodykles
yra todėl, kad, kai mes dirbame, C
mes tikrai gana žemo lygio, palyginti su dauguma šiuolaikinių programavimo kalbų.
Mes iš tikrųjų galėtų manipuliuoti kintamuosius į atmintį,
išsiaiškinti, kur jie iš tikrųjų esančių mūsų atminties.
Kai jūs nuėjo į operacinių sistemų klases Jūs pamatysite
kad tai, vėlgi, rūšies abstrakcija.
, Kad ne iš tikrųjų.
Mes turime virtualiosios atminties slepiasi šiuos duomenis iš mūsų.
>> Bet dabar galite manyti, kad, kai jūs turite programą,
pavyzdžiui, kai jums pradėti savo Cezario šifro programą
Aš perjungti atgal į mano iPad tikrai greitai
kad pačioje pradžioje savo programą, jei turite, tarkim,
4 GB RAM į savo kompiuterį,
jums atidėti šį gabalą, ir mes tai vadiname RAM.
Ir jis pradeda į vietą, mes ketiname skambinti 0,
ir baigiasi toje pačioje vietoje, kad mes jį vadiname 4 GB.
Aš tikrai negaliu rašyti. Žmogus, kad nulaužė.
, Kai jūsų programa atlieka
operacinė sistema carves RAM,
ir nurodo skirtingus segmentus skirtingų dalių jūsų programos gyvename
Žemyn čia šioje srityje yra rūšies niekieno žemėje.
Kai jums eiti šiek tiek toliau čia
jūs turite iš tikrųjų ta vieta, kur
jūsų programos kodas gyvenime.
Kad faktinis dvejetainis kodas, kad vykdomąjį failą iš tikrųjų bus pakrautas į atmintį
, kai paleidžiate programą, ir jis gyvena kodo segmente.
Ir kaip jūsų programa atlieka procesorius žiūri Šio kodo segmente
išsiaiškinti, kas yra šalia instrukcija?
, Kas yra šalia kodo eilutė man reikia atlikti?
>> Taip pat yra duomenų segmentas, ir tai yra, kai tie styginių konstantos
gauti saugomi, kad jūs naudojate.
Ir tada toliau ten ši vieta vadinama krūvos.
Access Memory ten naudojant malloc
ir tada link pačiame viršuje savo programą
nėra kamino,
ir tai, kur mes buvo žaisti pradžioje.
Tai nereiškia, masto arba nieko.
Daug tai yra labai mašina priklauso nuo
operacinė sistema priklauso nuo to, bet tai, palyginti, kaip viskas susitvarko chunked iki.
Paleidus programą, ir jūs deklaruoti kintamasis vadinamas X-
Aš ruošiuosi padaryti kitą langelį žemiau, ir tai bus RAM, taip pat.
Ir aš einu ieškoti.
Mes atkreipti nelygius linijas nurodyti tai tik nedidelė dalis RAM
ir ne visi apie tai, kaip mes atkreipiame viršuje.
>> Jei aš paskelbti kintamąjį, vadinama X,
tada, ką aš iš tikrųjų gauti žemėlapių
, kuris yra saugomas simbolio mano programa lentelę
, kuri jungia pavadinimas x šiame atminties regione, kad aš sudarytas
čia tarp vertikalių strypų.
Jei turiu kodo eilutę mano programa, kad sako: x = 7
procesorius žino "O, gerai, aš žinau, kad X gyvena šiame atminties vietos."
"Aš ruošiuosi eiti į priekį ir ten rašyti 7".
Kaip ji žino, kokia vieta yra atmintyje?
Gerai, kad visa tai daroma kompiliavimo metu.
Kompiliatorius rūpinasi paskirstymo, kur kiekvienas iš kintamųjų ketinate eiti
ir įsteigti specialų žemėlapių, ar veikiau jungiantis taškus
tarp simbolio ir kur jis vyksta, kintamojo pavadinimas
ir kur jis eina gyventi atmintyje.
Tačiau paaiškėja, kad iš tiesų galime pasiekti mūsų programų taip pat.
Tai tampa svarbu, kai mes pradedame kalbėti apie kai duomenų struktūrų,
kuris yra koncepcija, kad mes ketiname pristatyti vėliau.
>> Bet dabar, ką jūs galite žinoti, kad galiu sukurti rodyklę į šią vietą, x.
Pavyzdžiui, aš galiu sukurti rodyklę kintamąjį.
Kai mes sukurti rodyklę kintamąjį mes naudojame žvaigždučių žymėjimą.
Šiuo atveju, tai sako, kad aš ruošiuosi sukurti žymiklį į int.
Tai kaip ir bet kokio kito tipo.
Mes suteikti jai kaip y kintamasis,
ir tada mes nustatyti, kad jis lygus adreso, adreso.
Šiuo atveju, mes galime nustatyti Y x
x adresą, kurį mes darome su šiuo ampersend
ir tada mes y atkreipti į jį.
Ką tai iš esmės nėra, jei pažvelgsime į mūsų RAM
tai sukuria atskirą kintamąjį.
Ji ketina jį vadinti y,
ir kai šią kodo eilutę vykdo
tai iš tikrųjų ketiname sukurti šiek tiek žymiklį, kurią mes paprastai pritraukti kaip strėlė,
ir jame Y-X.
Taip.
[Studentų] Jei x nėra jau rodyklė, jūs tiesiog padaryti
int * y = x, o ne turintys ampersendo?
Taip.
Jei x nėra jau rodyklė, tada jūs galite nustatyti 2 patarimų lygios viena kitai,
tokiu atveju y nėra susiję su x,
, bet jis norėtų atkreipti dėmesį į bet x yra nukreipta į.
Deja, pavėluotai.
>> Ką aš norėčiau pasakyti šiuo metu, mes galime kalbėti apie šį neprisijungę
bet aš norėčiau pasakyti, pradėti dirbti per šią problemą, # 14.
Jūs galite pamatyti, ten jau šiek tiek užpildyti jums čia.
Galite matyti, kad, kai mes pareiškiame 2 patarimų, int * x * y,
ir atkreipkite dėmesį, kad nukreipta * šalia kintamojo buvo kažkas, kad buvo padaryta pernai.
Pasirodo, kad tai yra panašus į ką mes darome šiemet.
Nesvarbu, kur rašote *, kai jūs skelbiantis žymiklį.
Bet mes parašėme * šalia tipo
nes tai labai aiškiai, kad jūs skelbiantis rodyklė kintamąjį.
Galite matyti, kad deklaruojant 2 patarimų suteikia mums 2 langelius.
Čia, kai mes nustatome x lygią malloc
, ką tai sako atidedant krūvos atminties.
Šis mažas langelis čia, tai apskritimas, įsikūręs ant krūvos.
X yra nukreipta į jį.
Atkreipkite dėmesį, kad y yra vis dar nukreipta į ką nors.
Gauti atmintį įrašykite šį numerį iš 42 į x
mes naudoti kas žymėjimą?
[Studentų] * x = 42.
Tiksliai, * x = 42.
Tai reiškia, kad rodyklę ir 42 mesti ten.
Čia, kur mes nustatome y ir x y nukreipta x.
Vėlgi, tai tik tai, ką Kevinas sakė, kur mes y lygus x.
Y yra ne nurodydama x.
Atvirkščiai, ji nukreipta į KAS YRA X nukreipta taip pat.
>> Ir galiausiai pastaruoju lange galimos 2 dalykų, kad mes galime padaryti.
Vienas iš jų yra, mes galime pasakyti, * x = 13.
Kitas dalykas yra, mes galime pasakyti, Aleksas, jūs žinote, ką mes galime padaryti čia?
Galima sakyti, * x = 13 arba
[Studentų] Galima sakyti, int whatever.
[Nate H.] Jei tai buvo perduoti kaip int kintamasis, mes galime tai padaryti.
Mes taip pat galėtų pasakyti, * y = 13, nes jie abu nukreipta į tą pačią vietą,
, todėl mes galime naudoti arba kintamasis ten patekti.
Taip. >> [Studentų] Kas tai atrodys, jei mes tiesiog pasakyti, int x yra 13?
, Kad būtų skelbiantis naują kintamasis vadinamas X, kuris gali neturėti.
Mes norime turėti susidūrimo, nes mes, nuo x iki rodyklė čia.
[Studentų] Jei mes tiesiog turėjo tokį pareiškimą pati kas tai atrodo kaip apskritimo?
Jei mes turėjome x = 13 tada mes norime turėti langelį, o ne rodyklę
out of the box, mes norime padaryti tai kaip tik 13.
[Studentų] Lauke. Gerai.
>> Dėkojame, kad žiūri, ir geros kloties Viktorina 0.
[CS50.TV]