[Powered by Google Translate] [Seksyon 4] [Mas kaunti kumportableng]
[Nate Hardison] [Harvard University]
[Ito ay CS50.] [CS50.TV]
>> Lahat ng karapatan, maligayang pagdating pabalik sa seksyon.
Sa seksyon na ito linggo kami ay pagpunta sa gawin ang ilang mga bagay.
Kami ay pagpunta sa unang Problema ng pagbabalik-tanaw ng Set 2,
na ang Caesar at Vigenère set problema.
At pagkatapos kami ay pagpunta sa sumisid sa Quiz 0 pagsusuri
at gastusin ng kaunting oras na recapping kung ano ang namin ang uusapang tungkol sa
sa bawat isa ng aralin sa ngayon, at makikita din namin gawin ang ilang mga problema
mula sa pagsusulit ng nakaraang taon.
Na paraan ka guys ay may isang mahusay na paraan upang maghanda para sa.
>> Upang magsimula, ko na booted ng ilang mga mahusay na solusyon
para sa nakaraang hanay ng problema, Problema Set 2, sa puwang na ito.
Kung ikaw guys lahat pindutin ang link na ito,
at kung ikaw ay i-click ang aking pangalan at mag-click sa aking unang rebisyon
makikita mo ang caesar.c, na eksakto kung ano ang Naghahanap ako sa.
Natin makipag-usap tungkol sa talagang mabilis.
Ito ay isang sample na solusyon.
Na ito ay hindi nangangahulugang ang perpektong solusyon.
Mayroong maraming iba't ibang mga paraan upang isulat ito,
ngunit may ilang mga bagay na Nais kong upang i-highlight
Nakita ko bilang ako ay grading, karaniwang pagkakamali na sa tingin ko
solusyon na ito ay ang isang magandang trabaho ng handling.
>> Ang una ay pagkakaroon ng ilang mga uri ng mga komento ng header sa tuktok.
Sa linya 1 sa pamamagitan ng 7 mong makita ang mga detalye,
kung ano ang eksaktong Ang program na ito ay ginagawa.
Isang magandang karaniwang kasanayan kapag sumusulat ka C code
hindi alintana kung ang iyong programa ay nilalaman sa loob ng isang solong file o
kung ito ay nahati sa maramihang mga file ay upang magkaroon ng ilang mga uri ng
orienting komento sa tuktok.
Din ito para sa mga tao na pumunta at isulat ang code sa tunay na mundo.
Ito ay kung saan makikita nila ilagay ang impormasyon ng copyright.
Sa ibaba ay ang # Kabilang.
Sa linya 16 ito # tukuyin, na magpapadala kami bumalik sa loob lamang ng kaunti.
At pagkatapos ay sa sandaling ang function ay nagsisimula, sabay-sabay pangunahing pagsisimula,
dahil ang programang ito ay nakapaloob sa isang solong function na
ang unang bagay na mangyayari at ito ay napaka pansalitain at tipikal ng isang programa sa C
na kinakailangan sa linya ng command argumento-ay na ito agad sumusuri
>> para sa bilang ng argument, argc.
Dito mismo namin makita ang programang ito ay umaasa 2 argumento eksakto.
Tandaan may na unang argumento na ang espesyal na
na laging ang pangalan ng programa na magpatakbo ng,
ang pangalan ng file ng executable.
At kaya kung ano ang ginagawa ay pinipigilan ang mga user mula sa pagtakbo sa programa
may mas marami o mas kaunting mga argumento.
Ang dahilan na gusto naming mag-check para sa karapatang ito ang layo ay dahil
hindi tunay na namin ma-access ito argv array dito mismo mapagkakatiwlaan
hanggang nasuri namin upang makita kung paano malaki ito ay.
>> Isa ng mga karaniwang mga error na nakita ko ay mga tao ay agad pumunta sa
at grab argv [1].
Gusto nila grab ang susi argumento ng array at ang isang i-check sa dito,
at pagkatapos ay gusto nilang gawin ang mga pagsubok para sa argc pati na rin sa susunod na pagsubok,
man o hindi ang unang argumento ay sa katunayan ng isang integer sa parehong panahon,
at na hindi gumagana dahil sa kaso na walang mga argumento ibinigay
makikita mo ang daklot ng isang argumento na ay hindi doon o sinusubukang i-grab ang isa na ay hindi doon.
>> Ang iba pang mga malaking bagay na dapat mong mapansin ay ang
palagi mong nais na i-print ang ilang mga uri ng mga kapaki-pakinabang na mensahe ng error
sa ang user sa orient sa kanila.
Ako ba na ikaw ay ang lahat ng run programa kung saan ang lahat ng isang biglaang ito nagka-crash,
at kumuha ng mga ito katawa-tawa na maliit na dialog na nagpa-pop up at sabi
isang bagay na horribly misteriyoso at siguro ay nagbibigay sa iyo ng isang error code o isang bagay tulad na
na ginagawang walang kahulugan.
Ito ay kung saan gusto mo talagang upang magbigay ng isang bagay na kapaki-pakinabang
at naka-target sa gumagamit sa gayon ay kapag nagpatakbo sila sila pumunta "Oh," mukha palm.
"Alam ko nang eksakto kung ano ang gagawin. Kong malaman kung paano ayusin ito."
>> Kung hindi mo i-print ang isang mensahe, pagkatapos mong magtapos sa aktwal
umaalis ang user upang pumunta suriin ang iyong source code
upang malaman kung anong nangyaring mali.
Mayroon ding ilang beses na kailangan mong gamitin ang iba't ibang mga code ng error.
Dito lang namin ginagamit upang sabihin nagkaroon ng isang error,
nagkaroon ng error, nagkaroon ng isang error.
Mas malaking programa, madalas ang mga programa na tinatawag na sa pamamagitan ng iba pang mga programa,
ay magbabalik ng ilang uri ng mga espesyal na mga code ng error sa iba't ibang mga sitwasyon
sa programa na makipag-usap kung ano ang gagawin mo kung hindi man
lamang gumamit ng isang magaling Ingles na mensahe para sa.
Cool.
Habang nagtatrabaho kami pababa, maaari mong makita ang namin hilahin ang key out.
Subukan ang namin upang makita kung ang mga key na umaangkop.
Makuha namin ang isang mensahe mula sa user.
Ang dahilan na gawin namin ito sa habang loop-at ito ay isang bagay na namin masaklawan
sa ilang sandali ngunit ito lumiliko out na kung nag-type ka kontrol D
kapag kang makakuha ng GetString na prompt sa terminal
kung ano na aktwal na ginagawa ito ay nagpapadala ng isang espesyal na character
sa programa.
Ito ay tinatawag na ang maliit o sa dulo ng file na character.
At sa kasong iyon, ang aming mensahe string null,
kaya ito ay hindi isang bagay na namin naka-check para sa problema ang mismong.
>> Ngunit bilang pumunta kami sa, ngayon na kami nagsimula upang makipag-usap tungkol sa mga payo
at dynamic na paglalaan ng memory sa magbunton,
check para sa null kapag mayroon kang isang function na maaari
bumalik null ng isang halaga na ay isang bagay na makikita mo gusto upang makakuha ng sa ugali ng paggawa.
Ito ay dito lalo na para sa paglalarawan.
Ngunit kapag mong makita ang GetString sa hinaharap,
ito mula sa Problema Itakda 4 sa, makikita mo nais upang panatilihin ito sa isip.
Muli, ito ay hindi isang isyu para sa Problema Set 3 alinman dahil hindi namin ay sakop pa ito.
Panghuli, makuha namin ang bahaging ito kung saan nakukuha namin sa pangunahing loop ng pag-encrypt,
at may ilang mga bagay na nangyayari sa dito.
Una, kami ay umulit sa ibabaw ng buong string ng mensahe mismo.
Narito namin iningatan ang strlen tawag sa kundisyon,
kung saan ang isang bilang ng mga tulis ang ay hindi isang mahusay na paraan upang pumunta.
Ito lumiliko out sa kasong ito ring hindi mahusay,
bahagyang dahil namin ang pagbabago ng nilalaman ng mensahe mismo
sa loob ng loop, kaya kung kami ay may isang mensahe na 10 character ang haba,
sa unang pagkakataon na sisimulan namin na para sa loop strlen ay magbabalik kung ano?
10.
>> Ngunit kung namin pagkatapos ay baguhin ang mensahe, sinasabi naming baguhin ang ika-5 ng character nito,
at magtapon namin sa isang character \ 0 sa ika-5 na posisyon,
sa isang kasunod na pag-ulit strlen (mensahe) ay hindi bumalik kung ano ang ginawa
ang unang pagkakataon namin iterated,
ngunit ito ay sa halip bumalik ng 5 dahil threw namin sa Terminator na null,
at ang haba ng string ay tinukoy
ng posisyon na \ 0.
Sa kasong ito, ito ay isang mahusay na paraan upang pumunta dahil kami ay pagbabago ito sa lugar.
Ngunit napansin mo na ito ay talagang nakakagulat na simpleng upang i-encrypt
kung maaari kang makakuha ng matematika ang tamang.
Ang tanging kinakailangan ay upang suriin kung o hindi ang sulat na tumitingin ka sa
ay uppercase o lowercase.
>> Ang dahilan lamang namin upang suriin para sa at hindi namin upang tingnan ang mga
ang kaso alpha ay dahil
kung ang isang character na uppercase o kung ito ay lowercase
pagkatapos ito ay talagang isang alpabetiko character,
dahil hindi namin uppercase at lowercase na digit.
Ang iba pang bagay na gawin-at kami na ito ay isang maliit na nakakalito
ay namin na-modify ang standard Caesar cipher formula
na aming ibinigay sa detalye ng hanay ng problema.
Ano ang iba dito na namin bawas
sa uppercase na kabisera ng kaso sa A, at pagkatapos idinagdag namin ang kabisera A
-back sa sa dulo.
>> Alam ko ng ilang mo ginawa ito sa iyong code.
Ibig mo gawin ito sa iyong mga pagsusumite?
Ginawa mo ito. Maaari mong ipaliwanag kung ano ito, ang Sahb?
Sa pamamagitan ng pagbabawas ito, dahil ginawa mo ng mod tama matapos itong,
mayroon kang upang dalhin ito, upang ang mga paraan kung paano ka [ubo] posisyon.
At pagkatapos ay sa pamamagitan ng pagdagdag nito muli mamaya Paglipat sa ibabaw ng isa na nais.
Oo, eksakto.
Ano Sahb sinabi ay na kapag gusto naming upang magdagdag ng
ang aming mga mensahe at ang aming key sama-sama
at pagkatapos mod, mod na ng mga NUM_LETTERS,
kung hindi namin masukat ang aming mensahe sa naaangkop 0 sa 25 hanay una,
maaari naming ng isang talagang kakaiba numero
dahil ang mga halaga na kaming naghahanap sa kapag tinitingnan namin ang mensahe [i],
kapag tinitingnan namin sa ith character ng aming mga plain-text message,
ang halaga ng isang lugar sa 65-122 hanay
batay sa ASCII halaga para sa uppercase A sa pamamagitan ng lowercase z.
At kaya kapag mod namin ang mga ito sa pamamagitan ng 26 o sa pamamagitan ng mga NUM_LETTERS,
dahil na aming # tukuyin sa kanang tuktok hanggang dito,
na upang bigyan kami ng isang halaga na sa 0 sa 25 hanay,
at kailangan namin ng paraan pagkatapos masukat na-back up
at kumuha ng mga ito sa naaangkop na hanay ng ASCII.
Ang pinakamadaling paraan upang gawin na lamang masukat ang lahat ng pababa
sa 0 sa 25 hanay upang magsimula sa,
at pagkatapos shift ang lahat ng bumalik sa dulo.
>> Isa pang karaniwang mga error na nakita ko mga tao na makatagpo ng mga na
kung hindi mo aktwal na gawin ito scaling kaagad
at idinagdag mo mensahe at key at idagdag mo ang mga ito, sabihin nating,
sa isang pansamantalang trabaho na variable, ang problema sa na
dahil mensahe [i] ay may malaking bilang upang magsimula sa-
tandaan ito ay hindi bababa sa 65 kung ang isang uppercase character na-
kung mayroon kang isang malaking key, sabihin nating, isang bagay tulad ng 100,
at magdagdag ng mga 2 kasama sa isang sign na magpasinda ka pagpunta upang makakuha ng isang overflow.
Ka pagpunta upang makakuha ng isang halaga na mas malaki kaysa sa 127,
kung saan ay ang pinakamalaking halaga na ang isang pansamantalang trabaho variable ay maaaring magkaroon.
Muli, na ang dahilan kung bakit gusto mo gusto gawin na uri ng bagay upang magsimula sa.
Ang ilang mga tao ay nakuha sa buong kasong iyon sa pamamagitan ng paggawa ng kung tao at sa pagsubok
upang makita kung gagawin ito overflow bago gawin na,
ngunit sa ganitong paraan ay nakakakuha ng buong.
At pagkatapos ito solusyon namin print mo ang buong string sa pinakadulo.
Ibang tao naka-print ang isang karakter sa isang pagkakataon. Parehong mga kahanga-hangang.
Sa puntong ito, gawin ka guys ay may anumang mga katanungan, anumang mga komento tungkol dito?
Bagay na gusto mo, ang mga bagay na hindi mo gusto?
>> Mayroon akong isang tanong.
Siguro Naiwan ako ito sa panahon ng iyong paliwanag, ngunit kung paano ang program na ito
laktawan ang mga puwang para sa pagkonekta ng susi sa ang haba ng teksto?
Ito lamang ang Caesar cipher. >> Oh, paumanhin, oo.
Oo, makikita namin makita na.
Sa cipher Caesar nakuha namin sa paligid na dahil
lamang namin Binaligtad nang character.
Lamang kami Pinaikot mga ito kung sila ay uppercase o lowercase.
Mong guys pakiramdam medyo magandang tungkol sa?
Huwag mag-atubiling upang kopyahin ito sa bahay, dalhin ito,
ihambing ito sa kung ano ang iyong guys sinulat ni.
Talagang huwag mag-atubiling upang magpadala ng mga katanungan tungkol dito masyadong.
At muli, Napagtanto na nagtatakda ng layunin sa dito sa iyong problema
ay hindi upang makakuha ka guys sumulat ng perpektong code para sa iyong mga set ng problema.
Ang isang pag-aaral na karanasan. Oo.
>> Bumalik sa Do habang loop, kung ito ay katumbas null,
kaya null lamang ay nangangahulugan ng walang, lang nila pindutin ang enter?
Null ay isang espesyal na halaga ng pointer,
at ginagamit namin null kapag gusto naming sabihin
mayroon kaming isang pointer variable na tumuturo sa walang.
At kaya karaniwang ito ay nangangahulugan na ito variable, ang mensaheng ito variable
ay walang laman, at dito, dahil ginagamit namin ang CS50 mga espesyal na uri ng string,
ano ang CS50 uri ng string?
Nakita mo ba kung ano ang ito ay kapag nakuha ng David pabalik ng hood sa panayam?
Ito ay isang funky-isang pointer, i-right?
Okay, oo. >> Ito ang isang pansamantalang trabaho *.
At kaya talagang maaari naming palitan ang
dito mismo sa magpasinda * mensahe,
at kaya ang GetString function na, kung hindi ito matagumpay na makakuha ng isang string mula sa gumagamit,
hindi ito ma-parse ang isang string, at isang kaso kung saan hindi ito ma-parse ang isang string
kung gumagamit ang mga uri ng dulo ng file na character, ang kontrol D,
na hindi isang bagay na karaniwan mong gawin, ngunit kung iyon ang mangyayari
pagkatapos ay ang function ay ibalik ang null halaga bilang isang paraan ng pagsabi
"Uy, hindi ko makakuha ng isang string."
Kung ano ang mangyayari kung hindi namin ilagay ang mensahe = null,
kung saan ay isang bagay na hindi namin ay ginagawa pa?
Bakit na may problema dito?
Dahil alam ko na usapan natin ng kaunti sa panayam tungkol sa mga paglabas ng memorya.
Oo, sabihin gawin iyon, at sabihin makita kung ano ang mangyayari.
>> Ng tanong Basil ay ano ang mangyayari kung hindi namin aktwal mayroon
mensaheng ito = null test?
Sabihin mag-scroll pataas sa tuktok.
Mong guys ay maaaring magkomento ito.
Aktwal na, makikita ko bang i-save ang mga ito sa isang rebisyon.
Rebisyon 3.
Ano ang mong gawin upang patakbuhin ang program na ito ay magkakaroon ka ng i-click ang icon na gear up dito,
at magkakaroon ka upang magdagdag ng isang argumento dito.
Magkakaroon ka upang bigyan ito ang susi argumento dahil gusto naming upang pumasa sa isang argument ng linya ng command.
Narito ako pagpunta upang bigyan ito ang bilang 3. Gusto ko 3.
Ngayon-zoom bumalik out, ang pagpapatakbo ng programa.
Ito ay tumatakbo, kino-compile, pagbuo.
Narito kami. Ito ay naghihintay na ma-prompt.
Kung type ko sa isang bagay tulad ng halo-kung saan ay na pumunta?
Oh, ang aking programa Masyadong matagal na tumakbo. Ako jawing para sa masyadong mahaba.
Dito napupunta ito.
Ngayon type ko sa halo.
Nakita namin na ito ine-encrypt naaangkop.
Ngayon kung ano ang mangyayari kung gagawin namin prompt GetString upang bumalik null?
Tandaan, sinabi ko na ginawa namin na sa pamamagitan ng pagpindot ng kontrol ng D sa parehong oras.
Kukunin ko na mag-scroll dito. Susubukan naming patakbuhin itong muli.
Gusali. May napupunta ito.
Ngayon kapag ako ay pindutin ang kontrol D
Nakatanggap ako ang linya na nagsasabing opt/sandbox50/bin/run.sh, Segmentation fault.
Mo ba ang guys nakita na bago?
>> [Mag-aaral] Bakit mayroong walang->> Paumanhin?
[Mag-aaral] Bakit mayroong walang core dump sa kasong ito?
Ang core dump ay ang tanong ay kung bakit may walang core dump dito?
Ang tanong ay na maaaring may, ngunit ang core dump ay isang file
na ay makakakuha ng naka-imbak sa hard drive.
Sa kasong ito hindi namin pinagana ang lungkot core
sa server run upang hindi namin na tao seg faulting
at pagbuo tonelada ng mga lungkot ng core.
Ngunit maaari kang makakuha ng isa.
Core lungkot ang uri ng bagay na maaari madalas mong huwag paganahin,
at kung minsan gawin mo.
Ang segmentation fault, upang sagutin ang iyong tanong, Basil,
ay nagsasabi na sinubukan naming i-access ng pointer
na hindi nakatakda upang tumuro sa anumang bagay.
Tandaan Binky sa video kapag Binky sinusubukan upang
pumunta-access ng pointer na hindi na tumuturo sa anumang?
Sa kasong ito hulaan ko technically pointer ay tumuturo sa isang bagay.
Ito ay pagturo sa null, kung saan ay technically 0,
ngunit ay tinukoy sa isang segment na hindi naa-access
sa pamamagitan ng iyong programa, kaya mo makakuha ng segmentation fault
dahil hindi mo ina-access memory na sa isang wastong segment
tulad ng magbunton na segment o ang stack segment o ang data segment.
Cool.
Anumang higit pang mga katanungan tungkol sa Caesar?
>> Natin lumipat sa. Tingnan natin sa Pagbabago 2 talagang mabilis.
Na ang Vigenère.
Dito sa Vigenère
babagtasin namin ang isang ito medyo mabilis dahil, muli,
Ay lubos na katulad ang Vigenère at Caesar.
Header komento ay bago,
# Tukuyin ay bago upang iwasan ang paggamit ng mga magic numero.
Ang magaling na bagay ay sinasabi namin nais upang lumipat sa
ng ibang alpabeto o isang bagay tulad na.
Sa halip ng pagkakaroon upang pumunta nang manu-mano baguhin ang lahat ng mga 26 sa code
maaari naming baguhin ito sa 27 o drop ito
kung tayo ay gumagamit ng iba't ibang mga titik, iba't-ibang mga wika.
Muli, hindi namin Mayroon ito check ang bilang ng argument,
at talagang halos tumagal ito bilang isang template.
Medyo magkano ang bawat programa na magsulat dapat magkaroon ng
kung ito ay tumatagal ng linya ng command argumento ilang pagkakasunud-sunod ng mga linya
na bumabasa ng tulad nito sa pinakadulo simula.
Iyon ay isa ng ang unang pagsubok na katinuan na gusto mong gawin.
>> Narito kung ano ang namin ginawa ay ginawa namin siguraduhin na
keyword ay wasto, at na ang pangalawang tseke na ginawa namin.
Pansinin muli na pinaghiwalay namin ito mula argc at 2.
Tandaan na sa kasong ito ang isang bagay na nagkaroon kami gawin sa halip
ng paggamit ng upang i gusto naming patunayan ang buong string,
at upang gawin na iyong aktwal na upang pumunta ng character sa pamamagitan ng karakter
sa ibabaw ng string.
Walang mahusay na paraan upang tawagan ang isang bagay dito
dahil kahit, halimbawa, ay i bumalik 0
kung hindi ito ma-parse ang isang integer, kaya na ay hindi gumana kahit.
Muli, magaling mensahe na nagsasabi sa user kung ano ang nangyari.
Pagkatapos dito, muli, kami ring pangasiwaan ang ang kaso kung saan
ang mga uri ng user sa isang control D random na character.
>> At pagkatapos Charlotte ay isang tanong mas maaga tungkol sa kung paano pamahalaan namin upang laktawan ang mga puwang
dito sa aming string.
Ito ay uri ng katulad sa kung ano ang ginawa namin sa mga programang Myspace
na ginawa namin sa seksyon, at ang paraan na ito nagtrabaho
ay na sinusubaybayan namin ang bilang ng mga titik na gusto namin nakikita.
Bilang namin lumakad sa ibabaw ng string ng mensahe, bilang namin lumakad sa paglipas ng character sa pamamagitan ng character,
sinusubaybayan namin ang index bilang bahagi ng aming para sa loop, at pagkatapos ay sinusubaybayan din namin
ang bilang ng mga titik, kaya walang mga espesyal na character, non-digit, ang di-puting espasyo
na gusto namin nakikita sa hiwalay na variable.
At pagkatapos ay ang solusyong ito binabago ang susi
upang makakuha ng isang aktwal na key integer, at ginagawa nito sa mabilisang,
kanan bago ito pagkatapos ay napupunta upang i-encrypt ang aktwal na character na mensahe.
Mayroong ilang mga solusyon na ay perpektong mahusay na masyadong
na baguhin ang key kapag ng pagsubok para sa bisa ang susi.
Bilang karagdagan sa tinitiyak na ang character at ang keyword
ay isang pang-abakada character na ito din ay naka-on na sa isang integer
sa 0 sa 25 hanay upang pagkatapos ay laktawan ang hindi upang gawin iyon sa paglaon sa ito para sa loop.
Muli, makikita mo dito talaga ito ang eksaktong parehong code
na ginamit namin sa Caesar sa puntong ito.
Ginagawa mo ang eksaktong parehong bagay, kaya ang tunay na nanlilinlang ay ang pag-uunawa
kung paano i-on ang keyword sa isang integer.
>> Isang bagay na ginawa namin dito na ng kaunti siksik
ay paulit-ulit na namin ito parirala, hulaan ko maaari kang tumawag ito,
3 magkakahiwalay na beses sa linya 58, 59, at 61.
Maaari isang tao ipaliwanag kung ano ang eksaktong parirala na ito ay hindi?
Ito ay access sa isang character, tulad ng sinabi mo.
Oo, [hindi marinig] isang character sa keyword,
at kaya ang bilang ng mga titik na nakikita dahil lamang nagpapalipat-lipat ka sa kahabaan ng
keyword kapag nakita mo ang sulat,
kaya na pagpunta upang epektibong laktawan ang mga mga puwang at bagay-bagay tulad na.
Oo, eksakto.
At pagkatapos ay sa sandaling iyong nakita blangko ang keyword mo lang mod upang ilipat pabalik sa paligid.
Eksakto. Iyon ay isang perpektong paliwanag.
Ano Kevin sinabi na gusto naming i-index sa keyword.
Gusto naming makuha ang num_letters_seen karakter, kung kalooban mo,
ngunit kung num_letters_seen lumampas sa haba ng keyword,
ang paraan na makuha namin pabalik sa ang naaangkop na hanay naming gamitin ang operator ng mod
upang epektibong I-wrap sa paligid.
Halimbawa, tulad ng sa maikling, ang aming keyword bacon,
at 5 na titik ang haba.
Ngunit nakakita kami ng 6 na mga titik sa aming plain text sa puntong ito
at naka-encrypt 6.
Kami ay humantong access sa num_letters_seen,
na 6, mod ang haba ng keyword, 5,
at sa gayon makuha namin ang 1, at kaya kung ano ang gagawin namin ay bibigyan namin
ma-access ang unang karakter sa loob ng aming mga keyword sa puntong iyon.
>> Lahat ng karapatan, anumang mga katanungan sa Vigenère
bago namin ilipat sa?
Mong guys pakiramdam medyo magandang tungkol sa?
Mahusay, mahusay.
Gusto kong tiyakin na iyong guys ay pagkuha ng pagkakataon upang makita ang code
na sa tingin namin mukhang mabuti at magkakaroon ng pagkakataon upang matuto mula dito.
Ito ay pagpunta sa huling namin ang paggamit ng mga puwang para sa oras,
at kami ay pagpunta sa transition ngayon, at ako pagpunta sa pumunta sa cs50.net/lectures
upang maaari naming gawin ng kaunting pagsusulit pagsusuri.
Ang pinakamahusay na paraan tingin ko upang simulan ang paggawa ng pagsusulit pagsusuri
ay darating sa pahinang ito ng aralin, mga cs50.net/lectures,
at sa ilalim ng bawat isa ng ang mga heading ng linggo, kaya kung tiningnan ko dito sa Linggo 0,
Nakikita ko na mayroon kami ng isang listahan ng mga paksa na aming sakop sa Linggo 0.
>> Kung ang alinman sa mga paksang ito mukhang pamilyar sa iyo
makikita mo talagang nais upang bumalik at saliksikinn ang mga tala panayam at posibleng
kahit sagap sa pamamagitan ng aralin, panoorin muli ang mga ito kung nais mong
upang makakuha ng isang pakiramdam para sa kung ano ang nangyayari sa bawat isa sa mga paksang iyon.
Ako sabihin Bilang karagdagan sa taong ito sa mga cool na mga mapagkukunan namin Mayroon
mga shorts na nilikha namin, at kung titingnan mo sa Linggo 0,
hindi namin ang lahat ng mga paksa sakop, ngunit hindi namin Mayroon pa ilan sa mga ito,
ang ilan sa mga trickier mga, kaya nanonood ng mga shorts na ito muli
ay isang mahusay na paraan upang makakuha ng sa iyo upang mapabilis.
Sa partikular, ako pagpunta sa ilagay sa isang plug para sa 3 sa ibaba, dahil ginawa ko ang mga.
Ngunit kung ikaw ay struggling na may binary, bits, hex, na uri ng mga bagay-bagay,
binary ay isang mahusay na lugar upang magsimula.
ASCII ay isa pa na handa na upang tingnan masyadong.
Maaari mo ring panoorin sa akin sa 1.5x speed kung ako pagpunta masyadong mabagal para sa iyo.
Dahil ito ay pagsusuri, huwag mag-atubiling upang gawin iyon.
>> Lamang upang simulan talagang mabilis, kami ay pagpunta sa pumunta sa pamamagitan ng ilang mga problema pagsusulit
lang upang mabilis na pambati sa pamamagitan ng mga.
Halimbawa, tingnan natin sa problema 16 Mayroon akong karapatan hanggang dito sa board.
Mayroon kaming ang sumusunod na pagkalkula sa binary,
at gusto naming upang ipakita ang anumang trabaho.
Okay, ako pagpunta upang bigyan ito ng isang shot.
Mong guys ay dapat sundin kasama ng papel,
at gagawin namin ito talagang mabilis.
Gusto naming gawin ang mga sumusunod na kalkulasyon sa binary.
Mayroon akong 00,110,010.
At ako pagpunta sa idagdag dito 00,110,010.
Para sa matematika mga henyo sumusunod na kasama sa bahay,
ito ay epektibong multiply sa pamamagitan ng 2.
Magsimula tayo.
Kami ay pagpunta sa sundin ang mga parehong algorithm ng karagdagan na ginagawa namin
kapag nagdagdag kami ng mga decimal na numero nang sama-sama.
Talagang pagkakaiba lamang dito ay na aming loop pabalik sa paligid
sa sandaling kami ay may 1 + 1 sa halip na sa sandaling makuha namin sa 10.
>> Kung simulan namin mula sa kanan, talagang mabilis, kung ano ang unang digit?
[Mag-aaral] 0. >> [Nate H.] 0.
Mahusay, ang ikalawang digit?
[Mag-aaral] 1.
[Nate H.] ba ito ng 1? 1 + 1 ay?
[Mag-aaral] 10.
[Nate H.] Mismong, kaya kung ano ang digit na isulat ko sa ilalim ng 2 mga pinagsama-sama?
[Mag-aaral] 1, 0, o 0 at pagkatapos ay magtataglay ng 1.
[Nate H.] 0 at magdala ng 1, eksakto.
Susunod up ng isa, Basil, ikaw.
Ano ang ikatlong? >> [Basil] 1.
[Nate H.] 1, perpekto. Kevin?
[Kevin] 0. >> [Nate H.] 0, Charlotte?
[Charlotte] 0. >> [Nate H.] Oo, at ano ang gagawin ko?
[Mag-aaral] Ang 1.
[Nate H.] At ano ang gagawin ko? At pagkatapos ay dalhin ako sa 1.
Perpekto, Sahb? >> [Sahb] Ngayon mayroon kang 1.
[Nate H.] At ang gagawin ko kahit ano dito?
[Sahb] Pagkatapos para sa susunod na mayroon kang 1 dahil ikaw madadala sa 1.
[Nate H.] Mahusay, kaya dito maaari naming tapusin ito.
Cool.
[Mag-aaral] Sinusuportahan ba ng 0 + 0 = 0?
0 + 0 = 0.
1 + 1, tulad ng sinabi mo, ay 10, o 1, 0, sa halip.
10 ay isang maling tawag dahil sa akin 10 ay nangangahulugan na ang bilang 10,
at ang biro ng kung paano namin kumakatawan sa ito kapag kami ay sumusulat ito.
Kumakatawan namin ang bilang 2 ng 1, 0, at ang bilang 10 ay bahagyang naiiba.
>> Ano ang uri ng magaling tungkol sa binary na may talagang ay hindi na maraming
kaso na kailangan mo upang matuto.
Mayroong 0 + 0 = 0, 0 + 1 = 1,
1 + 1 ay 0, at pagkatapos ay magdala ng 1,
at pagkatapos ay maaari mong makita dito sa ikatlong haligi mula sa kanan
nagkaroon kami ito 1, 1, at 1.
At 1 + 1 + 1 ay isang 1,
at dalhin mo sa isa pang 1.
Kapag ikaw ay gumagawa ng binary karagdagan, medyo simple.
Gusto ko ng ilang higit pa sa mga katinuan check sa sarili
bago pumunta ka sa dahil ito ay
marahil ng isang bagay na kailangan namin makita sa pagsusulit.
Ngayon sabihin gawin ito sa tabi ng isa pati na rin.
Natin ang problema 17.
Kami ay pagpunta sa convert ang mga sumusunod na bilang ng binary sa decimal.
Mayroon akong 10100111001.
Tandaan sa binary video na ginawa ko
Ako lumakad sa pamamagitan ng ilang mga halimbawa, at ako ay nagpakita kung paano
lahat ay gumagana kapag ginagawa mo ito sa decimal.
Kapag nagtatrabaho ka sa decimal representasyon tingin ko hindi namin
sa puntong ito sa ating buhay upang matatas sa ito na
medyo madali upang pagtakpan ang mga mekanika kung paano ito aktwal na gumagana.
>> Ngunit upang gawin ang isang mabilis na pagbabalik-tanaw, kung mayroon akong ang bilang 137
ito talaga ay nangangahulugan at muli, ito ay sa decimal representasyon-
ang numero 137 sa decimal ay nangangahulugan na mayroon akong 1 x 100 + 3 x 10 + 7 x 1.
Ito ay lahat ng mga naglalagi sa screen.
At pagkatapos ay kung tiningnan mo ang mga numerong ito dito mismo,
100, 10 at 1, makikita mo na hindi sila aktwal na ang lahat ng mga kapangyarihan ng 10.
Mayroon akong 10 ², 10 ¹, at 10 sa zero.
Mayroon kaming isang katulad na uri ng bagay sa binary,
maliban na ang aming base, na tinatawag naming, ay 2 sa halip ng 10.
Mga 10s na sinulat ni ko pababa dito sa ibaba,
ito 10 ², 10 ¹, 10 sa zero, 10 ang aming base,
at ang exponent, 0, 1, o 2,
ay ipinahiwatig sa pamamagitan ng ang posisyon ng digit sa numero na isulat namin.
1, kung tiningnan namin ito, ang 1 ay sa ika-2 na posisyon.
3 sa 1st posisyon, at 7 sa 0 na posisyon.
Kung paano makuha namin ang iba't ibang mga exponents sa ibaba para sa aming mga base.
>> Ang pagsunod sa lahat ng mga ito we'll-aktwal na, alam mo kung ano?
Gagawin namin na kung saan ay ang aking undo ang pindutan pumunta?
May napupunta ito.
Gustung-gusto ko ito i-undo bagay.
Pagsunod sa tingin ko para sa akin ng hindi bababa sa
ang pinakamadaling paraan upang simulan ang nagko-convert ng binary number
o hexadecimal numero kung saan ang base sa 16
at hindi 10 o 2 upang magpatuloy at isulat
ang base at exponents para sa lahat ng mga numero sa aking binary bilang sa itaas.
Kung simulan namin mula kaliwa papuntang kanan muli,
na uri ng counterintuitive,
Ko bang baguhin pabalik sa itim dito, mayroon kaming ang 2 sa 0 posisyon,
at pagkatapos ay mayroon kaming 2 ¹, 2 ²,
at pagkatapos ay 2 sa 3, 2 sa 4, 2 sa 5, 6,
7, 8, 9, at 10.
Ang mga numerong ito ko na nakasulat ang lahat ng mga exponents.
Ko lamang sinulat ni ang mga base dito sa unang 3 para lamang sa espasyo.
>> Sa puntong ito ako pagpunta upang magpatuloy at aktwal na ako upang burahin
ang mga bagay na ginawa namin sa decimal, kung okay lang.
Lahat Mayroon kayong na.
Mga mo ang panonood online ako ba rewind sa akin kung nais mong.
Lumilipat ng pabalik sa panulat.
Ngayon, kung ano ang maaari naming gawin-kung ikaw guys ay hindi lubos na mapabilis sa iyong mga kapangyarihan ng 2,
na lubos na cool na.
Ito ay nangyayari. Nauunawaan ko.
Ko isang beses ay nagkaroon ng isang pakikipanayam sa trabaho kung saan ako nasabihan dapat kong malaman ng lahat ng kapangyarihan ng 2
up sa pamamagitan ng 2 sa ika-30.
Ito ay hindi isang trabaho Nakatanggap ako.
Pa rin, ikaw guys ay maaaring magpatuloy at gawin ang matematika dito,
ngunit may binary na hindi ito talagang kabuluhan,
at ni ang kabuluhan may decimal o hexadecimal alinman,
upang gawin ang matematika kung saan mayroon kang zero.
Maaari mong makita ang mayroon akong 0 na dito, 0 dito, 0 dito, 0 dito, 0 dito, 0 dito.
Bakit hindi maaaring magkaroon ng kahulugan upang gawin ang mga aktwal na matematika
upang makalkula ang naaangkop na lakas ng 2 para sa posisyong iyon?
Eksakto, tulad ng Charlotte sinabi, ito ay 0.
Maaaring pati na rin i-save ang iyong sarili ang oras kung pagkalkula kapangyarihan ng 2 ay hindi ang iyong malakas na suit.
Sa kasong ito kailangan lamang namin upang makalkula ang mga ito para sa 2 sa 0 na-?
[Mag-aaral] 1.
[Nate H.] 1, 2 sa 3 na-?
[Mag-aaral] 8. >> [Nate H.] 8.
2 sa 4?
[Mag-aaral] 2. Ikinalulungkot ko, 1.
[Nate H.] 2 sa 4 16, eksakto.
2 sa 5, Kevin? >> 32.
[Nate H.] 32, 2 sa 8?
[Mag-aaral] 32 x 8, 256.
[Nate H.] Perpekto.
At 2 sa 10?
[Mag-aaral] 1024.
[Nate H.] Oo, 1024.
>> Kapag Mayroon namin ang mga bilang na ito maaari naming sabihin sa ilang ang lahat ng mga ito hanggang.
At ito ay kung saan ito ay talagang mahalaga upang gawin ang ilang mga bagay.
Isa ay pumunta pabagalin at suriin ang iyong trabaho.
Maaari mong sabihin na may 1 sa dulo ng ang numerong ito,
kaya dapat ko talagang makakuha ng isang kakaibang numero tulad ng aking mga resulta,
dahil ang lahat ng iba pang mga pagpunta sa kahit numero
ibinigay na ang isang binary numero.
Ang iba pang mga bagay na gawin ay kung ikaw ay makakuha sa puntong ito sa pagsubok
at nakasulat ito ito malayo
at nagpapatakbo ka ng oras
tumingin sa bilang ng mga puntos na ang problemang ito ay nagkakahalaga ng.
Ang problemang ito, tulad ng maaari mong makita kung i-flip ko pabalik sa aking laptop talagang mabilis
ang problemang ito ay nagkakahalaga ng 2 puntos, kaya ito ay hindi ang uri ng karagdagan
dapat mong pagpunta sa pamamagitan ng kung ikaw talaga ay pinindot para sa oras.
Ngunit magkakaroon kami lumipat pabalik sa iPad, at kami sa pamamagitan nito ay talagang mabilis.
>> Gusto ko ng paggawa ng maliit na numero sa unang
dahil nakita ko na mas madali.
Gusto ko ng 32 at 8 dahil pumunta sila nang magkasama medyo madali, at makuha namin 50.
16 at 1 ay nakakakuha ng 17.
May nakukuha namin 57,
at pagkatapos ay maaari naming gawin ang lahat ng ito, kaya namin maaaring gawin 57, 156.
Halika sa.
Tao, mahusay, sabihin makita.
Nagkaroon kami ng 57, 256, at 1024.
Sa puntong ito, gusto ko sa halip pumunta lamang sa pamamagitan ng.
Wala akong bakas. Malinaw ko kailangan upang basahin sa.
7, 6, at 4, makakakuha ka ng 17.
1, 5, 5, 2, 13.
Pagkatapos namin makakuha ng 3, at pagkatapos namin makakuha ng 1.
1337.
Easter itlog, sinuman?
Sinuman ay nakikilala ang numero?
Chris kinikilala ang numero. Ano ang ibig sabihin, Chris?
[Chris] Leet.
Leet, kaya kung titingnan mo ito, mukhang leet.
Hacker bagay. Panoorin ang para sa na uri ng mga bagay-bagay sa midterm o ang pagsusulit, sa halip.
Kung nakikita mo na ang uri ng mga bagay-bagay at ikaw ay nagtataka "Huh,"
na maaaring aktwal na ibig sabihin ng isang bagay.
Hindi ko alam. David ang may gusto ng paglalagay ito.
Ito ay isang mahusay na paraan upang katinuan suriin ito.
Tulad okay, ang maaari kong makita kung anong nangyayari sa.
>> Na Linggo 0/Week 1 bagay.
Kung lumipat kami pabalik sa aming laptop ngayon,
mag-zoom out, at ilang iba pang mga bagay.
Mayroong ASCII, na namin ang paggawa ng maraming may ang set ng problema.
Ito paniwala ng kabisera A. Ano na talagang?
Alam ito ang decimal integer.
65 ay kung ano ang nai-map sa ASCII table,
at na samakatuwid kung paano ang computer nagsusulat ito,
at na kung paano namin ang pagkuha ang layo mula sa aktwal na pagsusulat
ng character kabisera A at ng character lowercase ng
sa ilan sa mga solusyon at problema sa set na ginagawa.
Ang ilang mga iba pang mga bagay.
Mayroon namin ang pahayag, boolean expression, kundisyon, loop, variable at thread.
>> Yaong lahat mukhang may kabuluhan para sa pinaka-bahagi?
Ang ilan sa mga ito terminolohiya ay isang maliit na funky sa beses.
Gusto ko sa tingin ng isang pahayag para sa pinaka-bahagi ng isang bagay na nagtatapos na may semicolon.
Pahayag tulad ng x = 7, na nagtatakda ng isang variable,
baka tinatawag x = 7.
Baka x ding uri na maaaring iimbak ang bilang 7,
kaya isang int o posibleng Float o maikling o isang pansamantalang trabaho,
isang bagay tulad na.
Isang boolean expression ay gumagamit ng mga double katumbas
at putok ang katumbas o hindi katumbas, mas mababa sa, mas malaki kaysa sa,
mas mababa sa o katumbas ng, ang lahat na uri ng mga bagay-bagay.
Kundisyon pagkatapos ay kung pang tao pahayag.
Gusto ko tandaan na hindi ka maaaring magkaroon ng isang pang tao nang walang kaukulang kung.
Gayundin, hindi ka maaaring magkaroon ng isang pang tao kung walang kaukulang kung.
Loop, isipin ang ang 3 uri ng loop namin ang pagmamartilyo sa iyo
para sa huling dalawang mga seksyon at mga problema set.
Paggamit ay habang kapag nakakakuha ka ng user input,
gamit habang loop hanggang sa isang partikular na kondisyon ay totoo,
at pagkatapos gamit ang mga para sa mga loop kung kailangan mo
malaman kung aling pag-ulit ng loop ikaw ay kasalukuyang sa kung paano tingin ko ang tungkol dito.
O kung gumawa ka ng isang para sa bawat karakter sa isang string na gusto kong gawin ang isang bagay,
para sa bawat elemento sa isang array na gusto kong gawin ang isang bagay sa na elemento.
>> Thread at mga kaganapan.
Mga namin hindi sakop tahasang sa C,
ngunit tandaan na ito mula sa simula.
Ito ang paniwala ng pagkakaroon ng iba't-ibang mga script.
Ito rin ang paniwala na ito ng pagsasahimpapawid ng isang kaganapan.
Ang ilang mga tao ay hindi gamitin ang nagbo-broadcast sa kanilang mga proyekto sa una,
na ay lubos na cool na,
ngunit ito ay 2 iba't ibang mga paraan ng paghawak ito mas malaking isyu na tinatawag concurrency,
na kung paano mo makakuha ng mga programa upang maisagawa
o tila execute sa parehong oras?
Iba't ibang gawain na tumatakbo habang iba pang mga gawain ay tumatakbo.
Ito ay kung paano ang iyong operating system ay tila upang gumana.
Ito ang dahilan kung bakit kahit na, halimbawa,
Mayroon akong aking browser ay tumatakbo, maaari ko ring i-on Spotify at i-play ang isang kanta.
Iyon ay higit pa sa pangkonseptong bagay upang maunawaan.
Gusto kong kumuha ng hitsura sa thread maikling
kung nais mong upang matuto nang higit pa tungkol sa na.
>> Natin makita, Naniniwala akong maaaring naging
isang problema sa ito sa isa sa mga.
Muli, tingin ko mga thread at kaganapan ay hindi isang bagay na naming masaklawan sa C
dahil lang sa ito ay makabuluhang mas mahirap kaysa sa scratch.
Hindi ka dapat mag-alala tungkol dito doon, ngunit tiyak na maunawaan ang mga konsepto,
maunawaan kung ano ang nangyayari sa.
Bago ilipat namin sa, anumang mga katanungan sa Linggo 0 materyal?
Lahat pakiramdam medyo magandang?
-Unawa sa mga variable at kung ano ang isang variable?
>> Paglipat sa. Linggo 1.
Ang ilang mga bagay dito na hindi partikular na saklaw
sa pagsusuri ng pagsusulit ay kinakailangan at din mas haka-haka na mga bagay upang isipin ang tungkol.
Ang una ay ang paniwala ng kung ano ang source code, mga compiler at code ng bagay.
Sinuman? Basil.
Ay code ng bagay-ibig sabihin ko source code kung ano ang inilagay mo sa kumalatong,
at code ng bagay ay kung ano kumalatong Inilalagay ng ang sa gayon na ang iyong computer ay maaaring basahin ang program.
Eksakto.
Source code ang C code na iyong aktwal na type up.
Bagay code ay kung ano ang makakakuha ka ng kumalatong.
0s at 1s sa binary na format.
Pagkatapos, anong mangyayari kapag mayroon kang isang grupo ng mga file ng bagay,
sabihin ka kino-compile ang isang proyekto o programa na gumagamit ng maramihang mga file ng code ng pinagmulan,
na sa pamamagitan ng convention ay ibinigay sa. c file extension.
Iyon ay kung bakit mayroon kaming caesar.c, vigenère.c.
Kung ikaw ay sumusulat ng mga programa ng Java magbibigay sa iyo ang mga ito sa extension. Java.
Python programa ay ang extension. Py madalas.
>> Kapag mayroon kang maramihang mga. File c, ipunin ang mga ito.
Kumalatong spits ang lahat ng ito binary junk.
Pagkatapos ay dahil gusto mo lamang ng 1 programa
mayroon kang linker link lahat ng mga bagay file nang magkasama
sa 1 executable file.
Ito ay din kung ano ang mangyayari kapag ginamit mo ang CS50 library, halimbawa.
Ang CS50 library ay parehong na file na. H header
na magbasa ka, na # includecs50.h.
At pagkatapos ito ay din ng isang espesyal na file na library ng binary
na inipon na 0s at 1s,
at na-l flag, kaya kung pumunta namin pabalik sa aming mga puwang at masaya naming talagang mabilis
sa kung anong nangyayari sa dito kapag tinitingnan namin ang aming kumalatong utos,
kung ano ang namin ang nakuha ay ito ang aming file sa source code dito mismo.
Ito ay isang grupo ng mga flag ng tagatala.
At pagkatapos ay sa pinakadulo, mga-l flag ng link sa
ang aktwal na file binary para sa mga 2 aklatan, CS50 library at pagkatapos ay ang matematika library.
>> Unawa sa bawat uri ng mga file na 'layunin
sa proseso ng compilation ay isang bagay na makikita mo gusto upang makapag-
magbigay ng hindi bababa sa isang mataas na antas ng pangkalahatang-ideya ng.
Ang source code ay. Bagay code na ito ay.
Bagay code file pagkabitin, at makakakuha ka ng isang magandang, executable file.
Cool.
Ito ay kung saan maaari kang makakuha ng mga error sa maraming punto
sa compilation proseso.
Ito ay kung saan, halimbawa, kung mong gawin ang pag-link bandila,
CS50 bandila, at ligtaan mo ito sa puwang o kapag nagpapatakbo ka ng iyong code,
ito ay kung saan makakakuha ka ng isang error sa phase ang pag-link,
at ang linker ang sabihing, "Uy, na tinatawag na isang function GetString
na sa CS50 library. "
"Ikaw Sinabi sa akin na ito ay sa CS50 library, at hindi ko mahanap ang code para dito."
Na kung saan mayroon kang i-link ito sa, at na hiwalay na
mula tagatala ng error dahil ang tagatala ay naghahanap ng sa syntax at na uri ng mga bagay-bagay.
Magandang malaman kung anong nangyayari sa kapag.
>> Iba pang mga bagay na dapat malaman tungkol sa.
Gusto ko sabihin mo talagang nais kumuha ng hitsura sa maikling sa typecasting ginawa ng Jordan
upang maunawaan kung ano ang mga ints sa ilalim ng hood,
ano char ay sa ilalim ng hood.
Kapag makipag-usap namin tungkol sa ASCII at namin ang aktwal na tumitingin sa ASCII table,
kung ano na ginagawa ang nagbibigay sa amin ng isang ilalim ng hood ang hitsura
sa kung paano ang computer aktwal na kumakatawan sa kabisera A at ang digit 7
at ng kuwit at tandang pananong.
Ang computer ay mayroon ding mga espesyal na paraan upang kumatawan
ang bilang 7 bilang isang integer.
Ito ay isang espesyal na paraan upang kumakatawan sa bilang 7 bilang isang lumulutang bilang punto,
at mga ay ibang-iba.
Typecasting ay kung paano sabihin sa iyo ang computer "Uy, gusto kong mong i-convert
mula sa isang representasyon sa isa pang representasyon. "
Bakit hindi namin kumuha ng isang pagtingin sa na.
>> Gusto ko ring tingnan sa maikling sa mga aklatan at ang maikling sa compiler.
Yaong talk tungkol sa proseso ng compilation,
kung ano ang library ng, at pumunta sa ilan sa mga tanong na ito na maaari kang makapag-tanungin.
Tanong sa Linggo 1 materyal?
Mayroon bang anumang mga paksa in dito na mukhang daunting gusto mo upang masakop ang?
Sinusubukan ko ang pumutok sa pamamagitan ng karamihan ng mga mas maaga na paksa upang maaari naming makuha
mga payo at gawin ng kaunting recursion.
Saloobin?
Anumang bagay upang masakop ang?
Oras para sa ilang mga tsokolate siguro?
Mong guys ay nagtatrabaho sa pamamagitan nito.
Ako pagpunta upang panatilihin ang hithit sa aking kape.
Linggo 2.
Magandang tawag, magandang tawag.
Sa Linggo 2 usapan natin ng kaunti higit pa tungkol sa mga function.
>> Sa unang ilang problema sa set hindi namin ay talagang magsulat ng anumang mga function sa lahat
bukod sa kung saan ang function?
[Mag-aaral] Main. >> Main, eksakto.
At kaya nasaksihan namin ang iba't ibang mga costume na pangunahing may kanya-kanyang.
May ang isa kung saan ito ay tumatagal ng walang argumento,
at sabihin lang namin void in sa pagitan ng mga panaklong,
at pagkatapos ay ang iba pang mga na kung saan namin nais na tumagal ng mga argumento sa command line,
at bilang namin nakita, na kung saan mayroon kang int argc at string argv array
o ngayon na aktwal na namin ang nakalantad na string sa magpasinda * na ito ay
kami ay pagpunta upang simulan ang pagsulat ito bilang magpasinda * argv at pagkatapos bracket.
Sa Problema Set 3, guys nakita ng grupo ng mga function,
at ipinatupad mo isang bungkos ng mga function, gumuhit, tumingin up, mang-uayabit.
Ang mga modelo ay ang lahat ng nakasulat doon para sa iyo.
>> Ano Nais kong makipag-usap tungkol dito sa function talagang mabilis
na may 3 bahagi sa kanila kapag sumulat ka ng isang function.
Mayroon kang upang tukuyin ang return uri ng pag-andar.
Mayroon kang tumukoy ng isang pangalan para sa function na, at pagkatapos ay mayroon kang upang tukuyin
ang listahan ng argumento o ang parameter na listahan.
Halimbawa, kung ako ay upang magsulat ng isang function upang magbuo ng isang bungkos ng mga integer
at pagkatapos ay bumalik sa akin ang kabuuan kung ano ang uri ng aking kita
kung Nais kong sabihin sa ilang integer at pagkatapos ay ibalik ang kabuuan?
Pagkatapos ang pangalan ng function na.
Kung ako magpatuloy at isulat sa berde, ang bahagi na ito ay ang return type.
Ang bahagi na ito ay ang pangalan.
At pagkatapos ay sa pagitan ng mga panaklong
kung saan bigyan ko ang mga argumento,
madalas dinaglat na bilang args, minsan tinatawag na param para sa mga parameter.
At kung mayroon kang isa, mo lamang tukuyin ang isa.
Kung mayroon kang maramihang paghiwalayin ang bawat isa gamit ang isang kuwit.
At para sa bawat argumento magbibigay sa iyo ng 2 bagay na-Kevin?
[Kevin] Mayroon kang upang bigyan ang uri at pagkatapos ay ang pangalan.
At pagkatapos ay ang pangalan, at ang pangalan ay ang pangalan na kayo ay pagpunta sa gamitin
sumangguni sa argument na sa loob ng function na kabuuan,
sa loob ng function na kasalukuyang sumusulat ka.
>> Hindi mo na kailangang mag-halimbawa, kung ako pagpunta sa sabihin sa ilang pananalita,
sabihin, ang isang array ng integer-we'll int array,
at Bibigyan kita ng aking sarili ilang mga kulot tirante doon-
pagkatapos kapag pumasa ako ng isang array sa function na kabuuan
Pumasa ko ito sa unang posisyon ng listahan ng argumento.
Ngunit ang array na dumadaan ako sa hindi ang pangalan arr.
Arr ay pagpunta sa kung paano mag-refer ko na argumento sa loob ng katawan ng function na.
Ang iba pang mga bagay na kailangan namin isinasaalang-alang,
at ito ay bahagyang naiiba mula sa mga function, ngunit tingin ko ito ay isang mahalagang punto,
na sa C kapag Sumulat ako ng isang function tulad nito
paano ko malalaman kung gaano karaming mga elemento sa array?
Ito ay medyo ng isang nanlilinlang tanong.
Usapan natin ang tungkol sa ilang sandali sa seksyon ng nakaraang linggo.
Paano ko malalaman kung ang bilang ng mga elemento sa loob ng isang array sa C?
Mayroon bang paraan?
>> Ito lumiliko out na walang paraan upang malaman.
Mayroon kang upang pumasa ito sa hiwalay.
May ay isang nanlilinlang na maaari mong gawin
kung ikaw ay sa parehong function na kung saan array ay ipinahayag,
at nagtatrabaho ka na may isang array ng stack.
Ngunit Gumagana lamang kung ikaw ay sa ang parehong function na.
Sandaling pumasa ka ng isang array sa isa pang function na o kung ikaw ipinahayag isang array
at inilagay mo na array sa magbunton, ginamit mo ang malloc
at na uri ng mga bagay-bagay, at pagkatapos ang lahat ng mga taya ay off.
Pagkatapos iyong aktwal na ilibot
isang espesyal na argumento o isa pang parameter
na nagsasabi sa iyo kung gaano kalaki ang array.
Sa kasong ito, Gusto ko nais na gumamit ng comma-I'm Paumanhin, ito ay pagpunta off ang screen dito-
at gusto kong pumasa sa isa pang argument
at tawagan ito int Len para sa haba.
>> Isang bagay na maaaring manggaling sa pagsusulit
ay humihiling sa iyo na magsulat o ipatupad ang isang partikular na function na tinatawag na isang bagay.
Kung hindi kami magbibigay sa iyo ng prototype, kaya ito buong bagay dito,
buong gulo na ito ay tinatawag na ang deklarasyon ng function na o ang function na prototype,
ito ay isa sa mga unang bagay na makikita mo gusto upang magpaganap ng pangako kung hindi ito ibinigay
sa iyo kaagad sa pagsusulit.
Ang iba pang nanlilinlang na natutunan ko ay na
nating gawin namin magbibigay sa iyo ng prototype para sa isang function, at sabihin namin, "Uy, na kailangan mong isulat ito."
Sa loob ng kulot tirante na mayroon ka sa pagsusulit
kung napansin mo na may uri ng pagbalik at napansin mo na ang uri ng return
ay isang bagay na iba kaysa sa walang silbi, na nangangahulugan na ang function ay hindi bumalik sa anumang,
pagkatapos ay isang bagay na talagang nais na gawin ay sumulat
ang ilang mga uri ng return statement sa pinakadulo ng function na.
Return, at sa kasong ito, gagamitin namin maglagay ng blangkong dahil gusto naming punan ang blangko.
Ngunit ito ay nakakakuha ka iniisip sa tamang paraan tungkol sa kung paano ako pagpunta sa lapitan ang problemang ito?
At ito reminds ka nagbabalik ng halaga
sa tumatawag ng pag-andar.
>> Oo. >> [Mag-aaral] Malalagay ba style kapag sumusulat kami ng code sa ang pagsusulit?
Tulad ng indentation at na uri ng mga bagay-bagay? >> [Mag-aaral] Oo.
Hindi, hindi ng mas maraming.
Tingin ko ng maraming ng ito ay isang bagay na makikita namin linawin sa pagsusulit sa araw ng,
ngunit karaniwang nababahala tungkol sa # Kabilang at na uri ng mga bagay-bagay, uri ng labas.
[Mag-aaral] kailangan mong magkomento ang iyong sulat-kamay na code?
Kailangan mong magkomento ang iyong sulat-kamay na code?
Pagkomento ay palaging magandang kung ikaw ay nag-aalala tungkol sa bahagyang credit
o gusto mong makipag-usap ang iyong layunin sa greyder.
Ngunit ako, muli, ay linawin sa pagsusulit mismo at sa pagsusulit araw,
ngunit hindi ako naniniwala na kayo ay kinakailangan na magsulat ng mga komento, walang.
Karaniwang hindi, ngunit ito ay tiyak ang uri ng bagay na kung saan
maaari kang makipag-usap ang iyong layunin, bang "Hey, ito ay kung saan ako pupunta dito."
At minsan na maaaring makatulong na may bahagyang credit.
Cool.
>> Basil.
[Basil] Ano ang pagkakaiba sa pagitan ng deklarasyon, sabihin, int lang
sa argumento o mga parameter kumpara sa deklarasyon ng variable sa loob ng andar?
Wow, kape nagpunta ang tatagukan.
[Basil] Tulad ng kung aling mga bagay na gusto naming upang ilagay sa mga argumento.
Oo, na isang mahusay na tanong.
Paano ka pumili ng kung ano ang mga bagay na gusto mong ilagay sa argumento
kumpara sa kung anong mga bagay na dapat mong gawin sa loob ng pag-andar?
Sa kasong ito kasama namin parehong sa mga ito bilang argumento
dahil sila ng isang bagay na sinumang pagpunta sa gamitin ang function na sa kabuuan
kailangang tukuyin ang mga bagay.
>> Ang kabuuan function, tulad ng usapan natin ang tungkol ay walang paraan ng alam
kung gaano kalaki ang array ay nakakakuha ng mula sa tumatawag o sinumang gamit ang function na sa kabuuan.
Ay walang paraan ng pag-alam kung gaano kalaki ang array na.
Ang dahilan na pumasa kami sa haba karapatan dito bilang isang argument
ay dahil na ang isang bagay na talaga namin sinasabi mo ang tumatawag ng function na,
sinumang pagpunta sa gamitin ang function na sa kabuuan, "Uy, hindi lamang ang mayroon mong bigyan kami ng isang array
ng mga ints, mayroon ka ring upang sabihin sa amin kung paano malaki ang array na iyong ibinigay sa amin ay. "
[Basil] Yaong ay parehong na command argumento line?
Hindi, ito ay aktwal na argumento na gusto mong pumasa sa pag-andar.
>> Hayaan akong gawin ang isang bagong pahina dito.
[Basil] Tulad pangalan ay pumasa-
[Nate H.] Kung mayroon akong int pangunahing (walang bisa),
at ako pagpunta sa ilagay sa aking return 0 down na dito sa ibaba,
at sabihin Gusto kong tumawag sa kabuuan function na.
Gusto ko sasabihin int x = sum ();
Upang gamitin ang function na sa kabuuan, mayroon akong upang pumasa sa parehong array na gusto kong sabihin sa ilang pananalita
at ang haba ng array, kaya ito ay kung saan
ipagpalagay ko ay may isang array ng ints,
sinasabi ko ay may int numbaz [] = 1, 2, 3,
uri ng paggamit na-hack up syntax doon,
pagkatapos ay kung ano ang nais kong gawin sa kabuuan Gusto ko nais upang pumasa sa
parehong numbaz at ang bilang 3
upang sabihin sa kabuuan function na "Okay, narito ang array na gusto kong mong sabihin sa ilang."
"Narito ang laki nito."
Ba na magkaroon ng kahulugan? Ba na sagutin ang iyong tanong?
>> Sa maraming mga paraan ginagawa nito parallel kung ano ang aming ginagawa sa pangunahing
kapag mayroon kaming command argumento line.
Ang isang programa tulad ng Caesar cipher, halimbawa, na kailangan
utos mga argumento ng linya sa hindi gawin.
Hindi ito alam kung paano upang i-encrypt kung hindi mo sabihin dito kung ano ang key upang magamit ang
o kung hindi mo sabihin dito kung ano ang string na gusto mo upang i-encrypt.
Pagdikta para sa input, ito ay kung saan kami ay nakakuha ng 2 magkaibang mga mekanismo
para sa pagkuha ng input mula sa user, para sa pagkuha ng impormasyon mula sa user.
Para sa Itakda ang Problema 1 Nakita namin ang GetInt na ito, GetString, GetFloat paraan
ng pagdikta para sa input, at na tinatawag gamit ang karaniwang input stream.
Ito ay bahagyang naiiba.
Ito ay isang bagay na maaari mong gawin sa isang pagkakataon na iba sa
kapag ikaw ay tumawag sa diyos sa programa, kapag sinimulan mo ang programa sa pagtakbo.
Ang linya ng command argumento lahat ay tinukoy kapag simulan mo ang programa na tumatakbo.
Namin ang paghahalo ng dalawang ng mga.
Kapag ginagamit namin ng mga argumento sa isang function, tulad ng mga argumento command line sa main.
Ito ay kapag ikaw ay tumawag sa diyos ang pag-andar na kailangan mo upang sabihin dito
kung ano ang eksaktong kailangan nito upang upang isagawa ang mga gawain.
Isa pang magandang bagay upang tumingin sa at Ipapaalam ko mong tingnan ito sa iyong bakanteng oras,
at ito ay sakop sa pagsusulit na ito paniwala ng saklaw
at mga lokal na variable kumpara sa pangkalahatang variable.
Gawin bigyang-pansin na.
>> Ngayon na kami ay nakakakuha sa sa iba pang mga bagay-bagay na ito,
sa Linggo 3 na sinimulan namin ang pakikipag-usap tungkol sa paghahanap at pag-uuri-uri.
Naghahanap at pag-uuri-uri, ng hindi bababa sa CS50,
napaka isang panimula sa ilan sa mga mas panteorya bahagi ng computer science.
Ang problema ng paghahanap, ang problema ng pag-uuri-uri
ay malaki, canonical problema.
Paano mo mahanap ang isang partikular na numero sa isang array ng mga bilyun-bilyong ng mga integer?
Paano mo mahanap ang isang partikular na pangalan sa loob ng isang libro ng telepono
na naka-imbak sa iyong laptop?
At kaya namin ipakilala ang paniwala na ito ng asymptotic run beses
sa talagang tumyak ng dami kung gaano katagal, kung paano mahirap problema sa mga ito ay,
kung gaano katagal tumagal upang malutas.
Sa, naniniwala ako, 2011 sa pagsusulit ng problema na sa tingin ko ang mga merito
sumasaklaw sa masyadong mabilis, na kung saan ay ang isang ito, problema 12.
O hindi, Omega.
>> Narito kami ay pakikipag-usap tungkol sa pinakamabilis na posibleng run oras
para sa isang partikular na algorithm at pagkatapos ay ang pinakamabagal na posibleng run oras.
Ito Omega at O ​​talaga lang shortcut.
Hindi nila notational mga shortcut para sa sinasabi
kung mabilis sa posibleng pinakamahusay na kaso ay aming algorithm run,
at kung mabagal sa ang pinakamasama posibleng kaso ang aming algorithm na patakbuhin?
Natin ang ilang sa mga ito, at ang mga ito ay nasasaklawan rin
sa maikling sa asymptotic notation, na kung saan ko lubos na inirerekomenda.
Jackson ginawa talagang magandang trabaho.
Sa binary paghahanap, makipag-usap namin tungkol sa binary paghahanap bilang isang algorithm,
at karaniwang namin makipag-usap tungkol dito sa mga tuntunin ng malaki O. nito
Ano ang malaking O?
Ano ang pinakamabagal na posibleng run oras ng binary paghahanap?
[Mag-aaral] N ²?
Isara, hulaan ko na katulad na.
Ng maraming mas mabilis kaysa sa.
[Mag-aaral] binary? >> Oo, binary paghahanap.
[Mag-aaral] Ito ay log n.
Mag-log n, kaya kung ano ang mag-log n ibig sabihin?
Halves ito sa bawat pag-ulit.
Eksakto, ito ang pinakamabagal na posibleng kaso,
sabihin kung mayroon ka ng isang pinagsunod-sunod array
ng isang milyong integer at ang numero na iyong hinahanap para sa
ay alinman sa unang elemento sa array o ang huling elemento sa array.
Tandaan, ang binary search algorithm ay gumagana sa pamamagitan ng pagtingin sa gitna elemento,
nakikita kung na ang tugma na naghahanap ka ng.
Kung ito ay, pagkatapos ay mahusay, na iyong natagpuan ito.
>> Sa posibleng pinakamahusay na kaso, kung gaano kabilis ang run binary paghahanap?
[Mag-aaral] 1.
1, pare-pareho ang oras, malaking O ng 1. Oo.
[Mag-aaral] Mayroon akong tanong. Kapag sinabi mong mag-log ng n, ibig sabihin may paggalang sa base 2, i-right?
Oo, kaya na ang iba pang mga bagay.
Sabihin namin ang mga n ng log, at hulaan ko kapag ako ay nasa high school
Ko laging ipinapalagay na ang log ay base 10.
Oo, kaya oo, log karaniwang base 2 ay kung ano ang ginagamit namin.
Muli, ang pagpunta pabalik sa binary paghahanap, kung naghahanap ka para sa alinman sa
ang mga elemento sa pinakadulo o elemento sa pinakadulo simula,
dahil simulan mo sa gitna at pagkatapos mo itapon
alinman kalahati ay hindi matugunan ang pamantayan na hinahanap mo para sa,
at pumunta ka sa susunod na kalahati at sa susunod na kalahati at sa susunod na kalahati.
Kapag ako ay naghahanap para sa pinakamalaking elemento sa milyong integer array
Ako pagpunta upang maghati ang mga ito sa karamihan ng log ng 1 milyong beses
bago ako sa wakas subukan at makita na elemento Naghahanap ako
sa pinakamalaking o sa pinakamataas na index ng array,
at iyon ay magdadala sa log ng n, mag-log ng 1 milyong beses.
>> Bubble-uuri.
Ka ba guys tandaan ang bubble-uuri algorithm?
Kevin, maaari ba ninyo akong bigyan ng isang mabilis na pagbabalik-tanaw ng kung ano ang nangyari sa bubble-uuri algorithm?
[Kevin] talaga ito napupunta sa pamamagitan ng lahat sa listahan.
Mukhang sa unang dalawang.
Kung ang unang isa ay mas malaki kaysa sa ikalawang isa ito swaps kanila.
At ihahambing nito pangalawa at pangatlong, parehong bagay, swaps,
ikatlo at ikaapat, ang lahat ng mga paraan pababa.
Mas malaking numero ay follow up sa dulo.
At pagkatapos gayunpaman maraming loop tapos ka na.
Eksakto, kaya kung ano ang Kevin sinabi na namin manood ng mga mas malaking numero
bubble hanggang sa dulo ng array.
Halimbawa, tututol ba kayo sa paglalakad sa amin sa pamamagitan ng halimbawa na ito kung ito ang aming array?
[Kevin] Makikita mo na aabot ng 2 at 3.
3 ay mas malaki kaysa sa 2, kaya swap mo sa kanila.
[Nate H.] Kanan, kaya namin magpalitan mga ito, at kaya nakukuha namin 2, 3, 6, 4, at 9.
[Kevin] Pagkatapos mong ihambing ang 3 at 6.
3 ay mas maliit sa 6, kaya mong iwanan ang mga ito,
at 6 at 4, na nais mong swap sa kanila dahil 4 mas maliit kaysa sa 6.
[Nate H.] Kanan, kaya nakukuha ko 2, 3, 4, 6, 9.
[Kevin] At 9 ay mas malaki kaysa sa 6, kaya mong iwanan ito.
At nais mong bumalik muli sa pamamagitan nito.
>> [Nate H.] ba ako gawin sa puntong ito? >> [Kevin] No.
At bakit ako hindi tapos na sa puntong ito?
Dahil mukhang ang aking array ay pinagsunod-sunod. Naghahanap ako sa ito.
[Kevin] Pumunta sa pamamagitan nito muli at tiyakin na wala nang swaps
bago maaari mong ganap na itigil.
Eksakto, kaya kailangan mo upang mapanatili ang pagpunta sa pamamagitan at tiyakin na walang mga swaps
na maaari mong sa puntong ito.
Ito ay talagang lamang masuwerteng, tulad ng sinabi mo, na natapos na namin hanggang
lamang kinakailangang 1 pass sa pamamagitan ng at kami ay pinagsunod-sunod.
Ngunit upang gawin ito sa pangkalahatang kaso makikita namin ang aktwal na upang gawin ito nang paulit-ulit.
At sa katunayan, ito ay isang halimbawa ng ang pinakamahusay na posibleng kaso,
tulad ng nakita natin sa problema.
Nakita namin na ang pinakamahusay na posibleng kaso ay n.
Nagpunta kami sa pamamagitan ng oras array 1.
Ano ang pinakamasama posibleng kaso para sa algorithm na ito?
[Kevin] N ².
At kung ano ang hitsura na gusto? Ano ang isang array itsura na tumagal ng n ² oras?
[Kevin] [hindi marinig] pinagsunod-sunod.
Eksakto, kaya kung ako ay ang array 9, 7, 6, 5, 2,
muna sa 9 na gagawin bubble ang lahat ng mga paraan.
Pagkatapos ng 1-ulit, nais naming 7, 6, 5, 2, 9.
Pagkatapos 7 gagawin bubble up, 6, 5, 2, 7, 9, at iba pa at iba pa.
>> Gusto namin upang pumunta sa pamamagitan ng buong array n beses,
at maaari mong aktwal na makakuha ng bahagyang mas tumpak na kaysa ito
dahil sa sandaling kami ay inilipat sa 9 na ang lahat ng mga paraan sa nito huling posibleng posisyon
Alam namin na hindi namin upang ihambing laban sa na elemento muli.
Sa sandaling simulan namin bulubok ng 7 hanggang
alam namin na maaari naming ihinto sa sandaling ang 7 bago ang 9
dahil kami kumpara sa 9 dito.
Kung gagawin mo ito sa isang smart paraan hindi tunay, hulaan ko, na karaming oras.
Hindi ka upang ihambing ang lahat ng mga posibleng [hindi marinig] kumbinasyon
bawat solong oras na pumunta ka sa pamamagitan ng bawat pag-ulit.
Ngunit pa rin, kapag makipag-usap namin tungkol sa itaas bound sabihin namin na
tumitingin ka sa n ² paghahambing sa lahat ng mga paraan sa pamamagitan ng.
>> Natin bumalik, at dahil kami ay nagsisimula upang makakuha ng kaunti maikling sa oras
Gusto ko sabihin dapat mo talagang pumunta sa pamamagitan ng iba pang mga bahagi ng talahanayan na ito,
punan ang lahat ng ito out.
Isip ng mga halimbawa. Isipin ng kongkreto halimbawa.
Iyon ay talagang madaling gamiting at kapaki-pakinabang na gawin.
Gumuhit ito.
Ito ang uri ng talahanayan na bilang pumunta ka sa pamamagitan ng sa computer science
Dapat mo ba talagang simulan upang malaman ito sa pamamagitan ng puso.
Ito ay ang mga uri ng mga katanungan na nakukuha mo sa interbyu.
Ito ang mga uri ng mga bagay na ang mga mahusay na malaman,
at isipin ang tungkol sa mga kaso ng gilid, talagang pag-uunawa kung paano mag-isip tungkol sa
alam na para sa bubble ayusin ang pinakamasama posibleng array
upang pag-uri-uriin na iyon ay isa na sa reverse pagkakasunud-sunod.
>> Payo. Natin makipag-usap ng kaunti tungkol sa mga payo.
Sa huling ilang minuto na mayroon kami dito
Alam ko na ito ay isang bagay kasama ang file I / O na sa halip bagong.
Kapag makipag-usap namin tungkol sa mga payo sa ang dahilan na gusto naming makipag-usap tungkol sa mga payo
ay dahil, isa, kapag kami ay nagtatrabaho sa C
kami ay talagang sa isang medyo mababa antas kumpara sa mga pinaka-modernong mga wika programming.
Humihingi kami ng aktwal na magagawang upang manipulahin ang mga variable sa memorya,
malaman kung saan aktwal na ito ay matatagpuan sa loob ng aming RAM.
Sa sandaling na-nawala sa tumagal ang mga klase ng operating system makikita mo
na, muli, ang uri ng isang abstraction.
Iyon ay hindi aktwal na ang kaso.
Mayroon kaming virtual memory na itinatago ang mga detalye mula sa amin.
>> Ngunit sa ngayon, maaari mong ipagpalagay na kapag mayroon kang isang programa,
halimbawa, kapag simulan mo ang pagpapatakbo ng iyong programa sa Caesar cipher-
Kukunin ko na bumalik sa aking iPad talagang mabilis-
na sa napaka-simula sa programa ng iyong, kung mayroon kang, sabihin nating,
4 gigabytes ng RAM sa iyong laptop,
na makukuha mo magtabi tigkal na ito, at kami na tumawag ito RAM.
At ito ay nagsisimula sa isang lugar na kami ay pagpunta sa tumawag sa 0,
at ito ay nagtatapos sa isang lugar na kami tatawag sa 4 gigabytes.
Ko talagang hindi maaaring sumulat. Tao, na-hack.
Kapag ang iyong programa executes
carves ang operating system RAM,
at tinutukoy ito ng iba't ibang mga segment para sa mga iba't ibang mga bahagi ng iyong programa upang mabuhay.
Down dito ang lugar na ito ay uri ng lupa walang tao.
Kapag kang pumunta ng kaunti mas malayo dito
Mayroon aktwal na lugar kung saan
ang code para sa iyong buhay sa programa.
Na aktwal na binary code, ang aktwal na executable file ay makakakuha ng load sa memory
kapag nagpatakbo ka ng programa, at naninirahan sa segment ng code.
At ng iyong programa executes processor tumitingin sa segment na ito ng code
upang malaman kung ano ang susunod na pagtuturo?
Ano ang susunod na linya ng code na kailangan ko upang maisagawa?
>> Mayroon ding isang segment ng data, at ito ay kung saan ang mga string constants
makakuha ng naka-imbak na na ginagamit mo.
At pagkatapos ay mas malayo hanggang sa lugar na ito na tinatawag na magbunton.
Namin ma-access ang memory sa doon sa pamamagitan ng paggamit ng malloc,
at pagkatapos ay patungo sa pinakatuktok ng iyong programa
may stack ang,
at na kung saan kami ay nagpe-play para sa karamihan ng simula.
Na ito ay hindi sa scale o anumang.
Isang maraming ng ito ay napaka machine nakasalalay,
operating system nakasalalay, ngunit ito ay medyo kung paano ang mga bagay ay makapag-chunked up.
Kapag nagpatakbo ka ng isang programa at ipinapahayag isang variable na tinatawag na x-
Pupunta ako upang gumuhit ng isa pang kahon pababa sa ibaba, at ito ay pagpunta sa RAM pati na rin.
At ako pagpunta sa hitsura.
Namin gumuhit ng mga tulis-tulis na linya upang ipahiwatig ito ay lamang ng isang maliit na seksyon ng RAM
at hindi lahat ng ito bilang gumuhit namin sa tuktok.
>> Kung idedeklara ko ang isang integer variable na tinatawag na x,
pagkatapos sa aking aktwal na makakuha ng pagma-map
na naka-imbak sa simbolo talahanayan ng aking mga programa
na nag-uugnay ang pangalan x sa rehiyon na ito ng memory ko ang iginuhit
dito mismo sa pagitan ng vertical bar.
Kung mayroon akong isang linya ng code sa aking programa na nagsasabing x = 7
processor alam ng "Oh, okay, alam ko na x buhay sa lokasyong ito sa memory."
"Ako pagpunta upang magpatuloy at magsulat ng 7 doon."
Paano gumagana ang alam kung ano ang lokasyon na ito sa memory?
Well, na ang lahat tapos sa makatipon oras.
Tagatala ay tumatagal ng pag-aalaga ng paglaan ng kung saan ang bawat isa sa mga variable upang pumunta
at paglikha ng isang espesyal na pagma-map o sa halip na sa pagkonekta sa mga tuldok
sa pagitan ng isang simbolo at kung saan ito ang nangyayari, pangalan ng variable
at kung saan ito upang mabuhay sa memorya.
Ngunit ito lumiliko namin aktwal na ma-access ito sa aming mga programa pati na rin.
Ito ay nakakakuha ng mahalagang kapag sinimulan namin ang pakikipag-usap tungkol sa ilang ng ang istraktura ng data,
kung saan ay isang konsepto na kami ay pagpunta sa ipakilala sa paglaon.
>> Ngunit sa ngayon, kung ano ang maaari mong malaman ay na maaari ba akong lumikha ng isang pointer sa lokasyon na ito, x.
Halimbawa, maaari ba akong lumikha ng isang variable ng pointer.
Kapag lumikha kami ng pointer variable ginagamit namin ang star pagtatanda.
Sa kasong ito, ito sabi ako pagpunta upang lumikha ng isang pointer sa isang int.
Ito ay isang uri ng tulad ng anumang iba pang.
Namin bigyan ito ng isang variable tulad ng y,
at pagkatapos namin-set katumbas ng address, sa isang address.
Sa kasong ito, maaari naming itakda ang y upang tumuro sa x
sa pamamagitan ng paglalaan ng address ng x, na aming ginagawa na may ganitong ampersand,
at pagkatapos namin-set y upang ituro dito.
Ano ito ay mahalagang kung tinitingnan namin ang aming RAM
ito ay lumilikha ng isang hiwalay na variable.
Ito ay pagpunta sa tumawag ito y,
at kapag ang linya ng code executes
aktwal na ito upang lumikha ng isang maliit na pointer kung saan namin karaniwang gumuhit bilang isang arrow,
at nagtatakda y upang tumuro sa x.
Oo.
[Mag-aaral] Kung x ay isang pointer, nais mong lang gawin
int * y = x sa halip ng pagkakaroon ng ampersand?
Oo.
Kung ang x ay isang pointer, maaari mong itakda sa 2 pointer katumbas sa bawat isa,
kung saan ay hindi y ay tumuturo sa x,
ngunit tumuturo sa anumang x ay tumuturo sa.
Sa kasamaang-palad, hindi namin ng oras.
>> Ano ang gusto kong sabihin sa puntong ito, maaari naming makipag-usap tungkol sa offline,
ngunit Gusto ko sabihin simulan ang nagtatrabaho sa pamamagitan ng ang problemang ito, # 14.
Maaari mong makita may nang kaunti napunan na para sa iyo dito.
Maaari mong makita na kapag idedeklara namin ang 2 pointer, int * x at * y,
at tandaan na pagturo ng ang * sa tabi variable ay isang bagay na nagawa noong nakaraang taon.
Ito lumiliko out na ito ay katulad sa kung anong ginagawa namin sa taong ito.
Hindi mahalaga kung saan mo isulat ang * kapag ikaw ay deklarasyon ang pointer.
Ngunit namin nakasulat * sa tabi ang uri
dahil na ginagawang napakalinaw ka deklarasyon ng variable ng pointer.
Maaari mong makita na ang deklarasyon sa 2 pointer ay nagbibigay sa amin ng 2 kahon.
Dito kapag kami ng x katumbas sa malloc
kung ano ito ay sinasabi-set muna memory sa magbunton.
Ito maliit na kahon dito mismo, ang lupon na ito, ay matatagpuan sa magbunton.
X ay nakaturo dito.
Tandaan na ang y ay hindi pa rin na tumuturo sa anumang.
Upang makakuha ng memorya upang mag-imbak ang numero 42 sa x
Gusto naming gamitin kung ano ang pagtatanda?
[Mag-aaral] * x = 42.
Eksakto, * x = 42.
Nangangahulugan iyon na sundin ang mga arrow at magtapon 42 sa doon.
Narito kung saan namin-set ang y at x y namin na tumuturo sa x.
Muli, ito ay tulad lamang ng kung ano ang sinabi ng Kevin kung saan namin-set y katumbas ng x.
Y ay hindi na tumuturo sa x.
Sa halip, ito ay nagtuturo sa kung ano ang x ay tumuturo sa pati na rin.
>> At pagkatapos ay sa wakas sa huling box may 2 posibleng bagay na maaari naming gawin.
Isa ay maaaring namin sabihin * x = 13.
Ang iba pang bagay ay namin sabihin Alex, alam mo ano ang maaari naming gawin dito?
Maaari mong sabihin * x = 13 o-
[Mag-aaral] Maaari mong sabihin na ang int anumang.
[Nate H.] Kung ito ay tinutukoy bilang isang int variable maaari naming gawin iyon.
Din namin sabihin * y = 13 dahil sila ay parehong na tumuturo sa parehong lugar,
upang maaari naming gamitin ang alinman sa variable upang makakuha ng doon.
Oo. >> [Mag-aaral] Ano ang hitsura nito ay magiging tulad ng kung lamang namin sabihin int x 13?
Na deklarasyon ng isang bagong variable na tinatawag na x, na hindi gagana.
Gusto naming magkaroon ng isang banggaan dahil ipinahayag namin x isang pointer dito.
[Mag-aaral] Kung lamang namin ay na pahayag sa pamamagitan ng mismo kung ano ang hitsura nito ay magiging tulad ng sa mga tuntunin ng bilog?
Kung nagkaroon kami x = 13 pagkatapos nais naming magkaroon ng isang kahon, at sa halip ng pagkakaroon ng isang arrow
darating ng kahon gusto namin gumuhit ang mga ito bilang lamang 13.
[Mag-aaral] Sa kahon. Okay.
>> Salamat sa iyo para sa panonood, at good luck sa Quiz 0.
[CS50.TV]