[Powered by Google Translate] David J. MALAN: Ang lahat ng mga karapatan, ito ay CS50, at ito ang
magsimula ng linggo dalawang.
Salamat sa inyo.
Ipaalam sa amin magsimula dito sa isang tawag sa telepono.
Ako upang i-dial ang 617-bug-CS50.
CS50: Ito ay CS50.
Para sa Shuttle Boy, pindutin ang 1.
Upang magsimulang muli, pindutin ang 9.
David J. MALAN: Kaya't sinabi niya para sa Shuttle Boy, pindutin ang 1.
Kaya kami ay pagpunta sa pindutin ang 1.
CS50: Ano ang iyong pinagmulan?
Para sa patyo sa loob, pindutin ang 1.
Mather, pindutin ang 2.
Boylston, pindutin ang 3.
Lamont, pindutin ang 4.
Mem Hall, pindutin ang 5.
Upang magsimulang muli, pindutin ang 0.
David J. MALAN: Susubukan naming pindutin ang 1 para sa patyo sa loob.
CS50: Susunod shuttle umalis ito napaka minutong sa 13:10, at
sa 1:20 PM, 1:30 PM, 1:40.
Ito ay CS50.
>> David J. MALAN: Kaya ito ay CS50 ng boses.
At ito ay isang halimbawa ng uri ng panghuling proyekto,
Halimbawa, maaari mong kumagat off patungo sa
katapusan ng semestre.
Halimbawa, ang shuttleboy.cs50.net na umiiral -
talagang isang proyekto na ako unang sinulat ni pagkatapos pagkuha CS51
bumalik kapag ako ay isang undergraduate.
At ang inspirasyon dito ay bumalik pagkatapos ay, lahat sila ay may
naka-print na shuttle bus iskedyul, at walang
paniwala sa pagtingin ng mga bagay-bagay sa online.
At kaya ko uri ng kalapati sa isang weekend, poured sa pamamagitan ng
naka-print na iskedyul, at port ito sa isang computer program.
Sa oras, ang computer program nangyari na nakasulat
sa C. At iyong aktwal na tumakbo ito sa pamamagitan ng pag-type ng Shuttle Boy sa isang
kumikislap prompt tulad namin ang paggawa sa gayon ay malayo.
Ngunit sa mga nakaraang taon, ito ay lumaki sa isang instant
messaging bot.
Ito ay lumaki mas kamakailan sa website na ito, sa isang
SMS-based tool, pati na rin sa boses-based na tool na.
At ito ay upang iparamdam sa mga uri ng mga bagay na maaari mong
gawin para sa iyong sarili sa pamamagitan ng pagtatapos ng semestre.
>> Halimbawa, doon, ang SMS na bersyon ng Shuttle Boy mangyayari
upang gumana tulad ng sumusunod.
Kung, sa iyong cell phone, magpadala sa iyo ng isang text message sa 41,411 at
pagkatapos ay ipadala ang mga espesyal na simbolo sboy, para sa Shuttle Boy,
sinundan ng A at B, kung saan ay isang pinagmulan at B ay isang
destination -
Halimbawa, Boylston Space Quad -
kung ano dapat kang bumalik sa loob ng ilang segundo ay isang tekstong
mensahe mula sa Shuttle Boy na nagsasabi sa iyo nang eksakto kapag ang
susunod na ilang shuttle, mula sa puntong iyon Isang pagpunta sa na
point B.
At ito ay isang mas pangkalahatang halimbawa ng kung ano ang kilala bilang
gamit ang isang API.
>> Kaya halimbawa, ito dito lamang shuttleboy.cs50.net, ang
aktwal na web-based na pagkakatawang-tao ng mga ito.
Ngunit ang data na underlines ng mga apps na ito at iba pang mga na CS50
Bumuo ang lahat ng nakalantad sa lahat dito sa form
ng API, application programming interface.
At ito lamang ay isang magarbong paraan ng pagsabi na mga tao na gusto namin sa
sa Internet at iba pa na ginugol ng ilang panahon paglikha
software na maaari mong gamitin upang grab ang mga data mula sa amin at
pagkatapos ay bumuo ng iyong sariling mga application sa tuktok
ng na hanay ng data.
Kaya halimbawa, ito Shuttle Boy API pahina dito, na
mangyayari sa CS50 manu-manong, mahalagang mga dokumento
kung paano maaari kang pumunta tungkol sa humihiling sa CS50 server para sa data.
Halimbawa, kung hindi ka pamilyar sa CSV na mga file, kuwit
separated values, ito lamang ang uri ng mabilis at marumi
Excel-tulad ng mga file.
Gayon ay maaari mong hilingin sa ng Shuttle Boy para sa lahat ng data sa lahat ng mga
bahay at ang kanilang mga coordinate sa GPS, at makakakuha ka ng
bumalik, mahalagang, ang isang spreadsheet na tulad nang na
maaari mong basahin sa isang programa ng iyong sariling at pagkatapos ay
makabuo ng mga resulta, tulad ng Shuttle Boy mismo
mangyayari sa paggawa.
Para sa mga mas pamilyar na, mas modernong representasyon ng data
isama JSON, JavaScript Bagay pagtatanda.
May isang bagay na bumalik sa iyo patungo sa
katapusan ng semestre.
>> Ngunit muli, ito ay isa lamang ng ilang ng sariling mga API ng CS50.
At kapana-panabik na bagay ngayon, mga araw na ito, Facebook at
Twitter at Google at medyo magkano ang bawat popular na website out
ay may ilang uri ng API, na nangangahulugan na kung basahin mo ang
babasahin sa kanilang website, mag-sign up para sa isang
account, maaari mong simulan ang pagsusulat ng software sa tuktok ng
anumang mga tool o data na kumpanya ay nagbibigay ng.
At kaya isa sa aming sariling mga Fellows ng pagtuturo ng ilang taon na ang likod
nagsulat ng Mac bersyon ng.
Kaya ang link na may pamagat na Mac dito sa kaliwang tuktok, maaari mong aktwal
i-download ang isang widget sa Mac OS na tumatakbo sa iyong sariling Mac upang gawin ang
parehong uri ng mga bagay.
Kaya lahat ng ito ay tungkol sa pagbuo sa tuktok ng data set tulad ng mga ito.
Ngunit higit pa sa na patungo sa katapusan ng semestre.
>> Kaya natin sumisid sa tunay mabilis sa isang bug, uri ng makakuha ng
bagay warmed up ngayon, at sa tingin muli sa ilan sa mga
mga bagay na namin ay tumingin sa nakaraang linggo.
Sa partikular, hayaan mo akong magpatuloy at hilahin, sabihin nating,
halimbawang ito dito.
Buggy1.c, ito ay makukuha sa website ng kurso kung ikaw ay
i-download ito at sundutin sa paligid ng iyong sarili.
Ngunit natin mag-zoom in dito sa sa ito medyo maikling programa, at
napakabilis na pagbabalik-tanaw ng ilan sa ang pangunahing mga bloke ng gusali na
talaga namin ay pagpunta sa makatarungan simulan ang pagkuha para sa ipinagkaloob.
>> Kaya ang asul na mga bagay-bagay, sa linya 1 hanggang 9, lamang
softball katanungan.
Kaya ito lamang ang mga komento.
Ang mga ito ay may hindi nagagamit kahulugan.
Ngunit sila ng mga komento sa kamalayan na hindi sila ng mga tala na
Ko, ang tao, ginawa sa aking sarili upang sa lecture at pagkatapos
panayam, maaari ko aktwal na tandaan kung ano ang program na ito
ginagawa nang hindi na kinakailangang upang basahin sa pamamagitan ng ito linya sa pamamagitan ng linya at
muli ng kasaysayan sa aking isip.
Dagdag pa rito, kung ako ipasa sa programang ito sa ibang tao tulad ng
mo, mas malinaw sa iyo, dahil sa mga komento tulad nito,
kung ano ang programa ng aktwal na ginagawa, o hindi bababa sa kung ano ang
programa dapat na ginagawa.
Man o hindi ito ay tama ay isa pang bagay na sama-sama.
Ngayon, sa C, na may multi-line komento, isipin ang na sa linya
isa dito ang magic simbolo / *.
Ito ay nangangahulugan na dito ay ang simula ng isang komento.
At wala pang tao mahalaga hanggang sa maabot mo ang katapusan Terminator,
na * /, ang tapat.
Kaya ang katunayan na mayroon akong 80-ilang mga kakaibang bituin dito mula sa
kaliwa papuntang kanan ay talagang lamang ng isang Aesthetic detalye.
Ay walang functional na kahulugan.
>> Ngayon kung paano tungkol sa linya 11?
Ano ang gawin sa mga tuntunin lego?
Ano iyon?
Madla: Kasama ang pamantayan.
David J. MALAN: OK, mabuti.
Kaya kasama ang stdio.h library.
Kaya kung ano ang na ibig sabihin nito?
Well, sa loob ng file na iyon, stdio.h, ang maramihang mga
function na pagdeklara -
na, ang code na ibang tao sinulat ni.
At isang perpektong halimbawa ng isang function na ipinahayag sa
stdio.h ay -
kung aling mga paboritong sa ngayon?
Sa printf, isa ng ang pinaka-karaniwang mga gamitin, tiyak
sa maagang bahagi, mula sa library ay doon.
Kung ibubukod ko na linya ng code, ang kumalatong ay pagpunta sa sumigaw
sa akin ng isang bagay tungkol sa paggamit ng hindi nagbigay-alam simbolo.
Isang bagay na hindi nagbigay-alam ay marahil ang keyword, dahil
hindi pa namin alam ang tagatala kung ano printf mukhang
bang maliban kung isama namin na linya.
At higit pa pababa sa Earth, talaga, kung ano ang linya na sinasabi ay
buksan ang file na iyon, stdio.h, saanman ito ay sa server
hard drive, o hard drive ng appliance, at kopya-paste ito
doon sa aking file, nang walang aking
hindi upang gawin iyon nang manu-mano.
>> Ngayon, sa sandaling makuha namin ang dito sa main, bago katagal sisimulan namin
panunukso bukod kung ano ang int at kung ano ang walang silbi ay.
Ngunit sa ngayon, tingnan natin sa tatlong linya
sa loob ng 15 sa pamamagitan ng 17.
Ito dito inaangkin ko bilang maraming surot.
Linya 7 sa aking mga komento ay nagsasabing "Kung i-print ang 10
asterisk ngunit hindi. "Bakit ang ito ay hindi print, sa katunayan,
10 tulad bituin?
Madla: [hindi marinig].
David J. MALAN: Eksaktong.
Kaya mapapansin na kami ay nagsisimula sa mabibilang mula 0.
At ito ay talagang isang convention sa programming at
computer science sa mas pangkalahatang paraan, simula upang mabilang
mula 0 sa halip ng 1.
At ito ay talagang lamang derives mula sa ang katunayan na ang, para sa
Halimbawa, kapag nagkaroon kami ng walong tao sa entablado, kapag
walang isa ay pagtataas ng kanilang mga kamay, sila ay
lahat ng mga epektibong zero.
At iba pa lang uri ng isang computer convention ito,
samakatuwid, upang simulan ang pagbibilang mula 0.
Kung na ang pinakamababang bilang maaari mong kumatawan sa binary.
>> Kaya dito namin nagsimula ng Sinisimulan i sa 0.
Iyong itinakda namin i katumbas ng 0.
Ngunit pagkatapos ko ginawa ang pagkakamaling ito dito, na sinasabi i ay mas mababa sa o
katumbas sa 10.
Ngunit kung sa tingin mo na sa pamamagitan, kung sisimulan ko sa 0 at pagkatapos ay pumunta ako
hanggang sa 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, aktwal na ako pagpunta sa
i-print ang 11 bituin sa screen, dahil ko na nawala hanggang
sa at pantay-pantay sa 10.
Kaya madaling aayos dito pagkatapos ay kung ano?
Madla: [hindi marinig].
David J. MALAN: lamang baguhin ito sa mas mababa.
Kung gusto mo talagang, maaari mong gawin ito.
Ngunit sa pangkalahatan, na frowned kapag.
At kaya simula mabibilang mula 0 ay isang bagay na dapat mong
karaniwang masanay sa.
Ngayon, kung ano ang tungkol sa buong bumuo sa at ng mismo?
Ito linya 15 demarks isang para sa loop.
Kaya para sa ay hindi function na.
Ito ay isang pahayag.
Ito ay isang looping bumuo, tulad ng nakita natin sa simula.
At ito ay may tatlong bahagi.
Pansinin na ang unang bahagi sa
sa kaliwa ng semicolon.
May gitnang bahagi sa pagitan ng dalawang semicolons.
At pagkatapos ay ang kanang bahagi sa kanan
ng pangalawang semicolon.
Ngayon, ang unang sa mga ito ang kung ano?
Madla: [hindi marinig].
David J. MALAN: Bumalik doon?
Oo?
Madla: Pinasimulan.
>> David J. MALAN: Pinasimulan.
Kaya kung ano ang ibig sabihin nito?
Inihayag namin ang isang variable na tinatawag na i.
Ng uri int, dahil ko na tinukoy int i.
At ako Sinisimulan ko ang halaga ng 0.
Kaya kung ano ang ito talagang sinasabi?
Epektibo ito sinasabi sa computer hey, ninyo ako sapat
memorya, RAM sapat, upang umangkop sa isang numero, at pagkatapos ay ilagay ang
numero ng 0 sa na tipak ng RAM.
At bilang isang bukod, kung gaano kalaki ang isang int karaniwang, ng hindi bababa sa loob
ng appliance?
Madla: 32 bit.
David J. MALAN: 32 bits.
Kaya na nangangahulugan na bigyan ako ng 32 bit, na kilala bilang 4 bytes,
at ilagay ang halaga 0 sa ito, na kung saan ay medyo madali dahil
nangangahulugan lamang ito nakatakda ang lahat ng mga bit sa 0.
>> Sa ngayon, ang ikalawang bahagi dito ay ang kundisyon.
At kundisyon, ng pangalan nagmumungkahi, ay kung ano ay naka-check
muli at muli at muli bilang sa kung ito ay totoo o hindi.
Kaya ito ay sinasabi na gawin ang mga sumusunod na linya ng code -
lalo linya 16, dahil na ang isa lamang indent
sa ilalim nito -
hangga't i ay mas mababa sa 10.
At pagkatapos ng bawat pag-ulit sa pamamagitan ng loop, gawin ang
incrementation, na sa kasong ito ay i + +.
Ngayon, ito ay hindi na i + +.
Ito ay maaaring maging i -.
Ngunit kung ginawa ko ito, kung ano ang pag-uugali ng pagpunta
ng programang ito?
Madla: Ito ay pagpunta sa isang walang-katapusang loop.
David J. MALAN: Ito ay pagpunta sa ilang mga uri ng walang-katapusang loop,
maliban kung makuha namin ang masuwerteng pagkatapos negatibong 2 bilyong o kaya.
Siguro bagay ay pambalot ng paligid, sa pamamagitan ng likas na katangian ng ang tiyak na
bilang ng mga bit na aming inilaan para sa isang int.
Ngunit tiyak na ito upang umulit malayo higit sa 10 at
tiyak na higit sa 11 beses dito.
>> At ngayon, tulad ng bukod, Napagtanto na i + + at i -
talaga lang sintaktik asukal.
Lang shorthand notation para sa kung ano ang ng kaunti pa
tahasang nakasulat na tulad ng sumusunod:
i = i + 1.
Na kapareho sa i + +.
Ito ang uri ng hitsura prettier sasabihin i + +.
Mas maikli at malinaw, mas nababasa.
At kaya karamihan sa mga tao ay gawin iyon sa halip.
Ngunit ito ay kapareho pagtakbo sa
kung ano lamang namin nakita.
Kaya sa maikling salita, ang mabilis na pag-aayos dito ay lamang sabihin umulit i
mula 0 ang lahat ng mga paraan up sa mas mababa sa 10.
At pagkatapos ay makikita namin sa katunayan makakuha ng 10 bituin.
>> Kaya sabihin subukan ito.
Hayaan akong buksan ang terminal sa ibaba.
Hayaan akong pumunta sa direktoryo na ito.
At ako pagpunta upang ipunin ito nang manu-mano sa may kalatong sa ngayon.
At ako pagpunta upang ipunin ang bilang buggy1.c, Ipasok.
At ngayon buggy1, bakit walang ganitong file o direktoryo
tinatawag buggy1?
Madla: [hindi marinig].
David J. MALAN: Oo.
Kaya ito aktwal na tinatawag a.out.
Kaya isipin ang kung mo lamang magpatakbo kumalatong, kung saan kumalatong ay
tagatala, at hindi mo tukuyin ang pangalan na nais mong i-
ibigay sa iyong programa, ito ay pagpunta sa default sa a.out.
Kaya sa katunayan kung gawin ko ls -
oops.
At didn't ko - ang itim-at-puting isyu ilan sa
mo nahaharap ay naayos.
Ngunit ipaalam sa akin gawin ito.
Doon ay may namin a.out sa kaliwang bahagi doon.
Kaya mayroon kaming upang patakbuhin ang a.out sa halip na buggy1.
>> Kaya hayaan mo akong magpatuloy at gawin ito.
. / A.out, ang Enter.
At tila ako ay hindi gawin kung ano?
Madla: I-save.
David J. MALAN: I-save ang aking file.
Kaya na ay madaling malutas sa pamamagitan ng naaabot ang Control S, o pagpunta sa
File, I-save, tulad ng sa karamihan ng mga programa.
Ipaalam sa akin pumunta down dito, i-clear ang screen, patakbuhin itong muli.
At may pa rin bug.
Kaya kung ano ang nangyayari -
Madla: Hindi mo makatipon.
David J. MALAN: Ah, mabuti.
Hindi ko makatipon ito.
Tulad ng isang gagong tao, Naghahanap ako sa code upang makita kung ano ang mali.
Kaya kumalatong buggy1.c, ngayon a.out.
At phew, nai-save.
>> Kaya mukhang ng kaunti pangit dahil walang bagong linya
saanman sa programa.
Ngunit muli, ito lamang ay isang Aesthetic detalye.
At hindi bababa sa kung namin ang bilang ng mga out, dapat namin
na ngayong makita ang mga 10 tulad bituin.
Well, kung ano ang tungkol sa ikalawang warm-up halimbawa?
Kaya noong buggy2, inaangkin ko na ang bersyon na ito, masyadong, ay i-print
10 bituin, isa sa bawat linya.
Kaya oras na ito, mayroon akong isang newline character, upang gumawa ng
bagay ng kaunti prettier.
Ngunit sa halip kung ano ang nakukuha ko ito.
Kaya ipaalam sa akin kumalatong buggy2.c, ang Enter.
Ngayon muli ito tinatawag a.out.
Enter.
Ko lamang makita ang isang bagong linya, tanging ang huling bagong linya na
gumagalaw ang aking prompt sa susunod na linya.
At pa malinaw ko na pag-print *, pagkatapos ng isang bagong linya,
*, Pagkatapos ng isang bagong linya.
Ngunit kung ano ang bug dito?
Oo?
Madla: [hindi marinig].
>> David J. MALAN: Eksaktong.
Kaya hindi katulad sa ilang mga wika, tulad ng Python, kung saan indentation
aktwal ay may functional na kahulugan, sa isang
wika tulad ng C -
dahil kakailanganin namin nakikita, PHP, JavaScript -
indentation ay talagang lamang para sa mga tao 'benepisyo.
Kaya ang katotohanan na ko na naka-indent linya 16 at 17 ay mukhang mahusay,
ngunit ito ay walang functional kahulugan dito.
Kung gusto kong parehong mga linya upang isakatuparan bilang bahagi ng para sa
loop, pagkatapos ay dapat kong ilakip ito sa kulot tirante sa pamamagitan ng paggawa nito.
Maaari mo lamang i-cut na sulok at alisin ang kulot tirante kung
kung ano ang kaso?
Madla: lamang isang linya.
David J. MALAN: lamang isang linya.
Kaya na lamang ang uri ng isang magaling na uri ng syntax detalye upang ang
hindi mo aaksaya ng oras sa pagsusulat ng mga tatlong linya, dalawang na
kulot tirante, lamang upang magsulat ng isang solong linya ng code.
Ngunit kung mayroon kang dalawa o higit pang mga linya, namin
katunayan na kailangang gawin ito.
>> Kaya ngayon hayaan mo akong i-save ang.
Hayaan akong magpatuloy at muling patakbuhin kumalatong.
Pagkatapos ay hayaan mo akong muling palabas ng pelikula ng a.out, at ngayon ako makakakuha ng mga ito ng isa sa bawat linya.
Ngayon, a.out muli ay uri ng isang pipi na pangalan para sa isang programa.
Paano ko masasabi kumalatong sa aktwal na ninyo akong bigyan ng pangalan ng file
na mas user-friendly, tulad buggy2 mismo?
Ang isang maliit na mas malinaw?
Madla: [hindi marinig].
David J. MALAN: OK, kaya ko aktwal na gawin ang napaka
user-friendly na shortcut at magsulat lamang buggy2.
Hindi ko tinukoy. C sa kasong ito, at pindutin ang Enter.
At kung ano ang gumawa ng ginagawa ito compiles buggy2.c para sa akin sa pamamagitan ng
na humihiling kumalatong gawin ito.
Sa partikular, tawag kumalatong, tumatakbo kumalatong gamit ang paraan higit pa
command-line argumento o switch kaysa sa aktwal na ako kailangan.
Sa oras, namin bumalik sa kung ano ang lahat ng mga iba't-ibang
misteriyoso nagigitlingan expression ay nangangahulugan.
Ngunit sa ngayon, na lang sine-save sa akin ng problema ng
pagkakaroon matandaan at kinakailangang i-type ang lahat ng mga
iba't ibang nagigitlingan expression.
At ang bentahe ng ito sa huli ay
na ngayon ay mayroon akong buggy2.
Kung gusto kong gawin ito nang manu-mano, bagaman, ako
maaaring sa halip gawin ito -
kumalatong-o buggy2 at pagkatapos buggy2.c.
At iyon ay katulad ninyo ako ng isang file na tinatawag na buggy2.
>> Kaya sa maikling, kumalatong tagatala ang.
Gawing ay lamang ng isang user-friendly na tool na namin ang paggamit ng mas
at higit pa, dahil ito ay nagsimulang
gawing simple ang mga bagay para sa amin.
At ibalik namin 0, bilang wakas.
Sa ngayon, dahil, ngunit sisimulan namin ang panunukso ng bahaging iyon
ngayon at sa Miyerkules.
Anumang mga katanungan sa anumang ng mga ito?
Oo?
Madla: [hindi marinig]
ls sa quote doon?
David J. MALAN: OK.
Kapag ako ay nag-type ls sa mga panipi, na sa akin ang paggawa ng ilang magic
likod ng mga eksena upang ayusin ang isang bug.
Nakalimutan ko, tulad namin ang nagsasabi sa marami sa inyo sa
board ng talakayan, gawin -
naming gawin ito ngayon - sudo yum-y-update appliance50.
Whoops, na na-spell karapatan.
Kaya appliance ay tulad ng isang operating system.
Ito ay nagpapatakbo sa operating system na ito na tinatawag na Fedora.
At ngayon dahil sa aking mabagal na koneksyon sa Internet, nag ko
talagang hosed ito.
Kaya't ang pagpapatakbo sudo yum update, bilang sabihin namin sa iyo na gawin sa
problema hanay, ay mahalagang bang patakbuhin ang mga awtomatikong pag-update
sa Mac OS o Windows.
At ang mga dahilan para sa pagpapatakbo ng ito sa pinakadulo simula ng
problema sa set ay dahil kapag nilikha namin ang appliance, ako
messed up, at ginawa ko sinasadyang lahat ng iyong mga programa tumingin
itim sa isang itim na screen, na ang dahilan kung bakit hindi mo nakikita ang mga ito
sa pamamagitan ng default.
Ngunit ang pinakabagong bersyon ng appliance Inaayos ito.
At ko aayusin na panahon ng pahinga sandaling mayroon akong Internet
pagkakakonekta.
>> Kaya lamang ang mga quote Itinatago ang aking pagkakamali, napaka discreetly,
tila.
Iba pang mga tanong?
Oo?
Madla: Saan ang gumawa ay mula sa?
[Hindi marinig]
David J. MALAN: Magandang katanungan.
Kung saan ay gumawa nanggaling?
Ito ay isang Linux na programa na umiiral para sa maraming taon, mahaba
bago CS50.
At ito ay may isang operating system tulad ng Fedora.
Hindi ito ay mula sa CS50 library.
Sa katunayan, ang tanging bagay na dumating mula sa CS50 library
sa gayon ngayon, na nasaksihan namin, GetString, GetInt, lahat ng
mga Kumuha ng pag-andar, at ang salita ng string, at sa ilang mga
lawak, ang salita bool.
Ngunit makikita namin manunudyo na bukod kapag namin sumisid sa CS50
appliance mismo.
>> Kaya oo, isa pang tanong dito.
Madla: Kapag sinabi mo gumawa at pagkatapos maraming surot, kung paano gumagana ang ang
alam sa computer na [hindi marinig]?
David J. MALAN: Magandang katanungan.
Kaya kapag mo lamang magpatakbo gumawa buggy1 o gumawa buggy2, paano
ang gumawa alam?
Kaya sa pamamagitan ng default, kung nag-type ka gumawa buggy1, hitsura para sa isang
file na tinatawag na buggy1.c.
At pagkatapos executes ang mga naaangkop na mga utos ng kumalatong,
sa gayong paraan override ang default na output ng file na tinatawag na a.out.
Sa katunayan, kung tiningnan namin sa kung ano ang gumawa, ano -
sabihin quit ito.
Kung titingnan namin sa kung ano ang gumawa ay aktwal na ginagawa, gawin buggy2,
nang hanggang sa petsa.
Kaya hayaan mo akong alisin ang rm utos, ang
programa sinulat ni ako bago.
Pag-type ng Y-E-S upang kumpirmahin na gusto kong alisin ito.
Kung gagawin ko ngayon gumawa, mapapansin na sa mahabang linya,
may huling bagay na ito dito,-o buggy2.
Gawin ang lahat ng ginagawa pagpasa na argumento, kaya na magsalita, upang
Kumalatong, kaya hindi ko i-type ito sa aking sarili.
>> Lahat ng karapatan, sa gayon ang isang mabilis na dalawang-administratibo
anunsyo.
Kaya para sa mga seksyon, na opisyal na nagsimula ito darating
Linggo, makikita mo laging nais upang dalhin, kung
mayroon kang isa, isang laptop.
Kung hindi ka magkaroon ng laptop, huwag makipag-ugnay sa akin sa pamamagitan ng
drop sa akin ng isang email.
At kami na malaman ng workflow.
Ano ang pangkalahatan na makikita mo sa seksyon na bahagi sila
pangkonseptong, bahagi hands-on.
Susubukan naming gamitin ang mga seksyon ng mga katanungan, ang bahagi ng
problema set ang linggo, maglakad sa pamamagitan ng ilan sa mga
pangkonseptong materyal mula sa panayam.
At na ang lahat sa kasalukuyang hanay ng problema.
At makikita din namin sumisid sa ilang mga hands-on na mga gawain, minsan
na kung saan ay kinakailangan upang isumite, minsan
kung saan ay hindi.
Halimbawa, ang unang linggo na ito, sila ay nilalayong lamang bilang isang
warm-up exercise.
At makikita mo ang mga problema ay talagang lamang na.
Sila ay nilalayong medyo maliit, ngunit hindi kinakailangan
trivia programa sa sumulat, na hindi kinakailangang
kapana-panabik na sa at ng kanilang mga sarili ngunit ang mga mahusay na pagkakataon upang
magsanay na may syntax, may mga bagong function, sa ginhawa ng isang
seksyon na kung saan mayroon ka ng ilang ng iyong mga kaklase nagpapakita bilang
na rin ang iyong tf.
>> At kung ano ang gagawin namin paglipas ng panahon ay gumamit ng tool na tinatawag CS50 puwang,
kung saan sa halip na lamang gamit ang CS50 Appliance, bibigyan ka
sa halip pumunta sa isang pahina ng web sa isang browser, kung saan magagawa mong
sumulat ng code sa isang window ng browser sa panahon ng seksyon.
At pagkatapos ay kung nagpasya kang sumali sa, ang iyong kapwa sa pagtuturo maaaring ipakita
anumang ito ay nagta-type ka sa iyong screen sa iyong browser
window sa harap ng klase, kung hindi nagpapakilala o
publiko, kaya na siya maaaring maglakad sa pamamagitan ng may
sa iyong mga kaklase kung ano ang ginawa mo na rin, ano hindi mo ginawa na rin.
At muli, makatitiyak ang lahat ng mga ito ay maaaring mabuti hindi kilala.
Ngunit ito ay isang magaling na pagkakataon para sa higit pa
interactivity kaysa sa isang bagay tulad ng panayam ay nagbibigay-daan sa.
>> Sa ngayon, makikita namin ang mga bagay na ito na tinatawag na super
seksyon, na kung saan ay opsyonal ngunit ay bukas para sa lahat sa
sa klase, kaya na maaari mong gawin ito mas sama-sama para sa
problema magtakda ng isang.
Narito ang iskedyul.
Na ito ay nai-post sa homepage sa cs50.net.
Pansinin na may makikita isang Hacker-tukoy na
isang bukas hapon.
At kami ay film ang isa ngayon at isang bukas at mag-post ng mga
online sa loob ng 24 na oras.
Kaya kung hindi ka maaaring gumawa ng alinman sa mga oras na ito, hindi mag-alala.
At muli, iskedyul ay online ngayon sa cs50.net.
>> Sa mga tuntunin ng sectioning mismo, dapat nakuha mo ang isang
email nagtuturo mong pumunta sa homepage ng kurso upang makahanap ng
ang iyong seksyon.
Kung ang buhay ay nagbago at kailangan mong baguhin ang iyong mga seksyon,
hindi isang problema.
Bumalik sa parehong URL na iyon, cs50.net/section, isahan,
at makikita mo punan ang katulad na form upang maaari mong
pagkatapos ay bigyan kami ng iyong mga kagustuhan.
At kami ay follow up sa pamamagitan ng pagtatapos ng linggo sa kung ano ang aming makakaya
tumanggap.
Noong nakaraang linggo, isipin ang na aming iminungkahi gamit ang CS50 talakayin,
talakayan tool ang kurso, sa panayam.
Kaya nagkaroon kami ng 40 katanungan na tinanong at
nasagot sa panahon ng panayam.
Kaya ito tila gagana nang maayos, kaya patuloy naming
subukang gawin ito.
Kung, sa panahon ng panayam, hindi mo lamang kumportable pagtaas
iyong kamay, hindi isang problema.
Pumunta sa cs50.net/discuss, mag-post doon, at isa sa aming pagtuturo
ay alinman sagutin ang mga Fellows ito elektroniko o taasan ang kanilang mga
kamay sa iyong ngalan nang hindi nagpapakilala sa magtanong, depende
sa likas na katangian ng tanong.
At sa mga tuntunin ng feedback, ang mga pangkalahatang psets
ibinalik sa loob ng isang linggo.
Dahil ito ay tumatagal ng ilang sandali upang makamit ng seksyon
punto ng balanse, ang unang pset, 0 at 1, ay kaunti
maantala bilang mga bagay tumira.
Ngunit manatiling nakatutok para sa sa linggo darating.
>> Lahat ng karapatan, kaya hayaan mo akong ilagay sa aking malubhang
boses para sa sandali lamang.
Kaya ito ay talagang isang kawili-wiling klima upang maging
nagkakaroon ng talakayang ito, kung ano ang sa lahat ng iba pang mga bagay
nangyayari sa campus kaugnay doon.
Ngunit CS50 ay tiyak na may kasaysayan nito ang partikular na
paksa, hangga't bawat taon, ang kursong ito, para sa maraming
taon, Ad Board halos 3% ng klase.
Ang pinaka-kamakailang taon, 2011, CS50 Ad-Boarded 35 mga mag-aaral.
Na ito ay hindi, sa tingin ko, dahil sa kakulangan ng kalinawan.
Napag-alaman na sa syllabus ang kurso, mayroong isang pahina ng
pahayag na nagpapaliwanag kung saan ang mga linya.
Na parehong pahayag ay paulit-ulit sa bawat isa sa mga
problema nagtatakda sa pahina isa.
>> Kaya ko banggitin ito ngayon talagang lamang upang gumawa ng
mga tao maingat na ito.
At na sinubukan namin ang iba't-ibang mga bagay.
At kung ano ang naisip ko na gusto namin gawin ngayon ay lamang maglaan ng sandali upang
tunay na tingnan ang ilan sa mga nakaraang kaso na makabuo.
Sa halip na panatilihin ang mga ito bilang mga marumi maliit na lihim, aktwal
ituro kung ano ang mga mag-aaral na gawin at kung paano Natukoy namin
ito at talagang kung ano ang overarching pagganyak ay para sa
kahit na nagkakaroon ng ang pag-uusap na ito.
Kaya may na sinabi, linya mahalagang ay ito -
bawat syllabus, ka welcome, ikaw ay hinihikayat, upang
makipag-usap sa mga kaklase.
Na ang buong layunin ng pagkakaroon ng mga collaborative
oras ng opisina sa Annenberg at paghihikayat sa mga tao para sa
panghuling proyekto sa gumagana nang magkasama.
Ngunit linya ay iginuhit pagdating oras upang aktwal na magsulat
ang iyong panghuling solusyon.
Nagsasalita sa Ingles, lubos fine, nagsasalita sa palsipikado code,
lubos fine.
Pag-email ng isang kaklase iyong pset, pagpapaalam tumingin sa kanila sa paglipas ng
ang screen ng mga kamay patuloy na mag-type,
sa ibabaw ng linya pati na rin.
Huwag hanapin sa syllabus para sa partikular na linya.
>> Ngunit lamang upang ipinta ang isang larawan ng kung paano ito ay sa kasamaang-palad ng
katotohanan, Napagtanto na may website out doon na
magkaroon ng mga solusyon mula sa klase at marami pang ibang mga klase.
Ang katotohanan na sa iyo o sa ilang 3% mo alam na ito umiiral
nangangahulugan na alam namin na ito umiiral.
Ang katotohanan na may mga website tulad nito kung saan mo
maaaring magbayad ng isang tao sa aktwal na gawin ang iyong mga hanay ng problema - ito ay
isang aktwal na kaso na dumating nakaraang taon.
Ito ay isang website na tinatawag na odesk.com.
At Tim ang pangalan ng tao dito na nagpo-post sa
website na ito at tinanong ng isang tao upang gawin ang kanyang pset 7 sa
partikular na kasong ito.
Well, odesk.com napaka Google-magagawang, at masyadong namin ay
napakabuti sa Googling.
Dito, masyadong, may mga site - at ito ang sa halip
napakasama, lantaran.
[Tawa]
David J. MALAN: Ang nakakatawa bagay tungkol sa site na ito ay kung
basahin mo ang Tungkol sa pahina, makipag-usap sila tungkol sa kanilang corporate
service kultura at kung paano customer ay ang kanilang bilang-isang
priority, upang matiyak na makakuha ng ang iyong mga takdang-
naka-in sa oras.
>> Ngunit sa lahat ng kabigatan, muli, ang katunayan na ang mga site na ito
umiiral, Napagtanto namin, masyadong, ay nababatid ng
mga ganitong uri ng mga site.
At upang mabigyan ka ng ideya ng kung ano ang bumubuo ito sa pangkalahatan
tumatagal, hindi namin pangkalahatan ay hindi magkaroon ng mahusay na Iskandalo kung saan ang mga tao ay
ay nakikipagtulungan sa anumang uri ng napakalaking scale, ngunit sa halip
ito ay mga late-night sandali ng kahinaan, kung saan mayroon kang ito
magkano ang gawin, 04:00, ka naubos, at
tingin sa iyong sarili, mahusay, ipaalam sa akin lamang na tingnan sa aking
kasama o ang code ng aking kaibigan o tulad ng.
At ang mga manifestations ng ito sa kasamaang-palad sangkot sa Estudyante
Isang pagsusumite ng isang bagay tulad nito at Estudyante B pagsusumite ng
isang bagay tulad nito, na tiyak, sa isang computer
agham klase, lubha madali para sa mga siyentipiko computer na
upang makita ng software.
Ito ay isa pang karaniwang paradaym, kung saan ikaw ay isang uri ng
ay nagtatrabaho sa tabi ng isang tao, maaaring pakikipag-usap sa
Ingles, lamang fine, pseudocode.
Ngunit ito ay oras upang aktwal na isumite, at ang mga psets
lamang makapag-palitan sa pamamagitan ng email o Dropbox o tulad ng.
Ngunit sa isang pagtatangka upang gawin itong mas mababa maliwanag na ito ay
kung ano ang nangyari, pagkatapos ito ay kung ano ang isinumite.
Ito, masyadong, hindi trip mahusay na nakasulat na piraso ng
software tulad ng mayroon kaming upang aktwal na detect
mga ganitong uri ng mga bagay.
At sa katunayan kung ano ang ginagawa namin ang software sa run na naghahambing sa lahat ng
pagsusumite sa taong ito laban sa lahat ng nakaraang taon
pagsusumite, laban sa lahat na nakita namin sa
Internet, laban sa bawat trabaho website out doon.
Lahat ng ito ay napaka awtomatikong.
At kaya ginagawa namin ito talaga sa mahusay pagkamakatarungan sa 97% na
ang talagang gumagana ang kanilang mga masuri ito at sa iba pang mga
klase at paglalagay ng sa lahat ng na pagsisikap upang na ang gawain
sila sa huli isumite kanilang sariling.
At maaari ba akong pumunta sa para sa mga edad.
>> Mga ito ay lamang ng isang maliit na bilang ng mga kaso ng nakaraang taon.
Ang ilang mga mag-aaral isinumite ng mga file na ito identically para sa pset 2,
pset 3, pset 4, pset 5, pset 6, pset 9.
Sa kasong ito, ito pagsusulit 0 at sa nakaraang taon, kung saan dalawang
mga mag-aaral isinumite identically pangungusap na ito sa maraming
iba, "Ang kahilingan ng uri -" tuldok, tuldok, tuldok.
Kaya kahit na sa isang klase ng 600 ay detect namin ito
sa isinumite pagsusulit.
Kaya sa maikling salita, ito - lantaran, ako mapoot na nagkakaroon ng ganitong uri ng
pakikipag-usap - ngunit talaga ito isang sinadya pagsisikap
taong ito upang subukan upang himukin pababa ang numerong iyon.
Dahil kahit sabihin namin ang mga ganitong uri ng mga bagay sa bawat
taon, sa tingin ko ang katotohanan ng pag-dwelled ito para sa ilang
higit pang mga segundo kaysa sa karaniwan at aktwal na lamang ng pagturo out
na kung ano ang maaaring tila mas, eh, hindi isang malaking pakikitungo, hindi bababa sa
tingin sa partikular na sandali na ito, parehong sa pagkamakatarungan sa
sa iyong sarili at sa iyong mga kaklase dito.
Kaya kung sakaling may anumang mga katanungan bilang sa kung saan ang line
ay, mangyaring lamang makipag-ugnay sa akin personal.
Ngunit ang sagot ay laging, ganap na stressed sa
huling minuto, cash sa araw ng late.
O kung ito ay isang bagay ng hindi pagkakaroon ng anumang late araw,
matapat, email sa akin personal.
Susubukan naming malaman ng isang bagay.
Mangyaring huwag ilagay ang iyong oras dito sa Harvard sa panganib.
>> Ngayon, naisip ko na dapat naming gumaan ang mood, kaya ko
kasama ito bilang susunod na slide.
[Tawa]
David J. MALAN: Ang website na ito ay mahusay.
Aktwal na nakuha ko ng kaunti ginulo.
May isang ito.
At pagkatapos ay ang isang ito ay kamangha-manghang.
Okay, kaya isipin ang na kuting huli sa gabi kapag gumagawa
mga desisyon.
Lahat ng karapatan, kaya bumalik sa mas masaya at mas mababa malubhang bagay-bagay, tulad ng
kundisyon.
>> Karapatan lahat, kaya usapan natin ang maikling tungkol sa mga.
Ito ay isang bagay na malamang na medyo pamilyar mula sa
ang mundo ng scratch.
At sa mundo ng scratch, mayroon kaming minsan ang pangangailangan na ito sa
pumunta gumawa ng mga tinidor sa kalsada.
Alinman sa gawin ito o na o ang iba pang mga bagay na ito dito.
At kapag gusto naming gawin ito, maaari naming gamitin, sa C ngayon, ito kung
tao bumuo.
At pagkatapos dito mayroon kami ng mga Boolean expression.
Halimbawa, Boolean expression dito, maaari naming O
iyon nang magkakasama, sa kamalayan na kami ay may kondisyon na ito O
na kondisyon.
Aming makakaya AT iyon nang magkakasama, sa kamalayan na gusto naming
suriin ito kundisyon AT na kundisyon.
At dito mayroon kaming isang lumipat statement ngayon, na kung saan ay hindi kaya
katulad syntactically sa mga uri ng mga kondisyon, ngunit
ay nagbibigay-daan sa amin upang gawin katumbas ng kung tao kung, tao kung, tao
kung, at ang tulad sa pamamagitan ng simpleng enumerating sa kanila kaso sa pamamagitan ng kaso
sa pamamagitan ng kaso sa pamamagitan ng kaso.
Kaya nakita namin ang mga huling oras.
At pagkatapos namin na sinimulan ng pagpindot kapag mga bagay tulad ng mga loop.
Nakakita kami ng isa sa mga sandali lamang ang nakalipas.
Ngunit may mga iba pang looping constructs.
>> Halimbawa, ang isang ito dito.
Kaya habang (kondisyon), gawin muli ang bagay na ito at muli.
Kaya sa panimula, kung ano ang mukhang iba sa pagitan ng
para sa loop at ito habang loop dito?
Ito para sa loop at habang loop na ito.
Oo?
Ano iyon?
Madla: [hindi marinig].
David J. MALAN: Mahusay.
Kaya kung saan ang sa para sa loop kundisyon, may malinaw
higit pa syntax.
May Pinasimulan ito, ang update na ito.
Sa isang habang loop, may kondisyon na ito.
Kaya ito tila na ito ay isang maliit na akba kumpara sa para sa
loop, na nangangahulugan na kung nais namin na magkaroon ng mga variable at gusto naming
na magkaroon ng incrementation, aming aktwal na
gawin ito bagay ating sarili.
>> Kaya ipaalam sa akin sige at buksan gedit.
Hayaan akong lumipat sa appliance.
At sabihin lamang gawin ng isang mabilis na maliit na halimbawa na
Tinutukoy ang isa sa mga ito mula sa iba pang mga.
At sa likod ng aking isip dito, dapat kong sabihin na ang isang bagay.
Partikular na nabanggit ko ang pangalan Tim.
Tim ay aktwal na isang tao na mag-aaral sinubukan upang mahanap gawin
kanilang mga araling-bahay para sa kanila.
Nagkaroon kami ng hindi Tim sa partikular na seksyon.
Kaya Napagtanto, baka isiwalat ko ang isang mag-aaral, ito ay hindi isang mag-aaral.
Ito ay isang random na tao sa Internet paggawa ng mga bagay-bagay
sa pamamagitan ng proxy huling taon.
Kaya naming makita na, masyadong.
Kaya sa kasong ito dito, hayaan mo akong magpatuloy at
buksan up ng isang bagong file.
File, New.
Ito ay nagbibigay sa akin ng tab dito.
Hayaan akong sige at i-save ito bilang loop.c.
Hayaan akong pumunta at i-click ang I-save.
At pagkatapos ay down na dito, sabihin sige at simulan ang pagsusulat
# Include .
Hayaan akong mag-zoom in.
Ngayon namin gawin int pangunahing (walang bisa).
Ngayon ipaalam sa akin sige at gawin para sa (int i = 0; i <
oh, 10; i + +).
At ngayon ako pagpunta upang magpatuloy at i-print ang star na ko
ginawang mas maaga.
At pagkatapos ay sa dulo ng programang ito, lamang namin ang pagpunta sa
-print ng isang bagong linya, upang ang aking prompt
mukhang hindi lahat ng magulo.
bumalik 0.
Mukhang syntactically tama?
Sa ngayon.
Kaya sabihin makita.
>> Kaya hayaan mo akong mag-zoom out, pumunta sa aking terminal na window.
At hayaan mo akong magpatuloy at patakbuhin ang loop, dahil tinatawag ko ito
bagay loop.c.
Kaya gumawa ng loop.
Tila upang ipunin ang OK.
Hayaan akong magpatakbo ng loop, at ngayon Ipasok.
At tila naka-print na 10 bituin.
Kaya sabihin convert lang ito sa isang habang loop at makita kung ano ang
mga uri ng mga isyu namin trip sa paglipas ng.
Kaya sa halip na ito, hayaan mo akong pumunta sa dito at sabihin habang i ay
mas mababa sa 10 -
hayaan mo akong makakuha ng mapupuksa ng para sa loop.
OK, kaya kami ng ilang mga problema na.
Kaya ang kondisyon ay ang parehong, ngunit malinaw naman ako nawawala ang
Pinasimulan.
Nawawala ako ang incrementation.
Kaya ano ang dapat tagatala ang malamang sabihin sa akin kapag sinusubukan kong
ipunin ang programang ito?
Oo?
Madla: [hindi marinig].
>> David J. MALAN: Mahusay.
Kaya pagpunta upang sabihin ang isang bagay tulad ng hindi nagbigay-alam - sa
kaso, variable i.
At sa katunayan, gamitin ng hindi nagbigay-alam identifier i.
At kaya ito ay sa kabilang banda na may mga wika tulad ng PHP at
Python at Ruby, na kung saan ang ilan sa inyo ay maaaring maging pamilyar,
kung saan maaari mong lamang uri ng pagsisimula gamit variable
sa ayaw at sa gusto at hindi na kailangang mag-alala tungkol sa deklarasyon kanila
tahasang lagi.
Sa C at sa mga wika tulad ng Java at C + +, mayroon kang upang maging
sobrang tahasang.
At kung nais mo ang isang variable na tinatawag na i, mayroon kang sabihin sa akin
kung anong uri ng variable.
Kaya kami ay pagpunta upang ayusin ito tulad ng sumusunod.
Ako pumunta dito at i-type int i, samakatuwid,
Ipinahayag ko sa isang variable na tinatawag na i.
Ngayon, ko na nilaktawan ng isang hakbang.
Malinaw naman hindi ko na nasimulan ito, ngunit sabihin makita kung na sa
kahit ginagawang kumalatong stop na nagrereklamo.
Kaya sabihin gumawang muli ako sa programang ito.
>> Lahat ng karapatan, ngayon lang ito nagrereklamong
para sa isang iba't ibang mga kadahilanan.
"Variable 'i' uninitialized kapag ginamit dito." Lahat ng karapatan, sa gayon
na medyo tahasang.
Nasimulan lamang ay nangangahulugan na ang pagtatakda ng katumbas ng isang halaga.
At hindi kami tapos na, kaya hayaan mo akong subukan katumbas ng 0.
Ngayon sabihin subukan ito muli at muling patakbuhin kumalatong.
Inipon oras na ito.
At ako ay tungkol sa upang patakbuhin ito.
Ngunit malaking lumang walang-katapusang loop, dahil ko na gawin ang
Pinasimulan, na ko tapos kondisyon, ngunit hindi ko nagawa
anumang uri ng incrementation.
Kaya kung paano ang maaari kong gawin ang incrementation?
Well, sa isang habang loop, ito nararamdaman tulad ako pagpunta sa may
upang gawin ito sa loob ng loop, dahil tulad ng sa unang
halimbawa linggo ng paggawa ng looping constructs, tulad ng may
ang mga medyas at sa mga self-nadaragdagan, nagkaroon kami gawin
isang bagay sa pinakadulo, bang bumalik sa susunod na linya.
Paano kung pumunta ako magpatuloy at gawin ito i + + dito?
Natin hindi kahit makatipon ito.
Makibalita sa akin na.
Ano ang mali dito?
Madla: [hindi marinig].
>> David J. MALAN: Kaya ito ay talagang hindi int.
Ito ay i.
At ang kulot tirante, tulad ng bago,
indentation ay hindi sapat.
Kaya ngayon ko ito bumuo.
Kaya habang i ay mas mababa sa 10, i-print ang isang bituin,
pagkatapos ay i dagdagan.
At paraan habang loop gawa na sa lalong madaling pindutin ang
ilalim ng loop, na sa kasong ito Mukhang sa linya 10,
ito upang bumalik sa linya 6, kung saan punto ang
kondisyon ay naka-check muli.
At kung i pa rin ang mas mababa sa 10, gagamitin namin gawin linya 8 at
pagkatapos 9, pagkatapos makikita namin pindutin ang 10, at bumalik sa 6, muli at
muli at muli at muli, hangga't i ay mas mababa sa 10.
Kaya natin patakbuhin muli gumawa dito.
>> Okay, inipon namin ang okay.
Hayaan akong re-run loop.
At ngayon ito aktwal na tila upang gumana.
Kaya plus at minuses dito?
Well, sa ngayon may aktwal hindi isang kabuuan ng plo -
kaya maganda.
Karapatan lahat, na isang - ah, na aksidente.
Lahat ng karapatan, kaya sabihin bumalik sa para sa loop.
Kaya para sa loop ay magaling dahil hindi nila sobrang tahasang.
At kahit na nasa isang kaunti clunky na magsulat,
napakalakas at ito ay nagbibigay-daan sa mong gawin
maraming mga bagay nang sabay-sabay.
Habang loop ay hindi mukhang upang magkaroon ng isang malaking halaga ng halaga lamang
pa, dahil ito nararamdaman tulad lang namin gawin pang trabaho.
Mayroon kaming upang ilagay ang Pinasimulan dito, ang
i-update ang dito, at mayroon kaming tandaan na gawin ang lahat ng na.
Kaya makikita namin makita sa oras na loop habang aktwal na bang ipahiram sa
ang kanilang mga sarili lamang iba't ibang konteksto, ibang data
kaayusan tulad ng mga listahan at hash na mga talahanayan, ang mga bagay namin
kalagitnaan ng semestre.
Ngunit sa ngayon, alam na may ito ikatlong uri na kilala bilang isang do-
habang loop.
At nakakita kami ng panandaliang na ito.
At maaaring ito ay sobrang nakakatulong sa pset 1.
Anumang oras na gusto mong gawin ang isang bagay at pagkatapos ay tingnan kung
ang user cooperated, at kung sila ay hindi, gawin itong muli, gawin-
habang loop lends mismo na uri ng logic.
Dahil tulad ng pag-order mula sa itaas hanggang sa ibaba dito ay nagmumungkahi,
ang Literal na nangangahulugan na gawin ito.
At gawin ito muli at muli, kung ano ang maaaring na maging?
Siguro ito ay nangangahulugan na ang pagtawag ng GetInt o GetString at pagkatapos
check ang halaga ng GetInt o GetString at pagkatapos ay sumisigaw
sa user kung hindi nila cooperated sa pamamagitan ng pagtatanong sa kanila
muli at muli at muli.
Kung saan nais mong gawin ang isang bagay nang sabay-sabay,
pagkatapos ay suriin ang ilang mga kundisyon.
>> Kaya sabihin subukan ito.
Hayaan akong aktwal na baguhin ito ngayon upang do-habang loop.
At ako pagpunta sa magpatuloy at gawin ang mga sumusunod.
Kaya gawin ang mga sumusunod.
Natin gawin int i = GetInt (); ngunit sabihin munang sabihin sa user
kung ano ang gagawin.
Kaya isang maliit na iba't ibang oras na ito.
"Bigyan mo ako ng isang int."
Kaya ko bang gamitin ang printf para sa.
At ngayon ako pagpunta sa pumunta down na dito, at ako pagpunta sa gawin ito
habang i, sabihin nating, mas malaki kaysa sa -
sabihin makita, i, sabihin nating, mas mababa sa 0, o i ay
mas malaki sa 10.
Sa ibang salita, gusto ko ang isang numero mula 1 hanggang 9, lamang
mang.
Kaya gumagamit ako ng isang pinagsamang Boolean expression dito upang
tiyakin na i ay mas mababa sa 0 o mas mataas sa 10, kung saan
kaso kong gawin dito ang loop na ito muli.
Kaya muli, gawin ito -
habang ay i mas mababa sa 0 o i ay mas malaki kaysa sa 10.
>> Kaya ngayon sabihin magpatuloy at gawin ito sa sandaling kami tapos na.
Sabihin lamang ang isang mabilis na check ng katinuan.
printf ("Salamat, i% d", i).
Kaya ito simpleng programa nagtatanong sa gumagamit para sa isang int,
tinitiyak ito sa loob ng ilang mga hanay, 1 hanggang 9 inclusive,
at pagkatapos Salamat sa gumagamit sa pamamagitan ng nagpapaalala sa kanila kung ano ang kanilang lamang
na nai-type sa, tulad ng isang maliit na katinuan check.
Ngunit sabihin makita kung ito gumagana gaya ng nilalayon.
Hayaan akong pumunta ulo pababa dito at muling patakbuhin ang gumawa ng loop.
Hmm.
"Gumamit ng hindi nagbigay-alam identifier 'i'". Iyon ay kakaiba.
Akala ko namin nalutas na.
Parehong sintomas ngunit ibang code.
Oo?
Madla: [hindi marinig] sa loob ng dalawang, mayroon kaming
[Hindi marinig].
>> David J. MALAN: Eksaktong.
Kaya ito aktwal na humahantong sa amin sa isang paksa na kilala bilang saklaw.
Ito lumiliko out na ang C, muli, talagang magdadala sa iyo literal.
At kung gagawin mo ang isang bagay tulad nito kung saan ipinapahayag mo ang isang int
at pagkatapos ay italaga ito ilang halaga, ngunit gawin mo na sa loob ng isang
pares ng mga kulot tirante, ano C ginagawa ito Ipinagpapalagay na iyong
gusto lamang ang mga 32 bit na kilala bilang i sa umiiral sa loob ng
konteksto ng mga kulot tirante, sa loob ng konteksto ng mga linya
6 hanggang 9. Kaya i ipinahayag, at ito ay itinalaga ng
halaga sa linya 8, ngunit sa lalong madaling makakuha ng sa labas ng
linya 9 sa ibaba ang kulot suhay, i ay wala na sa
saklaw, kaya na magsalita.
S-C-O-P-E. Ito ay hindi na sa tamang konteksto.
Kaya ngayon may walang i, kaya ito na parang hindi nagkaroon kami kahit
ipinahayag ito sa lahat.
>> Kaya kung ano ang isang remedyo para sa isang bagay tulad nito, kung ang
dahilan na i ay ipinahayag sa loob ng kulot tirante, na
tila masamang?
Dito?
Madla: [hindi marinig].
David J. MALAN: Oo.
Upang maaari naming initialize ang mga ito sa labas.
Kaya hayaan mo akong magpatuloy at tanggalin ang bahagi ng deklarasyon kung saan
Ako tukuyin ang uri, at hayaan mo akong gawin ito dito.
Kaya sa ika-5 linya, ito ngayon nagsasabing "Bigyan mo ako ng isang int." Tumawag ito i.
Mapansin sa linya 9, hindi ko gusto mong gawin ito, dahil ko
na may 32 bit.
Hindi ko nais upang hilingin sa computer para sa isang
iba't ibang mga 32 bit.
Gusto kong gamitin ang mga parehong 32 bit.
At ngayon dahil i ay ipinahayag sa ika-5 linya, ito ay pa rin legit
gamitin ito sa linya 11 at linya 12.
>> Kaya hayaan mo akong subukan na mag-recompile ito at makita
kung kumalatong hinto sumisigaw.
gumawa ng loop.
Kaya ngayon ito ay "implicit deklarasyon ng function na
Ang 'GetInt' ay hindi wasto sa C99. "Ano ang na?
Oo?
Madla: [hindi marinig].
David J. MALAN: Oo.
Kaya ngayon na aktwal na gumagamit ako ng GetInt, ito ay hindi isang bagay
na lamang ay may C. na ito ay mula sa CS50.
Kaya kailangan namin ito dito.
At ipaalam sa akin bumalik sa prompt pababa
dito at muling patakbuhin ang gumawa.
Okay, sa wakas.
Na namin ngayon ang nalutas na at ang iba pang mga error.
Hayaan akong ngayon patakbuhin ang loop at makita kung ano ang mangyayari.
"Bigyan mo ako ng isang int." Bibigyan kita ng ito 11.
Kukunin ko na bigyan ito ng -1.
Kukunin ko na bigyan ito ng foo.
Kukunin ko na bigyan ito ng 5.
At ngayon, sa katunayan ito gumagana.
Ngunit ang prompt nagbago para sa isang dahilan dito.
Bakit ito sinasabi subukang muli ang isa sa mga oras na ito ngunit bigyan ako ng
int ang iba pang mga tatlong beses?
Bakit ang pag-uugali na naiiba?
Madla: nagbigay ito ng isang string.
David J. MALAN: Paumanhin?
Madla: ibinigay mo ito sa isang string.
David J. MALAN: Oo.
Kaya namin ibinigay ito ng isang string sa ikatlong pagtatangka,
kapag ako ay nag-type foo.
Foo ay isang string.
Ito ay malinaw naman hindi isang int.
At ang paraan na CS50 ay ipinatupad GetInt namin
hindi suriin kung ang isang bagay ay mas mababa sa 0 o mas mataas sa 10
para sa iyo, dahil kung paano namin malaman nang maaga kung anong uri ng
int gusto mo?
Ngunit maaari naming Nagnais ng pinakamababang check para sa iyo, ay ang gumagamit ng hindi bababa sa
-type ng isang integer?
At kung sila ay hindi, hindi namin sumigaw sa user sa pamamagitan ng pag-type sa "subukang muli" sa
screen.
>> Kaya ngayon mayroon kaming programa na looping. Okay.
Ngayon, kung alin sa mga ito ang uri ng mas mahusay na bumuo?
Kaya ito ay kung saan ang mga bagay simulan upang makakuha ng isang maliit na magulo,
katotohanan na mayroon kang tandaan na idedeklara ang isang variable dito
kung nais mong gamitin ang mga ito sa loob ng ilang
kulot tirante at sa labas.
Ngunit kahit na ang hitsura ng kaunti misteriyoso sa unang
sulyap, muli, tandaan ang simpleng logic.
Upang gamitin ang anuman sa C, kung ito ay isang function o
ito ay isang variable, mayroon kang upang maisama ito kung ito ay isang function
sa ilang mga aklatan, o kailangan mo na idedeklara ito.
Ngunit ngayon kailangan mo ng dagdag na maingat ang katotohanan na
ka deklarasyon ito sa tamang saklaw.
Hindi naglalagay ka ng ito masyadong mahigpit sa loob ng panaklong.
>> Kaya ipaalam sa akin aktwal ibalik.
Kung pumunta kami pabalik sa aming mga halimbawa mula sa mas maaga, at pumunta ako
bumalik sa para sa int, int i = 0; i <10; i + +, at ako
gawin printf bituin, tulad ng ito, at pagkatapos ay malapit paren, at ngayon
printf i ay ngayon -
ayon sa parehong logic, kung ano ang mangyayari kapag sinusubukan kong
ipunin ang programang ito?
Madla: Hindi wastong identifier.
David J. MALAN: Kaya ito ay isa pang di-wastong identifier,
hindi nagbigay-alam identifier.
Ngayon, ang dahilan ng kaunti ibang.
Mayroong malinaw naman hindi kulot tirante dito, ngunit ang parehong
ideya, ang parehong kuwento ng saklaw nalalapat.
Kung ikaw ay ipinahayag ang isang variable tulad ng i sa loob ng isang
para sa loop, kahit na hindi mo tahasang nakasulat ang kulot
tirante, mag-isip ng mga ito sa itak bilang pa rin ang pagiging doon, kung saan
kaso i bisa lamang sa loob ng para sa loop.
Ay hindi wasto sa sandaling nakarating ka na sa susunod na linya, na
kaso na ito ay ngayon 10.
Kaya ng ilang mga isyu ng saklaw at ang mga tulad.
Lahat ng karapatan, anumang mga katanungan?
>> Karapatan lahat, kaya ito ay uri ng trivia maliit na programa,
pag-print lamang ang maliit na bituin.
Ngunit sabihin makita kung tandaan mo ang kantang ito dito.
Ito ay isang hindi kapani-paniwalang nakakainis na kanta ang mga bata ay kumanta sa
ang mga bus ng paaralan at tulad.
Ngunit kung ano ang magaling tungkol dito na ito cyclicity,
kung saan ito ang "99 bote ng beer sa pader,
99 bote ng beer.
Gawin ang isa, ipasa ang mga ito sa paligid, 98 bote ng beer sa
wall. "At pagkatapos kanta uulit ang 97, pagkatapos 96, pagkatapos
95, pagkatapos 94, ang lahat ng mga paraan pababa sa 0 kung Nakakuha iyong aktwal na
sa malayo ang bus.
Kaya ito ay isang magandang programa upang ayusin ng ipatupad, dahil ang aking
Diyos, kung maaari mong lamang ipatupad ito sa ilang
linya ng code, maaari mong sabihin ang lahat ang buong lyrics na ito
kanta medyo mabilis.
Ngunit sa kahabaan ng paraan, maaari naming simulan ngayon manunudyo bukod ilang
ng mga pangunahing looping constructs at ngayon din
ipakilala ang mga function na isulat namin ating sarili, bumalik ang halaga
na pumasa kami sa paligid.
Ngunit una, bakit hindi namin magpatuloy at tumagal ang aming limang minutong
masira dito?
At kapag makuha namin pabalik, ay namin kantahin ang kantang ito.
>> Karapatan lahat, kaya hindi namin pabalik.
At kapag sinabi ko namin ngayon kumanta ang kantang ito, ibig sabihin ko
programa, hindi pasalita.
Kaya dito mayroon kaming beer1.c, kung saan ay isang pagpapatupad ng mga ito
partikular na kanta.
At lamang maging malinaw, para sa mga pamilyar sa kung ano ang
Ang bagay na ito ay kamukha, hayaan mo akong magpatuloy
at gumawa ng beer1, ang Enter.
Ngayon ipaalam sa akin na patakbuhin beer1, at kung ano ang makikita namin makita - kung gaano karaming mga bote
ng beer ay doon?
Type ko sa 99, tulad ng sabi sa kanta.
Enter.
At ngayon kung mag-scroll namin sa pamamagitan ng -
oops - kung mag-scroll namin sa pamamagitan ng lahat ng ito, makikita namin makita na
ito ay sa katunayan kantahin ang buong kanta.
Maghintay ng isang minuto.
Aking scroll bar ang isang maliit na messed up.
Natin gamitin ang mas malaking window.
Kaya beer1, 99, doon pumunta kami.
Kaya dito namin ang buong kanta, Sung mas mabilis sa pamamagitan ng
computer na kaysa ito ay sa pamamagitan ng sa amin.
Kaya mapansin, bagaman, ang cyclical kalikasan dito.
Nagsasabing 99, pagkatapos 99, pagkatapos "tumagal ng isa pababa, ipasa ito
sa paligid, "pagkatapos ay 98.
At ngayon uulit muli at muli.
>> Kaya ito ay tunay na isang perpektong pagkakataon para sa ilang mga uri ng
looping bumuo.
Pansinin na ako uri ng paggupit isang sulok dito.
Pansinin na ako nagsasabing "98 bote ng beer sa pader,
97 bote ng beer sa pader, "at na lamang kaya
na kapag makuha namin sa isang bote ng beer, hindi ko
mag-alala tungkol sa Ingles na balarila.
Ngunit maaari rin naming ayusin ang mga ito na may kaunti ng kung
kalagayan, marahil.
Kung ang bilang na ito ay pang-isahan, sige at sabihin ang "bote",
kung hindi man kung plural, sabihin nating "bote".
Ngunit sa ngayon, ganap na ako paggupit sulok na iyon.
Kaya sabihin makita kung ano ang namin ang nakuha dito.
Kaya Mayroon namin ang ilang mga komento sa tuktok.
Ako kasama ang dalawang mga aklatan, bilang
karaniwang kami.
At ngayon ipaalam sa akin na mag-scroll down sa unang
aktwal na linya ng code.
Linya 17 kicks off ang pangunahing.
Linya 21 at 20 ay kung gaano karaming mga bote ng beer ay doon?
At pagkatapos ay tumawag ako GetInt.
At ngayon ay mayroon akong isang bit ng isang katinuan check.
>> Kaya ito ay isang convention na namin ngayon simulan ang paghango sa
mas rigorously suriin ang input ng user.
Minsan mo lamang ay hindi gusto upang i-prompt ang mga ito muli
at muli at muli.
Kung ang gumagamit, Turnilyo at hindi makikipagtulungan, fine.
Quit at lamang huwag makitungo sa kanila.
At kaya na kung ano ang ako ginagawa dito.
Kung ang n ay mas mababa sa 1, ako sumigaw sa user,
"Paumanhin, na ginagawang walang kahulugan." At pagkatapos ay ako pagpunta sa
mang bumalik ang 1.
Kaya muli, ito ay isang convention sa masanay sa.
Sa ngayon, ang mga ito sa pananampalataya.
Ngunit hanggang ngayon, palagi kaming na bumabalik 0, dahil
sinabi namin na bumabalik 0 Nagpapahiwatig ng kung ano?
Madla: Tagumpay.
David J. MALAN: Tagumpay, na ang lahat.
Kaya ngayon na sa wakas kami ay nagsisimula mag-isip tungkol sa
di-tagumpay -
sa ibang salita, sulok kaso, mga kondisyon ng error -
ngayon mayroon akong isang walang-katapusang supply ng, o hindi bababa sa apat na bilyong
posibleng bagay na maaaring magkamali sa aking programa.
At ang maaari kong simulan ang magtatalaga sa kanila ng mga indibidwal na mga numero.
Ngayon, sa pangkalahatan ito suffices lang bumalik
isang bagay na iba kaysa sa 0.
Kaya kami ay pagpunta upang bumalik lamang 1 sa ngayon.
Ngunit ang dahilan para sa bumabalik 1 na sa lalong madaling bumalik ka
1, hulaan kung ano ang mangyayari sa ibang bahagi ng programa?
Ito hinto.
Iyan na ang lahat.
Kaya ang katunayan na ako bumabalik 1 ay mabisa
maikling-circuiting pagpapatupad ng programang ito upang ang
walang ibaba linya 27 ay patuloy execute.
Sa lalong madaling pangunahing babalik na ito.
>> Lahat ng karapatan, kaya kung ang ginagawa ng user makikipagtulungan at maabot namin ang linya 30
dahil-type sila sa isang lehitimong numero, narito ang aking
pagpapatupad ng ang kantang ito.
Kaya unang ko i-print ang isang newline character na, para lamang sa
aesthetics.
Ako ngayon ay may para sa loop.
At mapansin ako ginagawa ang mga bagay ng kaunti
ng isang iba't ibang direksyon.
Hindi ko upang gawin mas mababa sa, hindi ko na gawin + +.
Ko sa halip sabihin initialize ng variable i, itakda ito katumbas ng
n, ang bilang ng gumagamit ang nai-type sa, pagkatapos ay gawin ang mga sumusunod, kaya
hangga't i ay mas malaki kaysa sa 0, pagkatapos ay i -
kapag natapos mo na ang isang pag-ulit na ito loop.
Upang maaari naming bilangin ang paggamit ng isang para sa loop pati na rin.
Ngayon, ito ay medyo magkano linggo isang bagay na ngayon, na may printf.
Kaya print "% d bote ng beer sa pader." I-print "% d
bote ng beer. "" Dalhin ang isa, ipasa ang mga ito sa paligid. "I-print
"% D mga bote ng beer sa pader." Kaya pa rin% d, ngunit
mapansin na ang argument ang printf ay nagbabago.
Pagkatapos ng kuwit, mayroon akong i, dahil gusto kong sabihin 99.
Pagkatapos ng kuwit na ito, mayroon akong i, dahil gusto kong sabihin 99.
Pagkatapos ng kuwit na ito, mayroon akong i - 1, dahil gusto kong sabihin 98 sa
ito unang-ulit, at iba pa.
At ngayon down na dito, ko lang ilang bobo maliit na pangungusap.
At pagkatapos linya 42, bumalik ako 0 sa pamamagitan ng convention, signifying na
ay okay ang lahat.
>> Kaya kung ano kung goofed ko?
Ano ang maaaring isang karaniwang pagkakamali sa dito?
Well, kung ano kung sinabi ko sinasadyang na rin, ko nais upang mabilang
down sa 0, Gusto kong 0 bote ng beer sa pader?
Kaya sinasabi ko, i ay mas malaki kaysa sa o katumbas ng 0.
Kung ano ang nangyayari ang sintomas na ngayon ko makita kung mag-recompile ko
beer1 at patakbuhin ito?
Madla: Negatibong.
David J. MALAN: Oo, ito ay gonna pumunta negatibong.
Ito ay isang off-by-one error, isang hindi kapani-paniwalang
karaniwang pagkakamali sa gumawa.
Sabihin aktwal na bumalik sa window ng terminal at gawin ito
dito, sa gayon ay maaari naming makita higit pa sa isang pagkakataon.
Ipasok, 99 bote ng beer.
Isara, ngunit hindi namin nagpunta napaka bahagyang Masyadong malayo.
Kumanta namin ang kanta masyadong malayo down, tulad na namin ngayon pindutin ang
negatibong numero.
Kaya't hindi ito ay medyo gumana.
>> Lahat ng karapatan, upang maaari naming madaling ayusin na sa pamamagitan ng pagpunta pabalik sa
paraan sa sandaling ito ay.
Ngunit ano ang ilang mga pagkakataon na ngayon para sa
pagpapabuti?
Well, hayaan mo akong buksan ang beer2.c at mag-scroll pababa dito at kumuha ng isang
tingnan ang bersyon na ito.
Ano ang unang bagay na jumps out sa iyo bilang ibang
sa ang bersyon na ito dito?
Madla: [hindi marinig].
David J. MALAN: Oo, kaya wala nang i, dahil ito naganap sa
sa akin kung ano, ako na humihiling ng gumagamit para sa n, at pagkatapos ay ako
pagtatakda ng i katumbas ng n, at pagkatapos ay ako binabago i, ngunit ako ay hindi kailanman
pagpindot n muli.
Kaya kung ano ang ano ba ang punto ng paglaan ng isa pang 32
bit na tinatawag na i lamang sa gayon ay maaari ba akong magkaroon ng isang iba't ibang mga variable?
Kaya sa kasong ito, ako uri ng kinikilala na hindi kinakailangang
disenyo tampok.
At ngayon ako pagpunta sa sabihin habang n ay mas malaki kaysa sa 0, pumunta
magpatuloy at i-print sa parehong kanta, pagpasa ng isang n printf bilang ang
ikalawang argument, at n - 1 bilang ang pangalawang argumento dito.
At pagkatapos ay sa bawat pag-ulit ng loop na ito, sige at
pagbawas n mismo.
Ngayon, pagtakbo, ang program na ito
pagpunta sa magkakahawig.
Kung type ko sa 99, n pagsisimula sa 99.
Ako pagbabawas, pagbabawas, pagbabawas, pagbabawas.
Pupunta ako upang makakuha ng ang lahat ng mga paraan pababa sa "Isang bote ng beer sa
sa pader, isang bote ng serbesa.
Gawin ang isa, ipasa ang mga ito sa paligid.
0 bote ng beer sa pader. "Ang katapusan, dahil ginawa ko
makakuha ng kondisyon ang tamang.
Ito ay mas malaki kaysa sa 0.
Hindi ako ang pagkakamaling ito.
>> Kaya kung saan ay mas mahusay, ang bersyon ng isa o bersyon ng dalawang?
Kaya Narinig ko ang isang bungkos ng mga murmurings para sa dalawa.
Bakit dalawang?
Ano iyon?
Madla: [hindi marinig].
David J. MALAN: Oh, okay.
Kaya hindi ito pumunta sa ibaba 0, ngunit tandaan, sa bersyon isa, ang
orihinal tamang bersyon ay hindi pumunta sa ibaba 0 alinman.
Kaya tandaan na ito ay ang tamang bersyon.
Kaya hayaan kung hindi bababa sa ihambing ang dalawang tamang bersyon.
Ano ang isang argument sa pabor ng bersyon
dalawang pagiging, mmm, mas mahusay?
Oo?
Madla: gumagamit ng mas espasyo.
David J. MALAN: Okay, sa gayon ito ay gumagamit ng mas espasyo, i-right?
Sapagkat bersyon isa ay ginamit ng 32 mga bit para sa n, at pagkatapos ay isa pang
32 bit para i.
Bersyon dalawang Ginagamit lamang ng 32 bit para n, upang
Mukhang ng plus.
Iba pang mga saloobin?
Ba ang sinuman gusto sa magtaltalan sa pabor ng isa?
Oo?
Madla: Mayroon kang gamitin ang dagdag na linya ng code para sa n -.
>> David J. MALAN: Okay, sigurado.
Kaya na patas.
Kaya ito lang, hindi bababa sa sa akin -
Ibig kong sabihin, ito ay aktwal na pakiramdam ng isang maliit na Messier, ang katunayan na ang
Hindi ko maaaring ayusin encapsulate ang lahat ng aking logic sa isa
magandang linya, para sa loop, ang para sa loop maaari.
Dito, ako uri ng mag-tak sa ito n -
sa dulo ng loop, dahil
lohikal na kinakailangan.
Ngunit ito uri ng rubs sa akin sa maling paraan, dahil lang sa ito
tila hiwalay mula sa logic na hanggang dito, kahit,
muli, ito ay kinakailangan.
Iba pang mga saloobin?
Oo?
Madla: [hindi marinig].
>> David J. MALAN: Oo.
Kaya kung ano kung ikaw sa halip, sa dulo ng kanta, gusto
i-print muli ang pangalan ng kanta?
Tulad ng "Salamat para sa paglalaro ng 99 bote ng beer", o isang bagay na
ulok tulad na?
Ngunit ang punto ay, gusto mo ng access sa orihinal na halaga.
Ang katotohanan na mutated o binago n sa bawat
ulit at samakatuwid ay sirain ang orihinal nitong halaga
nangangahulugan mo lamang ay hindi maaaring gawin iyon sa dulo.
Ngayon, arguably, namin malinaw hindi nais gawin
na sa programang ito.
Kaya na nagmamalasakit?
Ngunit iyon lamang ang isang wastong point.
At upang maging matapat, kung talagang hindi isang
karapatan sagutin dito.
Ang mga ito ay parehong pantay tama.
Ako kumbinsido paraan alinman.
Sabihin ko na, sa pangkalahatan, ito ay isang mahusay na prinsipyo kung ikaw
nagtanong ang gumagamit para sa ilang mga halaga at naka-imbak sa isang variable
tulad n uri ng sa prinsipyo, ito ay marahil magandang
upang panatilihing na sa paligid.
At ang anumang data na nais mong mutate muli at muli,
bigyan ang iyong sarili ng isang kopya ng na variable, kaya na ikaw
magkaroon ng access sa orihinal.
Ikaw ay gumagastos ng 32 higit pang mga bit, ngunit ang katotohanang ito
computer, i, dalawang gigabytes ng RAM mga araw na ito,
at kami ay quibbling higit sa 32 bit?
Talagang hindi isang malaking deal.
At kahit na sa device na ito dito, na may kalahati ng kalesa o
gigabyte ng RAM, 32 bit kumpara sa 64 bit,
hindi isang malaking deal.
Tiyak na ngayon, ito ay pagpunta sa paraan na magapi ng laki
ng programa mismo, na kung saan ay pagpunta sa ilang daang
kilobytes, kung hindi ng ilang mga megabytes, ang mga araw na ito.
>> Kaya mga makatwirang mga alalahanin, walang tamang sagot.
Ngunit hindi bababa sa mga ay ang mga saloobin na dapat magsimula sa
pumunta sa pamamagitan ng iyong isip?
Dahil sa pset 0, kahit kami talaga lamang inaasahan
kawastuhan, o hindi bababa sa disclaiming ng iba't-ibang mga bug na
maaari mong Nakaranas, bilang ilipat namin inaabangan ang panahon, ang disenyo ay
pagpunta sa isa pang key aspeto, parehong ng pagsusulat ng code
at din ang aming pagsusuri ng code.
At kaya hindi bababa sa bigyan naisip sa mga bagay tulad nito.
At dahil lang sa isang bagay na gawa ay hindi nangangahulugan na ito ay mabuti,
ay hindi nangangahulugan na ito ay mahusay na dinisenyo.
At na ang isa ng mga bagay na ang pagtuturo Fellows at
set problema ay makakatulong manunudyo sa amin bahagi sa paglipas ng panahon.
>> Well, kung ano ang tungkol sa, sabihin nating, ang bersyon na ito dito?
Hayaan ang gawin sa akin ng isang bagay na ng kaunti sexy dito sa ilang sandali.
Unang hayaan mo akong makakuha ng mapupuksa ng ito.
At ngayon sabihin ayusin ito pambalarila isyu.
Kaya sa ang bersyon na ito, gusto kong ayusin ang grammar upang ang,
sa halip na lamang nating parenthetical s, tulad ng "bote"
o "bote" -
Hindi ko nais upang i-cut na sulok -
Gusto ko rin sa dynamic na i-print ang salitang "bote"
o "bote", at dahil doon gamit ang mga placeholder mga% s ngayon.
Kaya kailangan kong i-check nang may pasubali kung ano ang halaga ng i.
At kung ito ay 1, gusto kong sabihin ang "bote", at kung ito ay anumang
tao, gusto kong sabihin ng "bote". Kaya natin subukang gawin ito.
Kaya kung i == 1, at pagkatapos ay hayaan mo akong magpatuloy at ipinapahayag -
Kailangan ko ng isang string, kaya hayaan gawin sa akin ng mga S1 string, dahil ito ay ang
unang string na mahalaga ako tungkol sa ngayon.
Ako pagpunta sa sabihin ang "bote". At pagkatapos, sabihin makita, string
S2 - at Ipapaliwanag ko kung saan ako pupunta sa isang sandali -
"Bote." Isipin ang Kaya, ang kantang ito, kailangan namin upang magawang
upang i-print ang mga bagay, dalawang magkaibang salita potensyal.
Kaya't kung tiningnan namin pabalik dito, mapapansin na kapag makuha namin
halimbawang ito dito, "dalawang bote ng beer sa pader,
dalawang bote ng beer, gawin ang isa, ipasa ito sa paligid ", gusto kong
ikaapat na linya na ito sa ngayon sabihin "ng isang bote ng serbesa sa
wall ". Kaya kailangan ko upang magpasya, ang gusto kong sabihin ng" bote "o
"Bote"? Kaya ako pagpunta sa mang sabihin, lahat ng karapatan,
Ako pagpunta sa ngayon ipinapahayag ng isang variable na tinatawag na S1, string
isa, na pagpunta upang makakuha ng mga naka-plug in dito at din dito,
dahil ang mga salitang iyon ay laging magkakahawig, lamang dahil sa ang
likas na katangian ng ang kanta.
At ako pagpunta sa tumawag S2 anumang salitang gusto kong
kalaunan lumitaw pababa dito.
Ngayon, literal, 99 beses sa 100, ito ay ang
parehong sa parehong mga kasong iyon, dahil 3 pangmaramihang, 2
plural, 4 ay pangmaramihang.
Ngunit sa kasong ito ng sulok, kung saan nakukuha namin sa 2 at pagkatapos 1, o
kahit 1 at pagkatapos ay 0, kailangan ko ang logic na ito.
Kaya kong gumastos ng ilang oras sa aking code sa pagkuha ng karapatang iyon.
Kaya kung gawin ko ito, kung i == 1, pagkatapos ay itakda ang S1 katumbas ng "bote"
at S2 katumbas sa "bote", dahil ito ay para sa 1
bote, at ito ay para sa mga 0 bote.
At ito dito, kung ano ang ibig kumatawan?
Lamang maging malinaw.
Ito ay isang komento.
Kaya ang ibig sabihin ng ang katunayan na maaari kang magkaroon ng solong-linya komento
maaaring magkomento sa iyong code tulad nito, ngunit isa pang karaniwang
paradaym, masyadong, ay na kung mayroon kang isang napaka-maikling parirala na
nais mong ilagay ang iyong sarili at lang mas nababasa upang ilagay
ito pakanan sa dulo ng linya ng code, maaari mong
talagang gawin ang isang bagay tulad nito.
>> Kaya ngayon kung ano kung gagawin ko ito? Iba Pa kung i ay hindi katumbas sa 1.
Kaya putok katumbas -
exclamation point ay kilala bilang "putok".
Kaya putok = 1.
Kaya kung i ay hindi katumbas sa 1, ano ang gagawin ko sa halip gusto mong gawin?
Well, ang unang salita na gusto ko na kung ano ang?
Kaya string 1 ay dapat na "bote" para sa mga bote ng pangmaramihang,
at pagkatapos na ito ay pangmaramihang "bote" pati na rin, sa ngayon.
At kami na makita kung ito aktwal na nakakakuha ng sa amin upang
kung saan gusto naming pumunta.
Kaya ngayon kung mag-scroll down na ko dito, mapansin na ako i-plug sa
hindi lamang i, ngunit S1.
I-plug ako sa i at S1.
At pagkatapos ay down na dito, ako minus 1, na kung saan ay katulad ng
bago, ngunit S2.
Sa ibang salita, gusto ko ang mga salitang Ingles upang baguhin batay
sa ang logic na ito.
Ngayon, may ilang mga problema sa ang code na ito.
Ano ay nasira na ng gate dito?
Oo?
Madla: [hindi marinig].
>> David J. MALAN: Eksaktong.
Kaya ko na lumabag ang aralin ng saklaw.
Kaya ipinahayag ko na S1 at S2, ngunit nagawa ko na ito sa loob ng
kulot tirante, na nangangahulugang oo, ang code na ito gagana
hanggang sa ika-42 linya, ngunit sa lalong madaling pindutin ko ang linya 43, hulaan kung ano ang hindi
na umiiral?
Well, hulaan kung ano ang hindi na saklaw - wala S1 o S2.
Kaya mayroon kaming upang ayusin ito.
Kaya ipaalam sa akin tanggalin ang pagdeklara.
At kukunin ko na iwanan ang mga variable na pangalan at tanggalin ang dito
at tanggalin ang mga ito dito.
At sa kung ano ang linya ang dapat kong talagang ipinapahayag ang mga bagay na ito?
Madla: [hindi marinig].
David J. MALAN: Oo, kaya marahil
kanan hanggang dito, 33-ish.
Kaya string S1 at pagkatapos string S2.
At ito ay lumiliko out, ang maaari kong gawin ito.
Kung ikaw ay deklarasyon ng dalawang variable ng parehong uri,
maaari mong aktwal na lamang gamitin kuwit at gawin iyon sa C. Lahat ng
karapatan, kaya ngayon mayroon akong dalawang variable -
S1 at S2.
Ako magtatalaga sa kanila ng halaga sa mga
kundisyon dito, o in dito.
At pagkatapos ay ako gamit iyon sa ibaba.
Kung gaano kahusay na ito ngayon sa trabaho?
>> Well, ito ay pa rin ng kaunti maraming surot, ngunit sabihin ng hindi bababa sa makita
gaano kalayo namin na nakuha.
Kaya hayaan mo akong magpatuloy at gumawa ng beer3.
Ay ang beer3 na ito?
Yep, ito ay beer3.
At ngayon hayaan mo akong magpatuloy at patakbuhin beer3.
399 99.
Maaari namin marahil laktawan karamihan sa kanila.
At pababa dito, tingnan na.
"Isang bote ng beer sa pader, isang bote ng beer,
isa pababa, ipasa ito sa paligid, 0 bote ng beer sa pader. "
Ngunit ako pagguhit ng iyong pansin sa lamang ng kalahati ng solusyon.
Uri ng screwed up dito.
Kaya ito ay tila na ang mga kaso ng sulok lumabas dahil kapag i katumbas ng kung ano ang
dalawang halaga?
Madla: 2, 1.
David J. MALAN: 2 at 1.
Hindi ito 1 at hindi 1.
Ito ay talagang lamang ang mga huling dalawang stanza ang kantang ito.
Kaya ano ang gagawin ko sa halip gusto mong gawin?
Kaya mukhang ako na nahuli na kaso kung saan kung i ay == sa 1,
pagkatapos ay ang unang salita ay "bote", ngunit ang pangalawang salita
"bote". Ngunit dito, nais kong baguhin ito sa == 2.
At kung ito ang kaso, kung ano ang gusto ko ang
unang salita na?
Madla: "Bote".
David J. MALAN: "Bote", kaya para sa dalawang bote.
At pagkatapos ay ang salitang ito dito ay dapat -
Madla: "Bote".
David J. MALAN: "Bote", isahan.
>> Karapatan lahat, sabihin mag-zoom out, bumalik sa paglipas dito, muling patakbuhin ang gumawa,
re-run beer3, uri 99 muli.
Okay, "Segmentation fault (core dumped)."
Ano pa ko tapos mali?
Madla: Hindi mo kailangang magkaroon ng isang halaga [hindi marinig].
David J. MALAN: Ah, mahusay na punto.
Lahat ng karapatan, kaya kung ano ang mali dito?
Kaya segmentation fault, at aktwal na kami ay upang makita
ito medyo ng ilang oras sa hinaharap, sadyang.
Ngunit sa ngayon, ano ito aktwal na ibig sabihin nito?
Ang segmentation fault halos palaging nangangahulugan na mayroon kang
sa paanuman sinubukan upang ma-access ang memory, RAM sa iyong computer,
na hindi mo pag-aari, na hindi mo aktwal na nagtanong ang
operating system para sa.
Kaya sa kasong ito, mapapansin kung ano ang nagawa ko na, na kung saan ay
flawed sa aking logic.
Ko bibigyan ng S1 at S2 halaga ng kung i katumbas 1.
Nagawa ko na rin na kung i katumbas ng 2.
Ngunit hindi ko nagawa ito sa walang katapusan na bilang ng iba pang mga
posibilidad -
partikular, 3 o 4 o tuldok, tuldok, tuldok, 99.
Kaya ang isang-aayos para sa lamang natin
magkaroon ng isang pang tao na kondisyon.
At ipaalam sa akin pumunta sa dito at sabihin S1 katumbas -
ano ang dapat ito dito?
Madla: [hindi marinig].
>> David J. MALAN: "Bote", dahil sa karaniwang kaso,
ito ay ang parehong bagay.
Kaya ay katumbas ng mga quote, magpanipi, "bote." Kaya para sa pangmaramihang
bote, at pagkatapos ay hanggang dito, para sa pangmaramihang bote.
Okay, kaya ngayon hayaan mo akong bumalik sa aking terminal na window,
mag-recompile, muling patakbuhin ito.
99.
Whew.
At sabihin ng isang mabilis na check ng katinuan.
Technically, nais namin nais na basahin ang lahat ng mga ito upang matiyak na
hindi tama ang mga ito, ngunit tingnan natin
kahit ang mga kilalang culprits.
3 bote, 2 bote, 2 bote, 1
bote, 1 bote, 0 bote.
Mukhang namin na hindi bababa sa maayos ito sa ngayon.
Ngunit ang catch dito ay na ang isang kakila-kilabot gulo ng diyos na ito ay
lamang upang malutas ang isang bobo
isang-character na pambalarila detalye.
Kaya may uri ng isang dahilan na pinutol ko ito sulok
mas maaga, dahil ito lamang ganap na nakakainis na magkaroon ng sa
isulat ang ganito karami code.
Ngunit ito lumiliko na may bahagyang mas eleganteng paraan ng
pagpapahayag ang eksaktong parehong bagay.
At maaari naming gawin ito tulad ng sumusunod.
>> Hayaan akong iwanan ito sa screen para sa isang sandali at
ipakilala ang isang bagay na kilala bilang isang tatluhan operator.
Ito ay uri ng isang-Liner na lamang nilalayong upang gumawa ng aming
nakatira sa isang maliit na sexier, tulad ng ipinangako.
At ako pagpunta sa gawin ito tulad ng sumusunod.
Bigyan mo ako ng S1 na tinatawag na isang string, at ipaalam sa akin
italaga ito bilang mga sumusunod.
(I == 1)?
"Bote", kung hindi man "bote". String S2 ay nakakakuha (i == 2)?
"Bote", kung hindi man "bote".
Kaya kung ano ang pagkatapos ay ang pagkakaiba dito?
Mga dalawang linya ng code, magtaltalan ko, maaari
palitan ang buong gulo.
Kaya ko ito tumawag ng gulo, dahil lang sa ito uri ng rubs sa akin ang
maling paraan na kaya maraming mga linya ng code.
Hindi mali.
Hindi masamang disenyo.
Gusto, ito ay perpektong tama at perpektong fine.
Ngunit coding nakakakuha ng nakakapagod kung mayroon kang upang ipahayag ang iyong sarili sa gayon
mapahamak partikular muli at muli at muli gamit ang isang simpleng
sitwasyong tulad nito.
Kaya C ay may ilang mga shortcut, tulad nito.
Kaya ito ay mahalagang sinasabi na ipinapahayag ng string na tinatawag S1 at
italaga ito alinman ang halagang ito o ang halagang ito kung i == -
Paumanhin, dapat ko bang sabihin ito mas malinaw.
Magpahayag ng isang variable S1, italaga ito ang halaga na ito kung ito ay totoo.
Kung hindi man, italaga ito ang halaga na ito.
Kaya sa ibang salita, ito ay uri ng isang-linya na paraan ng
sinasabi kung tao ngunit paggawa ng isang pagtatalaga sa kahabaan ng paraan.
Kaya kung i ay 1, pagkatapos sige at tawagan ito "bote". At
pagkatapos ito tao, tumawag ito "bote". Samantala, S2, ang
pangalawang salita na kailangan namin upang tukuyin, kung i katumbas 2, bibigyan namin
itakda ang S2 sa "bote". Kung hindi man, itakda ito sa "bote". At kung ano ang
ito ay nangangahulugan na ngayon ay maaari kong pumunta sa pamamagitan ng at tanggalin ang lahat ng
mga linya ng code.
At kapag sinabi ko, medyo ridiculously, na ito ay ngayon
sexier, sexier sa uri ng pangkakanyahan kahulugan.
Ang katotohanan na pagtakbo, ang code na ito ay aktwal na pagpunta sa
gawin ang eksaktong parehong bagay.
At kahit maaaring tumingin ng kaunti misteriyoso sa unang
sulyap, dahil hindi namin nakita bumuo ito bago, gusto ko
magtalo na ganap na ito kaya higit pa
nababasa at kaya mas madali para sa namin tao upang pag-uri-uriin ng
maunawaan, dahil ngayon maaari mo lamang basahin ang
code lahat sa isang linya.
Ito ay katulad pa rin sa espiritu sa isang kung, kung saan ito ay ang
kalagayan at pagkatapos ito ay kung ano ang sa loob ng kung at ito
ay kung ano ang sa loob ng pang tao.
Ngunit maaari naming gawin ito lamang mas elegante.
>> At kung ako ngayon bumalik sa aking terminal, pag-tinanggal ang lahat ng
ng mga linya at pinalitan ang mga ito na may lamang mga dalawang,
mag-recompile, re-run ang mga bote ng beer na may 99, notice na aking
grammar ay, sa katunayan, pa rin tama.
Kaya muli, isang bagay upang magsimula.
2 bote ng beer, 1 bote ng serbesa.
Mukhang tama.
Oo.
Kaya mayroon kami ng mas higit pa na solusyon maikli at malinaw.
Kaya ito, masyadong, makakakuha ka ng mas kumportable sa C, hindi
kinakailangan na ang unang pset o kahit ikalawang, ngunit
Napagtanto ang mga constructs-daan sa amin upang gawin ang mga bagay kailanman
mas elegante.
Ngayon sabihin gawin ang isa sa iba pang mga bagay dito.
Hayaan akong sige at buksan return1.c.
Ngayon sabihin simulan upang malutas ang isa pang problema sa isang paraan na
ay nagbibigay-daan sa amin upang magsulat ng mas sopistikadong code.
>> Kaya narito ang isang simpleng maliit na programa na layunin sa buhay
ay upang dagdagan ang halaga.
At aktwal na, sabihin tumagal ng isang hakbang pabalik.
Hayaan ang gawin sa akin ito nang manu-mano.
Hayaan ang gawin sa akin isama at int pangunahing (walang bisa).
At ipaalam sa akin na tumawag ito increment.c.
At kung ano ang gusto kong gawin?
Ako pagpunta sa magpatuloy at sabihin ang isang bagay tulad ng -
naming tawagan ang mga numero ng parehong -
int x.
Kaya int x nakakakuha ng 2; printf x% d, bagong linya, x.
Kaya nagta-type ako ng mabilis, ngunit ang uri ng pamilyar na mga bagay-bagay ngayon.
Pagkatapos ako pagpunta sa gawin x + +.
Pagkatapos ako pagpunta upang i-print muli na parehong pangungusap.
At pagkatapos ay ako pagpunta upang bumalik 0 lamang na umalis sa programa.
Karapatan lahat, kaya ito ay isang programa na
palugit ang isang numero.
Una itong ang pagsisimula ng isang bagay sa 2, at pagkatapos ito ay
pagpunta upang dagdagan ang mga ito at i-print ang mga ito muli.
>> Kaya natin patakbuhin ang pagdagdag, hindi kapani-paniwalang simpleng programa.
Ngunit ipagpalagay na ngayon na gusto kong kubo ang halaga, kaya gawin
isang bagay na medyo arbitrary.
At gusto ko aktwal na gawin x nakakakuha ng kubo nito.
Kaya ko maaaring gamitin kung ano ang tinatawag na yukod function na, ngunit hindi ko
talagang malaman kung saan na ay pa.
Kaya ako pagpunta sa gawin ito sa luma paraan.
x beses na ito ay katumbas ng x beses x beses x.
Kaya ako cubing ang halaga, multiply ito muli sa pamamagitan ng mismo
at muli at muli, sa gayon ay makuha namin ang lakas
ng 3 sa kasong ito.
Kaya ngayon ang mga numero ang dapat kong i-print ang dapat na, dahil kakailanganin namin nakikita
dito - gumawa ng pagdagdag, kaya ito ay aktwal na hindi talaga dagdagan
ito, ngunit gagamitin namin iwan ang pangalan nang nag-iisa -
2 at pagkatapos ay 8.
Ngayon, mayroon kaming ang mga Beginnings ng isang pagkakataon para sa pagpipino
dito, kung saan ito cubing bagay ng multiply ng bilang
mismo sa pamamagitan ng mismo sa pamamagitan ng mismong nararamdaman tulad nito ay maaaring lamang
kapaki-pakinabang bilang isang function, tulad ng isang tao nagpasya
taon na ang nakalipas - alam mo, ang uri ng mga kapaki-pakinabang kung isa sa atin ay makikita pababa
at nagsusulat printf sa gayon na ang natitirang bahagi ng mundo ay maaaring gamitin ito,
bakit hindi namin umupo at isulat ang isang function na tinatawag na kubo
na ito cubing para sa amin kaya hindi namin upang mano-manong
ipatupad ang paniwala ng cubing halaga dito?
>> Kaya isang simpleng halimbawa, ngunit sabihin sige at gamitin ito bilang isang
pagkakataon na isulat ang aming sariling function na.
Kaya sa gayon ay malayo, lamang namin ang ginagamit pangunahing, at ginamit namin ang iba pang mga
mga function, ngunit hindi namin nakasulat aming sariling.
Kaya dito namin pumunta.
Ako pagpunta upang magpatuloy at isulat ang isang function na tinatawag na kubo.
At ako itong tumagal ng isang input.
Kaya ang input nito ay pagpunta sa maging isang integer.
At kung ano ang pagpunta sa gawin?
Ito ay upang idedeklara int output = beses sa input ng input
beses input.
At pagkatapos ito upang bumalik na output.
At pagkatapos ko na ng tukoy na ngayon.
Ang function na ito ay pagpunta sa bumalik sa isang int.
Kaya dito pagkatapos ay kung paano nais mong isulat ang iyong sariling mga function.
Mo munang magpasya kung ano ang pangalan ng iyong
function na pagpunta upang maging.
At sa pangkalahatan, isang bagay na paliwanag ay mabuti, kaya idedetalye ko
tumawag ito kubo.
Pagkatapos ay mayroon kang upang tukuyin kung ano ang ito upang bumalik, kung ano ang
nito output na maging.
At hindi namin na maraming mga pagpipilian.
Int, pansamantalang trabaho, Float, bool, string.
Sa ngayon, ako pagpunta upang ilagay sa isang int, dahil gusto ko ito
upang ibalik ang isang integer.
Pagkatapos mayroon kang upang tukuyin kung ano nitong mga input, kung mayroon man, ay.
At kung ang kubo tumatagal ng isang argument, ay kumukuha ng isang bagay sa pagitan ng
panaklong, mayroon kang upang bigyan na argumento ng pangalan upang ang
maaari mong tawagin ang mga ito ng isang bagay bilang ka pagpapatupad o pagsulat
ito function, at mayroon kang upang bigyan ito ng isang uri, na sa ganitong
kaso ay pagpunta sa int.
Kaya sa maikling salita, ang kubo ay isang function na kumukuha ng isang integer
bilang input at babalik isang integer bilang output.
>> Kaya kung ano ang gagawin sa na input?
Well, sa linya 14, ako idedeklara isang variable na tinatawag na output, at ako
italaga ito ang halaga, input beses input input beses.
At pagkatapos ko bumalik ng output.
Kaya paano ko gagamitin ito pagkatapos?
Ano ang gagawin ko bang baguhin ang mga naka-highlight na character sa linya
7 na, sa tingin mo?
Madla: [hindi marinig].
David J. MALAN: Oo, kaya kubo ng x.
Kaya x ay isang variable, na nangangahulugan na ito hold ilang halaga.
Kabutihang palad, ng uri ng integer.
At dahil ang x ay isang int, na nangangahulugan na maaari kong pumasa ito sa kubo.
At kahit ako override ang halaga ng x sa ang halaga
x kubo, ay ang kaso nang sa gayon ay malayo, anumang oras
pantay-pantay na mag-sign at isang linya ng code, ang mga bagay sa kanan
ay makakakuha pinaandar at pagkatapos ay makakakuha itinalaga sa
halaga sa kaliwa.
Kaya ang pagkakasunud-sunod ng mga pagpapatakbo tulad naming umaasa.
Kaya ito gumagana?
Well, hayaan mo akong pumunta pababa dito.
Hayaan akong buksan ang aking terminal na window.
Hayaan akong gumawa ng pagdagdag, Ipasok.
"Implicit deklarasyon ng function na ang 'kubo' ay hindi wasto sa
C99. "Bilang isang bukod, C99 ay tumutukoy sa C wika tulad ng ito ay
tinukoy noong 1999, kung saan ay isang update sa ibabaw ng bersyon mula
1989, kung saan ay isang update sa orihinal.
Kaya na ang lahat ng mga paraan.
>> Kaya kung ano ang ibig sabihin na "implicit deklarasyon ng
'kubo' na function na ay hindi wasto? "dito mismo.
Doon sa linya 12.
Madla: [hindi marinig].
David J. MALAN: Ano iyon?
Madla: Ito ay hindi bago.
David J. MALAN: Ito ay hindi bago.
Kaya ito ay ang bagay.
C uri ng bobo, o C compiler uri ng bobo.
Sila talaga lamang gawin kung ano ang sabihin sa iyo ang mga ito na gawin.
At sila, sa partikular, tanging basahin ang iyong code itaas hanggang sa ibaba,
kaliwa papuntang kanan.
Kaya kung ang tagatala, kalatong, nagbabasa ng iyong code, line 1,
figure kung paano gawin ito.
Oh, dito ay pangunahing.
Okay, hayaan mo akong magpatuloy at ipinapahayag sa isang variable na x.
Hayaan akong i-print ang isang bagay.
Line 7, ano ano ba ang kubo?
Hindi ito ipinahayag sa stdio.h.
Hindi nito ay may C. Wala akong palagay kung ano ang gagawin.
At kaya kumalatong lamang bails at tabla na mensahe ng error.
Upang maayos namin ito sa ilang mga paraan.
Namin magturo ng kalatong kung ano ang kubo ay sa pamamagitan ng paglipat lamang kung saan ang
deklarasyon.
Kaya pinutol ko at ilagay ito paitaas sa pangunahing.
Ngayon ay nauunawaan na lamang dahil ang pangunahing ay hindi na unang,
pa ring isinasagawa sa pamamagitan ng default.
Main ay pangunahing.
Ito ay ang default na pangalan ng function na.
Hindi mahalaga kung saan ito ay sa isang file.
Ngunit hindi bababa sa ngayon kumalatong ay nakita kubo bago ko ito gamitin.
Kaya ipaalam sa makita kung kumalatong ay mas masaya ngayon.
Magsagawa ng pagdagdag, ipunin ang oras na ito.
>> Hayaan akong magpatakbo ng pagdagdag.
At sa katunayan, mukhang nagtatrabaho.
Ngayon, maaari kang makabuo na may mga sitwasyon kalaunan kung saan
hindi ito magagawa upang ilagay ang bawat function na
sa itaas sa bawat iba pang mga function na.
Ka makaalis sa walang-katapusang loop sa katotohanan,
kung saan ang tao na ito ay nais dito ngunit ito
tao kailangang doon.
Kaya na ay hindi laging gumagana.
Sa thankfully, C ay may mas eleganteng solusyon.
Ako pagpunta sa ilagay ito pabalik kung saan ito ay, dahil lang ako
ginusto, bilang isang bagay ng prinsipyo, na pangunahing palaging
sa tuktok, sapagkat ito lang magaling upang makita kung ano ang program na ito
ginagawa sa pamamagitan ng default.
At kung ano ako pagpunta sa gawin dito idedeklara kung ano ang tinatawag na
ng prototype.
Ako pagpunta sa muling ipinapahayag ang aking kubo function na sa pamamagitan ng literal
pagkopya at paglalagay.
Aktwal na, na hindi literal.
Kaya literal ng pagkopya at pag-paste sa linya 15
hanggang sa itaas linya 6.
Hindi mahalaga kung ano ang linya na ito ay nagtatapos sa.
Ang mangyayari sa linya 4.
Ngunit ito ay bago pangunahing.
Ngunit mapansin ang pagkakaiba.
Dulo ng linya 4 sa na may semicolon, na nangangahulugan hey,
Kumalatong, dalhin ang aking salita para dito na may umiiral function na
tinatawag na kubo na tumatagal ng isang int at nagbabalik ng isang int.
Ngunit Hindi ako gonna sabihin sa iyo kung ano ito ay pa.
Lang alam na nangangako kong sabihin sa iyo sa kalaunan.
At sa katunayan, ngayon ito ay okay na ito ay down sa ibaba.
>> Kaya ito ay mas mahusay, dahil pagkatapos ay sa tuktok ng
ang iyong file, maaari mo lamang mabilis magsalita, sunud-sunod, isang linya
bawat isa, kung ano ang mga pangalan ng iyong mga function, kung ano ang kanilang
input ay, kung ano ang kanilang mga output.
At upang maging mas malinaw, input karaniwan ay nangangahulugan argumento o
parameter, kasingkahulugan.
Output ay nangangahulugan na ang return halaga, kung ano ang ginagawa nito
kamay bumalik sa akin.
Kaya sa kasong ito dito, kubo ay ipinahayag sa itaas, ngunit
tinukoy, kung hindi man kilala bilang ipinatupad, sa ibaba.
Kaya ngayon sabihin bumalik dito at muling patakbuhin ang.
Kaya ngayon hayaan mo akong magpatuloy at muling patakbuhin gumawa, patakbuhin muli pagdagdag.
At ngayon tila gumagana lamang fine.
Kaya ngayon maaari naming magpatuloy at magfa-factor out ang isang bagay tulad ng
Halimbawa ng beer sa ikaapat na bersyon na ito.
Kaya hayaan mag-scroll pababa sa akin dito.
At mapansin na ko uri ng kinuha ang araling ito sa puso ngayon lang.
Ang katotohanan na ako ay awit sa parehong saknong muli at
muli at muli, ang parehong linya ng koro sa kanta, nadama
bang bakit hindi ko salik na out sa isang function?
At sa katunayan, ito ay dapat isa ng motivations.
Bukod sa katotohanan na ang ibang tao sa mundo ay maaaring gusto
gumamit ng kubo function na -
na ang isang magandang dahilan sa salik ng isang bagay at isulat ang iyong
sariling pasadyang function na -
kung may isang tipak ng code sa iyong programa na lamang ginagawang
pangkonseptong kahulugan, na uri ng nais na bigyan ito ng isang
pangalan - tulad ng sa kasong ito, koro -
maaari mong isulat ang katulad na bilang isang hiwalay na function na.
Hindi mo upang isulat ang lahat sa pangunahing kung ito lamang
nararamdaman cleaner upang paghiwalayin ang mga ito at bigyan ito ng isang pangalan.
>> Kaya sa kasong ito dito, mapansin na mayroon akong isang komento nasa ibabaw
ito function na na lang SINGS tungkol sa
tinukoy na bilang ng mga bote.
Mapansin dito na hindi ko kailangang tumawag mga
bagay sa input at output.
Sa katunayan, ang oras na ito ko lang na tinatawag na ang aking input b para sa bote.
At mapansin dito, walang bisa nagmumungkahi kung ano?
Na koro -
Madla: Hindi ibalik ito.
David J. MALAN: Hindi nagbabalik ng halaga.
At sa katunayan, function ay hindi upang bumalik halaga.
Lamang nila maaaring gawin ang isang bagay.
Maaari silang magkaroon ng kung ano ay tinatawag na epekto, na sa ganitong
kaso lamang ang isang buong grupo ng mga pag-print sa screen.
Kaya mapapansin na ang code na ito sa dito, ako literal lamang nakaagaw mula
ang nakaraang halimbawa.
Ang pagkakaiba lamang ay sa halip na gamitin i bilang aking
variable, ngayon ako gamit b bilang aking variable.
Kaya Mayroon akong b down na dito, mayroon akong b down na dito, mayroon akong b
minus 1 down na dito.
Ngunit code ay eksaktong kapareho.
Ngunit lamang upang ipakita sa iyo ngayon kung paano namin gamitin ito, hayaan mo akong umalis
magpatuloy at aktwal na baguhin ito sa isang para sa loop.
para sa (int i = n; i> n; i -).
>> Kaya ko ang ninakaw na mula sa aming nakaraang halimbawa.
Noong nakaraan, ito sa linya 37 Gusto ko Sinimulan na
awit na ito nakakainis na kanta.
Ngunit sa halip, lamang ako pagpunta sa ngayon tumawag ng koro ng i.
Tapos na.
Kaya ngayon sa bawat pag-ulit ng loop na ito, tawagan ko ito sa iba pang
function, koro, na nangyari ko na magsulat.
Hindi ito ay isinulat sa pamamagitan ng ibang tao taon na ang nakakaraan.
Ngunit koro, samantala, ay gumagamit ng printf i-print
ang mga apat na linya.
Ngunit ang katunayan na ako pagtawag koro muli at muli sa isang
loop ay nangangahulugan na ako pupunta upang makakuha ng, sa pinakadulo, ang
eksaktong parehong kanta bilang Mayroon akong sa gayon ay malayo.
Kaya sa maikling salita, ngayon kung tiningnan ko sa aking code, kahit na
pagtakbo ito ay katumbas, mapapansin na ito
simula upang makakuha ng mas nababasa.
Hindi ko eksaktong alam kung paano GetInt
ay ipinatupad.
Lantaran, hindi ko alam kung paano koro ay ipinatupad.
Ngunit hindi ito mahalaga sa akin.
Wala akong pakialam, dahil ngayon ang maaari kong pag-uri-uriin ng, bilang isang tao, basahin
ito mula tuktok hanggang ibaba.
At dahil ang mga function ay pinangalanan ayon sa kung ano ang kanilang
gawin, ang aking code ay nagiging nababasa.
At bilang aming mga programa na makakuha ng mas kumplikadong -
sa pamamagitan ng pagtatapos sa semestre, makikita mo ang pagsusulat ng mga daan-daang ng mga linya
ng code sa mga wika tulad ng PHP at JavaScript at ang mga tulad ng -
makikita mo na ito kaya mas madali kaysa upang subaybayan ang mga
kung ano ang nagawa mo na.
At kapag sinimulan mo ang pakikipagtulungan sa mga kaibigan o
mga kasosyo o mga kasamahan, magagawa mong upang isulat ang higit pa
napakalaking programa sa pamamagitan ng simula sa ehersisyo ang mga pangunahing
gusali bloke.
>> Kaya may na sinabi, bakit hindi kami tatawag sa isang araw?
At kami ay nakikita mo sa Miyerkules.
[Palakpakan]