>> [Musika nagpe-play]
>> Tagapagsalita 1: Ang lahat ng mga karapatan, ito ay CS50, at ito ang simula ng linggo apat,
at bilang maaari kang narinig na o basahin, ang mundo ay nagtatapos.
Pagpunta sa buong internet May naging kaalaman at kamalayan
sa isang bug sa isang programa, ang isang programming language na tinatawag Bash.
Ito ay na-branded wonderfully bilang Shellshock, o ang Bash pinto,
ngunit ang mga artikulo tulad ng mga ito hindi naging pangkaraniwan.
At sa katunayan, marami sa kanila ang dalhin bumalik mga alaala ng Heartbleed,
saan ay maaari mong napansin sa pindutin muli ito nakaraang tagsibol, na
ay katulad medyo dramatic.
Ngayon ng mga mo dito ngayon, kung gaano karaming mga mayroon kang,
kahit na hindi mo maunawaan kung ano ang lahat ng ito ay tungkol sa, Nalaman ng Shellshock?
Ang lahat ng mga karapatan, at kung paano marami sa inyo may mga computer na mahina?
OK, dapat ay mayroong malayo, malayo sa higit pang mga kamay hanggang ngayon, para sa mga kadahilanang ay dapat namin makita.
>> Tingnan natin ang isang pagtingin sa kung ano ang nangyayari sa media
at pagkatapos ay ipaliwanag ito ng kaunti dito para sa amin technically.
>> Tagapagsalita 2: Mayroon eksperto sa Seguridad nagbabala na ang isang seryosong flaw ng dati
maging tungkol sa makakaapekto sa daan-daang milyun-milyong mga gumagamit ng web sa buong mundo.
Kaya kung ano ang eksaktong ay ang bug na naging tinatawag Shellshock, at kung ano ang ginagawa nito?
Well, Shellshock ay kilala rin bilang Bash bug, ang software na ito nananamantala.
Hacker gamitin ang virus upang i-scan mahina sistema ng pagpapatakbo ng Linux at Unix
operating system at pagkatapos ay makaapekto sa mga ito.
Bash ay isang command line shell.
Ito ay nagbibigay-daan utos isyu mga gumagamit upang ilunsad mga programa at mga tampok sa loob ng software
sa pamamagitan ng pag-type sa teksto.
Karaniwang ginagamit ito sa pamamagitan ng mga programmer, at ay hindi dapat na bukas sa mas malawak na mundo,
bagaman nagbabago Shellshock na iyon.
>> Well, worringly, ang ilang mga analyst balaan maaari itong isang mas malaking banta,
dahil Shellshock nagbibigay-daan sa kumpletong kontrol sa isang nahawaang machine,
samantalang Heartbleed pinapayagan lamang hacker upang Spy sa mga computer.
Ito ay kaya malubhang, ito ay na-rate 10 sa 10
para sa kalubhaan ng National Kahinaan Database.
2/3 ng lahat ng mga web server ay nasa panganib, kabilang ang ilang mga computer Mac.
Well, siguraduhin na patch ang iyong mga system ngayon.
Sinuman isang tumatakbong mga website na nagho-host mga apektadong mga operating system
dapat gumawa ng pagkilos sa lalong madaling panahon.
Sinuman na kayang bayaran ito dapat na tumingin sa kanilang pagsubaybay at web application
firewall upang tumingin out para sa anumang mga pag-atake.
Tagapagsalita 3: Pinakamahina ang bagay na maaaring mangyari ay
na ang isang tao ay sumulat ng code na Gusto awtomatikong pumunta at i-scan
ang internet at makakaapekto lahat ng mga computer.
At sa sandaling gawin nila iyon, mahusay, ang pinakamasama bagay na maaari nilang gawin
ay tanggalin lang ang lahat ng bagay, o shut ang mga site pababa.
Kaya maaari naming makita pinsala mula sa na punto ng view,
kung saan nais naming magkaroon ng nakahahamak na mga tao sino lamang magpasya na magdulot ng havoc
pamamagitan ng pagdadala down na mga sistema o pagtanggal mga file, at mga bagay tulad na.
Tagapagsalita 2: Ang ilang mga sabihin ito ay isa sa mga pinaka-mahirap na masukat
mga bug sa taon, at ito ay maaaring tumagal ng mga linggo o kahit na
buwan upang matukoy ang tunay na epekto nito.
>> Tagapagsalita 1: Kaya lahat ng iyon ay totoo, ngunit ang nakakatawa bagay ay, halos lahat
ng koleksyon ng imahe na nakita mo lang, maliban sa siguro ang keyboard,
May walang kinalaman sa ang bug kung ano pa man.
Server at wire at iba pa, uri ng tangentially ito ay may kaugnayan,
ngunit sa core ito ay talagang kaakit-akit pamilyar sa kung ano ang nangyayari sa dito.
Sa katunayan, hayaan mo akong pumunta sa aming CS50 appliance.
Hayaan akong sige at i-maximize ang terminal na window dito.
At sa iyo guys na-gamit na ito, o ang naka-embed na bersyon nito,
sa gedit upang isulat ang mga programa, i-type ang command, at iba pa,
at ito ay talagang, at may naging para sa linggo, Bash, B-A-S-H.
Ito ang Bourne-shell muli, na kung saan ay lamang ng isang magarbong paraan ng sinasabi,
ito ay isang programa na may kumikislap prompt, epektibo,
na nakaupo doon naghihintay para sa input para sa iyo.
At ito ay ang command na line interface sa pamamagitan ng kung aling mga
ka guys tumatakbo utos at sa huli kino-compile at pagkatapos ay tumatakbo
mga programa.
>> Ngunit Bash ding programming wika sa mga sumusunod na kahulugan.
Alam mo na may mga utos tulad ng cd at ls at din clang at iba pa,
ngunit maaari mong tukuyin ang iyong sariling mga utos sa pamamagitan ng pagpapatupad ng mga ito sa Bash.
Ngayon hindi namin ang pagpunta sa pumunta sa mahusay na detalye
bilang sa Bash ang programming language, ngunit alam, halimbawa, na sa sandaling ito,
walang command na tinatawag na "kumusta."
Kaya ito ay matatagpuan sa isa sa mga pakete.
Hindi ito naka-install sa aking computer.
Tanungin ang iyong administrator.
Ngunit kung gusto ko bang maging isang programa na tinatawag na "kumusta" sa Bash o sa aking prompt,
Maaari ko talagang gamitin ang syntax na medyo tulad ng C. Ito ay hindi masyadong ang parehong,
ngunit mukha itong kaakit-akit na katulad ng isang function, albeit nawawala ang ilan sa mga detalye.
Wala mukhang mangyari, ngunit ngayon kung nagta-type ako "kumusta,"
Maaari mong aktwal na magsulat ng isang programa, hindi sa C, hindi sa Java,
hindi sa ibang programming wika, ngunit sa Bash mismo.
>> Ngayon ang key dito ay na sinulat ni ko ang pangalanan Nais kong bigyan ang bagong utos,
at ang mga panaklong ay rin symbolic ng pagiging isang function.
Bilang isang bukod, maaari mo ring gawin masaya bagay, at sa katunayan, kahit na sa Mac OS,
ito ay isang programa na tinatawag na Terminal.
Nagmumula ito built in sa sinuman computer na iyon ay may isang Mac sa kuwartong ito,
at maaari mong gawin katulad na bagay sa Mac OS, ngunit maaari kang pumunta nang higit pa lampas na iyon.
At ito ay isang maliit na tangential, subalit ito ay uri ng masaya.
Ako ay mapaalalahanan na ito umaga, kapag nag-iisip na ito sa pamamagitan,
ng isang maliit na laro na ginamit ko upang i-play gamit ang isa sa dating TFs CS50 ni
kung saan anumang oras siya ay lumakad ang layo mula sa ang kanyang keyboard sa kanyang screen unlock,
Gusto ko magsagawa ng isang utos tulad ng this-- "kamustahin."
At ngayon anumang oras siya ay dumating bumalik sa kanyang keyboard pagkatapos kong clear ang screen
at siya ay umupo, subukan upang gumawa ng ilang trabaho,
ilista ang mga nilalaman ng kanyang directory--
>> [Audio pag-playback]
>> -Hello.
Hello.
>> Tagapagsalita 1: Kaya, sa pagkamakatarungan, ay hindi ito talaga "kumusta."
Ito ay karaniwang isang bagay higit pa Akın sa that--
[Audio pag-playback]
-Beep.
Tagapagsalita 1: --that would-- ko kaya ang kanyang computer na gagawin
Sumusumpa sa kanya anumang oras niya talaga nakaupo pababa sa kanyang keyboard.
At nang masyadong mabilis niya naisip out hindi mag-iwan unlock ang kanyang screen.
Ngunit ito ay nagmumungkahi ng pag-uuri ng hangal masaya na sa iyo
ay maaaring magkaroon ng may isang bagay tulad Bash.
Ngunit ito ay isang kaunti pa malubha, upang matiyak, kaysa iyon.
At sa katunayan, ito ay isa sa mga karamihan sa mga mapanganib at pang-pangmatagalang mga bug
na talagang pindutin ang mundo sa buong mundo.
Bug na ito ay hindi sa paligid para sa ilang mga 20 taon,
at makikita mo na struck sa loob lamang ng sandali sa pamamagitan ng kamag-anak pagiging simple nito.
>> Kaya ito ay isang kinatawan Command na kung iyong
pagmamay-ari ng Mac, literal ngayon kapag mayroon kang nakabukas ang iyong takip,
maaari mong subukan ang pag-type sa na programa na tinatawag na Terminal.
Terminal sa ilalim ng Mga Application Utilities--
para sa isang beses, mga gumagamit ng Windows Hindi mo na kailangang mag-alala tungkol sa partikular na threat--
ngunit ang mga mo sa mga Mac ay maaaring i-type na ito sa isang window tulad ng makikita kong gawin dito,
at kung ako nagta-type ka na sa program na ito
na tinatawag na Terminal, tulad ng makikita kong gawin ngayon, kung nakita mo ang salitang "mahina,"
ang iyong computer ay mahina laban sa pagsasamantala.
>> Ngayon kung ano ang aktwal na ibig sabihin?
At ito ay admittedly ang ilang mga kaakit-akit na nakatutuwang syntax,
ngunit hindi bababa sa gumuhit out ipaalam ang ilan sa mga kawili-wiling aspeto.
Kaya mayroong ilang mga syntax na mukhang medyo pamilyar, hindi bababa sa mula sa C
at ang mga programa sa mas pangkalahatang paraan.
Nakakakita ako ng ilang mga panaklong, semicolons, kulot braces, at tulad,
ngunit ito ay lumiliko out na ito hangal bagay dito sa kulay dilaw
ay mahalagang isang function na gumagana wala.
Ang colon paraan gawin wala, at ang Nangangahulugan semicolon ihinto sa wala kang ginagawa.
Kaya sa loob ng mga kulot braces, ang katotohanan
na mayroon akong isang katumbas mag-sign sa kaliwa, ito
ay mahalagang paglikha isang command, o isang variable,
na tinatawag na x, at nagtatalaga ito na dilaw bit ng code doon.
Na maaaring maging isang bagay tulad ng "echo kumusta "o" sabihin beep "o isang bagay
Akın upang iyon.
Ngunit mapansin kung ang iyong mga mata maglibot sa karagdagang sa kanan,
mayroon pa sa linyang ito kaysa sa lamang sa dulo ng na semicolon.
"Echo mahina," at pagkatapos ay lampas na mayroong kahit na higit pa.
Ang isa pang semicolon, Bash -c :.
>> Kaya mahaba kuwento maikli, ito linya ng code ay
sapat na para sa nakapanghihimok isang computer na
mahina laban sa paggawa ng isang bagay na nais mo itong gawin,
dahil mayroong isang bug sa Bash kung saan kahit Bash ay dapat itigil
pagbasa ng mga linya ng command na karapatan Mayroon bang matapos ang dilaw na teksto,
para sa isang 20-plus na taong gulang bug, Bash ay talagang inalisan ng pagbabasa
lampas na semicolon at kaakit-akit magkano ang ginagawa kung ano ito ay sinabi.
>> Kaya kung ano ang mga implikasyon ng na ganap?
Lamang ko sinabi "echo kumusta" o "echo mahina,"
ngunit kung ano kung ginawa mo ang isang bagay talaga nakahahamak na, tulad ng Rm -rf *,
kung saan hindi mo maaari nag-type na dati,
at tapat marahil dapat hindi masyadong lalong madaling panahon,
dahil maaari mong gawin ang isang maraming pinsala sa mga ito.
Bakit?
Rm ginagawa kung ano ang, siyempre?
Tinatanggal.
* Ang ibig sabihin kung ano?
Lahat.
Kaya ito ay isang tinatawag na ligaw card, sa gayon ang ibig sabihin nito
tanggalin ang lahat ng bagay sa ang kasalukuyang direktoryo.
-r ang mangyayari sa ibig sabihin ng recursive, na nangangahulugan kung ano nagtatanggal ka
ay isang direktoryo, at sa loob ng doon ay iba pang mga file at iba pang mga direktoryo,
recursively sumisid sa doon at tanggalin ang lahat ng iyon.
At -f ay ang pinakamasama sa mga ito ang lahat.
Sinuman alam ano ang ibig sabihin -f dito?
Force.
Kaya pilitin paraan, kahit na kung ito ay isang hindi magandang ideya,
gawin ito nang walang pagdikta sa akin para sa karagdagang confirmation.
Kaya, alam mo na, tumawa kami sa ito, ngunit tapat, ako marahil
i-type ito nang maraming beses sa isang araw, dahil ang katotohanan
ay ito ay ang pinakamabilis na paraan upang tanggalin ang maramihang mga bagay-bagay.
Ngunit kahit na nagawa ko na ang ilang mga pinsala.
>> Ngunit kung ikaw ay upang linlangin ang isang computer sa pagtukoy ng ilang mga variable hangal
o function na tinatawag na x, ngunit pagkatapos ay tricking ang computer sa e-execute
lagpas sa mga hangganan ng na function, lampas na semicolon,
maaari mong linlangin sa katunayan isang computer sa e-execute ang isang bagay tulad Rm -rf
o ang command na Email o ang Kopyahin command.
Anumang bagay Literal na maaari mong gawin sa mga computer, kung ang pagtanggal nito file,
paglikha ng mga file, nagspa-spam sa isang tao, attacking ilang mga server sa malayo,
kung maaari mo itong ipahayag may isang command, mo
Maaari linlangin ang isang computer sa paggawa na.
>> Ngayon kung ano ang isang halimbawa ng kung paano mo maaaring gawin ito?
Well, maraming ng mga computer sa internet tumakbo Bash.
Lahat ng mga user sa amin Mac ay kasama ng mga ito.
Ang isang pulutong ng mga server ng Linux ay kabilang sa ang mga ito pati na rin, at Unix server.
Muli ay nakakakuha ng Windows medyo off ang hook
maliban kung na-install mo espesyal na software.
Ngayon ng maraming mga server, para sa Halimbawa, magpatakbo ng mga web server,
at sa katunayan Linux ay marahil ang pinaka-popular na operating system
upang tumakbo sa mga computer sa internet na paghahatid up sa mga web page.
Ngayon dahil kakailanganin namin makita sa ibang pagkakataon sa semestre, kapag
magpadala sa iyo ng isang kahilingan mula sa ang iyong browser-- Chrome,
Internet Explorer, whatever-- sa isang remote server,
ito ay lumiliko out na kahit na nai-type mo pa lang www.example.com,
ay magpadala ng mensahe sa iyong browser na mas arcane ng kaunti, tulad nito.
>> Ngunit mapansin ang isang maliit na isang bagay na kakaiba.
Ang unang dalawang linya Hindi ko nakita bago,
ngunit hindi sila tumingin lalo na pagbabanta.
Ngunit mapansin kung ano ang ninakaw ko para sa ikatlong linya dito.
Kung ang isang masamang tao ay magpadala ng mensahe tulad nito mula sa kanyang computer na
sa isang mahina Mac o isang mahina laban sa Linux server,
ang nakakatawang bagay ay na Bash, na simpleng maliit na command prompt,
ay omnipresent at madalas na gamit na sa mahalagang maisagawa
ang mga nilalaman ng mensahe na natatanggap nito.
At sa pamamagitan ng na logic, maaari mong linlangin isang web server, samakatuwid,
sa pamamagitan ng pagpapadala ng isang bagay tulad ng User-Agent, na karaniwang
ay dapat na sabihin ang pangalanan ng iyong browser.
User-Agent Chrome, User-Agent Internet Explorer, User-Agent Firefox, ito
ay ang iyong browser lamang ni paraan ng tinutukoy ang sarili nito.
Ngunit kung ang isang masamang tao napaka cleverly sabi, mm-mm, ako
hindi pagpunta sa sabihin sa iyo kung ano ang aking browser ay,
Sa halip Pupunta ako sa magpadala sa iyo na ito cryptic-naghahanap ng bagay na may Rm -rf
* Sa loob nito, maaari mong literal na linlangin ang isang mahina web server sa internet
sa e-execute nang eksakto na sa doon para sa pagtatanggal ng lahat ng mga file.
At tapat, na hindi kahit na ang pinakamasama ng ito.
Maaari kang gumawa ng kahit ano.
Maaari kang magsimula ng isang ipinamamahagi pagtanggi ng pag-atake ng serbisyo
kung nagpadala sa iyo ng mensahe na ito buong bunches ng mga web server
at pagkatapos ay nagkaroon ng mga ito ang lahat ng bumaba, para sa Halimbawa, sa Harvard.edu mga server,
at maaari mong uri-uriin ng putok ang heck out sa mga ito
sa pamamagitan ng isang network ng trapiko na noon ay kung hindi man ay nag-trigger sa pamamagitan ng ito masamang tao.
>> Kaya, mahaba kuwento maikli, halos lahat ng tao sa kuwartong ito na nagmamay-ari ng Mac
ay mahina laban sa ito.
Ang pilak lining ay na maliban kung ikaw ay pagpapatakbo ng isang web server sa iyong laptop,
at maliban kung aktwal mong na-configure ito upang payagan ang isang bagay tulad ng SSH sa ito,
ikaw ay talagang safe.
Ito ay mahina, ngunit walang isa sinusubukan upang makapunta sa iyong laptop,
upang maaari mong uri ng mag-aalala dahil.
Gayunpaman, Apple ay sa lalong madaling panahon maging sa pag-update ng isang remedyo para sa na ito.
Ang mundo ng Linux ay inilabas ng isang bilang ng mga pag-aayos para sa Fedora at Ubuntu
at iba pang mga bersyon ng Linux, at sa katunayan kung nagpapatakbo ka ng update 50 sa appliance,
kahit na masyadong magiging update at naitama.
Ngunit na masyadong ay hindi talaga naging mahina,
dahil maliban kung hindi mo tinkered sa appliance
at ginawa sa publiko ang iyong laptop naa-access sa internet, na kung saan ay hindi
sa pamamagitan ng default, hindi ka talaga naging fine dahil
ng firewalling at iba pang mga diskarte.
>> Ngunit ito ay isang matinding halimbawa ng isang bug na tumira kami para sa para sa literal 20
taon, at kung sino ang nakakaalam kung may isang taong lahat ng oras na ito ay kilala tungkol dito?
At sa katunayan, ito ay isa sa sa pangunahing mga hamon
na ipapakita namin makita sa ibang pagkakataon sa semestre tungkol sa seguridad,
ay na tulad lamang ng sa totoong mundo, ang mabuting guys ay nasa dehado.
Upang panatilihing ang masamang guys out, mayroon kaming upang tiyakin na ang bawat pinto ay naka-lock,
na ang bawat window ay ligtas, na bawat punto ng pagpasok sa isang bahay
ay ligtas upang panatilihin ang mga masamang guys out.
Ngunit ano ang ginagawa ng masamang tao mayroon sa gawin upang aktwal na ikompromiso ang iyong home
at magnakaw mula sa iyo?
Siya lamang ay may upang makahanap ng isang naka-unlock pinto, isa sirang window, o isang bagay na
kasama ang mga linya, at ito ay ang parehong bagay sa seguridad computer.
Maaari naming magsulat ng milyun-milyong mga linya ng programming code
at paggastos daan-daan o libu-libong ng mga oras na sinusubukan mong makakuha ng mga ito tama,
ngunit kung gumawa ka ng isa lang pagkakamali sa kawastuhan,
maaari mong ilagay ang buong system at sa katunayan sa kasong ito, ang buong internet
at mundo sa panganib.
>> Kaya kung nais mong matuto nang higit pa tungkol ito, pumunta sa URL na ito dito.
Hindi na kailangan para sa pagkilos ngayong gabi maliban kung ikaw ay
kasama ng mga higit pang mga kumportableng na tumatakbo ang iyong sariling web
server, kung saan dapat mong, sa katunayan, i-update ang iyong software.
>> At ito masyadong ay ang pamagat ng isang salita, at ngayon ng isang papel,
na na-link namin sa website kurso para sa araw na ito.
Ito ay sa pamamagitan ng isang kapwa na may pangalang Ken Thompson, na
ay tumatanggap ng isang napaka sikat award sa computer science,
at ibinigay niya ito speech ilang taon nakaraan, mahalagang sa parehong paksa.
Na humihiling sa mga tao ang pinag-uusapan, dapat mo ba talagang
tiwala, sa huli, ang software na iyong binigyan?
Halimbawa, mayroon kaming lahat nagsusulat programa,
at kami ay kino-compile ang mga ito gamit Clang.
At sa iyong kaalaman, mayroon kang nakasulat na anumang mga programa para sa CS50 kung saan mayroong
ng back pinto ng uri, mayroong isang paraan na isang masamang tao, kung tumatakbo ang iyong programa,
Maaaring magtagal sa paglipas ng iyong computer?
Marahil hindi, i-right?
Mario, at sakim, at ng Credit.
Ito ang lahat medyo maliit na mga programa.
Gusto mo kailangang maging maganda masamang kung ikaw talaga
ginawa madaling maapektuhan ang iyong buong computer na pagkatapos ng pagsusulat ng 10 o 20 mga linya ng code,
o hindi bababa sa walang kamalayan sa ilang ng mga implikasyon sa seguridad.
Ngayon sabihin ko na facetiously, ngunit kami ay pagpunta upang makita ngayon
at sa linggong ito ito ay talagang talaga ito, talagang madali
upang maging masama at gumawa ng kahit na maikling mga programa mahina.
>> Ngunit sa ngayon, hindi bababa sa, mapagtanto na ang tanong na hinihingan dito
ay tungkol Clang sa isang Compiler.
Bakit na-kami nagtitiwala Clang para sa nakaraang dalawa o tatlong linggo?
Sino ang upang sabihin na sinuman ay nagsulat Clang ay hindi magkaroon ng isang "kung" kalagayan doon
na lubos na injected ilang mga zero at mga bago sa bawat programa ito compiles
na ipaalam sa kanya ng access kapag ikaw ay natutulog sa iyong computer
at ang iyong laptop panakip bukas at ang iyong computer ay tumatakbo?
Mag-right?
Mayroon kaming ang ganitong uri ng sistema ng karangalan karapatan ngayon kung saan kami pinagkakatiwalaan na Clang ay legit.
Pinagkakatiwalaan mo na ang appliance ay legit.
Pinagkakatiwalaan mo na literal bawat programa sa iyong Mac o PC ay mapagkakatiwalaan.
At bilang na ito simpleng bug nagmumungkahi, kahit na ito ay hindi nakahahamak na,
na talagang hindi malamang na ang kaso.
>> Kaya dapat kang maging natakot bilang impiyerno.
Tapat, walang simple solusyon sa iba pang mga
kaysa sa isang uri ng kamalayan societal ng pagtaas ng pagiging kumplikado
na aming pagbuo sa tuktok ng aming mga computer system,
at kung paano lalong madaling maaaring napaka na rin kami.
>> Ngayon na may sinabi na iyon, Breakout.
Kaya itakda Breakout ay tatlong problema, at Breakout ay isang laro mula sa yesteryear
na maaari mong isipin ang, ngunit para sa atin sa problema magtakda ng tatlo,
ay nagbibigay-daan ito sa amin upang magsagawa ng mga bagay-back up ng isang bingaw
upang kapag kami ay sumusulat programa, kahit na sa isang Terminal window na tulad nito,
maaari naming aktwal na patakbuhin, sa huli, graphical na mga programa hindi
hindi tulad ng mga namin ay may pag-access sa sa simula.
Kaya ito ay ang mga tauhan pagpapatupad ng Breakout,
na lamang ito brick-breaking laro, na ilipat mo ang iyong mga sagwan pabalik
at pabalik, at pindutin mo ang bola laban sa mga may-kulay na brick up tuktok.
Kaya ito ay nagdadala sa amin uri ng mga pabalik sa kung saan
nagawa naming maging masyadong mabilis sa simula, at ngayon may C,
pagpapatupad ng ating sariling graphical interface ng gumagamit.
>> Ngunit higit sa na, ito set problema ay kumakatawan sa unang
na kung saan kami ay nagbibigay sa sa iyo ng isang bungkos ng code.
At sa katunayan, dalhin ako tahasang pansin sa mga ito, dahil lalo na
para sa mga mas kumportable, ito itakda ang problema, hindi bababa sa unang tingin,
ay pagpunta sa pakiramdam tulad ng nagsagawa kami ng mga ito up ng isang bingaw.
Dahil binigyan ka namin, para sa ilan sa paghahanap
at pagbubukod-bukod ng mga problema sa pset, isang bungkos ng code na aming sinulat ni,
at isang pares ng mga komento na nagsasabing "gawin,"
kung saan mayroon kang upang punan ang mga blangko.
Kaya hindi masyadong nakakatakot, ngunit ito ang unang pagkakataon
kami ay handing mo code na kailangan mong basahin muna, nauunawaan, at pagkatapos ay idagdag sa
at kumpletuhin ito.
>> At pagkatapos ay may Breakout, kami ay pagpunta sa gawin ang parehong,
na nagbibigay sa iyo ng ilang dosenang higit pang mga linya ng code na iyon, tapat, nagbibigay sa iyo
ng maraming mga framework para sa ang laro ngunit ihinto ang maikling
ng pagpapatupad ng mga brick at ang bola at ang sagwan,
ngunit ginagawa namin ipatupad ang ilang iba pang mga tampok.
At kahit na sa unang tingin, muli, lalo na kung mas kumportable,
maaaring tila lalo na daunting at sa tingin mo ay may napakaraming mga bagong pag-andar
kailangan mong i-wrap ang iyong isip sa paligid, at iyon ang totoo.
Ngunit tandaan, ito ay medyo tulad ng simula.
Logro ay hindi mo gamitin ang lahat ng ang puzzle piraso sa scratch.
Logro ay hindi mo na mahalaga sa wrap ang iyong isip sa paligid ng lahat ng mga ito
dahil ang lahat kinuha ito ay isang mabilis na pagsulyap upang maunawaan, oh,
na kung ano ang maaari kong gawin may na piraso puzzle.
At sa katunayan, sa problema nakatakda 3 spec, ipapakita namin ituro sa iyo
sa dokumentasyon na gagawin kitang ipakilala sa ilang mga bagong pag-andar,
at sa huli ang programming constructs mong gamitin.
Kundisyon, loop, variable, at mga function
ay magiging magkapareho sa kung ano ang nasaksihan namin sa gayon ay malayo.
>> Kaya sa katunayan, kung ano ang ibibigay namin ikaw ay ilang sample code na
hinahayaan kang lumikha ng isang window na mukhang hindi hindi tulad ng ito,
at sa huli i-on ito sa isang bagay na lubos na tulad nito.
Kaya samantalahin CS50, talakayin oras ng opisina at higit pa,
at kumuha ng ginhawa sa ang katunayan na ang ang halaga ng code na mayroon ka na magsulat
ay talagang hindi lahat na magkano.
Ang unang hamon ay upang acclimate lamang ang iyong sarili sa ilang mga code na namin ang nakasulat.
>> Ang anumang mga katanungan sa pset3, Shellshock, o kung hindi man?
>> Madla: Ito ay tila tulad ng pagdaan sa Breakout
na ang code ay halos isang object-oriented estilo,
ngunit naisip ko C ay isang object-oriented program.
Tagapagsalita 1: Isang mahusay na pinag-uusapan.
Kaya sa naghahanap sa pamamagitan ng code ng pamamahagi, ang code
kami ay sumulat para sa pset3, para sa mga pamilyar, ito
Mukhang ito ay isang maliit na object-oriented.
Maikling sagot ay, ito ay.
Ito ay isang pagtatantya ng kung paano mo maaaring gawin object-oriented code gamit
isang wika tulad ng C, ngunit ito ay pa rin sa huli pamamaraan.
Walang mga pamamaraan sa loob ng ang mga variable, tulad ng makikita mo.
Ngunit ito ay reminiscent ng iyon.
At kami makita muli ang tampok na iyon kapag makuha namin sa PHP at JavaScript
patungo sa katapusan ng semestre.
Ngunit sa ngayon, sa tingin ng ito bilang isang pahiwatig ng kung ano ang darating.
Magandang katanungan.
Lahat ng karapatan.
Kaya magsamang bumaybay-uri-uriin ay kung paano namin kaliwang bagay na huling beses.
At sumanib-uri-uriin ay cool na sa pakiramdam na ito ay kaya magkano ang mas mabilis,
hindi bababa sa batay sa cursory pagsubok Ginawa namin noong nakaraang linggo, kaysa sa, sabihin nating, bubble
-uri-uriin, uri pagpipilian, ang uri pagpapasok.
At kung ano ang kapong baka masyadong lamang paano succinctly at cleanly
maaari mong ipahayag ito.
At kung ano ang sinabi namin na ito ay isang pang-itaas mapasailalim sa oras ng paggana ng pagsanib
pagbukud-bukurin?
Oo?
>> Madla: n log n?
>> Tagapagsalita 1: n log n, i-right. n log n.
At kami ay bumalik sa kung ano na talaga ay nangangahulugan o kung saan na nagmumula sa,
ngunit ito ay mas mahusay kaysa sa kung ano ng panahon
Nakita na namin para sa bubble pagpili at pag-uuri pagpapasok?
Kaya n nakalapat. n nakalapat ay mas malaki kaysa ito,
at kahit na ito ay hindi masyadong halata, malaman na ang pag-log n ay mas maliit kaysa n,
kaya kung gagawin mo n beses isang bagay na mas maliit sa n,
ito ay magiging mas mababa kaysa sa n nakalapat.
Ito ay isang bit ng Swersey doon.
Ngunit may bayad kami ng isang presyo para sa mga ito.
Ito ay mas mabilis, ngunit isang tema na sinimulan na lumabas noong nakaraang linggo ay ito tradeoff.
Mayroon akong mas mahusay na pagganap oras matalino, ngunit kung ano ang
kinailangang kong gastusin sa kabilang kamay, upang makamit iyon?
>> Madla: Memory.
Tagapagsalita 1: Sabihin nating muli?
Madla: Memory.
Tagapagsalita 1: Memory, o espasyo sa mas pangkalahatang paraan.
At ito ay isang hindi super halata sa aming mga kawani na tao,
ngunit isipin na ang aming mga boluntaryo ay stepping pasulong at stepping
pabalik na waring mayroong isang array dito, at waring mayroong
isang pangalawang array dito na maaari nilang gamitin, dahil kami
Kailangan ng isang lugar na naa upang pagsamahin ang mga tao.
Hindi namin mai-lamang magpalit ang mga ito sa lugar.
Kaya sumanib-uri na magagamit ang ay mas maraming espasyo, na
hindi namin ginawa kailangan sa ang iba pang mga algorithm,
ngunit ang bentahe ay na ito ay mas mabilis.
At tapat, sa tunay na mundo espasyo mga days-- RAM, hard disk space--
ay relatibong murang, at sa gayon ay ang hindi palaging isang masamang bagay.
>> Kaya ipaalam sa tumagal ng isang mabilis na pagtingin, may kaunting panahon higit pa methodically, sa kung ano ang ginawa namin
at bakit namin sinabi ito ay mag-log n n.
Kaya narito ang ilan sa walong mga numero at mga walong boluntaryo namin ay may mga huling oras.
At ang unang bagay na Sumanib Pagbukud-bukurin sinabi sa amin upang gawin ay kung ano?
Madla: Divide sa dalawang.
Tagapagsalita 1: Sabihin nating muli?
Madla: Divide sa dalawang.
Tagapagsalita 1: Divide sa dalawang, i-right.
Ito ay napaka-reminiscent ng sa aklat ng telepono, ng hatiin
at talunin sa mas pangkalahatang paraan.
Kaya itinuturing namin ang kaliwang kalahati.
At pagkatapos ay sa sandaling sinabi namin, uri kaliwang kalahati ng mga elemento,
kung ano ang susunod na namin sasabihin?
-Uri-uriin ang kaliwang kalahati ng kaliwang kalahati, na nagpahintulot sa amin upang,
pagkatapos ng paghahati sa dalawang, tumuon sa apat at dalawang.
>> Paano ka-uri-uriin ang listahan ngayon, sa dilaw, laki ng dalawang, gamit Pagsamahin ang uri-uriin?
Well hatiin ito sa kalahati, at ayusin ang kaliwang kalahati.
At ito ay kung saan bagay Nakakuha ng kaunti hangal panandalian.
Paano ka-uri-uriin ang listahan na ng laki ng isa, tulad ng ito bilang apat dito?
Ito ay pinagsunod-sunod.
Tapos ka na.
>> Ngunit pagkatapos ay paano mo uri-uriin ang isang listahan ng mga laki ng isa kapag ito ay ang bilang dalawang?
Well, parehong bagay, ngunit ngayon kung ano ang ikatlong at ang mga key na hakbang sa magsamang bumaybay-uri-uriin?
Ay nagkaroon ka ng upang sumanib sa kaliwa kalahati at ang kanang kalahati.
At sa sandaling ginawa namin na, itinuturing namin sa apat, itinuturing namin ang dalawa.
Nagpasya kaming lahat ng karapatan, Malinaw na dalawang ang mauna,
kaya inilalagay namin ang dalawang sa sarili lugar, na sinusundan ng apat.
At mayroon ka na ngayong upang uri ng rewind, at ito ay isang uri ng katangian
ng isang algorithm tulad ng Pagsamahin Pagsunud-sunurin, rewind sa memorya.
Ano ang susunod na linya ng kuwento?
Ano ang dapat kong tumututok sa susunod?
Ang karapatan sa kalahati ng kaliwang kalahati, Alin ang anim at walong.
>> Kaya ipaalam sa basa-lamang sa akin sa pamamagitan na ito walang belaboring sa punto ng labis.
Anim at walong, pagkatapos ay anim na pinagsunod-sunod, walong ay pinagsunod-sunod.
Pagsamahin ang mga iyon nang magkakasama tulad ng iyon, at ngayon ang susunod na malaking hakbang
ay, siyempre, uri-uriin ang karapatan kalahati mula sa pinakadulo unang hakbang ng algorithm na ito.
Kaya tumuon kami sa isa, tatlo, pitong, limang.
Pagkatapos ay Nakatuon kami sa kaliwang kalahati.
Ang kaliwang kalahati ng na, ang karapatan sa kalahati ng na iyon, at pagkatapos ay pagsamahin sa isa at tatlong.
Pagkatapos ang karapatan kalahati, pagkatapos ay iniwan ang kalahati ng ito, pagkatapos ay ang karapatan kalahati nito.
Pagsamahin ang mga ito sa, at ngayon kung ano ay nananatiling na hakbang?
Pagsamahin ang malaking kaliwang kalahati at ang malaki kanang kalahati, kaya isa napupunta down na doon,
pagkatapos ng dalawang, pagkatapos tatlong, pagkatapos ng apat na, pagkatapos ay limang, pagkatapos ng anim na, pagkatapos ng pitong, pagkatapos ay walong.
>> Kaya ngayon kung bakit ito sa huli ay ibinubunyag, lalo na kung n at logarithms higit pa
Sa pangkalahatan sa halip makatakas sa iyo, hindi bababa sa kamakailang memory?
Well, mapansin ang taas ng bagay na ito.
Nagkaroon kami ng walong mga elemento, at kami hinati ito sa pamamagitan ng dalawang, sa pamamagitan ng dalawang, sa pamamagitan ng dalawang.
Kaya base log dalawa sa walong nagbibigay sa amin ng tatlo.
At pinagkakatiwalaan sa akin sa na kung medyo hazy sa iyon.
Ngunit base log dalawa sa walong ay tatlong, kaya ginawa namin ang tatlong mga layer ng pagsasama.
At kung kailan namin Pinagsama mga elemento, kung gaano karaming mga elemento
ay tinitingnan namin ang sa bawat isa sa mga hilera?
Isang kabuuan ng n, tama?
Dahil upang sumanib hilera sa itaas, kahit na ginawa namin ito piecemeal,
sa huli naming hinawakan ang bawat numero sa sandaling.
At sa pangalawang hilera, i- pagsamahin ang mga listahan ng mga laki ng dalawang,
namin ay may upang pindutin ang bawat elemento nang isang beses.
At pagkatapos dito talaga malinaw sa huling hilera,
namin ay may upang pindutin ang bawat isa sa mga mga elemento ng isang beses, ngunit nang isang beses lamang,
kaya dito ay namamalagi, pagkatapos, ang aming n log n.
>> At ngayon lamang upang makagawa ng isang maliit na bagay higit pa pormal para sa isang sandali lamang, kung ikaw
ay sa ngayon pag-aralan ito sa isang uri ng mas mataas na antas
at subukan upang magpasya, na rin kung paano maaari kang pumunta tungkol sa pagpapahayag ng
ang oras ng paggana ng algorithm na ito sa pamamagitan lamang ng pagtingin sa ito at hindi
sa pamamagitan ng paggamit ng isang contrived halimbawa?
Well, kung magkano ang oras na sasabihin sa iyo ng isang hakbang na tulad nito sa dilaw na nais kumuha,
kung n <2 return?
Iyon ay isang malaking O ng kung ano?
Kaya ako nakakakita ng isa, kaya isang hakbang, siguro dalawang hakbang dahil ito ay kung
at pagkatapos ay bumalik, subalit ito ay pare-pareho ang oras, tama?
Kaya't sinabi namin O (1), at iyon ang paano ko ipahayag ito.
T, tumatakbo ang oras lamang.
n ay ang laki ng input, kaya T (n), isang magarbong paraan
sinasabi ng mga running oras ibinigay na input ng laki n
ay magiging sa pagkakasunud-sunod pare-pareho ng oras, sa mga O (1).
>> Ngunit kung hindi man, kung ano ang tungkol dito?
Paano mo ipahayag ang oras ng paggana ng ito dilaw na linya?
T ng kung ano?
Maaari mong uri ng cheat dito at sagutin ang aking tanong cyclically.
Kaya kung ang oras sa pangkalahatang sabihin namin lamang ay T (n).
At ngayon ka uri ng punting dito at sinasabi, mahusay, uri-uriin lamang ang kaliwang kalahati,
at pagkatapos ay i-uri-uriin ang karapatan kalahati.
Paano maaaring symbolically namin kumatawan ang oras ng paggana ito dilaw na linya?
T ng kung ano?
Ano ang laki ng input?
n higit sa dalawang.
Bakit hindi ko pa lang sabihin na?
At pagkatapos na ito ay isa pang T (n / 2) at pagkatapos ay muli, kung pagsamahin ko ng dalawang Pinagbukud-bukod halves,
kung gaano karaming mga elemento ako ng pagpunta magkaroon upang pindutin ang kabuuang?
n.
Kaya ang maaari kong ipahayag na ito, upang maging uri ng magarbong lamang,
bilang ang oras sa pangkalahatan.
T (n) ay isa lamang ang oras ng paggana ng T (n / 2), plus T (n / 2), pakaliwa kalahati at kanang kalahati,
plus O (n), na kung saan ay marahil n hakbang na ito, ngunit marahil, kung gumagamit ako ng dalawang daliri,
ito ay dalawang beses nang mas maraming hakbang na ito, subalit ito ay linear.
Ito ay ilang bilang ng mga hakbang na isang factor ng n,
kaya maaaring ipahayag namin ito bilang ito.
At ito ay kung saan ngayon ipapakita namin punt sa pabalik sa aming mga aklat-aralin matematika ng mataas na paaralan
Ikinalulungkot namin na ang pag-ulit sa huli Nagtatapos up na katumbas na ito, n beses log n,
kung aktwal mong gawin out ang matematika sa higit pang pormal.
>> Kaya na pananaw ng dalawang lamang.
Isa numerically na may hard-code na kinatawan halimbawa
gamit ang walong numero, at isang mas pangkalahatang pagtingin sa kung paano namin nakuha doon.
Ngunit kung ano ang talagang kawili-wiling dito ay muli,, ang paniwala ng cycling.
Hindi ko ginagamit para sa mga loop.
Uri ng ako ng pagtukoy sa isang bagay sa mga tuntunin ng sarili nito,
hindi lamang na may ito mathematical function,
ngunit din sa mga tuntunin ng ito pseudo code.
Ito pseudo code ay recursive sa na dalawa sa mga linya nito
ay tunay na nagsasabi ito upang pumunta gamitin ang sarili nito upang malutas ang isang mas maliit na
problema ng mas maliit na sukat, at muli at muli
at muli hanggang sa whittle ito namin pababa sa ito nang sa gayon tinatawag na base kaso.
>> Kaya ipaalam sa aktwal na gumuhit ng isang mas nakakahimok tumagal-layo mula ito tulad ng sumusunod.
Hayaan akong pumunta sa gedit at kumuha ng isang tingnan ang ilan sa source code ngayong araw,
sa partikular na halimbawang ito dito.
Sigma 0, na tila nagdadagdag ang mga numero ng isa sa pamamagitan ng n.
Kaya sabihin makita kung ano ang pamilyar at hindi pamilyar dito.
Una mayroon kami ng ilang mga Kabilang, kaya walang bagong doon.
Prototype.
Ako ay medyo hazy sa ito pagkatapos ng ilang araw,
ngunit kung ano ang sinabi namin ang isang prototype ng isang function ay?
Madla: [INAUDIBLE].
Tagapagsalita 1: Ano iyon?
Madla: ipahayag namin ito.
Tagapagsalita 1: ipahayag namin ito.
Kaya ikaw ay nagtuturo Clang, hey, Hindi pa talaga ang pagpapatupad na ito,
ngunit sa isang lugar sa ang file na ito, baka, Pupunta na isang function na tinatawag na kung ano?
Sigma.
At ito ay isang pangako lamang na ito ay pagpunta sa ganito ang hitsura.
Ito ay pagpunta sa tumagal ng isang integer bilang input-- at maaari ba akong maging mas tahasang
at sabihin int n --and ito pagpunta upang bumalik sa isang int,
ngunit semicolon paraan, mm, makikita ko makuha sa paligid sa pagpapatupad na ito ng kaunti sa ibang pagkakataon.
Muli, Clang ay pipi.
Ito ay pagpunta lamang na malaman kung ano sabihin mo ito sa itaas hanggang sa ibaba,
kaya kailangan naming hindi bababa sa bigyan ito isang pahiwatig ng kung ano ang darating.
>> Ngayon tingnan natin ang pangunahing dito ipaalam.
Ng mag-scroll pababa dito Hayaan at tingnan kung ano ang pangunahing ginagawa.
Ito ay hindi na mahaba ng isang function, at sa katunayan ay bumuo dito ay pamilyar.
Ipinahahayag ko n isang variable, at pagkatapos ay Pester ko muli at muli ang user
para sa isang positibong integer gamit getInt, at lamang na exit out ng loop
sa sandaling ang gumagamit ay nakasunod.
Gawin Habang, na ginamit namin upang pester ng user sa paraang iyon.
Ngayon ito ay kawili-wili.
Ipinahahayag ko sa isang int tinatawag na "sagot."
Magtalaga ko ito ang halaga return ng isang function na tinatawag na "palatandaan."
Hindi ko alam kung ano pa na ginagawa, ngunit Natatandaan ko pagdeklara ito ng ilang sandali ang nakalipas.
At pagkatapos ay ako pagpasa sa halaga na ang gumagamit ay nai-type sa, n,
at pagkatapos ay mag-uulat ang sagot.
Ng mag-scroll pabalik na rin ipaalam para sa isang sandali lamang.
Sabihin sige sa direktoryong ito, gumawa palatandaan 0, at aktwal na patakbuhin ang program na ito
at tingnan kung ano ang mangyayari.
Kaya kung pumunta ako magpatuloy at run ang program na ito, ./sigma-0,
at nagta-type ako sa positibong integer tulad ng dalawa, Sigma,
bilang nagpapahiwatig ng simbolo ng Griyego, ay lamang pagpunta sa magdagdag ng hanggang ang lahat ng mga numero mula sa
ZERO sa hanggang sa dalawang.
Kaya 0 plus 1 plus 2.
Kaya ito ay dapat sana ay bigyan mo ako 3.
Iyon lang nito ang ginagawa.
At katulad, kung nagpatakbo ako ng ito muli at bibigyan ko ito ang bilang tatlong,
na 3 plus 2, kaya na 5, plus 1 ay dapat magbigay sa akin 6.
At pagkatapos ay kung makakuha ako talagang baliw at magsimulang mag-type sa mas malaking mga numero,
dapat itong magbigay sa akin Mas malaki at mas malalaking sums.
Kaya na ang lahat.
>> Kaya kung ano ang hitsura ng palatandaan katulad?
Well, ito ay medyo prangka.
Ito ay kung paano maaari naming nagpatupad ito para sa nakalipas na dalawang linggo.
"Int" ay magiging ang uri ng return.
Sigma ay ang pangalan, at ito ay tumatagal ng isang variable m sa halip ng n.
Makikita ko babaguhin na hanggang tuktok.
Pagkatapos ito ay lamang ng isang tseke katinuan.
Susubukan naming makita kung bakit ang ilang mga sandali.
Ngayon Dinedeklara ko ng isa pang variable, suma, initialize ito sa zero.
Pagkatapos Mayroon akong na ito Para sa loop iterating, tila para sa kaliwanagan,
mula sa i = 1 sa hanggang sa isang = m, na kung saan ay kahit anong user na nai-type sa, at pagkatapos ay ako
dagdagan ang halagang tulad nito.
At pagkatapos ay bumalik ang kabuuan.
>> Kaya ng ilang mga katanungan.
Ang isa, inaangkin ko sa aking mga komento na ito avoids panganib ng isang walang-katapusang loop.
Bakit ang pagpasa sa isang negatibong numero humimok, potensyal, isang walang-katapusang loop?
>> Madla: Hindi ka maabot m.
>> Tagapagsalita 1: Huwag kailanman maabot m.
Ngunit m ay ipinasa sa, kaya sabihin isaalang-alang ang isang simpleng halimbawa.
Kung m ay ipinasa sa pamamagitan ng user bilang mga negatibong isa.
Kanikanilang mga pangunahing.
Pangunahing pinoprotektahan sa amin mula sa ito, kaya lamang ako
pagiging talagang anal sa palatandaan upang matiyak na rin
na input ay hindi maaaring maging negatibo.
Kaya kung m ay negatibo, isang bagay tulad ng mga negatibong isa.
Ano ang nangyayari sa mangyayari?
Well, i ay pagpunta sa makakuha ng mga nasimulan sa isa,
at pagkatapos ay i ay magiging mas mababa sa o katumbas ng m?
>> Stand sa pamamagitan ng.
Iyon was-- sabihin hindi, nix ng kuwentong ito ipaalam.
Hindi ko hinihiling na pinag-uusapan, dahil ang panganib na ako ay alluding sa
Hindi pupunta mangyari dahil i ay palaging pagpunta na mas malaki than-- OK,
Bawiin ko na pinag-uusapan.
OK.
Ni tumuon lamang sa bahaging ito dito Hayaang.
Bakit Ipinahahayag ko ang ilang mga sa labas ng loop?
Abiso sa 49 na hindi ko na linya ipinahayag i loob ng loop,
ngunit online 48 na hindi ko na ipinahayag ng ilang sa labas.
Oo.
Madla: [INAUDIBLE].
Tagapagsalita 1: Oo naman.
Kaya una at pangunahing ko ay tiyak na hindi nais na idedeklara at simulan ang halagang
sa zero sa loob ng loop sa bawat iteration,
dahil ito ay malinaw na talunin ang layunin ng summing up ng mga numero.
Gusto ko panatilihin ang pagbabago ang halaga pabalik sa zero.
At din, kung ano ang isa pang higit pa arcane dahilan para sa na parehong desisyon na disenyo?
Oo.
>> Madla: [INAUDIBLE].
Tagapagsalita 1: Mismong.
Gusto kong i-access ito sa labas ng loop masyadong sa kung anong line?
Sa 53.
At batay sa aming pamantayan mula sa loob ng ilang mga aralin na ang nakakaraan,
variable ay scoped, talaga ito, sa kulot braces na sumaklaw sa mga ito.
Kaya kung hindi ko idedeklara halagang loob sa mga panlabas na kulot braces,
Hindi ko ma-gamitin ito sa 53 linya.
Ilagay ang isa pang paraan, kung ipinahayag ko halagang in dito, o kahit na sa loob ng
Para sa loop, hindi ko ma-access ito sa 53.
Ang variable ay epektibo ay nawala.
Kaya ng ilang mga dahilan doon.
Ngunit ngayon sabihin bumalik at tingnan kung ano ang mangyayari.
Kaya palatandaan ay makakakuha ng tinatawag na.
Ito ay nagdadagdag ng hanggang 1 plus 2, o 1 plus 2 plus 3, at pagkatapos ay bumalik ang halaga,
Nag-iimbak ito sa sagot, at printf dito ang dahilan kung bakit ako nakakakita sa screen.
Kaya ito ay kung ano ang makikita namin tumawag sa isang iterative diskarte, kung saan iteration lamang
Nangangahulugan ang paggamit ng isang loop.
Isang Para sa loop, isang Habang loop, isang Do Habang loop, lamang ang paggawa ng isang bagay na muli
at muli at muli.
>> Ngunit palatandaan ay uri ng kapong baka isang function na sa na maaaring ko ito ipatupad nang iba.
Paano ang tungkol sa ito, na upang maging uri ng mga cool na lang,
ipaalam sa akin talagang mapupuksa ng maraming distraction
dahil ito function na ay talagang medyo simple.
Sabihin whittle ito pababa lamang sa kanyang apat na pangunahing mga linya
at mapupuksa ang lahat ng mga mga komento at mga kulot braces.
Ito ay uri ng isang isip-Pagbugso alternatibong pagpapatupad.
Ang lahat ng mga karapatan, siguro ay hindi bale-pamumulaklak, subalit ito ay uri ng sexier, lahat ng karapatan,
tumingin sa mga ito nang sa gayon mas succinctly.
Sa mga linya apat lamang ng mga code, Ako ay may unang katinuan check na ito.
Kung m ay mas mababa sa o katumbas ng zero, palatandaan ginagawang walang kahulugan.
Ito ay dapat lamang na nasa ito kaso para sa positibong numero,
kaya lang pupuntahan ko bumalik sa zero nagkataon
nang sa gayon ay hindi bababa sa kami ay may ilang tinatawag na base kaso.
>> Ngunit narito ang beauty.
Ang kabuuan ng ideyang ito, ang pagdaragdag ng numero mula 1 hanggang n, o m sa kasong ito,
Maaaring magawa sa pamamagitan ng uri ng pagpasa sa Buck.
Well, kung ano ay ang kabuuan ng 1 hanggang m?
Well, alam mo kung ano?
Ito ay ang parehong bilang ang kabuuan ng m plus ang kabuuan ng 1 hanggang m minus 1.
Well alam mo kung ano?
Ano ang palatandaan ng m minus 1?
Well, kung ikaw uri ng sundin ito lohikal, ito ay kapareho ng m minus 1
plus palatandaan ng m minus 2.
Kaya maaari mong uri ng just-- ito ay tulad ng, kung ikaw ay lamang
sinusubukan mong mang-inis sa isang kaibigan at tanungin sila kang tanong,
mo uri ng tumugon sa isang tanong, maaari mong uri ng panatilihin ang pagpasa sa Buck.
Ngunit kung ano ang key ay kung patuloy mong paggawa ng mas maliit at mas maliit ang tanong
at mas maliit, ikaw ay hindi humihingi kung ano ang palatandaan
ng n, kung ano ang palatandaan ng n, kung ano ang palatandaan ng n?
Ka na humihiling sa kung ano ang palatandaan ng n, kung ano ang palatandaan
ng n minus 1, ano ang palatandaan ng n minus 2?
Sa paglaon ang iyong tanong Mawawala na maging kung ano?
Ano ang palatandaan ng isa o zero, ang ilang mga napakaliit na halaga,
at sa lalong madaling mo makakuha ng mga iyon, ang iyong kaibigan,
ikaw ay hindi pagpunta sa magtanong muli ng parehong tanong,
lamang ka ng pagpunta sa sabihin, oh ito ay zero.
Kami ay tapos na sa paglalaro ng ganitong uri ng hangal paikot-ikot ng laro.
>> Kaya recursion ay ang kilos sa programming ng isang function sa pagtawag mismo.
Ang program na ito, kapag pinagsama-sama at magpatakbo, ay pagpunta sa kumilos nang eksakto sa parehong paraan,
ngunit kung ano ang key ay na loob ng isang function na tinatawag na palatandaan,
doon ay isang linya ng code kung saan kami ay pagtawag sa ating sarili,
na kung saan ay normal na maging masama.
Halimbawa, kung ano ang unang kung ako pinagsama-sama ito, kaya gumawa sigma--
gumawa ng palatandaan 1 ./sigma-1.
Positibong integer, mangyaring, 50 1275.
Kaya kung ano Mukhang ang function maging, batay sa isa pagsubok, tama.
Ngunit ano kung nakakuha ako ng maliit na mapanganib at tanggalin ang mga tinatawag na base kaso,
at sabihin lamang, na rin ako sa paggawa ng lamang ito mas komplikado kaysa ito ay.
Compute ng lang ang mga palatandaan Hayaan sa pamamagitan ng pagsasagawa m at pagkatapos ay pagdaragdag ng
sa palatandaan ng m minus isa?
Well, kung ano ang nangyayari sa mangyayari dito?
Ni-zoom out Hayaan.
Mag-recompile ng mga programa Hayaan, i-save ito, mag-recompile sa programa,
at pagkatapos ay handa ./sigma-1-zoom in, ipasok ang positibong integer mangyaring, 50.
Paano marami sa inyo ay payag sa fess up upang makita ang na?
>> OK.
Kaya ito ay maaaring mangyari para sa bilang ng mga kadahilanan,
at tapat sa linggong ito kami ay tungkol upang makapagbigay ng higit sa mga ito sa iyo.
Ngunit sa kasong ito, subukan Dahilan sa paurong
kung ano ang maaaring nangyari dito?
Segmentation fault, sinabi namin huling panahon, ay tumutukoy sa isang segment ng memorya.
Isang bagay masamang nangyari.
Ngunit kung ano ang ito mechanically na nagpunta pilipit
dito dahil sa aking pag-alis ng na tinatawag na base kaso,
kung saan ibinalik ko ang isang hard-code na halaga?
Ano ang tingin mo nangyaring mali?
Oo.
>> Madla: [INAUDIBLE].
Tagapagsalita 1: Ah.
Magandang katanungan.
Kaya ang laki ng mga numero na ako ay summing up
Nakakuha kaya malaki na ito ay nalampasan ang laki ng puwang ng memory.
Magandang ideya, ngunit hindi fundamentally pagpunta sa maging sanhi ng pag-crash.
Iyon maaaring magsanhi ng integer overflow, kung saan ang mga bits i-flip ng higit lamang sa
at pagkatapos ay pagkakamali namin isang talagang malaking number para sa tulad ng isang negatibong numero,
ngunit hindi mismo ay magiging sanhi ng pag-crash.
Dahil sa dulo ng araw sa isang int ay 32 bit pa rin.
Hindi ka pagpunta sa sinasadyang magnakaw ng isang 33 bit.
Ngunit isang mahusay na pag-iisip.
Oo.
>> Madla: [INAUDIBLE].
Tagapagsalita 1: Ang paraan ng hindi kailanman tumigil sa pagtakbo,
at sa katunayan ito tawag mismo muli at at muli at muli muli
at muli, at wala sa mga function kailanman
tapusin sapagkat ang kanilang mga nag-iisang linya ng code ng tawag themself muli at muli
at muli.
At kung ano ang talagang nangyayari dito, at ngayon kami
uri ng Maaari gumuhit ito pictorially.
Hayaan akong pumunta sa ibabaw sa isang larawan para sa sandali lamang.
Ito ay isang larawan, na ay malaon laman out
nang mas detalyado, ng kung ano ang nangyayari sa sa loob ng memory ng iyong computer.
At ito ay lumiliko out na sa sa ibaba ng larawan na ito
ay isang bagay na tinatawag na stack.
Ito ay isang chunk ng memorya, isang chunk ng RAM,
na ginagamit lamang sa anumang oras isang function ay tinatawag na.
Anumang oras mo, isang programmer, tumawag sa isang function,
sa operating system, tulad ng Mac OS, Windows, o Linux,
grabs isang bungkos ng mga byte, siguro ay isang ilang kilobytes, marahil ilang megabytes
ng memorya, mga kamay ang mga ito sa iyo, at pagkatapos ay nagbibigay-daan sa
patakbuhin mo ang iyong mga pag-andar ng paggamit anumang mga variable na kailangan mo.
At kung pagkatapos ay tumawag sa iyo ng isa pang function at isa pang pag-andar,
makakuha ka ng isa pang slice ng memorya at isa pa na hati ng memorya.
>> At sa katunayan, kung ang mga berde trays mula sa Annenberg kumakatawan na memorya,
narito kung ano ang mangyayari sa unang oras tawagan ka function na palatandaan.
Ito ay tulad ng paglalagay ng tray na tulad nito sa kung ano ang una isang walang laman na stack.
Ngunit pagkatapos kung na tray tawag mismo, kaya upang makipag-usap,
pagtawag sa isa pang pagkakataon ng palatandaan, na
tulad ng pagtatanong sa operating system, ooh, kailangan ng kaunti pa sa memorya,
ninyo ako iyon.
At pagkatapos ay maipo-piled sa sa tuktok.
Ngunit kung ano ang key dito ay ang unang tray ay mayroong pa rin,
dahil mahihingi niya ang pangalawang tray.
Ngayon samantala, palatandaan tumawag palatandaan, na tulad ng pagtatanong para sa higit pang memory.
Ay makakakuha ng piled sa paglipas dito.
palatandaan tumawag palatandaan, na ang isa pang tray na maipo-piled sa dito.
At kung ikaw panatilihing ginagawa ito, Sa kalaunan, uri ng imapa ang visual na
sa tsart na, kung ano ang nangyayari sa mangyari sa mga stack ng mga trays?
Ito ay pagpunta lalampas sa halaga ng memory ng iyong computer ay may.
At sa lalong madaling ito berde tray lumampas sa pahalang na linya
sa itaas stack at sa itaas na salita heap, kung saan ipapakita namin ay bumalik sa sa hinaharap,
iyon ay isang masamang bagay.
Heap Ang ay isang iba't ibang segment ng memorya,
at kung ipaalam sa iyo ang mga trays pile at tumpok sa,
ka ng pagpunta sa lumampas ng iyong sariling mga segment ng memorya,
at isang programa ay sa katunayan ng pagpunta sa pag-crash ng.
>> Ngayon bilang isang bukod, sa ideya na ito ng recursion, samakatuwid,
Maaari malinaw na humahantong sa mga problema, ngunit ito ay hindi palaging isang masamang bagay.
Dahil isaalang-alang, pagkatapos lahat, how-- at marahil
ito ay tumatagal ng ilang mga nagsisimula pa ginamit upang --how eleganteng o kung paano simple
na pagpapatupad ng mga palatandaan ay.
At hindi kami ay pagpunta upang gamitin ang recursion lahat na magkano sa CS50,
ngunit sa CS51, at talagang anumang klase kung saan mo manipulahin ang mga istraktura ng data
tulad ng mga puno, o pamilya mga puno, na may ilang hierarchy,
ito ay sobrang, sobrang kapaki-pakinabang.
Ngayon, bilang isang bukod, nang sa gayon ay bilang aspiring siyentipiko computer na
ay pamilyar sa ilan sa mga Google sa loob biro, kung pumunta ka sa Google
at tumingin ka up ano ang kahulugan ng, sabihin nating, recursion, ipasok.
Uh-huh.
Bilang isang bukod, na nakuha up ako ng ilan.
Ito ay tulad ng 10 minuto ng procrastination ito umaga.
Kung ikaw din ang Google ng "askew," abiso sa pamamagitan ng Pagkiling iyong ulo slightly--
at pagkatapos ay ang isang ito ay marahil pinaka atrocious ng lahat
dahil ang isang tao na ginugol tulad ng ang kanilang araw ng pagpapatupad na ito
ilang taon na ago-- dumating sa.
Oh, wait-- na ang isang bug.
>> Kaya't ang pagpapatakbo sa isa sa mga pinakamalaking mga website ng mundo
ang mga hangal kaunti Easter itlog.
Marahil sila kumonsumo ng isang nontrivial bilang ng mga linya ng code
lamang sa gayon ay maaari kaming magkaroon maliit na masaya mga bagay tulad na.
Ngunit hindi bababa sa ngayon kang makakuha ng ang ilan sa mga nasa loob biro.
>> Ngayon ipaalam sa tumagal ng isang pagtingin sa ilan sa mga puti ay namamalagi nagsi-pagsabi namin ng late,
at simulang i-Peel pabalik ilang mga layer technically
nang sa gayon ay talagang nauunawaan mo kung ano ang nangyayari
at maaari mong maunawaan ang ilan sa mga pagbabanta,
tulad ng Shellshock, na Sinimulan na ngayon upang maging
sa harap ng lahat pansin, doon man lamang sa media.
Kaya dito ay isang napaka-simpleng pag-andar na nagbabalik ng walang, walang bisa.
Ang pangalan nito ay magpalitan.
Itong tumatagal sa dalawang variable at ito ay nagbabalik wala.
Tumatagal sa isang at b.
Kaya isang mabilis na pagpapakita.
Dinala namin ang mga up.
Maaaring pati na rin kami ng isang maliit na masira dito para sa isang sandali lamang
at magkaroon ng isang maliit na isang bagay sa pag-inom.
Kung may isang taong hindi bale ng pagsali sa akin up dito para sa sandali lamang.
Paano tungkol sa iyo sa maroon shirt?
Halika sa up.
Lamang ang isa ngayon.
Salamat sa iyo, bagaman.
Ang lahat ng mga karapatan, at mayroon kaming paparating na dito?
Ano ang inyong pangalan?
>> Tagapagsalita 4: Laura.
>> Tagapagsalita 1: Laura.
Halika sa up.
Kaya Laura, napaka-simpleng hamon ngayon.
Nice upang matugunan yo.
Lahat ng karapatan.
Kaya mayroon kaming ilang mga gatas sa paglipas dito at mayroon kaming ilang mga orange juice sa paglipas dito
at ang ilan tasa na namin hiniram mula sa Annenberg ngayon.
>> Tagapagsalita 4: hiniram.
Tagapagsalita 1: At pagpunta sa sige at bibigyan ka ng kalahati ng isang baso ng ito.
Lahat ng karapatan.
At bibigyan ka namin ng kalahati isang baso ng gatas.
Oh, at sa gayon lamang na maaari kang matandaan kung ano ito ay tulad,
Remembered ko bang magdala ng ito up at sa ngayon.
Okay.
Kung hindi mo nais na bale, sabihin makita, namin Maaaring ilagay ang mga ito sa paglipas ng iyong sariling baso
kung gusto mo.
Makikita ito maging sa mundo mula sa mga mata ni Laura.
Lahat ng karapatan.
Kaya ang iyong mga layunin, na ibinigay ng dalawang tasa ng likido dito, gatas at orange juice,
ay magpalit ang dalawang mga nilalaman nang sa gayon ay ang orange juice ay pumupunta sa gatas ng tasa
at ang gatas ay pumupunta sa ang orange juice tasa.
>> Tagapagsalita 4: Gawin makakuha ako ng isa pang tasa?
Tagapagsalita 1: Ako kaya natutuwa hiniling mo, bagaman ito sana ay naging mas mas mahusay na footage
kung hindi mo ay nagtanong.
Ngunit oo, maaari naming mag-alok ng isang third tasa na walang laman, siyempre.
Lahat ng karapatan.
Kaya magpalit ang mga nilalaman doon.
Sa lalong magaling.
Napakabuti.
Ginagawa mo ito nang mabuti remarkably.
At hakbang tatlo.
Lahat ng karapatan.
Mahusay.
Ang isang malaking round ng applause ay magiging mabuti para sa Laura.
Lahat ng karapatan.
Mayroon kaming isang maliit na regalo pamamaalam para sa iyo, ngunit hayaan mo akong gawin ang mga.
Salamat sa iyo kaya magkano.
Kaya isang simpleng halimbawa, bagaman, upang ipakita na kung gagawin mo
nais magpalit ng mga nilalaman ng dalawang mga lalagyan,
o hayaan tumawag sa kanila na variable, kailangan mo ng ilang mga pansamantalang imbakan
sa yugto ng isa sa mga nilalaman sa gayon na maaari mong aktwal na gawin ang swap.
Kaya sa katunayan, ito source code up dito sa C ay kinatawan ng eksakto na.
Kung ang orange juice ay isang at ang gatas ay b, at gusto naming magpalit ang dalawa,
maaari mong subukan ang isang bagay na creative sa pamamagitan ng pagbuhos ng isa sa iba pang,
ngunit malamang na gagana hindi magtapos ay partikular na mahusay.
At kaya gumagamit kami ng isang third tasa, tawag ito tmp, T-M-P sa pamamagitan ng convention,
at ilagay ang mga nilalaman ng OJ sa na, pagkatapos magpalit isa tasa,
pagkatapos ay ilagay ang OJ sa orihinal na tasa, at sa gayon
pagkamit, nang eksakto kung paano Laura ginawa, ang magpalitan.
>> Kaya sabihin gawin eksakto na.
Hayaan akong sige at buksan up isang halimbawa na
aktwal na tinatawag na "walang magpalit, "dahil hindi ito
bilang lang tapos na bilang maaari mong isipin.
Kaya sa programang ito, mapapansin na ang Ginagamit ko ang stdio.h, ang aming lumang kaibigan.
Mayroon akong ang prototype para magpalitan up doon, na
Nangangahulugan pagpapatupad ng kanyang marahil down na sa ibaba,
at sabihin makita kung ano ang pangunahing ito programa pupuntahan gawin para sa akin.
Ako unang idedeklara nakakakuha int x isa, at int y nakakakuha ng dalawang.
Kaya sa tingin ng mga bilang OJ at gatas, ayon sa pagkakabanggit.
At pagkatapos ay may ko lamang ng isang printf sinasabi x ay ito
at y ay ito, lamang kaya maaari ko makita kung ano ang nangyayari sa.
Pagkatapos printf ko na nagke-claim na ako pagpapalit ang dalawa,
at pagkatapos kong mag-print ng i-claim na ito ay naka-swapped,
at i-print out ko x at y muli.
Kaya down na dito sa swap ay nang eksakto kung ano ang ginawa Laura,
at kung ano mismo ang nakita natin sa ang screen ng ilang sandali ang nakalipas.
>> Kaya sabihin sige at maging sorely nabigo.
Gumawa ng walang swap, at magpatakbo ng walang swap, ang pag-zoom in sa output dito.
Ipasok ang x ay 1, y ay 2, pagpapalit swapped.
x pa rin ang 1, at y ay 2 pa rin.
Kaya kahit na, tapat, tinitingnan ito eksakto kung gusto, albeit higit pa technically,
kung ano ang ginawa Laura, ay tila hindi na magtrabaho.
Kaya bakit ay na?
Well, ito ay lumiliko out na kapag sumulat kami ng isang programa na tulad nito
na parehong pangunahing, na naka-highlight dito, at pagkatapos ay isa pang pag-andar, tulad ng magpalitan,
naka-highlight dito, na ito tawag, sa mundo
mukhang isang maliit na isang bagay tulad ng mga trays ng ilang sandali ang nakalipas.
Kapag unang pangunahing ay makakakuha ng tinatawag na, na tulad ng pagtatanong sa operating system
para sa isang bit ng memory para sa anumang lokal na variable tulad ng x at y na pangunahing ay,
at nagtatapos ang mga ito doon.
Ngunit kung pangunahing tawag magpalit, at pangunahing pass magpalit ng dalawang argumento, isang at b,
orange juice at gatas, hindi ito gusto handing ang orange juice at ang gatas
sa Laura.
Ano ang isang computer, ay ito ipinapasa ng mga kopya ng orange juice
at mga kopya ng gatas sa Laura, upang kung ano ang sa huli sa loob ng tray
ay ang isang halaga at dalawang, o OJ at gatas, ngunit ang mga kopya nito,
nang sa gayon ay sa puntong ito sa kuwento, mayroong
ay OJ at gatas sa bawat isa sa mga trays.
Mayroong isa at dalawa sa bawat isa sa mga trays,
at ang magpalitan function ay sa katunayan gumagana.
Ito ay pagpapalit sa kanila sa loob ng ng ikalawang pinakamataas tray,
ngunit na pagpapalit ay walang epekto.
At batay sa lamang ng ilang pangunahing prinsipyo hindi namin
usapan tungkol sa bago, at sa katunayan lamang ng ilang mga minuto na nakalipas, kung ano
maaaring ipaliwanag kung bakit ang pagbabago isang at b sa loob ng swap
ay walang epekto sa x at y, kahit na Pumasang ko x at y sa swap function.
Ano ang mga pangunahing salita dito na Maaaring simplistically ipaliwanag?
Sa tingin ko narinig ko rito?
Madla: Return.
Tagapagsalita 1: Bumalik?
Hindi nagbabalik.
Sabihin pumunta sa isang iba pa.
Ano iyan?
>> Madla: [INAUDIBLE].
>> Tagapagsalita 1: OK, kaya return-- ng dati namin gumawa balik trabaho sa kuwento,
ngunit mayroong isang kahit mas simpleng paliwanag.
Madla: Saklaw.
Tagapagsalita 1: Saklaw.
Kukunin ko ang saklaw.
Kaya ang saklaw, tandaan kung saan aming x at y ipinahayag.
Ang mga ito ay ipinahayag sa loob ng pangunahing karapatan up dito.
isang at b, samantala, ay epektibo ipinahayag
sa loob ng magpalitan, hindi masyadong sa ang kulot braces ngunit pa rin
sa pangkalahatang lugar ng swap.
At kaya sa katunayan, isang at b umiiral lamang sa loob ng tray
mula sa Annenberg, ito pangalawang chunk ng code.
Kaya kami ay sa katunayan ang pagbabago ng kopya, ngunit na hindi talaga ang lahat na kapaki-pakinabang.
>> Kaya ipaalam sa tumagal ng isang pagtingin sa ito medyo mas mababang antas.
Pupunta ako sa bumalik sa ang Pinagmulan Directory,
at Pupunta ako sa unang mag-zoom in dito, at lang
upang makumpirma na ako sa ganitong mas malaking terminal na window,
ay kumikilos pa rin ang programa tulad na.
Ipagpalagay na ngayon na ito Hindi sadya.
Malinaw Nais kong swap sa trabaho, kaya pakiramdam ito tulad ng isang bug.
Ngayon maaari kong magsimulang magdagdag ng isang maraming printf upang aking code,
nagpi-print out x sa ibabaw dito, y sa ibabaw dito, isang paglipas dito, b paglipas dito.
Ngunit tapat, na malamang na kung ano ang ikaw ay ginagawa para sa isang ilang mga linggo
ngayon, sa oras ng opisina at sa bahay kapag nagtatrabaho
sa psets sinusubukan mong hanapin ang ilang mga bug.
Ngunit makikita mo, kung hindi mo pa nagagawa, itakda ang problema na tatlong introduces sa iyo
sa isang command na tinatawag na GDB, kung saan GDB, GNU debugger,
May mismo ang maramihang mga mga tampok na maaari talaga
ipaalam sa amin na maunawaan sitwasyon tulad nito, ngunit higit pa compellingly,
malutas ang mga problema at humanap ng mga bug.
Kaya ako ng pagpunta sa gawin ito.
Sa halip na ./noswap, sa halip ako pagpunta sa magpatakbo ng GDB ./noswap.
Sa ibang salita, ako ako pagpunta upang patakbuhin ang aking programa hindi sa Bash, ang aming mga bagong kaibigan
ngayon.
Pupunta ako sa tatakbo ang aking noswap programa sa loob
ng iba pang mga programa na tinatawag na GDB, na isang debugger, na
ay isang programa na dinisenyo upang makatulong mo mahanap ang mga tao at alisin ang mga bug.
Kaya kung pindutin ko Magpatakbo dito, mayroong isang atrocious halaga ng teksto
na hindi kailanman mo ba talagang mayroon na basahin.
Ito ay mahalagang isang distraction mula sa prompt, na
Pupunta ako sa pindutin ang Control-L upang makakuha ng hanggang sa tuktok doon.
Ito ang GDB prompt.
Kung nais kong patakbuhin ang program na ito ngayon, bilang na ito kaunti cheat sheet sa ngayon
slide ay nagmumungkahi, Run ay ang unang utos na sinadya naming ipakilala.
At lamang ako ng pagpunta sa i-type tumakbo hanggang dito sa loob ng GDB,
at sa katunayan ang bumangga ito ang aking programa.
Ngayon ay mayroong ilang mga karagdagang output ng screen na tulad nito,
ngunit iyon ang GDB lamang pagiging anal at ng pagsasabi sa amin kung ano ang nangyayari sa.
Wala ka ba talagang kailangang mag-alala tungkol sa mga detalye ngayon.
Ngunit kung ano ang talagang cool na tungkol sa GDB, kung gagawin ko ito again--
Control-L nililimas ang screen-- ipaalam sa akin pumunta Magpatuloy at type ang "masira pangunahing," at sa gayon,
kapag pinindot ko ang Enter, ang pagtatakda kung ano ang na tinatawag ng pahinga punto sa noswap.c,
16 linya, na kung saan GDB nalaman ang aking aktwal na programa
ay, ang aking aktwal na function na ay.
Ito ipapakita namin huwag pansinin sa ngayon ngunit iyon ang address
sa memorya ng partikular na ito function.
Kaya ngayon kapag ako ay i-type tumakbo, mapansin kung ano ang cool na dito.
Aking Mga programa Pinaghihiwa sa linya ko Sinabi GDB i-pause ang pagpapatupad sa.
Kaya hindi ko na kailangang ngayon baguhin ang aking code, magdagdag ng ilan printf ni, mag-recompile ito, Patakbuhing muli
ito, baguhin, magdagdag ng ilan printf ni, i-save ito, mag-recompile ito, patakbuhin ito.
Maaari ko lang maglakad sa pamamagitan ng aking programa basa sa pamamagitan ng sunud-sunod sa bilis ng tao,
hindi sa Intel-loob uri ng bilis.
>> Kaya ngayon mapansin ang linyang ito lumilitaw dito, at kung pumunta ako pabalik
sa aking programa sa gedit, mapansin na iyon ay ang tunay
pinakadulo unang linya ng code.
Mayroong 16 na linya sa gedit.
Mayroong 16 na linya sa loob ng GDB, at maging ang bagaman ito itim at puti interface
Hindi halos bilang gumagamit friendly, ang ibig sabihin nito
na line 16 ay hindi pa naipatupad pa, ngunit ito ay tungkol sa upang maging.
Kaya nga kung nagta-type ako sa pag-print x, hindi printf, i-print lamang ang x,
Nakakuha ako ng ilang bogus halaga doon ng zero, dahil x ay hindi pa nasimulan.
Kaya ako ng pagpunta sa susunod na i-type, o, kung ikaw gustong maging fancy, lamang n para sa susunod.
Ngunit kapag susunod kong i-type ang magpasok, ngayon mapansin ito gumagalaw sa hanggang sa 17 linya.
Kaya lohikal na, kung na-pinaandar ko 16 linya at ngayon nagta-type ako sa pag-print x,
ano ang dapat kong makita?
Ang isa.
>> At ngayon ito ay admittedly nakalilito.
$ 2 lamang ang magarbong paraan ng, kung ikaw nais na mag-refer sa halaga na sa ibang pagkakataon,
maaari mong sabihin ang "dollar sign dalawa."
Ito ay tulad ng isang reference likod.
Ngunit sa ngayon, balewalain lang ito.
Ano ang mga kawili-wiling ay kung ano ang sa kanan ng katumbas sign.
At ngayon kung nagta-type ako susunod muli at i-print y, ang dapat kong makita 2.
Maaari din ako ngayong mag-print x muli, at tapat,
kung Nakakuha ako ng isang maliit na nalilito bilang sa kung nasaan ako, maaari nagta-type ako listahan para sa listahan
at lamang sa paligid makita ang ilang konteksto sa punto ako talaga sa.
At ngayon maaari kong i-type susunod na, at may x ay 1.
Ngayon nagta-type ako susunod.
Oh, y ay 2.
At muli, ito ay nakalilito, dahil ang output ng GDB
ay commingled gamit ang aking sariling output.
Ngunit kung panatilihin mo sa isip, sa pamamagitan ng glancing pabalik-balik sa iyong code
o laying ito gilid sa pamamagitan ng gilid marahil, ipapakita sa iyo
makita na talagang lamang ako stepping sa pamamagitan ng aking programa.
>> Ngunit mapansin kung ano ang susunod na mangyayari, literal.
Narito ang 22 linya.
Hayaan akong pumunta sa paglipas ng ito, at sa gayon ay gumagalaw sa sa 23, at kung mag-print ko x ngayon, isa pa rin.
At kung mag-print ko y ngayon, isa pa rin.
Kaya ito ay hindi isang kapaki-pakinabang na ehersisyo.
Kaya ang gawing muli ito ipaalam.
Hayaan akong bumalik hanggang sa ang muli tuktok at uri ng run.
At ito ay nagsasabi sa programa na ini-debugged
Nagsimula na, na nagsimula mula sa simula.
Oo, ni gawin muli ito ipaalam.
Ni ang susunod na gagawin at oras na ito ipaalam, susunod, susunod, susunod, susunod,
ngunit ngayon bagay makakuha ng kawili-wiling.
Ngayon Gusto kong sa hakbang sa magpalitan, kaya hindi ko type susunod.
Nagta-type ako hakbang na ito, at ngayon mapansin ito Na jumped ako sa noswap.c line 33.
Kung pumunta ako pabalik sa gedit, kung ano ang 33 line?
Iyon ang unang aktwal linya ng code sa loob ng swap.
Alin ang magaling, dahil ngayon maaari ko uri ng poke sa paligid at makakuha ng malaman
bilang sa kung ano ang nangyayari sa tunay na doon.
Hayaan akong i-print tmp.
Whoa.
Bakit ang tmp kumuha ng mabaliw, bogus halaga basura?
Madla: Ito ay hindi pa nasimulan.
Tagapagsalita 1: Ito ay hindi pa nasimulan.
At sa katunayan, kapag nagpatakbo ka ng programa, bibigyan ka ng isang buong bungkos ng memorya
ng operating system, ngunit hindi pa nasimulan ang anumang mga halaga,
kaya ang anumang mga piraso ikaw ay nakikita dito, kahit na ito ay
ito mabaliw malaki negatibong numero, nangangahulugan lamang
na ang mga ito ay ang mga labi mula sa ang ilang mga nakaraang paggamit ng na RAM,
kahit na mayroon akong hindi kinakailangan ang aking sarili ito pa.
Kaya ngayon ako pagpunta sa sige at uri susunod na, at kung ngayon nagta-type ako sa pag-print tmp,
ano ang dapat kong makita?
Anuman ang halaga ng isang noon ay, isang ay ang unang argumento, lamang
tulad ng x ay ang unang bagay na ipinasa sa,
kaya isang at x dapat ay parehas, kaya i-print tmp dapat mag-print ng isa sa akin.
>> Kaya ano ang makikita mo sa hanay ng problema tatlong ay isang tutorial ng mga klase sa GDB,
ngunit mapagtanto na ito ay ang simula ng isang pagtingin sa isang tool na ay talagang
makatulong sa iyo na malutas ang problema kaya magkano ang mas epektibo.
Ano kami sa huli pagpunta sa gawin sa Miyerkules
ay magsimula sa Peel pabalik ng ilang mga layer at alisin ang ilang mga gulong pagsasanay.
Na bagay na tinatawag na string na na ginamit namin para sa ilang oras,
kami ay pagpunta sa dahan-dahan tumagal na ang layo mula sa iyo at simulan ang pakikipag-usap tungkol sa
isang bagay na mas esoterically na kilala bilang char *,
ngunit kami ay pagpunta sa gawin ito maganda at malumanay sa unang, kahit na pointer,
habang ang mga ito ay tinatawag na, maaari gumawa ng ilang napaka masamang bagay kung inaabuso,
pamamagitan ng pagtingin sa isang maliit na claymation mula sa ang aming mga kaibigan Nick Parlante mula sa Stanford
University, isang propesor sa computer agham na ilagay magkasama ang preview na ito
ng kung ano ang darating na ito Miyerkules.
>> [VIDEO pag-playback]
-Hey, Binky.
Gumising.
Panahon na para masaya pointer.
>> -What Iyan?
Alamin ang tungkol sa mga payo?
Oh, goody!
[END VIDEO pag-playback]
Tagapagsalita 1: Iyon naghihintay sa iyo sa Miyerkules.
Ipapakita namin sa iyo pagkatapos makita.
[VIDEO pag-playback]
-And Ngayon, Deep pananaw, sa pamamagitan ng Daven Farnham.
>> -Why Ay pag-aaral namin C?
Bakit hindi A +?
>> [Tawa]
>> [END VIDEO pag-playback]