[Powered by Google Translate] David J. MALAN: Lahat ng karapatan.
Ito ay CS50, at ito ay ang katapusan ng linggo dalawang.
Kung inaasahan mo na gutom sa paligid ng oras na ito bukas, alam na namin ang pagpunta
upang magtipun-tipon bilang isang maliit na grupo bukas, Huwebes, 1:15.
Mayroon dito ang URL na ito kung nais mong i-RSVP.
Space ay limitado, kaya mangyaring patawarin kung ang form ay napuno ng oras
punan ito.
Isa pang URL kahit na maaaring maging ng interes ito.
>> Kaya sa loob lamang tungkol sa oras ng isang buwan, ang kurso ang pagpunta sa ginawang magagamit
ang lahat ng mga mas malawak sa pamamagitan ng edX, sa pamamagitan ng kung saan ang mga tao sa Internet ay
sumunod, makisali sa kurso aktibong medyo, sa katunayan.
Makikita nila gamit ang CS50 Appliance at CS50 talakayin at karamihan ng
iba't-ibang mga software tool na aming nai-gamit ito semestre.
At isa sa mga hakbangin sa nais naming gumawa ng bilang isang eksperimento sa taong ito
upang makita lamang kung magkano ang nilalaman maaari naming isalin sa iba pang mga sinasalita at
nakasulat na wika.
Kaya kung maaaring mayroon ka ng interes sa mga kalahok sa proyektong ito, kung saan
magbibigay kami ng Ingles mga transcript at subtitle para sa kurso
aralin at shorts at mga seminar at mga seksyon at ang mga tulad ng -
kung nagsasalita ka matatas o isulat ang ilang iba pang mga wika matatas, gagawin namin
ibigin upang makisali sa proyektong ito, kung saan mong gawin sa isa o higit pa sa mga
video, na-translate ang mga ito sa isang wika na alam mo medyo na rin.
Upang bigyan ka ng isang pakiramdam ng interface, mayroong ang web-based na interface ng gumagamit
na kami gumagamit na lumikha ng mahalagang ng UI tulad nito.
Ito sa akin ang pagtuturo ng ilang Halloween nakalipas.
At sa kanang bahagi doon sa itim na susunod sa mga selyo ng oras,
makikita mo ang iba't-ibang mga bagay na dumating out ng aking bibig sa araw na iyon.
At pagkatapos ay sa ibaba nito, makikita mo magagawang isalin sa ilang iba pang mga wika.
Eksakto kung ano ang pagma-map ay sa pagitan ng, sa kasong ito, Ingles
at, sabihin nating, Espanyol.
Kaya ito ay talagang isang napaka-user-friendly na tool.
Maaari mong i-rewind at fast forward napaka kaagad na may mga shortcut sa keyboard.
Kaya kung nais mong makibahagi sa eksperimentong ito at ang iyong mga salita
nakita at basahin sa pamamagitan ng mga potensyal na libo-libong mga tao out doon, mangyaring huwag pakiramdam
-atubiling upang lumahok.
>> Ngayon isang salita tungkol sa mga kuting mula Lunes, baka nagpadala kami ng isang labis
nakakatakot mensahe.
Gawin Napagtanto na ng mga oras sa opisina iminumungkahi at bilang mga seksyon iminumungkahi, ang
disenyo ng kurso ay napaka na mga mag-aaral pakikipagtulungan at
pakikipag-usap sa pamamagitan ng set ng problema at mga problema sama-sama.
At talagang linya lamang ay down sa, muli, work ka sa huli
dapat isumite ang dapat iyong sariling.
At kaya ito, medyo totoo lang - sa oras ng opisina, lubos na normal -
lubos na ito na inaasahan, kahit na - na pakikipag-chat na may ilang
kaibigan sa tabi mo.
Kung siya ay struggling na may ilang mga paksa, at hindi tulad ng, oh, ipaalam na rin
sa akin magbibigay sa iyo ng isang sulyap ng ilang linya ng code na sinulat ni ko.
Iyon ay pinong.
Nangyari iyon.
At na ay masyadong mas kaaya-aya, tingin ko, sa proseso ng pag-aaral.
Kung saan ang mga linya, muli, ay makakakuha ng tumawid kapag ang ulo ang uri ng tagilid sa paglipas ng
dito para sa malayo masyadong maraming mga segundo o minuto para sa talagang magkaroon ng
isang unblock pagkakataon para sa iyong mga kaibigan.
At tiyak, kapag mga bagay na makapag-palitan sa pamamagitan ng email at Dropbox at
tulad ng, doon ay ang linya.
Kaya ng lahat ng paraan, kumportable at pakiramdam hinihikayat upang makipag-chat sa mga kaibigan
at mga kaklase tungkol sa mga psets at higit pa.
At lamang Napagtanto na kung ano ang huli magsumite dapat talagang maging
produkto ng iyong paglikha at hindi ibang tao.
>> Kaya sa parehong ugat ng cuddly nilalang, maaari mo
alam ng tao na ito dito.
Kaya ito ay isang horrifically cheesy pelikula mula sa taon na ang nakakaraan.
Sinuman dito nakikita Spaceballs?
Ayos lang.
Kaya ang isang mahusay na numero dito.
Kaya ito ay aming kamangha-mangha akademikong paraan ng nagpapakilala ngayon sa huli
ang paniwala ng cryptography.
At kaya isa ng domain partikular na mga problema para sa pset 2, na kung saan ay darating
out late bukas gabi, ay sumisid sa mundo ng cryptography, na
ay ang sining ng pag-encrypt o scrambling ng impormasyon.
At ito huli nauugnay sa mundo ng seguridad.
>> Ngayon seguridad para sa karamihan sa amin ay sa anyo ng mga mekanismo medyo pangmundo.
Lahat sa atin ay may username at password.
At ang lahat ng sa atin ay may napaka-masamang username at password, malamang.
Kung ang iyong password ay ang parehong sa maramihang mga website, na malamang na hindi
ang pinakamahusay na ideya, bilang namin talakayin patungo sa pagtatapos ng semestre.
Kung ang iyong password ay nakasulat sa isang sticky tandaan - walang magsisti - sa iyong
subaybay, na masyadong ay hindi kinakailangan ang pinakamahusay na disenyo ngunit lubos sa isang karaniwang
kababalaghan.
At kung hindi ka gumagamit ng cryptography upang i-encrypt ang iyong mga password, ang mga ito ay
partikular na mahina.
Kaya kung sa tingin mo ay pagiging sobrang matalino sa pamamagitan ng pagkakaroon ng isang nakatagong Salita
idokumento ang isang lugar sa iyong hard drive na may lahat ng iyong mga password ngunit
ito sa isang folder na walang pagpunta sa tumingin sa, na masyadong ay hindi isang napaka-
secure na mekanismo.
At kaya kung ano pset 2 ay ipakilala ito sining ng cryptography at
scrambling impormasyon upang ang mga bagay na tulad ng mga password
ang lahat ng mga mas ligtas.
Upang ganyakin ang napaka-real-mundo na problema sa isang napaka-non-real-mundo
sitwasyon, hayaan mo akong ipakilala ka sa isa sa aming mga paboritong mga clip dito mula sa
pelikula, Spaceballs.
>> [Playback ng video]
-Helmet, halimaw na tao, kung ano ang nangyayari sa?
Ano ang iyong ginagawa sa aking anak na babae?
-Pinahihintulutan sa akin upang ipakilala ang mga makikinang na batang plastic siruhano, Dr Philip
Schlotkin, ang pinakamalaking ilong trabaho tao sa buong
sansinukob at Beverly Hills.
-Ang iyong kamahalan.
-Ilong trabaho?
Hindi ko maintindihan.
Na siya nagkaroon ng ilong trabaho.
Ito ay isang matamis na 16 kasalukuyan.
-Hindi, hindi kung ano ang iyong palagay.
Ito ay magkano, magkano ang mas masahol pa.
Kung hindi mo akong bigyan ang kumbinasyon sa kalasag air, Dr. Schlotkin ay
bigyan ang iyong anak na babae ang kanyang lumang ilong.
-Hindi!
Saan mo makakuha ng na?
-Lahat ng karapatan.
Ko masasabi.
-Hindi, tatay, hindi.
Hindi ka dapat.
-You're karapatan, ang aking mahal.
Kukunin ko na makaligtaan ang iyong bagong ilong.
Ngunit hindi ko sabihin sa kanila ang kumbinasyon ng kahit na ano.
-Napakaluwag na rin.
Dr. Schlotkin, ang iyong pinakamasama.
Aking kasiyahan.
-Hindi!
Maghintay, maghintay.
Ko masasabi.
-Alam ko na ito gumagana.
Lahat ng karapatan, bigyan ito sa akin.
-Ang kumbinasyon ay isa.
-Isa.
-Dalawang.
-Tatlong
-Tatlong.
-Four.
-Limang
-Limang.
-Kaya ang kumbinasyon ay isa, dalawa, tatlo, apat, limang.
Iyon ay ang stupidest kumbinasyon narinig ko kailanman sa aking buhay.
Na ang uri ng bagay na tulala isang sa kanyang luggage.
Salamat, ang iyong kamahalan.
-Ano ang gagawin mo?
Na naka-off ako sa pader.
-Hindi, hindi.
Mong naka-off ang buong pelikula.
-Dapat ko pinindot maling button.
-Well, ilagay ito pabalik sa.
Maglagay ng pelikula muli.
-Oo, ginoo.
Oo, ginoo.
-Natin pumunta, Erna.
Halika, Gretchen.
Siyempre alam mo Mayroon pa akong upang singilin ka para sa.
-Well, ito gumagana?
Saan ang gate?
-Nagtrabaho ito, ginoo.
Mayroon namin ang kumbinasyon.
-Mahusay.
Ngayon ay maaari namin ang bawat huling hininga ng sariwang hangin mula sa planeta Druidia.
Ano ang kumbinasyon?
-Isa, dalawa, tatlo, apat, limang.
-Isa, dalawa, tatlo, apat, limang?
-Oo.
-Iyon ang mga kamangha-manghang.
Mayroon akong ang parehong kumbinasyon sa aking bagahe.
Maghanda Spaceball 1 para sa agarang pag-alis.
-Oo, ginoo.
-At baguhin ang kumbinasyon sa aking bagahe.
-Kita ang!
[END video playback]
>> David J. MALAN: isang kamangha-manghang pelikula na dapat mong ngayon lahat makita.
Kaya ang konteksto dito na may mga hindi secure na data ay isang pagkakataon upang
-encrypt ang mga ito at upang mang-uayabit ito.
At kaya ito, halimbawa, ay isang halimbawa ng isang naka-encrypt na mensahe.
Ito aktwal na nagsasabing ang isang bagay sa Ingles.
Ngunit ito ay malinaw na hindi ganap na pag halata.
At kami na dumating ang buong lupon ngayon upang manunudyo bukod kung ano ang lihim
mensahe dito ay.
Ngunit sa tunay na mundo ng mga computer, mga bagay ay hindi kahit hitsura maaari sila
na Ingles parirala.
Halimbawa, ito ay kung ano ang maaari mong makita sa isang karaniwang Linux o Mac o
Unix computer sa isang file na minsan ay tinatawag na ang password ng file.
Kasalukuyan, ito ay inilipat sa iba pang mga lugar.
Subalit kung titingnan mo sa tamang lugar sa isang sistema, makikita mo ang hindi lamang ang iyong
username o ng iba pang mga tao sa system, ngunit makikita mo ang isang
-encrypt na bersyon ng kanilang mga password.
Sa katunayan, ang salitang silid sa ilalim ng lupa doon ay nagmumungkahi na ang mga sumusunod na bagay ay naka-encrypt.
At ito serye ng mga tila random na titik at mga character at numero at
iba pa ay maaaring decrypted lamang ng pangkalahatang alam ilang lihim -
ng isang lihim na salita, ng isang lihim na numero.
At kaya katunayan, ang sining ng cryptography sa huli kahulihan babagsak ito upang magtiwala ng ilang
-uri-uriin at alam ng isang bagay na ang ibang tao ay hindi.
Susubukan naming galugarin ito ng kaunti pang detalye ngayon at sa pset sa darating.
>> At ngayon ng isang salita sa pass / mabibigo.
Kaya lalo, bilang ilang mga mo dived sa pset 1, ang appliance, at
isang bagong mundo para sa iyong sarili, natanto na frustrations at
pagkalito at teknikal na paghihirap na inaasahan.
Lalo na ang unang pset, kung saan may lamang kaya magkano bagong, pagkuha
pamilyar sa ls at cd at ang lahat ng mga arcane utos sa isang bagong kapaligiran.
At na hiwalay mula sa aktwal na materyal at mga programa mismo.
Kaya Napagtanto, masyadong, na may mga tiyak na mga oras ng opisina na umiiral bilang
ang istraktura ng suporta.
Mga seksyon simulan ito darating na Linggo.
Ngunit pinaka-mahalaga, kung ikaw ay pakiramdam lamang na ito ay hindi ang
mundo para sa iyo, mapagtanto na ito ay talagang ay lamang tumagal ng oras.
At mga hindi para sa pagkakataon na ito taon na ang nakakaraan para sa akin ng pagkuha ng isang klase
pumasa / mabibigo, totoo lang, hindi ko sana ay kahit nakatakda paa sa silid-aralan.
At maaari mong baguhin ito hanggang, sabihin nating, sa ikalimang Lunes ng kurso.
Kaya kung ikaw ay sa dulo ngayon, nauunawaan natin na kaysa sa ulo sa ilang iba pang mga
tubig sa kabuuan, tiyak na isaalang-alang lamang pagbabago upang pumasa / mabibigo.
Muli, hindi talaga ito kultura dito sa Harvard ng pagkuha ng mga bagay-bagay
pumasa / mabibigo dahil lahat talagang nais upang makamit o overachieve.
Subalit lantaran, ito ay isang magandang paraan ng sinusubukan ng isang bagay out na maaaring hindi
maging pamilyar sa iyo.
At makikita mo magtapos ginagawa sa karamihan ng mga kaso medyo fine, marahil
magkano sa iyong sorpresa.
At sa mas kongkreto mga tuntunin, kung ano ang tingin ko pumasa / mabibigo pangkalahatan ginagawa,
lalo na kung maaari mong naranasan sa pset 0, kung mo inilagay ang
sa 10 oras, 15 oras, 25 oras sa ilang pset - at ka banging
ang iyong ulo laban sa pader,
at nakakakuha ito ng sobrang late sa gabi,
ngunit nagsagawa ang pset tulad ng 90% ng paraan,
alam mo mo lamang ay hindi maaaring malaman kung ang isang bagay -
pumasa / mabibigo talagang tumatagal sa gilid ng isang klase tulad nito, kung saan maaari mong pag-uri-uriin
ng maligaya sabihin okay, alam ko hindi perpekto.
Ngunit nagtrabaho ako sa aking puwit-off ito.
Ako medyo masaya sa kung saan ito napunta.
At iyon ay matugunan ang mga inaasahan para sa pass / mabibigo.
Kaya panatilihin na sa isip.
>> Ayos lang.
Kaya mga mo na struggled gamitin ang Harvard University Wi-Fi alam
na may CS50 SSID, Wi-Fi connection lumulutang sa paligid na
maaaring magkaroon ng mas mahusay na swerte para sa.
Ito ay isang maliit na tumbalik na ang password para sa - kung nais mong upang subukan
sa pagkonekta sa ito para sa mas mahusay na bilis at ipaalam sa amin kung hindi mas mahusay na -
isa, dalawa, tatlo, apat, limang, ang lahat ng mga paraan ng hanggang sa walong dahil walong ay
mas secure sa limang.
Kaya kung kailangan mo ang Wi-Fi password, kumonekta sa CS50 wireless dito.
Isa, dalawa, tatlo, apat, limang, anim, pitong, walong.
At mag-post sa CS50-usapan kung mayroon ka pa ring mga pasulput-sulpot na mga isyu sa pagkakakonekta,
at ipapaalam namin ang mga kapangyarihan na ay malaman para sa puwang na ito.
>> Ayos lang.
Kaya isang mabilis na teaser, lalo na para sa mga mo na fan lalaki o babae
ng lahat ng mga bagay na Apple.
Ano ko utong up mula sa ilang taon na pabalik ang file na ito dito, ilock.c, upang
uri ng mas kongkreto at mas kumplikadong ilan ng mas basic C
programa namin ang pagsusulat.
Kaya ko binuksan ang file na ito, ilock.c.
Magagamit sa pahina ng aralin para sa ngayon.
Sa kaliwang bahagi, makikita mo ang isang mahabang listahan ng mga function.
Kaya ang kapwa na sinulat ni ito sinulat ni ng maraming mga function,
higit pa sa pangunahing.
Siya ay gumamit ng isang buong grupo ng mga aklatan dito.
At kung sisimulan namin ang scroll sa pamamagitan ng, kung ano ang talaga ang napaka
una, tingin ko, magpahaginit para sa orihinal na iPhone.
Kapag nais mong jailbreak ang orihinal na iPhone, na nangangahulugan untether
ito mula sa AT & T at aktwal na-install ng espesyal na software sa ito at gawin ang mga bagay
na Apple ay hindi gusto ng mga tao na gawin -
mahusay, may kinuha ang oras upang malaman kung eksakto kung paano sila ay maaaring samantalahin
flaws ng software, mga pagkakamali, mga bug, sa Apple ng software.
At sa gayon ay ipinanganak ilock.c.
Na kung pinagsama-sama ito sa isang computer at mai-install ito sa isang iPhone na
ay konektado sa iyong computer sa pamamagitan ng, sabihin nating, isang USB cable, ito ay magbibigay sa iyo
-administratibo o ugat na mga pribilehiyo sa iyong iPhone at hayaan ang gawin mo medyo magkano
kahit anong gusto mo.
>> At kaya mayroong nangyaring ito kamangha-manghang cat at mouse laro sa pagitan ng Apple at
ang natitirang bahagi ng mundo sa mga partikular na habang ang mga ito, tulad ng maraming mga kumpanya, subukan upang i-lock
kanilang mga bagay-bagay down sa gayon ay maaari mo lamang gawin sa mga ito kung ano ang iyong nilalayong sila.
Ngunit salamat sa mga taong tulad nito at ang kanilang pang-unawa ng mababang antas
mga detalye at, sa kasong ito, C programming at ng maraming ng pamilyar na constructs
na namin nasimulan ang paglalaro, ikaw ay sa talagang magamit ang
hardware sa paraan na nakikita mong akma at hindi kinakailangan ang ilang corporate entity.
Kaya halimbawa, mayroon akong walang ideya kung ano ang lahat ng ito ay ginagawa.
Ngunit GetVersion tunog medyo direkta.
At Mukhang ito ay isang function na ang taong ito sinulat ni.
Kumuha ng ilang mga uri ng integer bilang isang argument, hindi bumalik anumang, ngunit
Lumilitaw na loop sa isang para sa loop dito at kung kundisyon, kung kondisyon,
masira, at sa paanuman nauugnay sa numero ng bersyon.
Kung mag-scroll pababa namin -
kahit na ng maraming ng mga keyword na ito ay pagpunta sa bagong, at mayroong isang
buong maraming mga function in dito ay hindi kailanman nakakita kami at maaaring hindi kailanman makita sa paglipas ng
kurso ng semestre -
sa pagtatapos ng araw, ito ay sumusunod sa parehong mga alituntunin at logic na kami
nagpe-play na may sa gayon malayo.
Kaya ito ay malayo masyadong luma sa magpahaginit ang iyong iPhone 3s o 4s o madaling 5s, mga araw na ito,
ngunit alam na ito ang lahat ng napaka nakuha mula sa mundo na ito na namin
dived sa.
>> Kaya sabihin tumagal ng isang pagtingin sa isang kaunti pa simpleng halimbawa.
Ang isang ito, lamang upang warmed up na may ilang syntax at ilang iba pang data
uri na uusapang namin ang tungkol sa ngunit hindi talaga nakita sa C. Kaya ito ay isang
file na tinatawag na positive1.c.
At bawat ang mga komento sa itaas, ito lamang hinihingi na ang isang gumagamit ay magbigay ng
positibong numero.
Kaya ito ay isang halimbawa ng do-habang loop, na maganda para sa user interactive
programa kung saan kailangan mong sabihin sa user na gawin ang isang bagay.
At kung hindi sila makikipagtulungan, sumigaw sa kanila o tanggihan ang kanilang mga input.
Kaso sa point, ako pagpunta sa gawin ang mga linya 19 sa pamamagitan ng 24 kaya mahaba ng gumagamit ay
hindi ibinigay sa akin ng isang positibong numero.
Ngayon ito detalye dito sa linya 18, bakit ko idedeklara n itaas ang buong
looping bumuo kumpara sa tabi mismo sa linya 22 kung saan ako
aktwal na pinapahalagahan upang makakuha n?
Oo?
[Hindi marinig]
>> David J. MALAN: Oo, kaya ang isyu na ito ng saklaw.
At sa termino ng karaniwang tao, ano ang saklaw sumangguni sa?
Oo?
[Hindi marinig]
David J. MALAN: Maaari mo bang makipag-usap ng kaunti louder?
Speaker 1: Saan maaari mong ma-access ang isang partikular na variable.
David J. MALAN: Perpekto.
Kung saan maaari mong ma-access ang isang partikular na variable.
At sa pangkalahatan, ang pamantayan sa gayon ay malayo ay na ang mga saklaw ng ilang
variable ay tinukoy sa pamamagitan ng ang pinakabagong kulot tirante na nakita mo.
At kaya sa kasong ito, kung ako ginawa ang pagkakamali ng deklarasyon n sa linya 22,
linya na gumagana.
Gusto ko ng isang int, at ko bang ilagay ang mga ito sa na variable n sa linya 22.
Ngunit kung aling linya ng code na ngayong magkaroon ng walang ideya kung ano ang ako ng pakikipag-usap tungkol sa?
Kaya 25, at ito ay lumiliko out 24, pati na rin, dahil sa kasong ito, Nabibilang ang labas
ng kulot tirante.
Kaya lamang ng kaunti ng isang istorbo ngunit lalong madaling malutas sa pamamagitan ng simpleng deklarasyon
variable sa labas ng function na mismo.
>> Ngayon ay makikita namin makita mamaya ngayon, maaari kang pumunta isang hakbang karagdagang.
At maaari mong kahit na makakuha ng isang maliit na tamad -
at ito ay hindi na inirerekomenda, sa pangkalahatan -
ngunit maaari mong kahit na makakuha ng tamad at maglagay ng isang variable sa buong mundo, kaya na magsalita, hindi
sa loob ng isang function, hindi sa loob ng isang loop, ngunit sa ang file mismo, sa labas
ng lahat ng mga pagpapaandar na naisulat, tulad ng ginawa ko dito sa linya 15.
Ngunit ito ay karaniwang frowned kapag.
Ngunit mapagtanto na ito ay isang solusyon sa minsan sa iba pang mga problema, bibigyan namin ng
ay makakita.
Kaya sa ngayon, ipapakita namin iwanan ito tulad nito.
Ngunit sabihin makita kung maaari naming muling isulat ito lamang upang simulan ang pagpapahayag ng ating sarili sa isang
kaunti naiiba.
>> Kaya programang ito, upang maging malinaw, ay positive1.
Hayaan akong magpatuloy dito at sa aking terminal na window positive1, Ipasok.
Compiles, okay.
Ako pagpunta upang patakbuhin ang positive1, pindutin ang Enter.
Hinihiling ko na ba ninyo akong bigyan ng isang positibong integer.
Sasabihin kong -1.
Na ay hindi gumagana.
0, 99, na tila upang gumana.
Siguro hindi ang pinaka-mahigpit na pagsubok.
Ngunit hindi bababa sa gandang check katinuan na hindi namin sa kanan track.
Kaya ngayon hayaan mo akong sige at buksan ang dalawang bersyon ng ito.
At kung ano ay naiiba na?
Ipinapatupad ang parehong bagay.
Ngunit kung ano ang paglukso bilang malinaw iba't ibang oras na ito?
Oo, kaya ito bool sa berde.
Gedit ay naka-highlight sa berde ang keyword na ito na kilala bilang bool,
kung saan ay isang uri ng data.
Bakit hindi ito built in sa lahat ng mga bersyon ng C. Kailangan mong magsama ng isang
tukoy na library.
Sa aming kaso, kasama ko CS50 library upang namin
magkaroon ng access sa bool.
Ngunit sa ika-18 linya, tila namin upang magkaroon ng isang Boolean halaga dito tinatawag na nagpapasalamat.
Kaya ko tinatawag na anumang ito.
Ngunit ko na tinatawag na ito nagpapasalamat lamang uri ng ihatid ang ilang semantiko kahulugan.
Kaya simula sa linya 18, ako tila hindi nagpapasalamat dahil ang
Boolean halaga nagpapasalamat nasimulan sa False sa linya 18.
At pagkatapos ay tila kung ano ang nagawa ko na dito sa linya 21 sa pamamagitan ng 23 lamang ko na
uri ng rewritten aking logic.
Kaya walang pagtakbo ibang.
Ngunit sa linya 22 ngayon, check ko kung int ang gumagamit ay mas malaki kaysa sa
0, pagkatapos ko lamang baguhin ang halaga ng nagpapasalamat sa true.
At kung bakit ang gagawin ko na?
Dahil sa linya 25, tila, ako pagpunta upang suriin ang isang kalagayan.
Gawin ito sa loop habang nagpapasalamat false.
>> Kaya ko magpanukala na ito bilang isang kahalili sa bersyon isa dahil ito ay hindi bababa sa isang
maliit na mas madaling maunawaan, marahil.
Ito ng kaunti pa grawnded sa Ingles.
Kaya gawin ang mga sumusunod habang ikaw ay hindi nagpapasalamat o habang nagpapasalamat false.
At oras na ito, masyadong, ako tila hindi pakialam sa matandaan kung ano ang user-type
dahil paunawa hindi variable n.
Sa aktwal, ako -
isang maliit na maliit na kasinungalingan doon.
Pagtakbo, ang programa bit naiiba sandaling makuha namin sa ilalim ng
ito dahil hindi ako alala kung ano n ay.
Subalit Nais kong upang ipakita dito masyadong na kahit na nakakita kami ng GetInt at
GetString ginagamit sa kanang bahagi ng isang katumbas sign samakatuwid ay malayo sa gayon ay
tandaan namin ang halaga, technically, na hindi mahigpit na kinakailangan.
Kung para sa anumang dahilan mo lamang ay hindi pakialam sa i-save ang halaga, gusto mo lang
upang suriin ang halaga, mapansin na maaari lamang namin magsulat ito bilang GetInt bukas
paren, malapit paren.
Na function ay nagbabalik ng halaga, bilang namin ang sinasabi.
Ito ay upang bigyan ka ng isang int.
At kaya kung ikaw itak tingin na ito mangyari, kapag ako ay nag-type sa 99, GetInt
nagbabalik ang numero 99.
At kaya conceptually, na parang ang aking code ay aktwal na ito.
Kaya kung 99 ay talagang mas malaki kaysa sa 0, pagkatapos ay nagpapasalamat nagiging totoo.
Pagkatapos linya 25 napagtanto ooh, kami ay tapos na dahil ako ngayon nagpapasalamat.
At sa ika-26 linya, lamang namin sinasabi, Salamat para sa positibong integer, anumang ito
nangyari na.
>> Ngayon sabihin gawin bahagyang sintaktik asukal dito, kaya na magsalita.
Natin makita kung maaari naming linisin ang line 25 na ito ikatlong at huling pag-iiba
sa positive3.
Kaya mapansin ang pagkakaiba lamang ngayon ay kung ano ang linya ng code?
Oo, kaya 25.
At hindi kami talagang nakikita nanlilinlang ito pa.
Ngunit ginawa namin makita ang exclamation point sa Monday, na Nagpapahiwatig ng kung ano?
Kaya hindi, o pagkakaila.
Kaya tumagal ng Boolean halaga at i-flip ang halaga nito.
Totoo nagiging maling.
Maling nagiging totoo.
Kaya ito, nais kong ipanukala, ay kahit isang maliit na mas madaling maunawaan ng isang paraan ng
pagsulat ang code dahil ko pa rin initialize nagpapasalamat sa maling.
Pa rin ba akong gawin ang mga sumusunod.
Ako magse-set nagpapasalamat sa true kapag may oras ang pagdating.
Ngunit ngayon maaari mong talagang lamang isalin ang code na ito pasalita kaliwa hanggang kanang,
habang hindi nagpapasalamat.
Dahil putok, o exclamation point, Nagpapahiwatig ang paniwala ng hindi, kaya habang
hindi nagpapasalamat.
>> Kaya muli, hindi namin ipinakilala ng anumang mga bagong konsepto per se.
Namin ang uusapang tungkol Booleans pabalik kapag naglaro namin na may scratch.
Ngunit ngayon Napagtanto Maaari lang namin simulan ang pagsusulat ang aming code sa
maraming iba't ibang paraan.
Kaya lalo na sa pset1, kung ikaw ay ang uri ng struggling upang malaman kung ang paraan upang
sumulat ng ilang programa, odds ay nasa swerte dahil mayroong pagpunta sa anumang
bilang ng mga solusyon na maaari mong mangyayari kapag.
Halimbawa, ito ay tatlo lamang para sa kahit na ang pinakasimpleng ng mga programa.
Ayos lang.
At ngayon isipin ang sa Lunes, iniwanan namin sa ang tala na ito sa mga halaga ng return.
Kaya para sa unang pagkakataon, kami nagsulat ng programa na hindi lamang magkaroon ng mga pangunahing,
ito din ay may sariling pasadyang function na sinulat ni ko dito.
Kaya sa linya 31 sa pamamagitan ng 34, naipatupad ko na ang isang kubo function na.
Hindi complex.
Lang isang beses sa isang beses sa isang, sa kasong ito.
Ngunit kung ano ang mahalaga tungkol dito na ako pagkuha ng input sa form ng isang at
Ako bumabalik output sa form ng isang beses sa isang beses sa isang.
>> Kaya ngayon mayroon akong kakayahan, na halos tulad na ginamit ko upang may printf nag-iisa, na tumawag sa
ang function na ito sa pamamagitan ng pagtawag sa function na kubo.
At ang kubo function na tumatagal ng ilang mga input.
At ang kubo function na nagbabalik ilang output.
At ito sa pamamagitan ng kaibahan, printf ginawang isang bagay.
Hindi ito ibalik anumang bagay na namin cared tungkol sa - kahit na, bilang isang
bukod, ang nagbabalik ng halaga.
Mo lamang sa pangkalahatan huwag pansinin ito.
Printf ginawang isang bagay.
Ito ay isang bahagi epekto ng pag-print sa screen.
Sa pamamagitan ng kaibahan dito, mayroon kaming ang kubo function, na
aktwal na nagbabalik ng isang bagay.
>> Kaya ito ay sa pangkalahatan -
para sa mga pamilyar na ito, ito ay isang medyo tapat ideya.
Ngunit para sa mga hindi gaanong pamilyar sa ideyang ito ng pagpasa sa mga input at pagkuha
pabalik output, sabihin subukan lamang ng isang bagay na sobrang simple.
Ang sinuman kumportableng paparating na sa entablado maikling?
Mayroon kang upang maging komportable na may camera sa iyo, pati na rin.
Oo.
Okay, kung ano ang iyong pangalan?
Ken: Ken.
David J. MALAN: Ken.
Lahat ng karapatan, Ken.
Halika sa up.
Kaya Ken ay isang function ng mga uri dito.
At hayaan ang magpatuloy at gawin ito.
Natin makakuha ng isang maliit magarbong.
Masaya akong makilala kayo.
Maligayang pagdating sa sentro yugto.
Ayos lang.
Natin pindutin ang pindutang ito dito.
Ayos lang.
Kaya dito mayroon kang modernong Chalkboard.
At kung ano ang Ako ay ang pangunahing function, halimbawa.
At hindi ko magkaroon ng isang iPad sa aking kamay.
Hindi ko talaga matandaan kung paano - maayos, aktwal na, hindi maaaring sabihin na.
Hindi ko talaga may magandang sulat-kamay.
At kaya samakatuwid, gusto kong mong i-print ang isang bagay sa screen para sa akin.
>> Kaya ako bilang pangunahing programa.
At ako pagpunta sa mayroon kang sabihin ito sa pamamagitan ng pagsusulat sa mga ito sa aking manok sa simula at
pagkatapos pagpasa sa iyo ng isang input.
Kaya bilang ulok bagaman ang exercise na ito ay, ang paniwala ng mga function at pagtawag ng
function at nagbabalik ng isang function talagang boils down na ito.
Ako ay pangunahing.
Isinulat ko printf ("isang bagay") sa screen.
Ako nagpapatakbo sa programang ito.
At sa lalong madaling printf ay makakakuha ng tinatawag na, ito ay tumatagal ng isang argumento - o isang parameter,
minsan -
sa pagitan ng mga double quote.
Narito ang argument na.
Ako pagpasa ito sa Ken.
Ngayon siya ay isang itim na kahon na nakasulat sa ilang bilang ng mga taon na nakalipas na tila
lamang alam kung paano upang i-print ang mga bagay sa screen.
>> Kaya, gawin.
Iyon ay hindi masama.
Kaya, napakabuti.
Kaya ngayon Ken ay tapos Isinasagawa.
Ba siya kailangang ipasa sa akin ng anumang pabalik?
Kaya hindi na kami nakikita sa gayon ngayon.
Muli, printf ay aktwal na nagbabalik ng bilang.
Ngunit kami ay pagpunta sa huwag pansinin na sa ngayon dahil hindi namin ito ginamit.
Kaya na ito para sa Ken.
At kaya ngayon pangunahing ay bumalik upang maisagawa -
pangunahing kinakailangan sa paglipas ng kontrol ng programa muli dahil na linya ng code,
printf, tapos na Isinasagawa.
At pumunta kami tungkol sa aming mga paraan Isinasagawa ang anumang iba pang mga linya ay may.
>> Ayos lang.
Kaya ngayon sabihin subukan ang isang bahagyang naiiba halimbawa.
At oras na ito dito, sabihin munang i-clear ang screen dito.
At oras na ito, kami na ang cubing function na.
Ngunit ang oras na ito, inaasahan ko ng output halaga.
Kaya sabihin magpatuloy at gawin ito.
Kaya ngayon Mayroon akong isang linya ng code na nagsasabing x = kubo (x).
Kaya aktwal let's -
linya ng code, manariwa sa diwa, ganito ang hitsura.
x = kubo (x).
Kaya paano ito upang gumana?
Kaya sabihin sige at bigyan ka ng isang puting screen muli.
At ako pagpunta sa magsulat ngayon down na ang halaga ng x, na sa panahon na ito sa
oras mangyayari na, sabihin nating, 2, upang panatilihin ito simpleng.
Kaya isinulat ko sa isang piraso ng papel ang halaga ng 2,
na ang aking halaga x.
Kong ipasa ang mga ito sa Ken.
Ken: At ko lang isulat ang sagot?
David J. MALAN: Oo, sabihin isulat ang sagot.
Okay.
At ngayon siya ay bumalik sa akin ng isang bagay.
Kaya -
perpekto.
Nice segue.
>> Kaya ngayon siya kamay ako pabalik ang halaga ng 8, sa kasong ito.
At kung ano ang gagawin ko ito?
Well, aktwal na, sabihin makita.
Kunin ang karapatang ito.
Ano ako pagpunta sa gawin dito?
Ngayon ako pagpunta sa ang halaga na ito at aktwal na-imbak ang mga ito sa mga
parehong bit sa memorya.
Ngunit paunawa, ako uri ng struggling dito.
Ako ng kaunti nalilito dahil kung saan ko aktwal na isulat ang halaga ng x?
Dahil kung ano lang nagawa ko ang pisikal kamay Ken isang piraso ng papel
ay ang halaga 2, kung saan ay x.
At sa katunayan, na tiyak kung ano ang mangyayari.
Kaya ito lumiliko out na kapag tumawag ka ng isang function, at pumasa ka sa isang argument
gusto ang "kumusta mundo" o pumasa ka sa isang argumento tulad ng 2, sa pangkalahatan, ikaw ay
pagpasa sa isang kopya ng na argumento.
At iba pa tulad ng ko sinulat ni ang bilang 2 dito at ipinasa ito sa Ken; na dapat
nangangahulugan na Mayroon pa akong isang kopya ng 2 halaga sa isang lugar.
Dahil sa katunayan, ngayon na nakuha ko na ang halaga 8, kailangan ko upang bumalik sa
RAM at aktwal na isulat 8 kung saan sabay-sabay ko ay ang bilang 2.
>> Kaya tandaan biswal na ito paniwala ng pagpasa sa literal
isang kopya ng ang halaga.
Ken ang kanyang bagay, kamay ako pabalik ng isang bagay - sa kasong ito,
ng halaga tulad ng 8.
At pagkatapos Mayroon akong na gawin ang isang bagay na may halaga na kung ako
gusto mong panatilihin ang mga ito sa paligid.
Kaya lahat ng ito ay ang lahat ng masyadong pamilyar bago mahaba.
Salamat sa iyo kaya magkano para sa demo dito, Ken.
Ayos lang.
Mahusay na tapos na.
Kaya sabihin makita kung paano na ganap na nauugnay sa ilang mga pag-andar
pagtawag na namin ang paggawa dito.
Kaya hayaan mo akong magpatuloy at dalhin sa amin pabalik sa cubing halimbawa dito.
At mapansin na kung gusto namin upang aktwal na simulan ang pagkuha ito karagdagang, kami ay pagpunta
na maging maingat sa ang katunayan na ang bilang ng x na nakapasa sa
dito ay naiiba mula sa kung ano ang aktwal na naipasa sa pag-andar.
Sa muli, ito pumasa sa pamamagitan ng kopya ay pagpunta sa maging medyo
dyermeyn sa sandali lamang.
>> Kaya sabihin kumuha ng isang pagtingin sa isang bagay na ay hindi pa gumagana kanan pa.
Ako pagpunta sa sige at buksan ang isang third halimbawa ng maraming surot, na
flawed ng kalikasan.
At ito na tinatawag na buggy3, at ito ipinapatupad ng pagpapalit function na.
Kaya dito kami ay may isang pangunahing function na x at y mang nasimulan sa
1 at 2, ayon sa pagkakasunud-sunod.
Maaari naming gamitin ang GetInt, ngunit kailangan lang namin ng isang simpleng ehersisyo.
Kaya ito ay hard-code bilang 1 at 2.
Sa linya 21 at 22, tila namin i-print ang x at y, isa sa bawat linya.
Pagkatapos, sa linya 23, inaangkin ko na ako pagpapalit ng mga halagang ito, tuldok, tuldok, tuldok.
Tila tumawag ako ng isang function sa linya 24 tinatawag makipagpalitan ng
na tumatagal ng dalawang argumento.
Lubos legit para sa mga function sa tumagal ng dalawang argumento.
Nakakita kami printf gawin ito.
Kaya makipagpalitan tila tumatagal x at y.
At bilang ang pangalan nito nagmumungkahi, Umaasa ako na ito ay pagpunta sa
magpalitan ng dalawang mga halaga.
Kaya inaangkin ko sa linya 25, swapped.
At i-print muli ko x at y sa ilalim ng pagkukunwari na
sa katunayan ito ay nai-swapped.
Ngunit kung ako aktwal na patakbuhin ang program na ito -
hayaan mo akong buksan ang isang terminal na window.
Hayaan akong gumawa buggy3.
Habang ang pangalan ay nagmumungkahi, ito ay hindi pagpunta sa magtapos na rin.
Dahil kapag ako pindutin ang Enter, mapapansin na ang x ay 1.
y ay 2.
At pa sa dulo ng programa, hindi pa rin nila, sa katunayan, ang parehong.
>> Kaya batay sa pagpapakita lamang ngayon sa Ken, kung ano ang aktwal na pagpunta sa?
Well, sabihin sumisid sa ito makipagpalitan ng function na.
Sobrang maikling.
Ito ay lamang ng ilang linya ng code katagal.
Ngunit ano ang pangunahing problema batay sa simpleng kuwento na sinabi
hanggang dito sa Ken?
Bakit makipagpalitan pinaghiwa?
[Hindi marinig]
Eksakto.
Kaya kami ay pag-iimbak sa isang kopya, hindi variable mismo.
Sa ibang salita, makipagpalitan ng tila tumatagal ng dalawang argumento, isang int.
At mang ito ay tinatawag na at b.
At hanggang dito, hindi ko na naipasa sa x at y, na ayon sa pagkakasunud-sunod 1 at 2.
Ngunit hindi ako literal pagpasa sa x.
Hindi ako literal pagpasa sa y.
Pagpasa ako ng isang kopya ng x at kopya ng y.
Ito ay tulad ng halos na parang nakopya at nailagay sa swap ang mga halaga na
gusto mong aktwal na ito upang manipulahin.
Kaya kung iyon ang kaso, kapag ako, sa programa, simulan execute
linya 35, pagkatapos 36 -
kapag nakuha ko sa linya 37, sa puntong ito sa kuwento, kung ano ang halaga ng isang?
Sa puntong ito sa kuwento, linya 37, kung ano ang halaga ng isang sa puntong ito?
Kaya dapat ito ay 1.
Tama?
Dahil x ay nakapasa sa bilang ang unang argumento.
At pag-andar na ito lamang mang pagtawag nito unang argument, isang.
Katulad nito y, ang pangalawang argumento.
At lamang ito mang pagtawag sa pangalawang argumento b.
>> Ngayon ang paghihiwalay sa dalawang bahagi na ito ay aktwal na medyo lamang ipinaliwanag.
-Isip tungkol dito.
Wala sa amin ay nakamit ang mga tao na sinulat ni printf.
Kaya tiyak, siya ay walang ideya kung ano ang aming mga variable 30 taon mamaya ay pagpunta
na tinatawag.
Kaya mayroong isang pagkakaiba sa pagitan ng kung ano tawagan ka ng mga variable sa
function na sumusulat ka at kung ano ang tawagan ka ng mga variable sa mga function na hindi mo
pagtawag o paggamit.
Kaya sa ibang salita, ako nakasulat ang aking mga variable bilang ng x at y.
Ngunit kung ang ibang tao ay nakasulat makipagpalitan ng function na, siya tiyak
hindi alam kung ano ang aking mga variable na tinatawag.
Kaya nauunawaan natin na ito ay kung bakit mayroon kang ito duality ng mga pangalan.
Technically, maaari kong gawin ito sa pamamagitan ng pagkakaisa.
Ngunit nais pa rin nila ang naipasa sa bilang kopya.
Ay ito lamang ng purong pagkakataon kung aesthetically na tao na sinulat ni
makipagpalitan ng gumamit ng parehong pangalan.
>> Ayos lang.
Kaya sa puntong ito sa kuwento, linya 37, ay 1.
b ay 2.
At ngayon ko magpatuloy sa swap sa kanila.
Na rin muna sa lahat, ipaalam sa akin aktwal na gawin ito mas lamang.
Hindi ko alam kung ano ang ginagawa ang mga tatlong linya ng code.
Hayaan akong lamang gawin ito.
b nakakakuha ng.
isang nakakakuha ng b.
Tapos na.
Bakit ito sirang, lohikal?
Uri ng intuitive bagay, i-right?
Kaya ang magiging b.
At b nagiging isang.
Ngunit ang problema ay na sa lalong madaling linya 37 executes, kung ano ang
halaga ng isang at b?
Ang parehong, 1.
Dahil clobbered, kaya na magsalita, nabago mo ang b katumbas ng.
Kaya sabay-sabay line 37 ay pinaandar, na mahusay.
Mayroon ka na ngayong dalawang kopya ng numero sa loob 1 ng function na ito.
Kaya pagkatapos kapag sinabi mo sa linya 38, nakakakuha ng b, na rin, ikaw uri ng screwed.
Dahil ka magtatalaga ng 1 sa 1.
Mo na ang uri ng nawala ang halaga na iyong cared tungkol sa.
>> Kaya sa orihinal na bersyon ng mga ito, mapansin ang aking ginawa.
Ko sa halip ay may isang ikatlong linya ng code na mukhang ganito ang.
Dinedeklara ko isang pansamantalang variable - tmp ay isang napaka-karaniwang pangalan
para sa isang pansamantalang variable.
Ito ay isang int dahil ito ay may upang tumugma sa kung ano ang gusto kong gumawa ng isang kopya ng.
Imbak ng ko ng isang kopya ng isang loob ng tmp. Kaya sabay-sabay line 37 ay pinaandar,
ang halaga ng isang ay -
mabilis katinuan suriin -
1.
Ang halaga ng b ay 2.
At ang halaga ng tmp din 1.
Kaya ngayon execute ko linya 38.
Kaya kapag ang linya 38 executes, tumatagal sa halaga ng b.
At b ay 2.
Kaya ngayon ang 2.
Kaya sa puntong ito sa kuwento, 2, b ay 2,
at tmp ay 1.
Kaya ngayon lohikal na, maaari naming halaga lamang magsabuwatan tmp sa b.
At tapos na kami.
>> Kaya namin na malutas ang problema na.
Sa kasamaang palad, kapag nagpatakbo ako ng programang ito sa form na ito, hindi ito aktwal na swap
anumang mga halaga.
Ngunit upang maging malinaw, bakit?
Naayos ko ang lohikal na problema mula sa sandali lamang ang nakalipas.
Ngunit muli, kung nagpatakbo ako ng programang ito, x at y hindi magbabago sa pagtatapos ng
pagpapatupad sa programa.
[Hindi marinig]
David J. MALAN: Kaya hindi namin ibinalik ang anumang.
Sa gayon ay totoo.
Ngunit ito lumiliko out ang isang bit ng isang problema dito dahil sa gayon malayo,
Ang tanging bagay na namin upang bumalik ay isang bagay.
At ito ay isang paghihigpit ng C. Maaari mo lamang talagang bumalik ng isang halaga,
kung saan, ako uri ng natigil dito
dahil maaari kong ibalik ang bagong mga halaga ng x o maaari ko bang ibalik ang
bagong halaga ng y.
Ngunit nais ko parehong likod.
Kaya bumabalik ay hindi ang simpleng solusyon dito.
Ngunit ang problema sa panimula ay kung bakit?
Ano ang aktwal na namin swapped?
isang at b.
Ngunit isang at b kopya ng x at y, na nangangahulugan lang namin ginawa ang lahat ng ito
gumana - lamang namin na ginugol tulad ng tatlong minuto pakikipag-usap tungkol sa mga makipagpalitan ng
function at ang lahat ng tatlong ng mga variable na ito.
At na mahusay, perpektong tama sa paghihiwalay.
Ngunit isang at b ang saklaw lamang sa mga linya sa dito.
Kaya tulad ng isang loop, kung ipinapahayag mo ang isang integer i sa loob ng para sa
loop - katulad, kung ikaw ay deklarasyon ng at b sa loob ng isang function na
mo ang nakasulat, hindi sila bisa lamang sa loob ng na function na.
Na nangangahulugan na sa lalong madaling makipagpalitan ay tapos execute at pumunta namin mula sa linya 24 sa
linya 25, x at y ay hindi nabago sa lahat.
Mo lang nasayang ang isang buong maraming oras sa pagpapalit ng mga kopya ng mga variable.
>> Kaya ito lumiliko out na ang mga solusyon na ito ay aktwal na di-halata.
Hindi pa sapat upang bumalik halaga dahil aming makakaya
bumalik lamang sa isang halaga.
At ko talagang nais na i-swap ang parehong mga x at y sa parehong oras.
Kaya kami ay pagpunta upang bumalik sa.
Ngunit sa ngayon, mapagtanto na ang isyu sa panimula derives mula sa katotohanang
na ang isang at b kopya.
At ang mga ito sa kanilang sariling saklaw.
Well, sabihin subukan upang malutas ito sa ilang mga paraan.
Hayaan akong aktwal na mag-scroll pabalik dito at magbukas ng, sabihin nating, ang isang ika-apat na variant
ito, buggy4.
At kung ano ang tungkol dito?
Ito ay isang katulad ngunit simple problema upang tumingin sa bago kami ng ulos sa
paglutas ito.
Ang program na ito ay tinatawag na pagdagdag.
At tila initializes isang x integer sa 1 sa linya 18.
Pagkatapos ko i-claim x ay 1.
Pagkatapos ko Claim incrementing, tuldok, tuldok, tuldok.
Pagkatapos kong tumawag pagdagdag.
Ngunit sa linya 22 at 23, inaangkin ko ito incremented.
Inaangkin ko ang x na ngayon ang anumang ito ay, 2 siguro.
>> Ngunit ang program na ito ay maraming surot.
Ano ang problema?
Oo?
[Hindi marinig]
David J. MALAN: Eksaktong.
Kaya x malinaw naman ay ipinahayag sa linya 18.
Ito ay sa loob ng pangunahing kulot tirante.
Kaya ang simpleng sagot dito ay na, na rin, ang x umiiral dito.
Ito ay hindi umiiral sa linya 32.
Kaya programang ito na aktwal na ay hindi kahit makatipon.
Tagatala, kapag sinusubukan kong kino-compile ang code na ito, ay sumigaw sa akin
tungkol sa ilang hindi nagbigay-alam identifier o isang bagay na epekto.
Sa katunayan, sabihin subukan.
Ito ay gumawa buggy4.
May ito ay.
Gamitin ng hindi nagbigay-alam identifier x sa linya 32.
At aktwal na, sabihin mas tahasang dito ngayon sa gayon ay ito ay kapaki-pakinabang sa
oras ng opisina at sa bahay.
Pansinin na ito ay isang maliit na cryptically nakasulat.
Ngunit ang katotohanan na kumalatong may yelled sa amin, na sinasabi
buggy4.c: 32:5, ay talagang kapaki-pakinabang.
Nangangahulugan ito na ang error sa linya 32 sa character na posisyon limang.
Kaya isa, dalawa, tatlo, apat, limang.
Iyon ay, sa katunayan, kung saan ang problema ay.
At din na dapat tandaan sa oras ng opisina at sa bahay, ako masuwerteng dito.
Mayroon akong isang pagkakamali.
Ito ay relatibong madaling upang ayusin.
Ngunit kung ikaw ay makakuha ng isang buong screen na puno ng napakaraming mga mensahe ng error, muli,
Napag-alaman na ang pinakamababa isa ay maaaring lamang nagpapakilala ng
ang mga pinakamataas na mga.
Kaya palagi Chase ang iyong mga bug mula sa tuktok pababa.
Dahil maaaring may lamang isang uri ng bulaklak-chain epekto na nagmumungkahi mo
may paraan higit pang mga problema kaysa sa iyong aktwal na gawin.
>> Kaya kung paano namin maaaring ayusin ito kung ang aking mga layunin ay upang dagdagan ang x?
Ano iyon?
Okay.
Upang maaari naming gumawa ng x global.
Natin ang shortcut na ko nagbabala tungkol sa mas maaga.
Ngunit ano ba, kailangan lang namin ng isang mabilis na-aayos.
Kaya sabihin lamang sabihin int x up dito.
Na ginagawang x global.
Kaya ngayon pangunahing ay may access dito.
At pagdagdag may access dito.
At kaya ipaalam sa akin sige at makatipon ito ngayon.
Gawing buggy4, ang Enter.
Tila upang makatipon ngayon.
Natin patakbuhin ang buggy4, at tila upang aktwal na gumana.
Ngayon ito ay isa sa mga bagay na ito -
gawin ang sinasabi ko, hindi tulad ng ginagawa ko, bilang ko na gawin dito.
Dahil sa pangkalahatan, ang aming mga programa ay pagpunta upang makakuha ng mas kawili-wili at
mas matagal kaysa ito.
At kung ang iyong solusyon sa mga problema sa buhay ah, ilagay ang lahat ng mga
variable sa tuktok ng iyong mga file, masyadong mabilis gawin programa makakuha ng
horrifically mahirap upang pamahalaan.
Ito ay nakakakuha ng mas mahirap sa tingin up ng mga bagong variable pangalan.
Ito ay nakakakuha ng mas mahirap upang maunawaan kung ano ang variable ay ginagawa kung ano ang.
>> At kaya sa pangkalahatan, ito ay hindi isang magandang solusyon.
Kaya sabihin gawin ito mas mahusay na.
Hindi namin nais na gumamit ng global variable dito.
Ko nais upang dagdagan x.
Kaya maaari ko malinaw naman -
sa pagtatapos ng araw, ito ay uri ng ulok kuwento dahil lamang namin gawin ito.
Ngunit kung hindi ko malaman tungkol na operator, o hindi ako pinapayagang
baguhin ito sa pangunahing mismo, kung paano tao maaari kong ipatupad Ken sa paglipas dito, ito
oras hindi sa kubo ngunit dagdagan?
Paano ko babaguhin dito ang bagay na ito?
Oo.
[Hindi marinig]
David J. MALAN: Okay, mabuti.
Kaya bakit hindi ko pumasa sa x?
At pagkatapos ay sa halip na ibalik ito, bakit hindi ko lang gawin return x + 1?
Ngayon, ng ilang higit pang mga bagay upang baguhin dito.
Ako sa kanan track.
Ano pa ang kailangan ko upang i-tweak?
Ibang tao.
Oo?
[Hindi marinig]
David J. MALAN: kailangan kong baguhin ang return uri ng pagdagdag
dahil hindi ito ay walang bisa.
Walang bisa ay nangangahulugan na walang ay ibinalik.
Ngunit malinaw, ito ay ngayon.
Kaya ito pangangailangan upang baguhin upang int upang maging pare-pareho sa anumang
Aktwal ako bumabalik.
>> Ngayon pa rin ang iba pa ay maraming surot dito.
Oo?
[Hindi marinig]
David J. MALAN: Kaya kailangan kong dagdagan x?
[Hindi marinig]
David J. MALAN: Ah, kaya kailangan ko upang pumasa x.
Kaya kailangan kong gawin ito dito.
Kaya prototype, mayroon akong upang baguhin ito dito.
Kaya ito ay may upang maging isang int.
Na ito ay upang maging -
Hmm.
Aktwal na ako ay may isang bug pababa dito.
Natin ayusin ang isang unang.
Ano ang dapat ito aktwal na?
Kaya Mayroon sa isang int isang bagay.
Ito ay maaaring maging x.
Subalit lantaran, kung sinimulan mo ang pagtawag ng lahat ng iyong mga variable x, ito upang makakuha ng
mas mababa at mas mababa malinaw na kung saan.
Kaya sabihin lang mang pumili ng ibang pagpapangalan convention para sa aking
lingkod function, ang mga function Sumulat ako.
Susubukan naming tumawag ito ng isang.
O maaari naming tumawag ito - sabihin tumawag even_number ito sa mas tahasang.
Kaya pagkatapos kong bumalik anumang bilang plus 1.
At ngayon ko bang baguhin ang isa sa iba pang mga bagay dito at isa
iba pang mga bagay dito.
Ano ang mayroon ako upang baguhin sa linya 21 sa unang?
Mayroon akong upang italaga ang mga ito sa x.
Kaya hindi lamang ako maaaring tumawag ng x pagdagdag.
Kailangan ko maalala ang sagot sa pamamagitan ng pagbabago ng halaga ng x sa
sa kaliwang bahagi.
At kahit x ngayon ang kaliwa at kanang, na lubos pinong dahil
sa kanang bahagi ay makakakuha ng unang pinaandar pagkatapos ay makakakuha plopped sa kaliwa
bagay sa kamay, x sa kasong ito.
At pagkatapos ay sa wakas, ito ay isang madaling-aayos ngayon.
Ito ay dapat lamang na tumutugma sa kung ano ang pababa sa ibaba.
Int numero.
>> Ayos lang.
Kaya isang buong grupo ng mga pagbabago para sa isang talagang bobo function na.
Ngunit kinatawan ng mga bagay na gusto namin nagiging gawin.
Kaya't buggy4.
Ko na screwed up sa isang lugar.
Oh aking Diyos.
Limang pagkakamali sa, i, anim na linya na programa.
Kaya kung ano ang mali sa linya 18, karakter 5?
Ayos lang.
Kaya Mayroon akong upang idedeklara ito int.
Ayos lang.
Kaya sabihin makita, isang buong grupo ng mga iba pang mga error.
Oh aking diyos.
19, 18, 21.
Ngunit muli, sabihin i-clear ang screen -
Control L dito - at re-run kumalatong.
Kaya limang problema ay talagang lamang na ang isa.
Kaya ngayon sabihin patakbuhin buggy4, ang Enter.
Whew.
x ay incremented tama.
>> Ayos lang.
Anumang mga katanungan sa kung paano dagdagan ang numero?
Oo?
Tagapagsalita 2: Bakit ito na maaari mong baguhin lamang x sa numero sa variable
pangalanan at ito alam kung ano ang iyong ibig sabihin?
David J. MALAN: Magandang katanungan.
Paano ay ito na maaari ko lamang baguhin x sa numero at ang programa ay alam
agad?
Kaya muli, sa tingin ng mga ito bilang ito abstraction.
Kaya kung ako pangunahing at Ken ay incremental, lantaran, hindi ko pakialam
kung ano ang tawag ng Ken ang kanyang iPad.
Wala akong pakialam kung ano siya tawag sa anumang bagay na may sa gawin sa kanyang pagpapatupad
ng ang pag-andar na ito.
Kaya ito ay isang detalye ng pagpapatupad na ako, pangunahing, hindi
pakialam tungkol sa.
At kaya lamang pagbabago nito tuloy-tuloy sa loob ng function na, bilang dito
at bilang dito, ang lahat ng ito ay tumatagal ng hangga't mag-recompile ko.
Ito ay uri ng bang kung sa tingin mo - marami sa atin, ang mga mo sa pagmamaneho
lisensya na iyong nahimok, o kahit na iyong nahimok sa isang kotse -
karamihan sa atin ay walang ideya kung paano gumagana ang kotse ng sa ilalim ng hood.
At literal, kapag binuksan mo ng hood, karamihan sa atin - kasama ang aking sarili -
ay hindi pagpunta sa talagang malaman kung ano ang iyong hinahanap namin sa.
Uri ng tulad ng maaari mong pakiramdam na may mga bagay-bagay tulad ng sa karapatang ito ngayon.
Ngunit hindi namin talagang pakialam kung paano gumagana ang kotse.
Wala kaming sa pakialam kung ano ang lahat ng rods at pistons at cable sa loob ng
kotse ay aktwal na paggawa.
>> Kaya hindi mahalaga ang isang bagay tulad ng kung ano ang tinatawag mo ang piston
dito sa kasong ito.
Parehong ideya.
Oo?
[Hindi marinig]
David J. MALAN: Kung may higit pang mga paggamit ng variable xa sandali ang nakalipas,
, programmer, ay upang baguhin ang mga ito sa lahat ng dako.
O maaari kang literal gawin ng File, Menu, at pagkatapos Hanapin / Palitan,
isang bagay tulad na.
Ngunit ikaw ay pagpunta sa may upang gumawa ng mga pagbabagong iyon sa iyong sarili.
Mayroon kang upang maging pare-pareho.
[Hindi marinig]
David J. MALAN: Isang partikular na pagkakasunud-sunod tulad dito?
Kung ito ay int ibang numero?
Oo.
Kaya order na mahalaga kapag ikaw ay pagtawag sa function na.
Kaya kung ako ay pagtawag pagdagdag dito na may isang bagay na pinaghihiwalay ng isang bagay,
may isang direktang sa pagmamapa.
Ang unang variable, anumang ang tawag dito, ay ginawa ng isang kopya ng unang
argumento sa paglipas dito.
Paumanhin, ito ay hindi dapat maging isang panaklong.
Ang pangalawang linya ng argumento na ang pangalawang.
>> Kaya order, oo, bagay.
Ayos lang.
Paumanhin kinuha ko ng isang mahabang paraan upang makakuha ng doon.
Iba pang mga tanong?
Ayos lang.
Kaya sabihin makita kung hindi namin maaaring pintahan ng isang larawan ng kung ano ang aktwal na pagpunta sa
dito sa ilalim ng hood, kaya na magsalita.
Kaya ito ay isang parihaba na maaaring kumatawan sa memory ng iyong computer.
Kaya kahit na mayroon kang mga ideya kung paano gumagana ang memory o kung paano RAM gawa, hindi bababa sa
ipagpalagay na mayroon kang bunches nito sa mga araw na ito.
Mayroon kang mga megabytes nito.
Mayroon kang gigabytes nito.
At alam namin mula sa linggo zero na ang byte ng kung ano?
8 bit.
Karapatan, kaya 8 zeroes at mga.
Kaya kung ang iyong computer ay may karetela ng RAM, ang dalawang gig ng RAM mga araw na ito, mayroon kang isang
bilyon o 2 bilyong mga byte ng memorya, o halos 8 bilyong o 16 bilyong
bits, sa loob ng iyong computer.
Ngayon hindi katulad ang maliit na makapal na Willy Halimbawa, hindi magnetic particle
karaniwang ito.
Nagiging, sa mga laptop ng hindi bababa sa, ito ay solid drive ng estado, SSDs, na
lamang na walang paglipat ng mga bahagi.
Lahat ng electronic.
Ito ay lahat ng koryente batay.
Kaya sa tingin, bagaman, ng parihaba ito bilang lamang kumakatawan sa isa o dalawang
gigabytes ng memory na mayroon kang.
>> Kaya ito ay isang tipak ng memorya.
Ngayon sa mundo ng computer science ay may uri ng partitioned off ang mga chunks ng
memorya upang gawin ang iba't ibang bagay.
Kaya halimbawa, kung ito ay RAM ng iyong computer - tulad ng iminungkahi ng
parihaba doon - lumiliko out na sa pamamagitan ng convention, sa tuktok ng iyong RAM, kaya
magsalita, ay kung ano ang tinatawag na teksto segment.
Iyon ang mga zeroes at mga na iyong inipon.
Kaya kapag kami ay tumingin sa ilalim ng hood sa kung ano a.out ay, lahat ng
zeroes at mga -
kapag nagpatakbo ka ng isang programa, mga zeroes at mga na-load mula sa iyong hard
biyahe sa isang bagay na tinatawag RAM.
At sa RAM, sila ay inilagay sa itaas.
Ngayon samantala, mayroon kang iba pang mga bagay.
Nasimulan data, uninitialized data.
Yaong dalawang swaths ng memory ay sumangguni sa mga pangkalahatang variable, na
hindi mo madalas gamitin.
Ngunit minsan kung gagawin mo, sila magtapos hanggang doon pati na rin.
Pagkatapos ang ilang iba pang mga bagay-bagay.
Kapaligiran variable, kung saan hindi namin gastusin sa karaming oras sa.
Ngunit ang dalawang mahahalagang bagay na bumalik sa kabuuan ng
semestre, stack at magbunton.
>> Kaya ang karamihan ng memory ng iyong computer ay nakareserba kapag nagpapatakbo ng isang programa para sa
isang bagay na tinatawag stack at isang bagay na tinatawag ang magbunton.
At hindi namin makipag-usap tungkol sa magbunton ngayon, ngunit kami ay
makipag-usap tungkol sa stack.
At stack ay sinadya upang manawagan ang visual ng tulad ng dining hall
pagkain trays sa Mather House, o kung saan man ang mangyari, kung saan ang
dining hall ng kawani ng linisin mga ito araw-araw.
Sila stack ang mga ito mula sahig sa up.
At katulad sa memorya, ang ideya ng paglalagay ng isang bagay sa isang
stack, paglalagay ng isang bagay sa isang stack, paglalagay ng isang bagay sa isang stack.
At kung ano ang namin ibig sabihin sa pamamagitan ng ito?
Well, ipaalam sa mag-zoom in sa lang sa ibabang kalahati ng ang larawang ito, ang iyong computer
RAM, upang ipanukala ang mga sumusunod.
Ito lumiliko out na kapag nagpatakbo ka ng isang programa tulad ng a.out o kumusta, anumang
ang programa mo na ang nakasulat,
muli, ang mga zeroes at mga na-load mula sa iyong hard drive - na kung saan ay
pangmatagalang imbakan, mananatili doon kahit na hilahin ang plug -
load sa RAM.
RAM ay mas mabilis kaysa sa mga na hard drive.
Ito ay mas maliit kaysa sa mga na hard drive.
Subalit kung saan nakatira ang mga programa habang nagpapatakbo ka sa kanila.
>> Kaya mong i-double click ang isang programa sa Mac o PC - ito ay load mula sa
hard drive sa RAM.
Sa lalong madaling ito load sa RAM, ang zeroes at mga pumunta sa tuktok ng paraan, ang
gayon tinatawag na teksto segment.
Ngunit sa lalong madaling panahon ang iyong programa sa aktwal na nagsisimula sa pagtakbo, ang pangunahing
function na ay tinatawag na.
At pangunahing, namin ang iyong nakita, madalas ay may mga lokal na variable.
At ito ay may ints at string at char at katulad.
Kaya kung ang iyong programa na iyong nakasulat o programa na mayroon kang
double click ginagamit ng ilang mga variable sa loob ng pangunahing, magtapos sila sa
ilalim ng iyong stack ng memory, kaya na magsalita.
Ngayon mas concretely, ano ang aktwal ibig sabihin?
Ito ay nangangahulugan lamang na kung tayo ay pagpunta sa NUMBER ang mga bagay -
kung tayo ay pagpunta sa numero ang mga bytes ng RAM sa iyong computer, mapapansin na ang
maaaring ito ay byte numerong zero.
Ito ay maaaring byte numero ng isa, dalawa, tatlo, apat, limang, anim, lahat
ang paraan upang gustuhin -
2 bilyong ay ang lahat ng mga paraan up doon sa itaas.
Kaya sa ibang salita, kapag makipag-usap namin tungkol sa RAM o memory sa mga tuntunin ng mga byte
lamang ay nangangahulugan na ang isang tao na nagpasya kung ano ang numero ng bawat isa sa
mga chunks ng memorya.
>> Kaya kapag kailangan mo ang 32 bit para sa isang int, o kailangan mong 8 bit para sa isang pansamantalang trabaho, kung saan
sila magtapos sa memory?
Well conceptually, sila lamang magtapos sa ilalim ng ito
bagay na tinatawag na stack.
Ngunit kung ano ang kawili-wili ngayon kapag pangunahing tawag ng isang function.
Ipagpalagay na ang isang function na tinatawag na foo, isang arbitrary na pangalan.
Ano ang mangyayari ay pangunahing ay sa ilalim ng ito stack ng memorya.
Foo ngayon ay ilagay sa tuktok ng pangunahing memorya.
Kaya anumang lokal na mga variable na ang foo ay magtapos uri ng conceptually sa itaas
sa mga pangunahing.
Kung foo tawag ng isa pang function na tinatawag na bar, mga variable magtapos dito.
Kung ang bar tawag ibang bagay, dito, dito, dito.
Kaya kung ano ang kawili-wiling tungkol sa pagpapatakbo ng isang programa na tawagan ka ng mga function,
at ng mga function ay tumawag ng mga function, at ng mga function ay tumawag ng mga function,
bumuo ka ng stack na ito ng mga function sa memory.
At lamang nang isang beses sa isang return function na simulan ang pagkuha ng bumalik na memory.
Kaya ang isa sa mga pinakamadaling paraan ng pagka-ubos ng memorya sa isang computer program
isulat ang mga function na ay hindi kailanman bumalik.
>> Kaya halimbawa, sabihin ipakita ng mas maraming gamit ang isang
sinasadya maraming surot programa.
Hayaan akong sige at # include , int pangunahing (walang bisa).
At ako pagpunta sa gawin habang (2> 1), na malamang na hindi ka kailanman
babaguhin sa amin.
At hayaan mo akong magpatuloy ngayon at gawin printf.
Aktwal na mas mababa ang biswal na kawili-wili.
Natin gawin ito.
Para int (i = 0; i> 0).
Natin ang pagkakamaling ito, i + +.
At sabihin hindi printf dito.
Natin magsanay kung ano ang ako ay pangangaral.
Natin ay isang paraan ng dito.
Walang bisa koro, at kami na sabihin int i.
At pagkatapos ay ako pagpunta sa sabihin, printf -
oh, sabihin gawin itong mas kawili-wiling.
Natin ang aktwal na hindi i-print ang anumang bagay sa lahat.
Sabihin lang gawin ito.
Koro (i).
>> Ayos lang.
Kaya ito ay maraming surot dahil bakit?
Nagsasagawa ako ng ito bilang pumunta ko dahil ang programa ay hindi aktwal na gawin
ng interes.
Ngunit hindi ang layunin.
Ang layunin ay upang magsulat ng isang programa na ang pangunahing function na gumagana ang ano, tila?
Tawagan mismo.
At aktwal na, hindi namin kailangang loop.
Natin kahit pasimplehin ito lamang upang hindi mawala sa paningin ng talaga ang
pangunahing bug.
Pangunahing tawag nang sabay-sabay sa kumanta ilang koro.
Pagkatapos ginawa ko ang isang bagay bobo, at nagkaroon ako ng koro koro ng tawag dahil ako ipinapalagay
ibang tao ay pagpunta upang ipatupad ito siguro.
At ngayon ito ay hindi pagpunta upang makatipon pa.
Kailangan kong gawin kung ano?
Kailangan ko ang prototype, tandaan.
Kaya kailangan ko upang magkaroon ng hanggang dito walang bisa koro (int i);.
>> Sa ngayon, kung pumunta ako pababa dito -
aktwal na, sabihin gamitin ang mas malaking window.
Natin sige at gumawa ng koro.
Paggamit ng unidentified declarer i.
Oh, na bobo.
Hindi namin kailangan ang argumento.
Sabihin lang gawin ito.
Nais namin ay nagsimula sa ganitong paraan.
Na makakakuha ito ng mas madali programa upang magsulat.
Kaya doon.
Ngayon sabihin pumunta sa aking terminal na window, re-run kumalatong.
At dito namin pumunta.
Na talagang mabilis.
Ano ang aktwal na lamang ang nangyari, bagaman?
Well, ngayon kukunin ko na magdagdag ng naka-print na linya, upang maaari naming makita.
Kaya ipaalam sa akin sabihin printf, sabihin nating, ako in dito.
Okay, walang mga variable, magpapadala kami iwanan ito tulad na.
Hayaan akong muling patakbuhin gumawa.
Hayaan akong re-run koro.
At dumating sa.
Panatilihin ang pagpunta.
Bilang isang bukod, bakit hindi nag-crash?
Ang segmentation fault nangyari napakabilis na bago.
[Hindi marinig]
David J. MALAN: Eksaktong.
Kaya ito ay tumatagal ng oras upang i-print.
Mayroon lamang tumatagal ng higit pang trabaho sa bahagi ng computer.
At doon ito ay.
Segmentation fault.
>> Kaya mapansin lamang kung paano mabilis programa ay tatakbo.
Kung hindi ka naka pag-print ng anumang bagay, napakabilis na.
Ngunit pa rin namin nakuha ang segmentation fault dahil kung ano ang nangyayari?
Well, kung sa tingin mo tungkol sa kung paano memorya ng iyong computer ay inilatag, ito
ang mangyayari sa pangunahing.
Ngunit dito -
sabihin lamang tumawag ito nang sabay-sabay, at sabihin itawag sa koro.
At ngayon kung gagawin ko ang aking mga aesthetics karapatan, ito ay lamang pagpunta sa sabihin ng koro,
koro, koro, koro, koro, koro, koro, ad nauseum.
At sa kalaunan, kung ano ang pagpunta sa mangyayari?
Kung ang malaking larawan ay literal ito, kung ano ang mangyayari lamang conceptually?
Ang stack overruns ang magbunton.
O mas masahol pa, ikaw lamang malatagan lahat, kabilang ang segment ng teksto, na
ang mga zeroes at mga na kumakatawan sa iyong programa.
Sa maikli, ito ay sobrang, sobrang masamang.
Tama?
Ang iyong programa spiraled ng kontrol.
Gumagamit ka ng paraan higit pang memory kaysa sa nilayon mo lahat dahil sa isang bobo
pagkakamali, sa kasong ito.
O sa kasong ito, ang isang napaka sadyang gawin ang function sa pagtawag mismo.
Ngayon na ito ay hindi lahat ng masama.
Pag-andar sa pagtawag sa kanilang sarili aktwal na may dakilang kapangyarihan
kapag ginagamit mo ito nang tama.
Hindi ko ginagamit ito nang tama dito.
>> Kaya ito ay hindi lahat ng masama.
Ngunit ang katotohanan na hindi ko aktwal na itigil ang pagtawag sa aking sarili ay isang pangunahing
kahinaan dito ng programang ito.
Kaya kung saan ay namin pagpunta sa lahat ng ito?
Well, kung ano talaga ang nangyayari?
Kapag tumawag ko ang pagdagdag function na, tulad namin ay ginagawa sa mga halimbawa,
Mayroon akong isang halaga tulad ng 1 na pumasa ako.
Pumasa ako sa isang kopya ng ang bilang isang.
Kaya sumusunod ang mangyayari.
Kaya sabihin pumunta sa halimbawa ng pagdagdag.
At ang tao na ito karapatan sa paglipas dito.
Kaya narito ang kung ano ang aktwal na nangyayari.
Kapag tinatawag ko pagdagdag, at pumasa ako sa x, pictorially kung ano ang
pagpunta sa dito ay ito -
kung mayroon akong ang halaga ng 1 na naka-imbak sa dito, at tumawag ako aktwal pagdagdag, na
ay tinatawag na ngayong koro -
oo, na ibinabato sa akin off dito.
Kaya sabihin tumawag ito pagdagdag.
At hindi namin alam kung ano ang susunod na function na ang magiging.
Kaya kung ano ang aktwal na nangyayari dito sa isang lugar sa pangunahing, mayroon akong tipak ng
memory na pag-iimbak ng numero 1.
Kapag tumawag ako pagdagdag, ako gamit ang isa pang tipak ng memory, ngunit ngayon ko
magkaroon ng kopya ng 1.
Kapag dagdagan ko na halaga, ito ay magiging 2 - horribly nakasulat sa
screen dito.
Ngunit pagkatapos, kung ano ang mangyayari sa lalong madaling babalik pagdagdag?
Memory ito ay makakakuha lamang ipinasa pabalik sa operating system, na nangangahulugan na ang lahat
nagawa mo na ay walang kapaki-pakinabang.
Ang isa na orihinal na nilalaman sa pangunahing pa rin ang aktwal na doon.
>> Kaya kung saan ay namin pagpunta na ito?
Well, ito lumiliko out na sa memory mayroon kang ito pabalik upang i-back ang pagkakasunod-sunod ng
byte na maaari mong ilagay ang mga bagay-bagay.
At ito ay lumiliko out na nakakita kami ng isang bagay na kinabibilangan ng paglalagay ng
bagay bumalik upang i-back i-back upang i-back.
Ano ang isang string, batay sa linggo isa at ngayong linggo dalawang?
Kaya ito ay isang koleksyon ng mga character.
Kaya ito lumiliko out, tulad ng maaari mong ilagay ang mga numero sa memorya, katulad maaari mong
ilagay ang mga character sa memory.
At sa sandaling sinimulan namin ang paglalagay ng character sa memory pabalik upang i-back i-back
pabalik, lumiliko na gamit ang pinakasimpleng ng mga bagay tulad ng isang para sa loop o
habang loop, maaari naming umulit -
mula kaliwa sa kanan sa ibabaw ng mga character sa isang string -
at simulan ang masahe mga ito sa ibang mga character sa kabuuan.
Isang maaaring maging B. B ay maaaring maging C. Kaya na huli, maaari kaming magsagawa ng isang
Ingles na pangungusap na aktwal na saysay at convert sa bawat isa ng mga
titik isa sa isang pagkakataon sa pamamagitan ng paglalakad sa pamamagitan ng memorya ng aming computer natitira upang
karapatan sa aktwal na-encrypt.
>> Kaya sabihin ang aming limang minutong pahinga dito, at kapag dumating namin pabalik, bibigyan namin
simulan ang prosesong ito ng scrambling impormasyon.
>> Ayos lang.
Kaya bago namin sumisid sa ilang crypto at mga bagay na ito na tinatawag na array, hayaan mo akong
i-pause para sa anumang mga tanong dahil pakiramdam ko tulad ko talagang uri ng muddled ilan sa
mga paksang iyon.
Kaya natin ayusin ngayon kung kaya namin.
Kaya lang namin uusapang tungkol sa mga halaga return.
Usapan natin ang tungkol sa mga argumento.
At usapan natin ang tungkol sa paniwala na ito, na magpapadala kami bumalik sa linggo sa
darating, ng pagtingin ng memory bilang isang buong grupo ng mga nakasalansan
trays, kaya na magsalita.
Mula sa ibaba sa up, tulad na ang bawat tray na maipo ilagay sa stack ay kumakatawan sa
ang function ng na kasalukuyang tinatawag na.
Anumang mga katanungan?
Kaya kung paano tungkol sa - hayaan mo akong subukan pagtatanong sa isang tanong.
Patuloy ko spoiling na, ngunit ngayon it's - you've lahat nakikita mukha sa batang lalaki.
Kaya makikita namin bumalik iyon.
>> Kaya hayaan mo akong magtanong dito.
Ipaalam sa akin pasimplehin ito pabalik sa kung ano ito ay bago ang ilan sa aming mga mas maaga na Q & A.
At ang katunayan na ang pagdagdag may bukas panaklong, int numero, sarado
panaklong.
Ano ang int numero kumatawan?
[Hindi marinig]
David J. MALAN: Isang argumento.
Okay, ngunit kung ano ang isang argument?
[Hindi marinig]
David J. MALAN: Paumanhin, kung ano ang na?
Tagapagsalita 3: May pumasa ka.
David J. MALAN: Okay.
Kaya isang bagay na pumasa ka.
At higit pa sa pangkalahatan, ang input.
Kung ikaw ay sumusulat ng isang function at layunin na function na sa buhay ay gawin
isang bagay ng isang maliit na iba't ibang sa bawat oras na gamitin mo ito, pagkatapos ay ang tanging paraan para sa
na mangyari talagang mukhang upang magbigay ng may input upang ito
maaaring gawin ang isang bagay ibang may na input sa bawat oras.
>> Kaya kailangan mong tukuyin ang dalawang bagay kapag ang isang function na tumatagal ng input.
Kailangan mong tukuyin ang pangalan na gusto mong ibigay sa input na, pulos para sa
iyong sariling kaginhawahan sa gayon ay maaari kang sumangguni dito sa pag-andar na
iyong sarili ay pagsusulat, tulad ng ginawa ko dito sa linya 32.
Ngunit kailangan mo ring upang tukuyin ang uri dahil ang C ay isang programming language
na lamang ay nangangailangan ng
na kung nais mo ang isang variable, mayroon kang upang sabihin sa computer kung ano ang
data type ito ay,
sa malaking bahagi upang alam kung gaano karaming mga bits upang
maglaan para sa variable na.
Dahil maaaring ito ay anim na -
Paumanhin, hindi ito magiging anim.
Maaari itong 16.
Maaari itong 8.
Maaari itong 32 kahit 64.
Ngunit ang computer ay kailangang malaman.
Ngayon ang int sa kaliwang bahagi ay kumakatawan sa kung ano ang, sa pamamagitan ng kaibahan?
[Hindi marinig]
David J. MALAN: Ano iyon?
[Hindi marinig]
MALAN ng David J.: Ang uri ng pag-andar, at higit na partikular, ang
uri ng nito output.
Kanan.
Kaya habang ang mga bagay sa mga panaklong ay kumakatawan sa input nito, kung mayroon man, ang
bagay sa kaliwa ay kumakatawan ang output nito.
At sa kasong ito, pagdagdag tila nagbabalik ng isang int.
At kaya int ang return uri ng function na ito.
>> Ano ang ibig sabihin bumalik?
Literal, gamitin mo ang keyword return.
At pagkatapos ay kung ano ang ikaw ay bumabalik sa kanan ng keyword ay isang
integer, pagkatapos na talaga ang pare-pareho sa kung ano ang namin ang ipinangako.
Hindi mo maaaring gawin ang isang bagay tulad nito -
kumusta, mundo -
dahil iyon ay isang string.
Malinaw na ito ay hindi isang integer.
Kaya sa maikling, pahirapan talaga sa amin, programmer, tukoy na bilang
sa kung ano ang namin ang bumabalik at pagkatapos ay aktwal na pumunta tungkol sa bumabalik ito.
At pagkatapos ay upang gumawa ng tad ng mas malinaw sa konteksto -
doon siya ay muli.
Sa konteksto -
malaking sorpresa pagdating sa sandali lamang.
Sa konteksto dito ngayon ay na ang memory ng iyong computer ay, muli, isang
gigabyte, dalawang gigabytes, anumang.
Siguro pa.
Siguro ito ay mas mababa.
Ngunit ang computer tumingin ito bilang pagkakaroon ng iba't ibang mga seksyon.
Isang bagay napupunta down na doon.
Ibang bagay napupunta doon.
Iba't ibang bagay napupunta sa gitna.
At ngayon, namin lamang simulan ang nagsasabi sa kuwentong ito.
>> Ngunit makikita namin bumalik na ito sa paglipas ng panahon.
Sa ngayon, ang tanging piraso ng memorya namin talagang pakialam tungkol sa ang teksto segment
dahil na lamang kumakatawan sa zeroes at mga
na kumalatong ay outputted.
Kaya kapag nagpatakbo ka ng isang command sa keyboard tulad a.out, o double
i-click ang isang icon sa Mac OS o Windows, ang iyong programa-load mula sa iyong hard
humimok sa RAM.
At ito plopped sa tuktok ng RAM ng iyong computer, kaya na magsalita.
Ngayon samantala, pati na ang iyong programa ay nagsisimula tumatakbo at pangunahing ay makakakuha ng tinatawag sa
program na sinulat ni o sa programa ng Microsoft o Apple sinulat ni, anuman sa mga
lokal na variable magtapos hanggang pababa doon sa ilalim ng memory ng iyong computer.
Ngunit kung ang pangunahing tawag sa isa pang function na mismo ay may mga variable o
argumento, magtapos sila nasa itaas nito.
At kung ang function na tawag ng isang bagay, sila magtapos itaas nito,
itaas nito, nasa itaas nito.
At nang isang beses lamang function na tapos na e-execute ang ang stack ng mga trays, kaya
magsalita, simulan upang makakuha ng mas mababa at mas mababa.
At ito ay kung ano pagkatapos, sa maikling sabi, ay nagpapaliwanag kung bakit, kapag tumawag ka kubo -
o tumawag ka pagdagdag -
pagpasa ka sa isang kopya ng ang halaga.
At kung ano ang nangangahulugan iyon pictorially na literal sumusulat ka sa
numero 1 sa ibang bahagi ng memorya, pagbabago na 1 hanggang 2, sa kaso ng
pagdagdag -
o sa isang 8, sa kaso ng kubo -
at pagkatapos ay ibinabato na memorya ang layo sa lalong madaling ang pagdagdag o ang kubo
function na babalik.
>> Tanong.
[Hindi marinig]
David J. MALAN: Saan - pangkalahatang variable ay naka-imbak sa kung ano ang
kasalukuyang tinatawag na ang nasimulan data o uninitialized data.
Pagkakaiba ang pagiging, kung mayroon kang isang pandaigdigang variable, at magtalaga mo ito
kaagad ng isang halaga na may katumbas mag-sign, ito ay nagtatapos sa tuktok doon.
At kung ikaw lamang sabihin int x semicolon na walang halaga, ito nagtatapos bahagyang
mas mababa sa RAM sa pamamagitan lamang ng convention.
Iba pang mga tanong.
Ayos lang.
>> Kaya ang larawang ito ay bumalik dahil makakakuha tayo ng mas malakas na sa kung ano ang maaari naming gawin
gamit ang computer.
Ngunit sa ngayon, sabihin magkaroon ng isang maikling panimula sa cryptography, isang partikular na uri ng
cryptography na hindi malutas ang lahat ng mga problema sa mundo ngunit hindi malutas
ang ilan sa mga ito.
Sa kasong ito dito, mayroon kaming isang bagay na tinatawag na sikretong key cryptography.
At sikretong key cryptography, ng pangalan nagmumungkahi, derives nito seguridad
mula sa isang lihim na.
Kaya halimbawa, kung ikaw ay bumalik sa mababang paaralan at ka pagpasa ng
kaunti lihim na pag-ibig na sulat sa batang lalaki o babae na ay pagyurak sa - kung ikaw
Nais upang pumasa sa pamamagitan ng madla, malamang ay hindi sumulat
tulad ng isang tala sa Ingles o anumang iyong katutubong wika; halip,
maaaring i-encrypt ito.
O maaari mong lamang magpadala sa kanila ng isang text message ang mga araw na ito.
Ngunit maaari mong aktwal na ipasa ang mga ito ng tala sa buong silid-aralan.
At upang gawin ito ligtas na, sa isang paraan na ang iyong mga kaibigan at ang guro
hindi alam kung ano ang sumusulat ka, maaari kang makabuo ng isang medyo simpleng
algorithm -
batang bagaman maaari mong -
lang mang-uayabit ang mga salita.
Kaya sa halip ng pagsulat A, maaari mong isulat ang B. Sa halip na B, maaari mong isulat ang
C. sa halip ng C, maaari mong isulat ang D, at iba pa.
O maaari kang makabuo ng isang mas sopistikadong pagsasalin ng mga titik
sa iba't-ibang mga titik.
Subalit catch ay ang mga batang lalaki o babae sa kung kanino ka pagpapadala ng talang ito ay kailangang
malaman ng isang bagay.
Alin ang ano, malinaw naman?
Tulad ng, kung ano ang iyong sikretong.
Tulad, ano na pagma-map sa pagitan Bilang at BS at CS at DS?
Ay ito lamang sa pagdaragdag ng isa, kaya na magsalita, sa bawat isa sa ang mga titik upang pumunta
A sa B, B sa C?
Mas kumplikado kaysa sa?
Kaya ka at ang iyong crush ay kailangang magkaroon ng lihim na impormasyon na ito.
Ngunit ang uri ng isang catch-22 dito.
Kung ito ang unang pagkakataon na iyong pagpapadala ng pag-ibig sulat na ito sa pamamagitan ng
klase, paano na batang lalaki o babae upang malaman kung ano ang lihim ang kahit?
Kaya sikretong key crypto ay hindi malutas ang lahat ng problema sa mundo.
At mayroon talagang isang relasyon na namin bumalik sa patungo sa
ng pagtatapos ng semestre.
>> Katulad nito, wala sa atin marahil kailanman nagpadala ng isang -
katulad, karamihan sa atin hindi alam ng isang tao na gumagana, halimbawa, sa
Amazon.com.
At, marami sa atin ay malamang na bumili ng mga bagay-bagay sa Amazon.com.
At kami ay itinuro sa ipagpalagay na ang mga e-commerce
transaksyon ay ligtas.
Tama?
Ang URL ay malamang sabi https.
May siguro ng ulok maliit na icon na padlock sa isang lugar.
Mayroong ilang mga uri ng cryptography sa pag-secure ang impormasyon ng iyong credit card
sa pagitan mo at Amazon.com.
At pa, kung cryptography nagsasangkot alam ilang lihim, at pa hindi ko
alam sinuman sa Amazon, at tiyak ko na hindi isagawa ang anumang uri ng
lihim na may isang tao sa Amazon, kung paano ang aking computer o aking browser ginagawa ito?
Well, lumiliko out may iba pang mga uri ng cryptography sa kabuuan na malutas
na problema.
Ngunit ngayon, makikita naming tumuon sa simpleng isa, kung saan maaari mong ayusin sa
advance upang malaman ang ilang mga lihim, tulad ng plus 1 o ilang pagma-map sa pagitan Bilang at BS.
>> At ang proseso ng cryptography sa pangkalahatan ay nagsasangkot ito.
Mayroon kang ilang mga plain text, itinatanghal dito sa kaliwa.
Nagpatakbo ka ng ito sa pamamagitan ng ilang uri ng algorithm o pamamaraan
para sa pag-encrypt ito.
Siguro na lang Isang nagiging B, B magiging C. At pagkatapos magtapos ka sa
Cipher teksto.
Samantala, sa sandaling ang iyong crush natatanggap ng sikretong tandaan, siya ay may pagkatapos
i-decrypt ito sa pamamagitan ng pangkalahatang pagtaliwas na algorithm upang makakuha ng
-back ang plain text.
Ngayon may mga pisikal na anyo ng mga ito.
Halimbawa, ito ay isang maliit na lihim na decoder ring.
At ito ay isang ring sa kamalayan na may dalawang dials dito.
Sa labas paligid ng bagay na ito, may titik A sa pamamagitan ng Z,
bagaman hindi nila sa random na pagkakasunod-sunod.
At sa loob, may aktwal na ilang mga numero, tulad na may ganitong
ring, maaari mong uri ng i-sa labas ngunit hindi sa loob upang pumila
numero sa mga titik.
At sa clip na ikaw ay tungkol sa upang makita - ang ilan sa maaaring nakakita ka 24/7
sa paligid ng Pasko panahon mula sa isang pelikula na tinatawag na A Christmas Story.
Makikita mo ang na maliit Ralphie ay kaya sabik upang malaman kung anong maliit na ulila
Lihim na mensahe sa Annie sa kanya na ay Nakipag-ugnayan, sa tingin ko, sa
bumuo ng ng numeric mensahe sa isang serial box.
At mayroon kang upang maipon ang lahat ng mga maliit na card na dumating
sa cereal box.
Ay ipapadala sa kanila.
Nagkaroon ka ng upang makuha ang lihim na decoder ring, sa gayon maaari mong wakas malaman
kung ano ang pagma-map sa pagitan ng mga titik at numero,
o titik at letra.
Kaya ako magbibigay sa iyo ang maikling clip mula Isang Kuwento ng Pasko upang ganyakin pset 2 at
ang aming mga talakayan, sa isang sandali, ng mga array.
Kaya dito mayroon kaming Ralphie.
>> [Playback ng video]
Maging ito kilala sa lahat at sari-sari na ang Ralph Parker ay pinagagamit itinalaga ng
miyembro ng Little ulila Annie Circle Sekreto ng at karapat-dapat sa lahat
ang mga parangal at mga benepisyo nagaganap doon.
-Signed, Little ulila Annie.
Countersigned, Pierre Andre!
Sa tinta!
Mga parangal at mga benepisyo, na sa edad ng siyam na.
Halika sa, sabihin dito.
Hindi ko kailangan ang lahat na jazz tungkol sa mga smugglers at pirates.
Makinig bukas gabi para sa concluding pakikipagsapalaran ng The Black
Pirate Ship.
Ngayon ay ang panahon para sa lihim na mensahe sa Annie para sa iyong mga kasapi
ng Sekreto ng Circle.
Tandaan, mga bata, mga miyembro lamang ng Sekreto ng Annie Circle decode
Lihim na mensahe Annie.
Tandaan, ang Annie ay depende sa iyo.
Itakda ang iyong mga pin sa B2.
Narito ang mensahe.
12, 11 -
-Am ko sa aking unang pulong ng lihim.
-14, 11, 18, 16 -
-Pierre sa mahusay na ngayong gabi ng boses.
Maaari ko bang sabihin na ang mensahe ngayong gabi ay talagang mahalaga.
-3, 25.
Na ang isang mensahe mula sa Annie sarili.
Tandaan, huwag sabihin sa sinuman.
-90 Segundo mamaya, ako lamang ang kuwarto sa bahay kung saan ang isang batang lalaki ng siyam
maaaring umupo sa privacy at-decode.
Aha, B. nagpunta ako sa susunod na.
E. Ang unang salita ay hindi.
S. Ito ay darating na mas madali na ngayon.
U.
-Oh, dumating sa, Ralphie.
Nakatanggap ako upang pumunta.
-I'll kanan pababa, nanay.
-GEE paghuni.
-T, O. Maging sigurado na.
Maging sigurado sa kung ano ang?
Ano ang Little ulila Annie pagsubok sasabihin?
Maging sigurado sa kung ano ang?
-Ralphie!
Randy ay nakuha upang pumunta.
Ay mangyaring lumabas?
-Lahat ng karapatan, nanay.
Ko sa labas.
Na ako ay nakakakuha ng mas malapit ngayon.
Pag-igting ang ay kahila-hilakbot.
Ano ito?
Ang kapalaran ng planeta ay maaaring maging nakasalalay.
-Ralphie!
Randy ay nakuha upang pumunta.
-I'll karapatan out, umiiyak nang malakas.
-GEE, halos doon.
Aking mga daliri nagsakay.
Aking isip ay isang bakal bitag.
Bawat vibrated tumitig.
Halos malinaw.
Oo, oo, oo, oo.
Maging sigurado sa uminom ang iyong Ovaltine.
Ovaltine?
Isang pangit komersyal?
Anak ng isang asong babae.
[END video playback]
>> David J. MALAN: Kaya doon namin magkaroon ng cryptography.
Kaya kung paano sa isang computer maaari naming pumunta tungkol sa pagpapatupad o
kumakatawan sa mga bagay na tulad nito?
Well, kailangan namin ng isang paraan ng pagpapahayag ng ating sarili ng kaunti pa flexibly kaysa
aming mga variable sa gayon ngayon pinayagan.
Nagkaroon kami ng ints.
Nagkaroon kami ng char.
Nagkaroon kami ng kamay at Doubles at ng ilang mga iba.
Ngunit ang mga indibidwal na mga piraso ng memorya na hindi talaga daan sa amin upang
ipahayag ang mga bagay tulad ng mga salita at mga pangungusap at mga parirala.
Sa katunayan, namin ang tinatawag na tulad string bagay.
Ngunit ipinangako namin na ito ay talagang lamang pagpapagaan sa CS50
library na kami ay nagbabalak alisan ng balat pabalik.
>> At kaya sabihin simulan upang gawin iyon dito.
Hayaan akong sige at buksan up ng isang file -
lahat ng mga file na ito ay magagamit tulad ng dati online -
tinatawag array.c upang malutas ang isang problema na hindi nauugnay sa string ngunit na paints
larawan dito kung paano namin gamitin ng isang bagay na tinatawag na isang array.
Isang array ay isang uri ng data.
Ito ay isang uri ng variable, ng mga uri, na may maramihang mga mas maliit na mga uri ng data
sa loob nito pabalik sa-back i-back upang i-back.
Kaya halimbawa, kung gusto namin upang magsulat ng isang maliit na programa na nagbibigay sa iyo ang iyong
pagsusulit ang average para sa isang kurso tulad ng 50 na may dalawang pagsusulit, maaari mong napaka madaling
isulat ang programang ito - kahit batay sa ilan sa materyal huling linggo -
sa pamamagitan ng paggamit ng GetInt at ng ilang mga variable.
Int quiz1, int quiz2, at medyo direkta.
Ito ay maaaring 10, 20 linya ng code, max, upang ipatupad ang isang programa na itinatanong ang mga
computes ang user para sa dalawang marka ng pagsusulit at pagkatapos ay ang kanilang mga average sa pamamagitan ng pagdaragdag sa kanila
magkasama, paghahati ng dalawang, at pagkatapos ay pag-print ang mga resulta.
Namin malamang gawin na medyo kaagad ngayon matapos
ilang bilang ng mga minuto.
>> Ngunit ang problema ay na ipagpalagay na 50 ay may tatlong mga pagsusulit o apat.
Ipagpalagay na nais mong gamitin ang parehong programa para sa isang klase na nagkaroon
lingguhang pagsusulit.
-Isip tungkol sa isang klase na lingguhang pagsusulit.
Kung mayroong tulad ng 16 o kaya linggo sa isang semestre, ngayon mayroon kang 16 variable -
int quiz1, int quiz2, int quiz3, int quiz4.
Sa lalong madaling simulan mo nakikita ang kalabisan, ang pagkopya at pag-paste
ng code, dapat itong magsimula sa nais mong mayroong isang mas mahusay na paraan.
At thankfully, dahil sa array, may.
Kaya sabihin gawin ito.
Una, hayaan mo akong ipakilala ang isang napaka-simpleng bagay na hindi namin ginagamit sa gayon ngayon,
ngunit makikita mo ang mga ito paminsan-minsan sa code.
Ito ay kung ano ang pangkalahatan ay tinatawag na isang pare-pareho.
Kaya ito ay isang pare-pareho sa kamalayan na ang halaga na ito ay hindi kailanman nagbabago.
Ang tao convention kapag lumilikha ng isang pare-pareho ay upang gamitin ang lahat ng kabisera
titik, lamang upang ito ay talagang nakatayo sa iyong code.
At ang mga espesyal na keyword na gamitin mo sa C # tukuyin.
Kaya kung sinasabi mo # tukuyin, pagkatapos ng isang puwang, pagkatapos ay ang salita na gusto mong gamitin para sa
pangalan ng pare-pareho, at pagkatapos ay ang halaga ng pare-pareho.
Kaya paunawa, ito ay naiiba mula sa nagtatalaga ng isang bagay sa isang variable.
Walang equals sign.
Mayroong ang walang semicolon.
Ito ay kung ano ang karaniwang kilala bilang isang Preprocessor panuto, ngunit higit pa sa
na ibang oras.
>> Sa ngayon, ito ay lumilikha ng isang walang pagbabago halaga na tinatawag na mga pagsusulit na aktwal na
numerong halaga ay 2.
Kaya kahit saan mo ang pagsusulit, Pagsusulit, Pagsusulit sa buong ang file na ito, na
ang bilang 2.
Ngayon, kung tiningnan ko sa pangunahing ngayon, sabihin makita kung paano ito gumagana.
Sa una, mukhang ng kaunti misteriyoso.
Subalit ang lahat ng mga bagay-bagay mula sa linggo isa.
Magtanong ng gumagamit para sa mga grado.
Paano namin gawin ito?
Well, sa linya 22 -
talaga ito ang makatas bahagi -
Dinedeklara ko ng Float, ngunit hindi lamang ng isang solong Float.
Ako deklarasyon, sa halip, ang isang hanay ng mga lumulutang na halaga ng point.
Na variable na tinatawag na grado, tulad ng ipinahiwatig dito.
Ngunit ang tanging piraso ng bagong syntax ang mga square bracket, ang katotohanan
ko ang sinabi Float grado at pagkatapos ay bukas bracket at pagkatapos ay isang numero.
Paunawa, kung ito ay patuloy na, ito ay tulad ng ginawa namin ito.
Nangangahulugan ito hey computer, ninyo ako ng dalawang kamay, at sabihin sama-sama tumawag
kanila grado.
Ito ay sa kaibahan sa mas nakakapagod na proseso tulad nito.
Lumutang grade1, lumutang grade2, at iba pa.
Kaya array ng isang nagbibigay-daan sa amin upang ipatupad ang ideya ngunit higit na mas mababa messily, sa
ganitong paraan namin magsulat ng isang linya ng code sa halip ng, sabihin nating, 16 para sa isang 16
linggo semestre.
Kaya hindi ko nais na hard-code 2 dahil kung sa tingin mo tungkol sa ngayon
lohikal - ipagpalagay susunod na taon CS50 mga pagbabago sa 3 Pagsusulit sa halip.
At ako ay ang bilang 2 dito.
Ko ay ang bilang 2 dito.
Nagiging napaka nakakapagod at mas madali upang magtaas at sinasadyang baguhin
isang halaga sa 3 at makaligtaan ang ilang iba pang mga halaga ng 2.
Kaya ako ng pagpunta sa halip abstract ito ang layo at gamitin ang mga pare-pareho na, dahil ang mga
pangalan ay nagmumungkahi, hindi kailanman pagbabago.
At ngayon, kahit na kung mayroon kaming iba't ibang mga pagsusulit sa taong ito o sa susunod na, ako
na lang ay upang baguhin ito sa isang lugar, hanggang dito sa itaas.
>> Kaya na ang lahat ng pare-pareho ay.
Samantala, ang bagong tampok ng haka-haka na ng isang array.
Kaya ang mga square bracket ay nagbibigay sa akin ito maraming kamay at hinahayaan akin sama-sama
tumawag sa kanila grado dito.
Kaya ngayon sabihin makita kung ano ako pagpunta sa gawin.
Narito sa linya 24 sa simula ng isang para sa loop.
Ito ay talagang walang magarbong.
Lamang ito gamit ang Pagsusulit sa halip ng isang hard-code na numero.
Ngunit mayroong walang intellectually ibang doon mula sa nakaraang linggo.
Ito lang printf.
Kaya printf ("pagsusulit bilang% d ng% d") dahil ko lang nais na i-print ninyo akong bigyan pagsusulit
bilang isa sa dalawang at pagkatapos ng dalawang ng dalawang.
Kaya ito ay pulos isang Aesthetic bagay.
Ngunit ngayon ang kawili-wiling bahagi sa linya 27.
Upang punan sa isa sa dalawang mga placeholder na may lumulutang-point
halaga, muli mo gumamit ng mga square bracket.
Sa kasong ito, gumagamit ako ng i dahil ito para sa loop ay nagsimula sa pag-i katumbas
kung ano ang halaga, tila?
0.
>> Kaya sa unang pag-ulit na ito loop, na parang ako
sinulat ni ito sa code.
Ngunit sa ang pangalawang pag-ulit ng loop na ito, ito ay parang ako
sinulat ni ito sa aking code.
Ngunit ang katotohanan na gumagamit ako ng isang variable ay perpekto dahil, bilang ang pangalan
nagmumungkahi, ito ang iba't ibang ang halaga nito sa bawat pag-ulit.
Kaya ako pinupunan ito array isang lugar sa isang pagkakataon.
Ano ang array na ito hitsura?
Well, dahilan iginuhit ko ito sobrang simple na parihaba sa screen dito
bago ay para sa kadahilanang ito.
Array isang ay isang tipak ng memorya na sinundan sa pamamagitan ng isa pang tipak ng memory,
sinundan ng isa pang tipak ng memory, at iba pa.
Kaya kung ang aking array ng laki 2, sa kasong ito dito, ang lahat ng Gusto ko ay ginagawa sa pamamagitan ng
mag-type sa aking mga marka ng pagsusulit, i dito.
Nakakuha ako ng 100 sa isang ito.
At pagkatapos Nakatanggap ako ng 99 sa isang ito.
Pagkatapos memory na ito ay hindi maaaring kahit gamitin dahil tatanungin ko na lamang ang
computer para sa isang hanay ng mga laki 2.
Yaong mga parisukat ay pa rin doon.
Tama?
Mayroon ka pa ring dalawang gigabytes ng RAM, kahit na kung ikaw lamang
pagtatanong para sa dalawang kamay.
Kaya ang ideya sa likod ng mga array ay computer na iyon lamang tumatagal ng isang tipak ng memory
at pagkatapos apportions mas maliit na piraso pabalik upang i-back i-back upang i-back.
At sa gayon ay ang lahat ng array ay isang.
Ito ay isang magkadikit na tipak ng memorya, sa loob ng kung saan maaari kang maglagay ng mga bagay.
>> Ngayon, ito ang mangyayari pagkatapos lamang ilang pagbubutas aritmetika.
Kung mag-scroll pababa ko dito, ito ay kung saan ako umulit sa ibabaw ng array.
Dumating ko na ang kabuuan ng lahat ng mga halaga sa array.
At pagkatapos ay gamitin ko ang pag-ikot ng pagpapaandar dito upang aktwal na gawin ang
nagtutuos na hinati sa pamamagitan ng pagsusulit.
Ngunit ipaalam sa akin iwagayway ang aking kamay sa na bilang uri ng sapat na pang-aritmetika sa ngayon.
Ngunit ang lahat na ginagawa para sa akin sa huli ay compute ng isang average.
Kaya unang pagsusulit kasama ang pangalawang pagsusulit, na hinati sa pamamagitan ng 2, at pagkatapos ay pag-print
ito bilang isang int.
>> Ngunit natin ngayon paglipat sa ibang halimbawa na tinatawag string1,
na paints isang katulad na larawan ngunit gamit ang string.
Hayaan akong magpatuloy at pasimplehin ito para sa sandali lamang.
At patawarin ang indentation sa ngayon.
Abiso sa linya 19 ng halimbawang ito, nakakuha ako ng string mula sa user.
Ngunit mapansin kung ano ang susunod na ako ginagawa sa linya 22 pasulong.
Iterating aktwal ako mula sa i hanggang sa - at ito ay isang bagong nanlilinlang -
strlen, haba ng string.
Ito ay isang function na may C na kung kayo na ipasa ito ng isang string, ito ay nagsasabi sa
iyo kung gaano karaming mga character ay sa na string.
Iyon lang.
Ang katotohanan na ito ay strlen halip ang haba ng string ay dahil lang sa ito ay
higit pa maikli at malinaw.
30 taon na ang nakalipas, ang mga tao ang gumusto na magsulat ng mga bagay pati na succinctly hangga't maaari.
Kaya nagbigay kami iningatan ng convention na dito.
i + + lamang nangangahulugan dagdagan i sa bawat pag-ulit.
At ngayon ay mapapansin na ito, na kung saan ay talagang kawili-wili.
Kaya sa linya 24, sinasabi ko computer, akong bigyan ng character, walong
bit, at tawagan ang mga ito c.
Ngunit ano ito sa kanang bahagi sinasabi?
Sa Ingles, ano na kumakatawan?
[Hindi marinig]
David J. MALAN: Eksaktong.
Bigyan ako ang unang character sa array.
O mas pangkalahatang paraan, magbigay sa akin ang i-ika na katangian sa array.
At Napagtanto ito mahalaga ngayon na bilang mga siyentipiko computer na, hindi namin aktwal
pagbibilang mula 0.
Hindi mo na kailangang paghuhusga ngayon upang simulan ang paggawa nito.
Ngayon ay mayroon kang upang kumilos alinsunod sa mga inaasahan ng computer at
mabibilang mula sa zero dahil ang [0] ay ang unang
character sa isang string.
[1] ay ang pangalawang.
[2] ay ang ikatlong, at iba pa.
Kaya sa programang ito, kung makatipon ko ito - ito ay, muli, string1.
>> Kaya't string1.
At ngayon nagpatakbo ako ng string1 sa aking terminal na window.
Ito ay naghihintay para sa input, kaya ako i-type sa, sabihin nating, David.
Enter.
At ngayon ito ng mga Kopya David lahat sa iba't-ibang linya dahil
mapansin kung ano ang ako ginagawa.
Ako pag-print ng isang character sa isang pagkakataon.
Ngayon ay hindi namin pumunta sa detalye ngayon ito.
Ngunit ako inalis ang isang sandali ang nakalipas ang pagsusuring ito dito.
Ito lumiliko out na kung ang gumagamit ay magulo, adversarial, o
nalilito, maaari mong aktwal na mabibigo upang magbigay ng isang string ng ilang haba.
Kung ikaw pindutin ang maling key sa keyboard, maaari mong bigyan ang
walang string sa lahat.
O kung ikaw ay nakahahamak na, maaari mong subukang i-paste sa isang gigabyte halaga ng isang
sanaysay upang punan ang string na ito.
At kung ang computer ay nagpapatakbo ng memorya, lumiliko out na namin ang pagpunta
upang makabalik ito espesyal na halaga na tinatawag na null.
Kaya sa ngayon, alam na may ito espesyal na halaga na tinatawag na null
ay magbibigay-daan sa amin upang suriin kapag hindi namin ng memorya, bukod sa iba pang mga bagay.
>> Ngunit kung buksan ko up ngayon string2, mapansin ang isang pagkakaiba dito.
Mapansin ang isang pagkakaiba dito sa string2.
Na may string2, ito para sa loop ng kaunti ibang.
Hayaan akong tanggalin ang nulls upang maaari naming makipag-usap tungkol sa mga ibang oras.
Ngunit kung ano ang naiiba tungkol sa para sa loop oras na ito?
At maaari ba akong bumalik sa nakaraang halimbawa.
Kaya na bersyon ng dalawang.
Ito ay bersyon ng isa.
Isa, dalawa, isa sa dalawang.
Kaya ang strlen tawag ay kung saan?
Sa unang bahagi ng para sa loop.
Anumang saloobin sa kung bakit ako ginagawa ito?
Oo.
[Hindi marinig]
David J. MALAN: Kaya hindi namin tawagan ang function na bawat solong oras.
Eksakto.
Manariwa sa diwa mula sa para sa loop na ito ay sobrang simple sa sandaling uri ng
maunawaan na ito ay ang Pinasimulan,
kondisyon, at ang pag-update.
Ang problema ay na ang kundisyon na ang mangyayari sa bawat
ulit ng loop.
At kaya sa halimbawang ito dito, kung ano ang masamang tungkol sa katotohanan
na ito ay ang aking kondisyon?
Ka pagtawag strlen muli at muli at muli.
Ngunit sa sandaling nai-type ko sa David, ang haba ng string na limang.
At hindi ito baguhin sa bawat pag-ulit ng loop dahil ang
string ay pa rin D-A-V-ko-D. Kaya ito ay isang pahiwatig sa kung ano ang nangyayari upang maging isang
nagiging mahalagang ideya na kilala bilang isang desisyon ng disenyo, kung saan - hindi
computer ng hindi kinakailangang trabaho.
>> Ngayon tulad ng sneak preview ng pset 2, pset 2 sa standard edition
pagpunta na hamunin ka sa aktwal na ipatupad ang ilang bilang ng mga ciphers, ilang
bilang ng mga algorithm ng pag-encrypt, kaya na maaari mong parehong-encrypt at decrypt
lihim na mga mensahe, tulad ng isang Ralphie doon decoded.
Sa Hacker na edisyon ng pset 2, kami ay pagpunta sa pumunta ng kaunti karagdagang.
Kami ay pagpunta sa ipasa mo ang isang file mula sa isang aktwal na sistema ng computer na naglalaman ng
buong bungkos ng mga username at aktwal na naka-encrypt na password, at ang hamon
para sa edisyon ng Hacker ay pagpunta sa magpahaginit mga password at figure
kung ano cryptography o kung ano ang lihim ay ginagamit upang aktwal na
bumuo ng mga password na iyon.
At kami ay pagpunta sa gawin ito sa pamamagitan ng paggamit ng isang bagong tampok dito ng C na Bibigyan kita
mo lang ang isang demo ng, na kilala bilang command-line argumento.
>> Kaya ito lumiliko out, ng ilan sa inyo ay maaaring makikita sa seksiyon o sa mga aklat-aralin,
pangunahing ay hindi palaging upang maging walang bisa sa panaklong.
Ito lumiliko out na ang pangunahing maaari ring nakasulat tulad nito, may dalawang argumento,
argc at argv, kung saan ang argc ay ang bilang ng mga salita na nag-type ka pagkatapos
pangalan ng programa sa iyong linya ng command.
At argv ay ang aktwal na mga salita.
At ng mga square bracket doon iminumungkahi, ang argv ay tila isang array.
Ito ay pagpunta sa isang string pagkatapos ng isang string pagkatapos ng isang string sa memory.
Kaya kung ano ang namin ang pagpunta sa gawin, na nagsisimula sa pset 2,
isang bagay tulad nito.
Kung gumawa ako argv1, na kung saan ay isang halimbawa magpapadala kami ay bumalik sa sa Monday, at magpatakbo ng
ito, mapapansin na ito ay hindi mukhang gawin pa.
Ito lamang mga Kopya sarili nitong pangalan.
Ngunit kung sabihin ko paalam klase, notice na ang programang ito ay tila iterates
sa bawat isa ng mga salita na na-type sa prompt.
At ang mga paraan sa pamamagitan ng kung saan kami ay makakuha ng access sa mga salita na ang user ay may
na nai-type sa prompt sa pamamagitan ng pagbabago ng pangunahing, na nagsisimula ito weekend, mula int
pangunahing (walang bisa) int pangunahing (argc, argv).
At sa gayon ay ipinanganak na command argumento line.
At kapag kumuha ka ng talagang sopistikadong sa, magagawa mong upang magsulat
talagang trippy programa, tulad ng isang ito dito, na napupunta sa itaas at lampas
ilan ng ang pag-andar tapos kami na sa gayon ay malayo ngunit lahat ng medyo malakas na.
>> Kaya namin na nakalabas ang mga ito sa ito sa screen.
At kami ay nakikita mo sa Lunes.