>> [Musika nagpe-play]
David J. MALAN: Lahat ng karapatan.
Ito ay CS50, at ito ay ang pagtatapos ng Linggo 2.
Kaya ngayon, kami ay pagpunta upang ipagpatuloy ang aming hitsura
sa kung paano namin kumakatawan bagay sa ilalim ng hood-- gumagalaw ang layo
mula sa mga numero tulad ng integer at lumulutang halaga punto
at tumutuon sa mga string at sa huli mas kawili-wiling programa.
Ngunit namin makikita ring kumuha ng isang pagtingin sa isang dalawang problems-- partikular na domain-
ang una sa kung saan ay maging kinasasangkutan ng cryptography,
ang sining ng scrambling impormasyon, kung saan nakikita ninyo sa itaas dito
ay isang larawan ng Radio ulila Annie ni lihim na decoder ring mula yesteryear.
>> Ito ay talagang napaka-primitive na form at bata-friendly na paraan ng cryptopgraphy
kung saan ang singsing na ito ay may dalawang disks-- isa sa loob at isa sa labas.
At sa pamamagitan ng umiikot na ang isa sa mga, maaari kang mahalagang line up titik tulad ng A
sa pamamagitan ng Z sa iba pang mga titik tulad ng B sa pamamagitan ng A. Sa ibang salita,
maaari mong literal i-rotate ang alpabeto, at sa gayon ay darating up sa isang pagmamapa mula sa
mga titik sa mga titik sa gayon ay, kung ikaw Nais upang magpadala ng isang lihim na mensahe
sa isang tao na tulad ng Annie, maaari kang sumulat down na ang iyong mga mensahe at pagkatapos ay i-rotate
ang mga titik, kung saan, kung ibig mo bang sabihin magsabi ng "A," ikaw sa halip ay sabihin ang "B,"
mo bang sabihin ang "B," mo sa halip sabihin ang "C" -
o isang bagay na mas ng kaunti matalino kaysa that-- at pagkatapos, sa huli,
kaya hangga't Annie ay may ito decoder singsing, maaari niyang decode ang mensahe.
Ngayon, maaari mong isipin ang, sa katunayan, na ito ay ginagamit sa isang napaka sikat na film na
Nagpe-play ang ad nauseum sa panahon ng ang panahon ng Pasko.
Tingnan natin ang isang hitsura dito.
RALPHIE Parker: "Maging ito Kilala sa lahat sa buod
na Ralph Parker sa pamamagitan nito appointed isang miyembro ng Little ulila Annie Lihim
Circle at karapat-dapat sa lahat ng mga mga parangal at mga benepisyo nagaganap doon. "
>> RALPHIE Parker (NARRATING): Naka-sign Little ulila Annie.
Countersigned, Pierre Andre!
Sa tinta.
Mga parangal at mga benepisyo, narito na sa edad na siyam.
>> [Musika nagpe-play]
>> [Radio Chatter]
RALPHIE Parker: Halika sa.
Sabihin makakuha sa sa mga ito.
Hindi ko kailangan ang lahat ng mga jazz na tungkol sa smugglers at pirates.
Radio ANNOUNCER: Makinig bukas gabi para sa concluding pakikipagsapalaran
ng The Black Pirate Ship.
Ngayon, oras na para sa Annie ni Lihim ng Mensahe para sa iyo miyembro
ng Lihim Circle.
Tandaan mga bata, mga miyembro lamang ng Annie ng Lihim Circle
Maaari decode ang lihim na mensahe Annie ni.
>> Tandaan, ang Annie ay depende sa iyo.
Itakda ang iyong mga pin sa B-2.
Narito ang message-- 12, 11, 2--
RALPHIE Parker (NARRATING): ko Kasama sa aking unang lihim na pulong.
Radio ANNOUNCER: --25, 14, 11, 18, 16--
RALPHIE Parker (NARRATING): Oh, Pierre ay nasa mahusay na boses ngayong gabi.
Maaari ko bang sabihin na ngayong gabi ni mensahe ay talagang mahalaga.
>> Radio ANNOUNCER: --3, 25.
Iyon ang isang mensahe mula sa Annie ang kanyang sarili.
Tandaan, huwag sabihin sa sinuman.
>> [PANTING]
RALPHIE Parker (NARRATING): Siyamnapung segundo sa ibang pagkakataon, ako
sa room lamang sa bahay kung saan ang isang batang lalaki ng siyam
maaaring umupo sa privacy at MAG-DECODE.
Ah.
"B."
>> [CHUCKLES]
>> RALPHIE Parker (NARRATING): Nagpunta ako sa susunod.
"E."
Ang unang salita ay "maging."
Oo!
Ito ay darating na mas madali na ngayon.
"U."
>> [CHUCKLES]
>> Randy Parker: Ay, dumating sa, Ralphie.
Gotta ko pumunta!
>> RALPHIE Parker: Makikita ko ba ang tamang pababa, Ma.
GEE matalinong.
"T." "O." "Maging sigurado sa. "" Maging sigurado na "kung ano?
Ano ang Little ulila Annie sinusubukan mong sabihin? "Maging sigurado na" kung ano?
Ina: Ralphie, ay nakuha Randy upang pumunta.
Babaguhin ba ninyo ang mangyaring dumating out?
>> RALPHIE Parker: Lahat ng karapatan, Nanay!
Kukunin ko maging karapatan out!
RALPHIE Parker (NARRATING): Ako ay nakakakuha ng mas malapit ngayon.
Pagkabahala ay kahila-hilakbot.
Ano ito?
Ang kapalaran ng planeta maaaring mag-hang sa balanse.
>> Ina: Ralphie, Randy ni Nakakuha upang pumunta!
>> RALPHIE Parker: Makikita ko ba ang karapatan out, para sa umiiyak nang malakas!
RALPHIE Parker (NARRATING): Halos doon!
Nagsakay Aking mga daliri!
Aking isip ay isang bakal bitag.
Vibrated bawat pore.
Ito ay halos malinaw!
Oo!
>> RALPHIE Parker: "Maging sigurado sa pag-inom ng iyong Ovaltine. "
Ovaltine?
Ang isang crummy komersyal?
>> [Musika nagpe-play]
>> RALPHIE Parker: Anak ng isang bitch.
>> [Tumatawa]
>> David J. MALAN: Kaya na pagkatapos ay isang sulyap sa kung ano ang cryptography
ay maaaring maging para sa isang this-- uminom mula yesteryear.
Kaya isang mabilis na anunsyo.
Kung ikaw ay malayang na ito Biyernes sa 13:15 at gagawin
nais na sumali sa amin para sa CS50 tanghalian, magtungo sa URL na ito dito.
First come, first maghatid gaya ng dati.
Ngunit sa paglipas ng panahon, titiyakin namin na karamihan sa sinumang nais na lumahok
Maaaring i-iskedyul-matalino.
>> Kaya mga string.
Mayroon kaming Zamyla-- kanino ngayon nakilala mo pinaka-malamang
Problema sa Set 1-- na ang pangalan ay naisulat ng sa gayon.
At ipagpalagay na iyong na-type ang kanyang pangalan sa isang computer program na
gamit ang isang bagay tulad ng getString.
Upang mabawi mga keystroke, kung paano
huwag pumunta kami tungkol sa kumakatawan sa isang string, isang salita, isang talata,
o maramihang mga titik tulad ng mga ito dito?
>> Usapan natin ang huling beses tungkol sa integer at mga problema
na lumabas dahil sa integer overflow at lumulutang halaga punto
at mga problema na lumabas dahil sa loob ng katumpakan.
Sa mga string, sa kami ng hindi bababa sa magkaroon ng isang bit higit pang kakayahang umangkop
dahil strings-- lamang sa tunay na world--
ay maaaring maging isang magandang di-makatwirang haba.
Pretty maikli, medyo mahaba.
Ngunit kahit na pagkatapos, kami ay pagpunta sa mahanap na mga computer maaari minsan
Naubusan ng memorya at hindi man lamang mag-imbak ng malaking sapat na string.
>> Ngunit sa ngayon, ang simulan upang mailarawan ang hayaan isang string na ito bilang isang bagay sa mga kahon
dito.
Kaya anim tulad kahon, ang bawat isa ay kumakatawan sa isang karakter o "char."
Kaya isipin na "char" - c-h-a-r-- ay isa sa mga built-in na mga uri ng data sa C.
At kung ano ang magaling ay na maaari mong gamitin na uri ng mga bilang isang bloke ng gusali,
isang piraso puzzle, kung gagawin mo, upang bumuo ng isang mas malaking uri ng data na patuloy naming
upang tawagan ang isang "string."
>> Ngayon, kung ano ang tungkol sa kapaki-pakinabang na pag-iisip tungkol sa mga bagay tulad ng mga string sa paraang ito?
Well, ito ay lumiliko out na aming makakaya talagang makakuha istraktura na ito
upang aktwal na i-access ang mga indibidwal na mga character sa magandang prangka paraan.
Pupunta ako sa magpatuloy at lumikha isang file na tinatawag na "stringzero.c,"
ngunit maaari mo itong tumawag sa kahit anong gusto mo.
At sa website ng kurso ay na ito halimbawa nang maaga,
kaya hindi mo kailangang i-type ang lahat ng bagay out.
>> At ako pagpunta sa sige at unang gawin int pangunahing walang bisa.
At sa loob ng ilang araw, magsisimula kami sa tease hiwalayin
kung ano ang walang bisa ay dito, kung bakit ito int sa tabi ng pangunahing, at iba pa.
Ngunit sa ngayon, patuloy na ipaalam upang kopyahin i-paste na iyon.
>> Pupunta ako sa ipinapahayag ng isang string na tinatawag s.
At Pupunta ako sa bumalik mula sa GetString kahit anong uri ng gumagamit sa.
Ito ay magiging isang simpleng programa, walang mga tagubilin,
Lamang ako ng pagpunta sa blindly asahan na alam ng user
kung ano ang gagawin upang panatilihin itong simple.
>> At ngayon pupuntahan ko ay may para sa loop.
At sa loob ng aking para sa loop ako pagpunta sa may int i nakakakuha ng zero.
At i ay muli,, isang convention lamang, isang index variable para sa pagbilang,
ngunit maaari kong tumawag ito kahit anong gusto ko.
Pupunta ako sa gawin i Mababa than-- na rin Pangalan Zamyla ay anim na titik ang haba.
Kaya ako pupunta sa hard na mayroong code para sa ngayon.
>> At pagkatapos ay i ++.
At ngayon sa loob ng mga kulot braces Pupunta ako sa gawin printf,
at gusto kong i-print isa na character sa isang pagkakataon.
Kaya pupuntahan ko gamitin% c para sa marahil sa unang pagkakataon.
At pagkatapos ay gusto kong i-print ang bawat na character sa sarili nitong linya.
Kaya Pupunta ako sa ilagay ang isang maliit na backslash n doon.
Isara ang quote.
>> At ngayon nais ko na gawin ang isang bagay dito.
Gusto kong i-print ang tiyak na titik sa string,
s, bilang ako iterating mula sa zero sa hanggang sa anim na.
Sa madaling salita, gusto kong i-print ang i'th character ng s.
Ngayon paano ko ito gagawin?
>> Well halos tulad ng mga kahon sa ito pagkatawan dito,
uri ng, conjure up ang paniwala ng boxing mga titik sa, maaari mong gawin ang katulad na
syntactically sa C sa pamamagitan lamang ng pagtukoy, Gusto kong i-print out ni i'th character.
Gamit ang mga square bracket sa isang keyboard ng iyong computer
na sa isang US na keyboard ay Sa pangkalahatan sa itaas ng iyong return key.
>> Kaya ito ay hindi masyadong tama pa, bilang maaari mong napansin.
Ngunit Pupunta ako sa uri ng blindly pekein maaga dito.
At ako pagpunta sa gawin gumawa ng string 0.
Ngunit bago ko ito, sabihin makita kung namin Hindi maaaring asahan ang ilang mga karaniwang pagkakamali.
Ay ito pagpunta upang makatipon?
Hindi, ako ako Kulang ng buong bungkos ng mga bagay.
Mga Aklatan narinig ko.
>> Kaya kung aling mga file ng header Maaaring ko nais upang idagdag dito?
Oo.
>> Madla: Kailangan mo karaniwang I / O [INAUDIBLE]
>> David J. MALAN: Mahusay.
Kaya kailangan kong standard I / O. Para sa kung ano ang layunin ang gusto ko standard I / O?
Para sa printf.
Kaya isama stdio.h.
At ninyong imungkahi din na kasama ko ang CS50 library para sa kung ano ang dahilan?
Upang magkaroon ng mga string.
Kaya makikita namin makita kung ano ang Library CS50 ay ang paggawa
upang likhain ang paniwala ng isang string.
Ngunit sa ngayon, maaari mong isipin lamang ng ito bilang isang aktwal na uri ng data.
>> Kaya na Mukhang ng kaunti nalinis up.
At ngayon pupuntahan ko sige at sa katunayan gawin gumawa ng string 0.
Pinagsama-sama.
Kaya na maganda.
Kaya ./string0 hayaan mo akong mag-zoom in sa gayon aming makakaya makita nang mas malapitan kung ano ang nangyayari.
Ipasok.
Z-A-M-Y-L-A magpasok.
At ang mga naka-print na namin sa pangalan ni Zamyla.
>> Kaya na medyo magandang.
Kaya ngayon sabihin magpatuloy at patakbuhin ang program na ito muli,
at i-type ang buong pangalan ni Daven.
Sorpresa, sorpresa.
Ipasok.
Hmm.
Hindi pa namin na-print Daven ni buong pangalan nang tama.
Ngayon ito ay dapat na kitang-kita sa retrospect dahil sa kung ano,
uri ng, hangal desisyon na disenyo?
>> Oo, hard-code na ako ang anim sa loob ng aking para sa loop.
Ngayon ko na ginawa dahil lamang Alam ko pangalan Zamyla ni
ay magiging anim na mga titik.
Ngunit tiyak na ito ay hindi isang pangkalahatang solusyon.
Kaya ito ay lumiliko out dynamic na aming makakaya malaman kung ang haba ng isang string
sa pamamagitan ng pagtawag ng isang function na tinatawag na strlen.
>> Muli, sadyang succinctly na may pangalang lamang
upang gawin itong mas maginhawang upang i-type.
Ngunit iyon lamang ang magkasingkahulugan na may pagkuha ng haba ng isang string.
Pupunta ako sa bumalik sa aking terminal window na ito at muling patakbuhin ang Compiler.
Ngunit ito ay yelling sa akin.
Implicitly Ang pagdeklara ng function ng library strlen sa uri unsigned int const--
Naliligaw ako.
Ganap na.
>> Kaya, lalo na bilang iyong mata simulan upang glaze sa ibabaw
may mga error na mensahe tulad nito, focus totoo lang sa unang ilang salita.
Alam namin ang problema ay nasa 8 linya, pati na isinasaad dito.
At ito ay nasa string-0.c.
Ang pagdeklara ng Implicitly strlen function ng library.
Kaya na ay karaniwang pagpunta sa maging isang pattern ng mga mensahe ng error.
Implicitly Ang pagdeklara ng isang bagay.
>> Kaya sa maikling, kung ano ang tila kong na ginawa nang may paggalang sa line 8, dito.
Ano ang maaaring maging kahit na ang solusyon kung hindi mo pa ginamit strlen sa iyong sarili?
>> Madla: Bahagi ng iba't ibang mga library?
David J. MALAN: Bahagi ng isang iba't ibang mga library.
Kaya ito ay ipinahayag, kaya upang makipag-usap.
Ito ay nabanggit sa ilang mga file maliban sa stdio.h at CS50.h.
Ngayon kung saan ay natukoy ito?
Upang maging tapat, mong alinman sa magkaroon upang lamang alam ito off sa tuktok ng iyong ulo,
o mo ang Google na ito at malaman.
O alam na ito, iyong binuksan up ako sa CS50 Appliance sa programa ng terminal, na
lamang ang malaki, full screen na bersyon ng kung ano ang sa ibaba ng window ng gedit.
>> At ito ay lumiliko out na mayroong isang katulad succinct utos, na tinatawag na
tao para sa manu-manong, kung saan kung nagta-type ka sa ang pangalan ng isang function at pindutin ang Enter,
makakakuha ka pabalik medyo arcane dokumentasyon.
Ito ay lamang ng teksto na sa pangkalahatan mukhang ng kaunti ng isang bagay na katulad nito.
Ito ay isang maliit na napakalaki sa unang tingin.
Ngunit tapat pupuntahan ko hayaan ang aking mga mata glaze sa ibabaw
at tumuon lamang sa mga bahagi Pinapahalagahan ko tungkol sa para sa ilang sandali.
>> Alin ang na ito.
Na kamukha structurally katulad isang bagay na hindi ako pamilyar sa.
Sa katunayan ang pahina ng tao, kaya upang makipag-usap, ay magsasabi sa iyo
sa kung ano header-file ng isang function tulad ng strlen ay tinukoy.
Kaya ako pupunta upang bumalik ngayon upang gedit.
At ako pagpunta sa sige at idagdag sa dito #include
at i-save ang file.
>> Pupunta ako upang i-clear ang screen na may mga Control L Kung na-nagtataka.
At pupuntahan ko muling tumakbo make string.0, compiles oras na ito.
./string.0 Zamyla.
Na tila upang gumana Hayaan akong pumunta magpatuloy at muling patakbuhin ito sa Davenport.
Ipasok.
At iyon, masyadong, tila upang gumana.
>> Upang maaari naming gawin ang isang maliit na mas mahusay kaysa sa na ito, bagaman, maaari naming simulan upang maglinis bagay
up lang nang kaunti.
At pupuntahan ko talaga ipakilala ang isa sa iba pang mga bagay ngayon.
Pupunta ako sa magpatuloy at i-save ito sa ibang file.
At ako pagpunta sa tumawag sa ang file na ito string1.c lamang
upang maging pare-pareho sa code magagawa mong upang makahanap ng online.
>> At ng pagtuon sa ipaalam sa eksaktong kapareho code.
Ito ay lumiliko out na na hindi ko na naging uri ng pagkuha
para iginawad ang katotohanan na ang aking laptop, at siya namang, ang CS50 appliance
May ng maraming memorya, ng maraming RAM, ng maraming byte ng espasyo
kung saan ang maaari kong iimbak ng mga string.
>> Subalit ang katotohanan kung nai-type ko mahaba sapat, at sapat na mga keystroke,
Magagawa ko sa uri ng teorya sa higit pang mga character
kaysa sa aking computer May pisikal na memory para sa.
At ito ay may problemang.
Karamihan tulad ng isang int maaari lamang bilangin kaya mataas na, sa teorya,
maaari ka lamang Cram kaya maraming character sa RAM ng iyong computer o Random
Access Memory.
>> Kaya ako ay mas mahusay na inaasahan sa problemang ito, kahit
bagaman maaari itong maging isang bihirang sulok kaso, kaya na magsalita.
Hindi Nangyayari ba na madalas, maaaring mangyari.
At kung ito ang mangyayari at gagawin ko hindi inaasahan at programa para dito,
maaaring gawin sa aking programa na nakakaalam kung ano.
I-freeze, hang, reboot, kahit anong.
Isang bagay na mga inaasahang maaaring mangyari.
>> Kaya kung ano ako pagpunta sa gawin ngayon, henceforth talaga ito,
ay bago ko kailanman blindly gumamit ng variable tulad ng mga na
Tinakdaan ang return halaga ng ilang iba pang mga pag-andar tulad ng getstring,
Pupunta ako upang tiyakin na na halaga nito ay wasto.
Kaya alam ko lamang mula sa pagkakaroon basahin Dokumentasyon CS50 para getstring,
na sa huli kami ay ituro sa iyo sa, nagbabalik na getstring isang espesyal na simbolo
na tinatawag na null, N-U-L-L sa lahat CAPS, kung ang isang bagay napupunta mali.
>> Kaya normal, nagbabalik ito ng isang string.
Ngunit kung hindi man ay kung ito ay nagbabalik N-U-L-L-- ipapakita namin ay makakita kung ano talaga ang
means-- na lang paraan isang bagay masamang nangyari.
Ngayon ito ay nangangahulugang, na halos tulad ng sa simula, Maaari ko bang suriin ang kundisyon dito sa C,
kung s ay hindi katumbas null.
Kaya kung hindi mo nakita ito bago, Hindi ito nangangahulugan lamang ang katumbas.
>> Kaya ito ang sa tapat ng pantay na katumbas, na kung saan, isipin,
ay naiiba mula sa iisang katumbas, na kung saan ay assignment.
Kaya kung s ay hindi katumbas ng Null, pagkatapos lamang gawin
Nais kong isagawa ang mga linya ng code.
Kaya sa ibang salita, bago ako makisalamuha blindly
at simulan ang iterating sa ibabaw s, at pagpapagamot ng ito
na waring ito ay isang pagkakasunod-sunod ng character, Pupunta ako sa unang suriin,
maghintay ng isang minuto, ay y Talagang hindi katumbas ito espesyal na halaga, walang bisa?
>> Dahil kung ito ay, masamang bagay na maaaring mangyari.
At sa ngayon, ipagpalagay na ang masamang bagay ay nangangahulugan nangyayari ang iyong mga pag-crash ng programa,
at hindi mo kinakailangang mabawi.
Kaya tapat, mukha itong hindi maganda.
uri ng ito ay nakalilito ngayon upang sulyap sa.
Ngunit ito ay magiging higit pa pamilyar bago mahaba.
>> Ngunit Pupunta ako sa ipanukala ngayon ng isa sa iba pang mga pagpapabuti.
Iyon ay isang pagpapabuti sa kawastuhan.
Aking Mga programa na ngayon ang higit pa tama, dahil sa mga bihirang kaso na hindi sapat na memorya
Umiiral, ako pangasiwaan ito, at ako makikita lamang gawin wala.
Ako ng hindi bababa sa hindi nagka-crash.
>> Ngunit gawin ng isang pangwakas na bersyon dito ipaalam.
At isang file na tinatawag string2.c.
Pupunta ako sa i-paste na parehong code para sa sandali lamang,
at pupuntahan ko upang i-highlight ito line, 11, narito, para sa isang sandali lamang.
Ngayon ang katotohanang ay ang smart compiler tulad ng maaaring ayusin Clang ito para sa amin
sa likod ng mga eksena nang walang aming kailanman alam.
Ngunit ni isipin ang tungkol ito ipaalam fundamentally bilang may problemang mga disenyo.
>> Ang linya ng code ay, siyempre, na nagsasabi, simulan ang ilang mga variable i sa 0.
Iyon ay medyo prangka.
At kung ano muli ay ito pahayag, narito, ++ i, ginagawa?
Nakita na namin ito dati, ngunit namin ay hindi talaga makipag-usap tungkol dito.
>> Madla: Incrementing i.
>> David J. MALAN: Incrementing i.
Kaya sa bawat iteration sa pamamagitan ng ito loop, ang bawat ikot ng panahon,
ka incrementing i-isa.
Kaya ito ay makakakuha ng mas malaki, at mas malalaking, at mas malaki hanggang sa magwakas ang loop.
Paano ito wakasan?
Doon na rin ang gitnang ito kondisyon na iyong ginamit namin bago.
Na iyong nakita at sa walkthroughs sa P set.
>> Ngunit kung ano ang sinasabi ng mga ito?
Gawin ang mga sumusunod loop kaya hangga't i ay mas mababa sa kung ano?
Madla: Ang haba ng string.
David J. MALAN: Ang haba ng string.
Kaya ito nagta-translate ng magandang cleanly sa Ingles sa na kahulugan.
Ngayon ang problema ay na sa tuwing ako umulit sa pamamagitan ng loop sa teorya,
Ako na humihiling sa tanong na ito.
Ay i mas mababa kaysa sa haba ng string ng mga s?
>> Ngayon ay i pagbabago sa bawat iteration?
Ito ay.
Dahil sa ++.
Kaya bawat iteration i nakukuhang mas malaki.
Ngunit ang mga nakakakuha ng mas malaki, o mas maliit, o pagbabago sa lahat?
Bilang
Kaya sa mga tuntunin ng disenyo, ang isa sa mga axes kasama na sinusubukan naming suriin ang code
sa klase, ito pakiramdam ng uri ng hangal.
>> Tulad ka nang literal, sa bawat pag-ulit
ng loop na ito na humihiling sa muli parehong damn pinag-uusapan,
at muli, at muli, at literal ito ay hindi kailanman pagpunta upang baguhin.
Hindi bababa kung hindi ako ng pagpindot s at sa pagsubok na baguhin ang mga nilalaman ng s.
Kaya ang maaari kong gawin ang isang maliit na mas mahusay kaysa sa na ito.
>> At kung ano ang pupuntahan ko gawin ay hindi Ipinahahayag variable i isa lamang,
ngunit isang pangalawang variable idedetalye ko nagkataon, ngunit conventionally, tawagin n.
Magtalaga n katumbas ng string haba ng s.
At pagkatapos sa paglipas dito, pupuntahan ko gawin ang isang maliit na matalino sa pag-optimize, kaya
upang makipag-usap, na sa pagtatapos ng araw ay wala nang tama o walang mas tama
kaysa dati.
Ngunit ito ay isang mas mahusay na disenyo.
Sa katotohanan na gumagamit ako mas kaunting oras, mas kaunting mga ikot ng CPU, kaya
upang makipag-usap, upang sagutin ang parehong pinag-uusapan, ngunit minsan lamang.
>> Ang anumang mga tanong sa pangkalahatang na prinsipyo ng pagpapabuti,
sinasabi, kahusayan ng isang program?
Oo?
Madla: Bakit mo gamitin ang [INAUDIBLE]?
David J. MALAN: Magandang katanungan.
Kaya bakit ko ilalagay namin ang ++ sa dulo ng i halip na sa simula ng i?
Sa kasong ito, mayroon itong hindi nagagamit na epekto.
At sa pangkalahatan, ay may posibilidad kong gamitin ang postfix operator
upang ito ay mas malinaw bilang isang maliit na sa kapag ang operasyon ay nangyayari.
>> Para sa mga pamilyar, mayroong isa pang pahayag kung saan maaari mong gawin ++ i.
Ito ang mga pagtakbo katumbas sa kasong ito
dahil walang ibang tao ay paligid na incrementation.
Ngunit maaari kang makabuo ng mga mga kaso at mga linya ng code
kung saan na gumagawa ng isang pagkakaiba.
Kaya sa pangkalahatan, hindi namin ring makipag-usap tungkol sa isang ito.
Dahil tapat, ito ay ginagawang iyong code sexier, at uri ng slicker,
at mas kaunting character.
Ngunit ang katotohanang ay ito ay isang pulutong mas mahirap, Sa tingin ko, kahit na para sa akin upang wrap ang aking isip
sa paligid nito kung minsan, ang pagkakasunud-sunod ng mga pagpapatakbo.
Kaya bilang isang bukod, kung ikaw talagang hindi gusto ito,
kahit na ito ay uri ng maalindog naghahanap, maaari mo ring gawin i + = 1,
kung saan ay ang hindi maganda bersyon ng parehong ideya para sa postfix incrementation.
>> Sinasabi ko ito at mo Dapat gawing masaya ng ito,
ngunit kakailanganin mong dumating upang makita ang code bilang isang bagay na maganda bago ang haba.
>> [Tawa]
>> David J. MALAN: Mag-right?
Oo.
Tanong sa gitna.
>> Madla: Huwag kailangan mong sabihin int n?
David J. MALAN: gawin mo Hindi kailangang sabihin int n.
Kaya dahil pa sinabi namin int, Hindi mo kailangang sabihin itong muli.
Ang catch ay na n May sa maging ang parehong uri ng data bilang i.
Kaya na ang isang kaginhawahan lamang dito.
Oo.
>> Madla: Maaari kang pumunta sa ibabaw ng bracket-print ng character s i muli?
David J. MALAN: Hinding.
Kaya% c, isipin ang mula sa nakaraang panahon, ay isang placeholder lamang.
Ito ay nangangahulugan na maglagay ng char dito.
backslash n, siyempre, lamang paraan maglagay ng line break dito.
Kaya na lamang ay umalis, ngayon, ito piraso ng bagong syntax.
At ito ay literal na nagsasabi, Kunin ang string na tinatawag s at pumunta makakuha nito
i'th ng character, kaya na magsalita.
>> At panatilihing ako sinasabi i'th ng character dahil sa bawat pag-ulit ng loop na ito
ito ay waring ay nagpi-print namin out, una s bracket 0,
dahil maaaring sabihin ng isang programmer.
Pagkatapos ay s bracket 1, pagkatapos s bracket 2, pagkatapos ay i-3, pagkatapos 4.
Ngunit siyempre ito ay isang variable, kaya lang ipahayag ko ito sa i.
>> Key, bagaman, ay upang mapagtanto, lalo na kung hindi mo hindi
Na-acclimating sa mundong ito ng programming, na kung saan namin ang lahat ng
mukhang upang mabilang mula sa zero, gotta simulan ang pagbibilang mula sa zero ngayon.
Dahil ang mga string, unang character, ang z sa Zamyla ay para sa mas mahusay o mas masahol pa para sa
pagpunta sa nakatira sa lokasyon numerong zero.
>> Ang lahat ng mga karapatan, kaya hayaan mo akong dalhin amin bumalik dito upang Zamyla
at makita kung ano talaga ang pagpunta sa ilalim ng hood.
Kaya't ito paniwala na ang uri Casting.
Maaaring mayroon kang aktwal na nag-play na may ito nagagawa,
siguro para sa Hacker edisyon ng P-set ang isa.
Ngunit uri Casting lamang ay tumutukoy sa kakayahan sa C at ilang iba pang mga wika
upang i-convert sa isang uri ng data papunta sa iba.
>> Ngayon kung paano maaari naming makita na ito medyo straightforwardly?
Kaya ito, pagpapabalik, ay ang simula ng alpabeto Ingles.
At ang konteksto, isipin ang, mula sa tulad ng isang linggo nakaraan ay ASCII.
Ang American Standard Code Impormasyon para sa Interchange.
Aling lamang ang talagang mahabang paraan ng pagsabi ng pagmamapa mula sa mga titik
sa mga numero, at mula sa mga numero sa mga titik.
>> Kaya A sa pamamagitan ng M dito, tuldok tuldok tuldok, linya up sa, pagpapabalik,
ang decimal numero 65 sa up.
At hindi namin ginawa makipag-usap tungkol sa tahasan,
ngunit tiyak mayroong katulad na mga numero para sa maliliit na mga titik.
At sa katunayan, may mga.
Ang mundo nagpasya ilang taon nakalipas na isang maliit, isang maliit na mga,
ay magiging 97.
At kaunti b ay pagpunta upang maging 98, at iba pa.
>> At para sa anumang iba pang mga key sa iyong keyboard, mayroong
pagpunta sa maging isang katulad na pattern ng bits.
O equivalently, isang decimal na numero.
Kaya ang tanong sa kamay, pagkatapos, ay kung paano namin
aktwal na makita ito sa ilalim ng hood?
Kaya pupuntahan ko pumunta sa paglipas muli sa gedit.
At sa halip na uri ang isang ito mula sa simula,
Pupunta ako sa magpatuloy at buksan up lamang ng isang bagay
mula sa code na ngayong araw na tinatawag na ASCII zero.
>> At ASCII zero ganito ang itsura.
Kaya balutin ng ating mga isip sa paligid ito ipaalam.
Kaya una, kinomentuhan ko ang code, na maganda.
Dahil literal na nagsasabi sa akin kung ano ang aasahan,
ipakita ang isang pagmamapa para sa uppercase na titik.
Ngayon ko hindi pa alam kung ano ang aking ibig sabihin sa pamamagitan ng na, kaya ni infer ipaalam.
>> Sa Ingles, siguro medyo techie Ingles,
ano ang ginagawa line 18 lumitaw na ginagawa para sa amin?
Line 18 lang.
Ano ang pampalaglag ito?
Anong ito ng pagpunta sa kick-off dito?
>> Madla: Ang isang loop.
>> David J. MALAN: Ang isang loop.
At kung gaano karaming beses ay na pagpunta upang umulit?
Madla: [INTERPOSING tinig] anim na beses.
David J. MALAN: Hindi anim na beses.
Madla: 26 ulit.
David J. MALAN: 26 ulit.
Oo, paumanhin.
26 ulit.
Bakit?
Well, ito ay isang maliit na kakaiba, ngunit Sinimulan ko ang pagbibilang mula 65.
Alin ang kakaiba, ngunit hindi mali.
Ito ay hindi masama sa bawat halimbawa.
At ako ginagawa na lamang dahil, para sa halimbawang ito,
Uri ng ako anticipating na kabisera A ay 65.
Ngayon hindi ito ang pinaka-eleganteng paraan upang gawin ito, sa uri ng matapang na code
Esoteric mga halaga ng isa na hindi ay palaging inaasahan matandaan.
>> Ngunit sa ngayon, mapansin na ako ginagawa ito sa pamamagitan ng hanggang 65 plus 26.
Dahil tila hindi ko kahit na nais na gawin ang aritmetika sa aking ulo.
Kaya Ipapaalam ko ang Compiler gawin ito.
Ngunit pagkatapos ay sa bawat loop, ang bawat iteration ng loop, ako incrementing i.
>> Kaya ngayon ito ang hitsura ng kaunti cryptic.
Ngunit dapat naming magkaroon ang mga pangunahing gusali bloke kung saan upang maunawaan ito.
% C ay isang placeholder para lamang sa isang char.
% I ay isang placeholder para sa isang int.
At ito ay lumiliko out na sa pamamagitan ng paggamit na ito bagong syntax, ito parenthetical, kaya
magsalita, kaya ng isang uri ng data sa loob ng isang panaklong,
Maaari ko bang pilitin ang Compiler upang tratuhin ayaw ko ay isang integer, ngunit bilang isang char.
>> Sa gayong paraan ng pagpapakita sa akin ng character katumbas ng numerong iyon.
Ngayon down na dito, ang code na ito ay halos magkapareho.
Nais ko lamang upang gumawa ng tahasang sobrang ang katotohanan
na ako na nagsisimula sa 97, na kung saan ay lowercase ng.
Sa up sa pamamagitan ng 26 higit pang mga titik.
At ako doing-- muli, abot i, kaya upang makipag-usap.
O uri ng Casting i, kaya upang makipag-usap.
>> Mula sa isang int sa isang char.
Kaya ang resulta ay magiging, tapat, impormasyon namin alam.
Pupunta ako sa gumawa ascii-0 hindi dot-- tuldok c.
Abiso, malamang na ginawa na hindi sinasadya bilang ko lang ginawa nang hindi sinasadya.
Gumawa ng ascii-0.
Ngayon Pupunta ako sa gawin ./ascii-0.
Magtatagal ako mag-zoom in, at sa kasamaang-palad ito ay pagpunta sa mag-scroll off ang screen.
Ngunit nakita namin ang isang buong tsart kung saan isang mapa upang 97, b mga mapa upang 98,
at kung mag-scroll pataas namin ang higit pang A, siyempre, mga mapa upang 65.
Kaya ito ay lamang na sabihin na kung ano ang nai-pangangaral namin,
mayroong ito equivalence, ay sa katunayan ang kaso sa katotohanan.
Kaya isang mabilis na pagbabago ng ito.
Hayaan akong magbukas ng mga ascii-1.c.
At mapapansin ang ganitong matalino, uri ng, paglilinaw ng ito.
Ito ay ascii-1.c, at mapapansin ang ganitong nakatutuwang bagay.
>> At ito talaga ang nakakakuha ng puso ng kung ano ang mga computer ang ginagawa.
Kahit na namin ang mga tao ng ginagawa hindi mabibilang sa mga tuntunin ng letters--
Hindi ko simulan ang pag-iisip, lahat ng karapatan ng isang pagkatapos b,
at gamitin ang mga upang mabilang pisikal na mga bagay.
Maaari mong tiyak na sabihin na gusto kong i- pagsisimula ng ilang mga variable na tinatawag na c--
ngunit maaari ko na tinatawag na ito anything-- kaya c ay nasimulan sa kabisera A.
>> Dahil sa pagtatapos ng araw, ang computer hindi na mahalaga ang kung ano ang iyong pag-iimbak,
pinahahalagahan lamang ito kung paano mo gusto ipakita ang impormasyon na iyon.
Paano mo nais ang computer upang bigyang-kahulugan na pattern ng mga bit?
Kaya ito ay hindi isang bagay ko Gusto inirerekumenda sa pangkalahatan ang paggawa.
Ito ay talagang lamang ng isang halimbawa upang ihatid na maaari mong ganap
simulan ang isang integer sa isang char.
Dahil sa ilalim ng hood ng isang char, siyempre,
ay isang numero lamang 0-255.
>> Kaya maaari mong tiyak ilagay ito sa loob ng isang int.
At kung ano ito rin nagpapakita ay na namin
Maaari convert mula sa isa nagta-type sa isa pang, narito,
sa huli nagpi-print ang parehong bagay.
At sa katunayan, ito ay ko aayusin ang online-- ay sinadya upang sabihin na ito, muli, dito.
Hayaan akong linisin ito up online, at idedetalye namin makita sa isang online na walkthrough kung kinakailangan,
ano ay nilayon doon.
>> OK.
Kaya huling halimbawa kinasasangkutan ngayon isang at b at pagkatapos ay idedetalye namin
tumagal ng mga bagay up ng isang bingaw.
Kaya gamit ang isang at b at c sa ang paggamit ng malaking titik
at ang equivalence hinggil doon, sabihin tingnan ang halimbawa na ito, dito.
Ang isa pang halimbawa code.
Susubukan naming buksan ang isang bagay na na ginawa, kaya kami
Hindi mo na kailangang i-type ito lahat out mula sa simula.
>> At mapansin sa pag-asa ginagamit namin ang maramihang header
mga file, bukod sa kung saan ay ang aming bagong kaibigan, string.h.
Ngayon ito ay mukhang, sa unang sulyap, medyo cryptic.
Ngunit sabihin makita kung hindi namin maaaring dahilan sa pamamagitan ng kung anong nangyayari sa dito.
Unang nakakuha ako ng string mula sa user, at inilagay ko na ang string sa isang variable
tinatawag s.
Kopyahin i-paste mula sa bago.
Sa 22 linya, tila ako ginagawa kung ano mismo ang
Ginawa ko ng ilang sandali ang nakalipas, ako iterating sa ibabaw ng mga character sa s.
>> At ang mga bagong trick dito ay gumagamit ng haba string, ang menor-optimize
ng pag-iimbak ang haba string sa n, sa halip na sa pagtawag strlen muli,
at muli, at muli.
At tulad ng pagsuri na i Mababa sa n.
Ngayon dito, mga bagay na makakuha ng isang maliit na kawili-wili.
Ngunit ito ay isang application lamang ng parehong mga bagong ideya.
Ano ang ginagawa sa Ingles bracket s i kumatawan?
>> Madla: Binibilang ang bawat na character [INAUDIBLE].
>> David J. MALAN: Binibilang ang bawat character.
At kahit na higit pa succinctly, bracket s i kumakatawan sa kung ano?
Gagawin sabihin sa iyo.
Hindi upang ilagay mo sa lugar dito.
>> Madla: Well--
David J. MALAN: Kaya kung ang salitang is-- kung ang string ay Zamyla, na starts--
Madla: harapin --you sa ang mga character na separately--
David J. MALAN: Mahusay.
Mismong.
Pinapayagan ka ng pagtatanda square bracket upang ma-access ang bawat character na isa-isa,
kaya mga bracket 0 ay magiging ang unang character sa string.
mga bracket 1 ay magiging ang pangalawa, at iba pa.
Kaya ang tanong ako nagtatanong, dito, sa kondisyon na ito ay kung ano?
Ay ang i'th character ng mga mas mataas sa o katumbas ng lowercase ng?
At kung ano ang ibig sabihin nito, narito, na may double ampersand?
Madla (magkasama): At.
David J. MALAN: At.
Ito ay katumbas lang sa ito.
At ay hindi isang keyword sa C, mayroon kang mag- paggamit, annoyingly, ampersand ampersand.
At ito, kabaligtaran, ay humihingi ay ni i'th character na mas mababa sa o katumbas
Maliit na titik sa z?
At muli, narito ang kung saan pag-unawa sa pinagbabatayang
pagpapatupad ng isang computer na saysay.
Pansinin na, kahit na mayroon akong ang tuldok tuldok tuldok banda roon,
mukhang sa pamamagitan ng z sa maliliit na titik ay lahat ng mga magkadikit na mga halaga ng hanggang 97 mula sa up.
>> At pareho para sa uppercase na nagsisimula sa 65.
Kaya ang takeaway, pagkatapos, ay na sa wikang Ingles,
kung paano nais mong ilarawan kung ano ang linya 24 ginagawa?
Oo?
>> Madla: Sa 24 ito ng pagsuri upang makita kung ang bawat character ay isang maliit na mga.
David J. MALAN: Ito ay pag-check kung bawat character ay isang maliit na mga titik.
Kaya kahit higit pa succinctly, ay ang i'th character ng lowercase s?
Iyon lang kami pagpapahayag dito lohikal,
isang maliit na cryptically, ngunit sa huli medyo straightforwardly.
Ay ni i'th character na lowercase?
>> Kung gayon, at narito ang kung saan bagay makakuha ng isang maliit na isip bending
para sa isang sandali lamang, kung kaya, pumunta Magpatuloy at i-print ang isang character.
Kaya ito ay isang placeholder lamang, ngunit kung ano ng character?
Bakit ako paggawa s bracket i minus na ito expression dito?
>> Well mapansin ang pattern dito.
Ang aktwal na numbers ay hindi mahalaga kaya magkano.
Ngunit mapansin na 97 ay gaano kalayo ang layo mula 65?
>> Madla: 32.
>> David J. MALAN: 32.
Gaano kalayo ang layo ay 98 mula sa 66?
>> Madla: 32.
>> David J. MALAN: Little c mula sa malaking C?
32.
Kaya mayroong 32 hops mula sa isang titik sa isa pa.
Kaya tapat ako, ng dati gawing simple ito upang iyon.
Ngunit pagkatapos uri ng matapang na ako sa coding ito mababang antas ng pag-unawa
na walang reader ay kailanman pagpunta upang maunawaan.
Kaya pupuntahan ko ng tuntuning panlahat ito bilang, ako malaman ang mga maliliit na mga titik ay mas malaki.
Alam ko ang mga malalaking titik ay mas maliit na mga halaga, ironically.
>> Ngunit ito ay epektibo katumbas ng sinasabi ibawas 32 mula sa mga bracket i.
Kaya sa konteksto ng mga mga titik, kung ang titik
ang mangyayari sa maging isang, lowercase isang, at ibabawas ko 32,
kung ano ang epekto mayroon ang iyon, mathematically, sa lowercase ng?
Madla: Capitalizes--
David J. MALAN: Capitalizes ito.
At sa katunayan, ito ang dahilan kung bakit ang aming programa ay tinatawag na ika-capitalize sa zero.
Ang programang ito ay alinman sa capitalizes ng sulat,
makalipas na tingnan kung ito ay sa katunayan isang lowercase na titik.
Kung hindi man, sa 30 na linya, ano ang gagawin ko kung hindi ito isang maliit na mga titik na ako
pagtingin sa sa isang partikular na iteration sa loop.
I-print lamang ito.
>> Kaya huwag baguhin bagay-bagay hindi iyon kahit na maliit na mga.
Limitahan ang iyong sarili sa maliit na isang maliit na sa pamamagitan ng z.
Ngayon ito ay medyo arcane.
Ngunit sa pagtatapos ng araw, ito ay kung paano namin, isang beses sa isang oras,
Nagkaroon upang ipatupad ang mga bagay.
Kung sa halip ko bang buksan ika-capitalize isa, oh salamat sa diyos.
Mayroong isang function na tinatawag na sa itaas na maaari
gawin ang lahat ng ginawa namin lamang sa isang medyo mababa ang antas.
>> Ngayon sa itaas ay kawili-wiling dahil ito ay ipinahayag sa isang file,
at gusto mong malaman ito lamang sa pamamagitan ng pagsusuri sa papeles,
o ini-Sinabi sa, sabihin nating, sa klase, kung saan umiiral na ito, sa isang file na tinatawag na ctype.h.
Kaya ito ay isa pang bagong kaibigan ng atin.
At sa itaas na gumagana nang eksakto ano nagmumungkahi ang pangalan nito.
>> Maaari pumasa sa, bilang isang argument, sa pagitan ng mga panaklong, ang ilang mga character.
Pupunta ako sa pumasa sa i'th ng character s ng paggamit ng aming magarbong bagong pagtatanda
kinasasangkutan ng mga square bracket.
At maglaan ng hula, ano ang return halaga ng sa itaas na tila pagpunta
upang maging?
Ang kabisera titik.
>> Kaya kung pumasa ko sa lowercase ng, sana ay, sa pamamagitan ng kahulugan ng sa itaas,
ito ay pagpunta sa magbalik ng uppercase A. Kung hindi man,
kung ito ay hindi isang maliit na mga titik sa ang unang lugar, i-print ko lang ito.
At sa katunayan, mapapansin ang pangalawang kaibigan dito.
Hindi lamang sa itaas na umiiral, ngunit ay mas mababa, na
talaga sumasagot ng tanong na para sa akin.
>> Ngayon kahit sino ay nagsulat ng mga bagay na ito, 10s ng taon na ang nakaraan, alam mo kung ano?
Ipinatupad sa itaas at babaan ang paggamit ng code tulad nito.
Ngunit muli, pare-pareho sa sa ideya na ito ng abstracting ang layo,
uri ng, mas mababa ang antas Mga detalye ng pagpapatupad.
At nakatayo sa mga balikat ng mga tao sino ang dumating bago sa amin, ang paggamit ng mga pag-andar
tulad ng sa itaas at ay mas mababa, na wonderfully sapat ay mabuti
na may pangalang upang sabihin kung ano ang ginagawa nila, ay isang kahanga-hangang Huwaran upang magpatibay.
>> Ngayon, ito ay lumiliko out na kung Nabasa ko sa pahina ng tao para sa, sabihin nating, sa itaas,
Matuto akong magkaroon ng iba.
Kaya tao toUpper.
Ito ay isang maliit na napakalaki.
Ngunit paunawa, narito na ang pagbanggit ng ang header ng file na dapat kong gamitin.
Bilang isang bukod, dahil ito ay nakaliligaw, ang pag-andar
Ginagamit ng ints sa halip na karakter para sa mga kadahilanang ng error checking.
Ngunit marahil namin dumating bumalik sa mga iyon sa hinaharap.
>> Ngunit mapansin, narito, sa itaas na-convert ang titik c sa uppercase kung maaari.
Kaya na medyo prangka.
At maging higit pa ng kaunti tukoy na ngayon hayaan.
Tingnan natin ang bahagi ng Hayaan ng tao sa ilalim ng pahina return halaga.
Ang halaga ay ibinalik na ng ang na-convert titik.
O c, kung ang conversion ay hindi posible,
kung saan c ay ang orihinal na pag-input.
Aling Alam ko mula dito, mula sa ang argumento sa itaas upang.
>> Kaya kung ano ay ang takeaway ng ito?
Ang halaga ay ibinalik na ng ang na-convert sulat,
o c, ang orihinal na titik, kung ang conversion ay hindi posible.
Ano pagpapabuti maaari kong samakatuwid gumawa sa disenyo ng aking code ng?
Oo?
>> Madla: Maaari mong alisin ang tao.
David J. MALAN: Maaari ko alisin ang mga tao statement,
at hindi lamang sa iba statement.
>> Madla: Maaari mong alisin ang [INAUDIBLE].
>> David J. MALAN: Maaari ko alisin ang buong tinidor
sa kalsada, ang kung tao nang sama-sama.
Kaya nga, hayaan mo akong magbukas ang huling bersyon ng ito,
ika-capitalize-2 at mapansin lamang kung paano, kung mo, sexy, ang code ay nakakakuha ngayon,
sa na-bawasan ko mula sa ilang pitong o kaya mga linya sa apat lamang,
ang pag-andar na aking sinadya sa pamamagitan lamang ng pagtawag sa itaas,
pagpasa sa mga bracket i, at pag-print out, may mga placeholder% c,
na partikular na character.
>> Ngayon arguably, mayroong isang bug, o hindi bababa sa panganib ng isang bug,
sa programang ito.
Kaya lamang na bumalik sa isang mas maagang takeaway,
ano ang dapat kong marahil ring gawin sa ang program na ito upang gawin itong mas matatag,
nang sa gayon ay walang paraan na ito crash, kahit sa mga bihirang kaso?
Madla: Tiyaking hindi null.
David J. MALAN: Tiyaking hindi null.
Kaya talaga ito, upang gumawa ito super pangngalang, ang dapat kong gawin ang isang bagay tulad,
kung s ay hindi null, pagkatapos ay sige at isagawa
mga linya ng code, na Maaari ko pagkatapos indent tulad ng iyon,
at pagkatapos ay ilagay sa aking malapit Brace.
Kaya mabuting tying-sama ng dalawang mga ideya.
Oo?
Madla: Maaari mo bang gamitin ang isang gawin habang loop, sa halip?
David J. MALAN: ma- Gagawin ko isang do habang loop?
Madla: gusto --you upang matiyak na iyong aktwal na [INAUDIBLE].
David J. MALAN: ma- gumamit ka ng do habang?
Maikling sagot, hindi.
Dahil ikaw ay tungkol sa ipakilala ang isa pang sulok kaso.
Kung ang string ay zero ng haba.
Kung halimbawa, ko lang pindutin ang Ipasok ang, nang hindi pag-type Zamyla.
Pupunta ako sa ipasa ka rin ng isang aktwal na string, dahil kakailanganin huli naming makita,
na may zero na mga character.
Ito ay isang string pa rin, ito lamang ay sobrang maikli.
Ngunit kung gumamit ka ng isang do habang, ka ng pagpunta sa blindly
subukan upang gawin ang isang bagay na may igalang sa na string,
at walang pupuntahan maging doon.
>> Madla: Well, kung ginawa mo gawin [INAUDIBLE] habang s--
David J. MALAN: Oh nakikita ko, panatilihing pagkuha ng isang string mula sa user.
Kaya maikling sagot, mo maaari, at panatilihin pestering
ang mga ito upang bigyan ka ng isang string na sapat na maikli upang magkasya sa memory.
Hinding.
Ko lang ang pinili na huwag.
Kung hindi nila akong bigyan ng string na ako gusto, ako ako sa pagtigil, ako ako pagbibigay up.
Ngunit talagang, para sa na layunin, maaari mong ganap na gawin iyon.
>> Kaya header na file sa library na Ikinalulungkot namin ngayon pamilyar sa mga ito, dito.
Standard I / O, CS50.h, string.h, ctype.h, at mayroong, sa katunayan, ang iba.
Ang ilan sa iyo Natuklasan ang matematika library sa math.h.
Ngunit ipaalam sa akin ipakilala, ngayon, upang sa mapagkukunan na ito na staff CS50, Davin,
at Rob, at Gabe partikular na na inilagay nang magkasama.
Iyon ay malapit na link sa website ang kurso na iyon.
Ito ay tinatawag na CS50 sanggunian.
>> Aling lamang upang mabigyan ka ng isang mabilis panlasa ng ito, ay gumagana tulad ng sumusunod.
Hayaan akong pumunta sa reference.cs50.net.
Makikita mo sa kaliwang kamay gilid ng napakatinding listahan
ng mga function na ay may c.
Ngunit kung pinapahalagahan ko, para sa mga sandali, tungkol sa isang bagay tulad ng strlen,
Maaari ko ba itong i-type doon.
Pini-filter ito pababa sa listahan upang lamang kung ano ang aking nagmamalasakit sa.
Pupunta ako sa i-click ito.
At ngayon sa kaliwa, makikita mo kung ano ang inaasahan naming
ay isang mas prangka, pantao friendly na pagpapaliwanag kung paano
Gumagana ito function.
>> Ibinabalik ang haba ng isang string.
Narito ang isang buod, narito kung paano mo gamitin ito sa mga tuntunin ng header ng file,
at sa mga tuntunin ng kung ano ang function kamukha sa mga tuntunin ng mga argumento nito.
At pagkatapos dito, babalik ang haba ng isang string.
Ngunit para sa mga ng sa iyo ng karagdagang kumportable, Maaari mo talagang nag-click ang nalalaman comfy,
at ang mga nilalaman ng page, ngayon, magbabago
na maging mga default na halaga ng kung ano ang makakakuha ka sa pamamagitan ng paggamit sa pahina ng tao.
>> Sa ibang salita, CS50 sanggunian ay isang Pagpapasimple
ng tao mga pahina ng kawani, para sa mga mag-aaral.
Partikular, ang mga mas kumportable at sa pagitan ng, sa gayon ay
Hindi mo na kailangang subukang mag-wrap ang iyong isip sa paligid, tapat,
ilang medyo cryptic syntax at dokumentasyon ang ilang sandali.
>> Kaya panatilihin na sa isip sa mga araw na darating.
Kaya dito, muli, ay isang Zamyla.
Ngayon magtanong ng isang katanungan na kung Hayaan higit pa ng kaunti ng tao naa-access.
Salamat sa Chang, na naging pag-print ng higit pang mga elepante
walang-hintong para sa nakalipas na ilang araw.
Mayroon kaming ng pagkakataon na magbigay ng hindi bababa sa isa sa mga ito ang layo.
Kung maaari naming makakuha lamang ng isa volunteer na dumating sa up upang gumuhit sa screen.
Paano ang tungkol dito?
>> Halika sa up.
Ano ang iyong pangalan?
Alex: Alex.
David J. MALAN: Alex.
Lahat ng karapatan.
Alex, dumating sa up.
Humihingi kami tungkol sa upang makita ang iyong sulat-kamay sa screen dito.
Ang lahat ng mga karapatan, mabait sa matugunan mo.
>> Alex: Nice mo na matugunan ang sa iyo.
>> David J. MALAN: Lahat ng karapatan.
Kaya, sobrang simple ehersisyo.
Bar ay hindi na mataas upang makakuha ng isang elepante ngayon.
Ikaw ay nagpe-play ang papel na ginagampanan ng getstring.
At pupuntahan ko sabihin lamang sa iyo ang string na iyong nakuha.
At ipagpalagay na ikaw, getstring, ay nai-tinatawag.
At ang mga tao, tulad ng sa akin, mayroon nai-type sa Zamyla, Z-A-M-Y-L-A.
Pumunta lamang magpatuloy at isulat Zamyla sa screen na waring maaaring nakuha mo ito
at naka-imbak ito sa isang lugar sa memorya.
>> Ang pag-iwan kuwarto para sa kung ano ang ilang mga iba pang mga words-- na OK lang, panatilihin ang pagpunta.
>> [Tawa]
>> Kaya Zamyla, Mahusay.
Kaya ngayon ipagpalagay na ikaw, getstring, ay tinatawag na muli.
At dahil dito, ibigay ko sa inyo, sa keyboard, may isa pang pangalan, Belinda.
Lahat ng karapatan.
At ngayon sa susunod na getstring ay na tinatawag, nagta-type ako sa isang bagay tulad ng Gabe,
G-A-B-E. Talaga ka pagkuha sa gitna random access memory.
Alin ang pagguhit ng lahat ng bagay ganap na random.
OK.
>> [Tawa]
Alex: Paumanhin aking sulat-kamay ay masama.
David J. MALAN: Hindi, iyon ang OK.
At kung paano tungkol sa Rob, R-O-B. OK.
Mahusay.
Kaya ako ay hindi inaasahan mong nais uri ng mga bagay-ipon out sa ganitong paraan.
Ngunit maaari kaming magsagawa ng trabaho na ito.
Kaya kung paano pumunta ka tungkol sa laying ang mga karakter sa memory?
Sa ibang salita, kung sa tingin namin ng ito hugis-parihaba itim na screen
bilang na kumakatawan sa isang RAM, o memory computer.
>> At isipin na RAM ay isa lamang ang maramihang mga bytes,
at bytes ay ang maramihang mga bits.
At bits ay kahit papaano ipinatupad, sa pangkalahatan
may ilang mga paraan ng koryente sa hardware.
Kaya na uri ng layering na usapan natin ang tungkol
at maaari na ngayong tumagal para sa ipinagkaloob.
Paano mo pumunta ka tungkol sa sa pagpapasya kung saan upang sumulat
Rob kumpara sa Gabe kumpara Belinda kumpara Zamyla?
>> Alex: ginawa ko lang ito sa umorder na sinabi mo sa akin.
>> David J. MALAN: At iyon ay totoo.
Ngunit kung ano ang nasasaklawan kung saan mo ilalagay Pangalan Belinda at pangalan ni Gabe?
>> Alex: Wala?
David J. MALAN: [LAUGHS] Kaya na gumagana, na multa.
Kaya mga computer ay maliit higit pa kaysa sa maayos na.
At kaya kapag implement-- namin manatili doon para sa isang moment-- lamang kapag kami talaga
ipatupad ang isang bagay tulad ng getstring sa isang computer,
Zamyla maaaring inilatag nang halos tulad ng ginawa mo sa screen, doon.
>> At kung ano ang key upang mapansin dito, kung ano ang ginawa Alex,
ay mayroong uri ng isang demarcation kasama ng bawat isa sa mga salitang ito, i-right?
Hindi mo isulat Z-A-M-Y-L-A-B-E-L-I-N-D-A-G-A-B--
sa ibang salita, mayroong ilang mga uri ng demarcation na mukhang,
uri ng, random na pagpupuwang sa pagitan ng mga iba't-ibang mga salita.
Ngunit iyon lamang ang mabuti, dahil kami mga kawani na tao ay maaari na ngayong
ilarawan sa isip na ang mga ito ay apat na iba't ibang mga string.
Ito ay hindi isang pagkakasunod-sunod lamang ng napakaraming mga character.
Kaya isang computer, pagkatapos, samantala, Maaaring tumagal ng isang string tulad ng Zamyla,
ilagay sa bawat isa sa mga titik sa loob ng isang byte ng memorya.
Ngunit ang numerong iyon ay higit na mas malaki, siyempre, kaysa sa anim na character.
>> Mayroong isang buong bungkos ng RAM.
At kaya henceforth, ito grid ng mga kahon ay pagpunta
upang kumatawan sa kung ano Alex lamang ginawa dito sa screen.
At ngayon, Alex, kami makakapag-alok sa iyo ng isang asul o isang orange elephant mula sa Chang.
Alex: ko makikita tumagal ng asul na elepante.
David J. MALAN: Isang bughaw na elephant.
Kaya isang malaking round ng applause, kung magagawa namin, para sa Alex dito.
>> [APPLAUSE]
>> Alex: Salamat sa iyo.
David J. MALAN: Salamat sa iyo.
Kaya ang takeaway ay na, kahit na ang pattern uri ng nagbago sa paglipas ng panahon, dito
sa board, nagkaroon na ito demarcation kabilang sa mga iba't-ibang mga string
Alex na nakuha ko para sa amin.
Ngayon mga computer, tapat, maaaring gawin ang parehong bagay.
Maaari nilang uri ng plop mga string kahit saan sa RAM.
Hanggang dito, sa paglipas dito, down na dito, pababa dito.
>> Maaari nilang gawin nang eksakto na.
Ngunit, siyempre, na Marahil hindi ito ang pinakamahusay na pagpaplano.
Mag-right?
Kung iningatan ko na humihiling sa Alex sa makakuha ng mga pangalan, marahil siya nais
maglagay ng higit pa pababa dito, siguro up dito, sa paglipas dito, sa paglipas dito, sa huli
sa paglipas dito.
Ngunit may kaunti pang pagpaplano, tiyak, maaari kaming mag-ipon ng mga bagay ang higit pa cleanly.
At sa katunayan, iyon ang ginagawa ng isang computer.
>> Ngunit ang catch ay na kung ang susunod na string na nakukuha ko
pagkatapos Zamyla ay isang bagay tulad ng Belinda,
ipanukala kung saan maaari naming isulat ang sulat b may paggalang sa ang grid na ito?
Saan ninyo pumunta?
Sa kanan ng isang, sa ibaba ang z, sa ibaba ng isang?
Ano ang gusto maging iyong unang instincts?
Madla: Nasa ibaba ang z.
David J. MALAN: Kaya sa ibaba ang z.
At iyon ang kaakit-akit prangka, tama?
Ito ay uri ng kapong baka, ito ay kung ano ang ginagawa namin sa isang keyboard kapag pindutin ang Enter namin,
o ng isang email kapag gumagawa ng Naka-bullet na listahan ng mga bagay.
Ngunit ang katotohanang ay mga computer lamang na maging mas mahusay,
at Cram ay tiyak na bilang magkano data sa RAM hangga't maaari,
nang sa gayon ay hindi mo aaksaya ng anumang bytes.
Kaya hindi mo na-aaksaya anumang real estate ng iyong screen.
At ang problema, bagaman, ay ang kung literal naming ilagay ang titik
b pagkatapos ng, kung paano kami makapupunta sa alam kung saan nagtatapos pangalan Zamyla ni
at nagsisimula ang pangalan ng Belinda ni?
Kaya mo tao lamang ipinanukalang, mahusay, pindutin ang Enter key, mahalagang.
Ilagay ninyo pababa sa ibaba.
O kahit na bilang Alex ginawa, simulan ang pagsusulat lamang sa susunod na pangalan sa ibaba ang isang nakaraan,
at isa sa ibaba iyon, at pagkatapos ay sa ibaba ang isa na.
Iyon ay isang visual na cue.
>> Mga Computer magkaroon ng isa pang visual cue, ngunit ito ay isang kaunti pa succinct.
Ito ay ang funky character.
Backslash 0, na kung saan ay marahil reminiscent ng backslash n,
at iba pa, ngayon.
Ang mga espesyal na escape sequence.
Backslash 0 ay ang paraan ng na kumakatawan sa walong zero bits sa isang hilera.
0000 0000.
>> Ang paraan kung paano ka ipahayag na hindi upang pindutin ang numerong zero sa iyong keyboard,
dahil sa katotohanan na iyon ay isang ASCII char.
Mukhang isang numero, ngunit ay talagang isang decimal na numero
na kumakatawan sa pabilog glyph, sa paikot na typeface.
Samantala, backslash zero ay nangangahulugan, literal
ilagay walong zero bytes dito para sa akin.
>> Kaya ito ay medyo arbitrary.
Maaaring namin ang ginamit anumang pattern ng mga piraso, ngunit ang mundo
Nagpasya ilang taon na ang nakakaraan, na kinakatawan ang
ang dulo ng isang string sa memory, maglagay lamang ng buong bungkos ng mga zero.
Dahil maaari naming makita na iyon.
Ngayon ay nangangahulugan na walang mga titik ng alpabeto maaaring katawanin na may mga zero.
>> Ngunit iyon lamang ang OK, na nakakita kami na ginagamit namin sa 65 hanggang sa 97 sa up.
Hindi namin makuha kahit saan isara sa lahat ng mga zero.
Kaya Belinda sa memorya ng computer ay aktwal na pagpunta sa pumunta dito.
Iginuhit ko na ito sa kulay dilaw lamang upang gumuhit ng aming pansin sa mga ito.
At paunawa, masyadong, ito ay lubos na arbitrary.
Iginuhit ko na ito bilang isang grid.
Tulad ng, RAM ay isa lamang ng ilang mga pisikal na object.
Ito ay hindi kinakailangang magkaroon mga hilera at mga hanay, bawat se.
Ay Naging ito ang maramihang mga bytes ipinapatupad sa hardware kahit papaano.
Ngunit kung matapos Belinda ako nai-type sa pangalan ni Gabe,
siya ang nangyayari sa mga end up dito sa memorya, at kung nai-type ko sa pangalan ni Daven,
halimbawa, siya ang nangyayari sa mga end up dito.
At maaari ba akong patuloy na magsulat ng mas maraming mga pangalan.
>> Sa kasamaang palad, kung sinusubukan kong mag- magsulat ng isang napaka-mahaba ang pangalan,
Maaari ko kalaunan maubusan ng espasyo sa memory.
Kung saan, getstring ay pagpunta upang bumalik null, tulad ng sinabi namin.
Ngunit thankfully sa, bababa sa ang visual dito, hindi namin ginawa makakuha ng medyo malayo na.
>> Kung ano ang magaling Ngayon ay na ito pangkalahatang ideya ng pagpapagamot ng mga bagay
na nasa loob ng mga kahon ay kinatawan ng isang tampok ng C
at ng maraming mga wika, kilala bilang isang array.
Ang isang array ay isa pang uri ng data.
Ito ay isang istraktura ng data, kung gagawin mo.
Istraktura sa kamalayan ng ito talaga ito, uri ng, naghahanap tulad ng isang kahon, nang hindi bababa sa
sa mata ang iyong isip ni.
Ang isang array ay isang magkadikit Ang pagkasunod-sunod ng mga magkakahawig na mga uri ng data,
pabalik upang i-back upang i-back sa likod.
>> Kaya isang string, sa ibang mga salita, ay isang hanay ng mga karakter.
Ang isang hanay ng mga character.
Ngunit ito ay lumiliko out maaari kang magkaroon ng array ng bunches ng mga bagay.
Sa katunayan, maaari naming ilagay kahit na mga numero sa isang array.
Kaya ang form kung saan kami ay pagpunta sa simulan
Ang pagdeklara ng data na ito istraktura na kilala bilang isang array
Pupunta rin upang gumamit ng mga square bracket.
Ngunit ang mga square bracket ay pumunta sa ay may iba't ibang kahulugan sa kontekstong ito.
>> At makita ni ito tulad ng sumusunod ipaalam.
Ipagpalagay na Kakabukas ko up ng isang bagong file dito.
At i-save ko ito bilang ages.c.
At kukunin ko na i-save ito sa aking mga folder dito.
At ngayon pupuntahan ko sige at magsimulang mag-type ng isang bagay
tulad isama CS50.h, isama stdio.h, int pangunahing walang bisa.
At pagkatapos ay sa loob ng dito, gusto ko sa unang magkaroon ng isang int tinatawag na edad.
>> At pupuntahan ko gamitin iyon upang makakuha ng isang int mula sa user para sa kanyang edad.
Ngunit ang program na ito ay sinadya upang magamit ng maraming tao, para sa anumang konteksto.
Nakakuha ako ng isang linya ng mga tao.
Ang lahat ng mga ito ay i-type sa kanilang edad para siguro sa ilan, hindi ko alam,
kumpetisyon, o kaganapan na na-dating na sila para sa.
Kaya sa susunod na tao, ako Kailangan ng isa pang variable.
>> Dahil kung lang gagawin ko edad ay nakakakuha getInt, na
pagpunta sa clobber, o-overwrite edad sa nakaraang tao.
Nang sa gayon ay hindi mahusay.
Kaya ang aking unang instinct ay maaaring maging, oh, lahat ng karapatan,
kung gusto ko upang makakuha ng maraming mga tao tumawag ni ito age1 ages-- ipaalam,
int age2 nakakakuha int, int age3 nakakakuha getInt.
At ngayon pupuntahan ko gamitin ilang pseudocode code dito.
>> Gawin ang isang bagay na may mga numero.
Pababayaan namin na nakalabas para sa isa pang araw kung ano ginagawa namin doon, dahil kami lamang
na mahalaga para sa ilang sandali tungkol sa age1, age2, age3.
Sa kasamaang palad, sa sandaling ko ipunin ang programang ito
at ilagay ito sa harap ng aktwal na mga gumagamit, ano ang fundamentally mahinang disenyo
desisyon ay tila kong ginawa?
Oo?
Madla: [INAUDIBLE]
David J. MALAN: Oo, Hindi ko pa kahit na sinubukan
upang malaman kung gaano karaming edad ko talagang nagmamalasakit tungkol sa?
Kung mayroon akong mas kaunti sa tatlong mga tao dito, at samakatuwid ay mas kaunti sa tatlong edad,
Pa rin ako blindly umaasang tatlo.
Ipagbawal Diyos apat na taong magpapakita.
Aking Mga programa lamang ay hindi sumusuporta sa kahit na ang mga ito.
>> At kaya ito, mahaba kuwento maikli, ay hindi magandang ugali.
Mag-right?
Tunay ako ay kopyahin at i- pag-paste ang code at lamang ng pagsasaayos
ang mga pangalan ng variable.
At, ang aking diyos, kung nagkaproblema ka, hindi tatlong edad, ngunit 10, o 100, o kahit na 6500
undergraduates, halimbawa.
Na ito ay hindi pagpunta sa maging partikular na eleganteng code, o napapanatiling.
Ka ng pagpunta sa mayroon sa muling isulat ang programa sa bawat oras
ang iyong numero ng mga pagbabago ang mga tao.
>> Kaya thankfully, sa aming aktwal na ages.c file para sa araw,
mayroon kaming higit pang mga matalino solusyon.
Una, ako ako pagpunta sa humiram ng bumuo ng mga ginamit na namin nang ilang beses,
gawin habang loop, upang makakuha ng mga ang bilang ng mga tao sa kuwarto.
Lamang ako ng pagpunta sa pester user, muli at muli, ay nagbibigay sa hanggang sa siya sa akin
isang halaga ng n na ang isang positibong integer.
>> Kaya kong ginamit, huling oras makakuha ng positibong int.
Pero wala kaming na para sa tunay na, kaya ako nagpunta maaga
at muling ipinatupad ang ideyang ito.
Ngayon down na dito, ito ay ang bagong nanlilinlang.
Sa 27 linya, pati na ang mga komento sa nagmumungkahi 26 linya,
Ipinahahayag isang array kung saan upang mag-imbak ng edad ng lahat.
>> Kaya kung nais mong makakuha ng, hindi isang int, hindi dalawang ints, ngunit ang maramihang mga ints.
Sa partikular n integer, ay maaari n maging tatlo, ay maaaring maging 100, ay maaaring maging 1,000.
Ang syntax, medyo simple, ay upang sabihin nating, kung anong uri ng data ang gusto?
Ano ang gusto mong tawagan na chunk ng memory?
Ano ang gusto mong tawagan ang grid na ganito ang hitsura pictorially?
>> At sa mga bracket dito, sinasabi mo kung gaano kalaki ang gusto mo na ang array na maging.
At kaya mas maaga, kapag sinabi ko ang syntax ay isang maliit na iba't ibang mga dito,
kami ay pa rin gamit ang mga square bracket, ngunit kapag ako pagdeklara ng isang array,
ang numero sa loob ng square bracket paraan
gaano kalaki ang gusto mo ang array na maging.
>> Sa pamamagitan ng kaibahan, kapag ay namin ang paggamit ng mga bracket i isang sandali ang nakalipas, s, isang string,
talaga ang isang hanay ng mga karakter, ngunit kapag hindi ka pagdeklara ng variable,
bilang sa keyword na ito dito, lamang ka nakakakuha ng
isang tiyak na index, ang isang tiyak na elemento mula sa array na.
Sa sandaling malaman namin na, ang ilang bahagi ng ito ay prangka.
Kung bagong unang pupuntahan ko upang i-print out ano ang edad ng tao bilang i.
Saan ko lang sabihin bilang tao isa, tao bilang dalawang, tao numero ng tatlong.
>> At tingin lang ako sa paggawa aritmetika, nang sa gayon ay tulad ng normal na tao,
umaasa kami mula sa isa para sa programa, at hindi mula sa zero.
Pagkatapos ay tumawag ako getint, ngunit mag-imbak ng ko ang kasagutan sa edad bracket i.
Alin ang i'th edad sa array.
Kaya kung saan ang huling beses na tayo ay pagpapagamot ng mga boxes bilang karakter para sa pangalan ni Zamyla,
at iba pa.
Ngayon, kumakatawan ang mga kahon 32 bits, o apat na bytes
kung saan maaari kaming mag-imbak isang int, isang int, isang int.
Ang lahat ng kung saan, muli, ay parehong uri ng data.
>> Ngayon gagawin ko ng isang bagay Silly, tulad ng pagpasa sa oras, lamang
upang bigyang-katwiran pagsusulat ng programang ito.
At pagkatapos ay down na dito, ako muli umulit sa ibabaw ng array na sinasabi sa isang taon mula ngayon,
tao bilang isang kalooban maging isang bagay na taong gulang.
At upang malaman na math-- ibig kong sabihin, ito
ay hindi napaka-kumplikado arithmetic-- Idagdag ko lang ang isa sa kanilang mga edad.
Lamang upang ipakita, muli, na ito.
>> Bilang lang ang maaari kong index sa isang string, s, kaya maaari kong index sa isang array ng edad,
tulad na doon.
Kaya kung saan ay pagpunta ito upang nagtatagal sa amin?
Kaya gagamitin namin makita, sa huli, isang ilang mga bagay sa araw na darating.
Ang isa, ang lahat ng oras na ito, kapag pagsusulat ng iyong sariling mga programa,
tulad ng Mario, sakim, kredito.
Hindi ka na mag-type ang pangalan ng ang programa at pagpindot ng Enter.
At pagkatapos ay nakakakuha ng pag-input ng user.
>> Sa getString, getInt, getLongLong, o mga katulad.
Ngunit ito ay lumiliko out na sinusuportahan ng C isang bagay na tinatawag na command line
mga argument, na kung saan ay pagpunta sa ipaalam sa amin talagang makakuha sa mga salita na nagta-type ka,
sa mapunta ang mga kumikislap prompt, pagkatapos ng pangalan ng iyong program.
>> Kaya sa mga araw na dumating, mo Maaaring i-type ang isang bagay tulad ng Caesar,
o ./caesar bilang 13, pagkatapos.
Susubukan naming makita kung paano na gumagana.
Dahil sa katunayan, sa itakda ang problema ng dalawang, kami ay
pagpunta sa kitang ipakilala sa isang maliit na bagay
reminiscent ng Ralphie ni hamunin ang mas maaga ng kartograpya.
Ang sining ng scrambling impormasyon.
Ito, sa katunayan, ay napaka reminiscent ng kung ano ang ginawa Ralphie.
>> Ito ay isang halimbawa ng isang pag-encrypt na tinatawag na algorithm rot13, R-O-T 13.
Aling ay nangangahulugan lamang i-rotate ang mga titik sa alpabetong 13 mga lugar.
At kung gawin mo iyon, makikita mo na ngayon kung ano ang, marahil, ang isang pamilyar na parirala.
Subalit ang paraan ng aming ka ng pagpunta upang gamitin ang ito, sa huli, ay higit pa sa pangkalahatan.
>> Sa P itakda ang dalawa, sa standard edition, makikita mo ipatupad ang isang pares ng mga ciphers,
isa na tinatawag na Caesar, isa na tinatawag na Vigenere.
Pareho sa mga ito ay na paikot ciphers, sa anumang paraan na sa iyo
i-isang titik sa isang iba't ibang mga titik.
At Caesar ay napaka-simple.
Magdagdag ka ng isa, idagdag mo ang 13, o ilang mga numero ng hanggang sa 26.
Vigenere gumagana na sa isang bawat titik na batayan.
Kaya Vigenere, gaya ng makikita mo sa spec, ay mas ligtas.
>> Ngunit sa pagtatapos ng araw kung ano ikaw ay sa pagpapatupad at P-set ng dalawa,
ay ang susi na ginagamit mo ang parehong para sa encryption at decryption.
Nagre-refer na sa proseso ng pag-on plain na teksto, ang ilang mga orihinal na mensahe,
sa cypher teksto, na ay isang bagay na naka-encrypt.
At pagkatapos ay decrypting itong muli.
>> Sa Hacker edisyon, samantala, ikaw ay
tasked na may isang bagay na katulad sa espiritu, kung saan bibigyan ka namin ng
isang file, mula sa isang karaniwang Linux, o Mac, o Unix computer na tinatawag etsy
password, na naglalaman ng isang buo bungkos ng mga username at password.
At yaong mga password ang lahat Na-encrypt ang, o na-hash,
kaya upang makipag-usap, mas maayos bilang makikita mo sa spec.
>> At ang Hacker edisyon ay hamunin ka sa pagsasagawa ng isang input na tulad nito,
at pag-crack ang password.
Iyon ay, ang pag-uunawa kung ano ang password ng tao na talagang ay.
Dahil, sa katunayan, mga password ay Sa pangkalahatan ay hindi naka-imbak sa malinaw,
at sa pangkalahatan ang mga password Dapat na mahirap na mahulaan.
Iyon ay hindi madalas na ang kaso.
>> At kung ano naisip ko na nais naming gawin ay pagtibayin sa loob ng ilang minuto
sulyap sa isang partikular na mahinang pagpili ng mga password
mula sa isang film na maaari mong isipin ang fondly.
At kung hindi, dapat mong umarkila.
>> [VIDEO pag-playback]
>> -Helmet, Fiend ka, ano kaya ang nangyari?
Ano ang iyong ginagawa sa aking anak na babae?
>> -Permit Sa akin upang ipakilala ang makikinang na batang plastic siruhano,
Doctor Phillip Schlotkin.
Ang pinakamalaking ilong trabaho tao sa buong sansinukob at Beverly Hills.
>> Ang inyong kamahalan.
>> -Nose Trabaho?
Hindi ko maintindihan.
Na siya ay nagkaroon ng trabaho ilong.
Ito ay ang kanyang matamis na 16 kasalukuyan.
>> -No, Hindi kung ano ang iyong palagay.
Ito ay magkano, magkano ang mas masahol pa.
Kung hindi mo akong bigyan ang kumbinasyon sa mga naka shield,
Schlotkin doktor ay magbibigay sa iyong anak na babae i-back ang kanyang lumang ilong.
- [GASPS] Nooooooooooooo.
Saan makakakuha ka na?
>> -All Karapatan.
Kukunin ko sabihin, makikita ko bang sabihin.
>> -No, Daddy, hindi.
Hindi mo dapat.
>> -You're Karapatan ang aking mahal.
Kukunin ko makaligtaan ang iyong bagong ilong.
Ngunit hindi ko sasabihin sa kanila ang kumbinasyon kahit na ano.
>> Mahusay -Very.
Doctor Schlotkin, gawin ang iyong pinakamasama.
>> -My Kasiyahan.
>> -No!
Maghintay, maghintay.
Kukunin ko sabihin.
>> Alam -I ito ay gumagana.
Ang lahat ng mga karapatan, bigyan ito sa akin.
>> -Ang Kumbinasyon ay isa.
>> -One.
-Two.
-Three.
-Four.
-Five.
-So Ang kumbinasyon ay isa, dalawa, tatlo, apat, lima.
Iyan ang stupidest kumbinasyon Kailanman ko marinig sa aking buhay.
Iyan ang uri ng bagay isang idiot ay magkakaroon sa kanyang bagahe.
>> -Thank Mo, ang iyong kamahalan.
>> [Remote CLICKS]
>> -What Ay mong gawin?
>> Naka-off ang -I sa pader.
>> -No, Mo ang hindi, ikaw Naka-off ang buong pelikula.
>> -I Must've pinindot maling button.
>> -Well, Ilagay ito pabalik sa!
Ilagay ang pelikula bumalik sa!
>> -Yes, Ginoo!
Oo, ginoo.
-Let Ng pumunta, Arnold.
Halika, Gretchen.
Siyempre alam mo idedetalye ko Mayroon upang singilin ka para dito.
-Well?
Ibig ito gumagana?
Nasaan ang hari?
>> -It Nagtrabaho, ginoo, namin May mga kumbinasyon.
-Great.
Ngayon ay maaari kaming magsagawa ng bawat huling hininga ng sariwang hangin mula sa planeta Druidia.
Ano ang kumbinasyon?
>> -One, Dalawa, tatlo, apat, lima.
>> -One, Dalawa, tatlo, apat, lima?
-Yes.
-That Ang mga kamangha-manghang.
Na kailangan ko ang parehong kumbinasyon sa aking bagahe.
Maghanda Spaceball 1 para sa agarang pag-alis.
>> -Yes, Ginoo.
>> -And Baguhin ang kumbinasyon sa aking bagahe.
[Pinto pagsasara ng tunog]
[CLINK NG pintuan pagpindot ng helmet]
-Ahh.
[END VIDEO pag-playback]
David J. MALAN: Iyon lang para sa CS50, ipapakita namin nakikita mo sa susunod na linggo.
NARRATOR: At ngayon, Deep Mga pananaw, sa pamamagitan ng Daven Farnham.
>> DAVEN Farnham: Coding sa C ay kaya mas mahirap kaysa sa scratch.
printf, sa simula ay isang kasinungalingan.
>> [Tawa SOUNDBITE]