[MUSIC nagpe-play] David J. MALAN: Lahat ng karapatan. Ito ay CS50 at ito ay ang simula ng Linggo 2. At makikita mo isipin na sa paglipas ng sa nakalipas na dalawang linggo, Na-nagpapakilala kami ng computer agham at, sa turn, programming. At sinimulan namin ang kuwento sa pamamagitan ng paraan ng Scratch, na graphical wika mula sa MIT'S Media Lab. At pagkatapos ay pinaka-kamakailan lamang, noong nakaraang linggo, ginawa namin ipakilala ang isang higher-- isang mas mababang antas ng wika na kilala bilang C, isang bagay na ay pulos sa texto. At, sa katunayan, huling oras namin ginalugad sa loob ng konteksto isang bilang ng mga concepts. Na ito, pagpapabalik, ay ang napaka unang programa namin ay tumingin sa. At ang program na ito, medyo simple, Kopya out, "hello, world." Ngunit mayroong kaya magkano tila magic nangyayari. Mayroong ito #include may mga anggulo bracket. Mayroong int. Mayroong (walang laman). Mayroong panaklong, kulot tirante, semi-colons, at kaya marami pang iba. At ito, isipin ang na ipinakilala namin Scratch kaya na namin maaaring, sa isip, tingnan ang nakaraang na syntax, ang bagay-bagay na talagang hindi lahat na intellectually kawili-wiling ngunit maaga ay, walang pasubali, isang bit mapaglalang upang wrap ang iyong isip sa paligid. At, sa katunayan, ang isa sa mga pinaka-karaniwang bagay nang maaga sa isang programming class, lalo na para sa mga mas mababa kumportable, ay upang makakuha ng bigo sa pamamagitan at tripped up sa pamamagitan ng ilang sintaktik error, hindi sa banggitin lohikal na mga error. At kaya sa gitna ng aming mga layunin ngayon, talaga, ay ay upang magbigay ng kasangkapan sa iyo ng ilang problema-tuos pamamaraan para sa kung paano upang mas mahusay na malutas ang mga problema sa kanilang sarili sa anyo ng pag-debug. At makikita mo isipin, masyadong, na ang kapaligiran na ipinakilala namin huling beses ay tinatawag na CS50 IDE. Ito ang web-based software na ay nagbibigay-daan sa iyo na programa sa ulap, kaya na magsalita, habang pinapanatili ang lahat ng iyong file ng sama-sama, pati na muli namin ay ngayon. At isipin na kami revisited mga paksang ito dito, kasama ng mga ito pag-andar, at mga loop, at variable, at Boolean expression, at kundisyon. At talagang isang ilang higit pang mga na kami isinalin mula sa mundo ng Scratch sa mundo ng C. Ngunit ang pangunahing gusali bloke, kaya na magsalita, ay talagang pa rin ang parehong noong nakaraang linggo. Sa katunayan, namin talagang lamang nagkaroon ng isang iba't ibang mga puzzle piraso, kung ikaw ay. Sa halip na na purple i-save ang block, namin sa halip ay printf, na kung saan ay ang function na ito sa C na daan sa iyo upang i-print ang isang bagay at format na ito sa screen. ipinakilala namin ang CS50 Library, kung saan mo kung ngayon sa iyong pagtatapon get_char, at get_int, at get_string, at ng ilang mga iba pang mga function bilang well, sa pamamagitan ng na maaari kang makakuha ng input mula sa sariling keyboard ng gumagamit. At ating sinakop ang din ng isang pagtingin sa mga bagay-bagay tulad these- bool, at pansamantalang trabaho, at i-double, float, int, long_long string. At mayroong kahit iba pang mga uri ng data sa C. Sa ibang salita, kapag ipinapahayag mo isang variable sa tindahan ng ilang mga halaga, o kapag ikaw ipatupad ang isang function na nagbabalik ilang mga halaga, maaari mong tukuyin kung ano ang uri ng halaga na ay. Ito ba ay isang string, tulad ng isang pagkakasunod-sunod ng mga character? Ito ba ay isang numero, tulad ng isang integer? Ito ba ay isang lumulutang na tuldok halaga, o ang gusto? Kaya sa C, hindi katulad Scratch, talaga naming nagsimula upang tukuyin kung anong uri ng data kami ay bumabalik o paggamit. Ngunit, siyempre, din namin ang bumangga sa ilang mga pangunahing mga limitasyon ng computing. At sa partikular, wikang ito C, pagpapabalik na kinuha namin ng isang pagtingin sa integer overflow, ang katotohanan na kung mayroon ka lamang ng takda na halaga ng memory o, partikular, ang isang may hangganan bilang ng mga piraso, maaari ka lamang bilangin kaya mataas. At kaya kami ay tumingin sa halimbawang ito dito kung saan ang isang counter sa isang airplane,, actually, kung tumatakbo ang haba ng sapat na apaw at magreresulta sa isang software isang aktwal na pisikal potensyal error. Din namin ay tumingin sa lumulutang punto imprecision, ang katotohanan na may lamang ng isang hangganan bilang ng mga piraso, kung ito ay 32 o 64, maaari ka lamang tukuyin kaya maraming mga numero matapos ang isang decimal point, matapos na kung saan mo simulan upang makakuha ng imprecise. Kaya halimbawa, isang-katlo sa mundo dito, sa aming mundo ng tao, alam namin ay lamang ng isang walang-katapusang bilang ng 3s pagkatapos ng decimal point. Ngunit isang computer ay hindi maaaring kinakailangan kumakatawan sa isang walang-katapusang bilang ng mga numero kung ikaw lamang payagan ito ng ilang takda na halaga ng impormasyon. Kaya hindi lamang ay magbigay ng kasangkapan ka namin may mas higit na kapangyarihan sa mga tuntunin ng kung paano mo maaaring ipahayag ang iyong sarili sa isang keyboard sa mga tuntunin ng programming, din namin limitado ano maaari mong talagang gawin. At sa katunayan, mga bug at mga pagkakamali Maaari lumabas dahil sa mga uri ng mga isyu. At sa katunayan, kabilang sa mga paksa ngayon ay pagpunta sa maging paksa tulad ng pag-debug at talagang naghahanap sa ilalim ng hood sa kung paano mga bagay ay ipinakilala noong nakaraang linggo ay talagang ipinatupad nang sa gayon ay mas mahusay na sa iyo maunawaan ang parehong mga kakayahan ng at ang mga limitasyon ng isang wika tulad ng C. At sa katunayan, kami ay alisan ng balat pabalik ang mga layer sa mga pinakamadaling ng istraktura ng data, isang bagay na tinatawag na isang array, na kung saan Scratch ang mangyayari sa tawag ng isang "listahan." Ito ay isang maliit na bit naiiba sa na konteksto. At pagkatapos ay gagamitin din namin ipakilala ang isa sa mga una sa aming mga problema domain na tukoy sa sa CS50, sa mundo ng cryptography, ang sining ng scrambling o sa ciphering impormasyon upang na maaari mong ipadala lihim na mensahe at decode lihim na mensahe pagitan ng dalawang tao, A at B. Kaya bago kami transition sa bagong sanlibutang iyon, sabihin subukan upang magbigay ng kasangkapan sa iyo ng ilang pamamaraan na kung saan maaari mong alisin o bawasan hindi bababa sa ilang ng frustrations na marahil ikaw ay nakaranas loob ng nakaraang linggo nag-iisa. Sa katunayan, nangunguna sa ikaw ay such-- ilan sa iyong unang problema sa C. At logro ay, kung ikaw ay tulad ng sa akin, sa unang pagkakataon subukan mong i-type ang isang programa, kahit na sa tingin mo logically ang programa ay medyo simple, maaari mong napakahusay pindutin ang isang pader, at ang tagatala ay hindi pagpunta sa tumulong. Magsagawa o Clang ay hindi pagpunta upang aktwal na gawin ang iyong pag-bid. At kung bakit maaaring na maging? Well, sabihin tumagal ng isang pagtingin sa, marahil, ang isang simpleng programa. Ako pagpunta sa sige at i-save ito sa isang file sadyang tinatawag buggy0.c, dahil alam ko ito sa flawed in advance. Ngunit hindi ko maaaring mapagtanto na kung ito ay ang unang o ikalawang o ikatlong programa na talaga ako sa paggawa ng aking sarili. Kaya ako pagpunta sa sige at type out, int pangunahing (walang bisa). At pagkatapos ay sa loob ng aking kulot tirante, isang napaka-pamilyar ( "hello, world-- backslash, n ") - at isang semi-colon. Ko na nai-save ang file. Ngayon ako pagpunta sa pumunta down sa aking terminal na window at i-type make buggy0, dahil, muli, ang pangalan ng file ngayon ay buggy0.c. Kaya ko type gumawa buggy0, ang Enter. At, oh, sus, isipin ang mula sa huling oras na walang mga mensahe ng error ay isang magandang bagay. Kaya walang output ay isang magandang bagay. Ngunit dito mayroon akong malinaw ilang bilang ng mga pagkakamali. Kaya ang unang linya ng output pagkatapos mag-type gumawa buggy0, pagpapabalik, ay medyo masyadong masalita output ni Clang. Sa ilalim ng hood, CS50 IDE ay isinaayos ang paggamit ng isang buong grupo ng mga mga pagpipilian na may compiler na ito nang sa gayon ay hindi mo na kailangang mag-isip tungkol sa mga ito. At na ang lahat na unang linya ang ibig sabihin nito ay nagsisimula sa Clang. Nguni't nang mahayag na, ang mga problema simulan upang gawin ang kanilang hitsura. Buggy0.c on line 3, karakter 5, mayroong isang malaking, pulang error. Ano yan? Kataon lamang deklarasyon ng function library printf may uri int (const magpasinda *, ...) [Werror]. Ibig kong sabihin, ito masyadong mabilis nagiging sobrang arcane. At tiyak, sa unang tingin, hindi namin gagawin inaasahan mong maunawaan ang kabuuan ng mensaheng iyon. At kaya isa sa mga aralin para sa araw na ito ay pagpunta upang maging upang subukan sa paunawa pattern, o mga katulad na bagay na ito, sa mga error na maaaring mayroon ka nakatagpo sa nakaraan. Kaya sabihin manunudyo bukod lamang mga salitang iyon na tumingin pamilyar. Ang malaki, red error ay malinaw sinasagisag ng isang bagay sa pagiging mali. kataon lamang deklarasyon library function printf. Kaya kahit na hindi ko lubos na maunawaan kung ano ang kataon lamang deklarasyon ng function library ibig sabihin nito, ang problema ay tiyak na ay may kinalaman sa printf anumang paraan. At ang pinagmulan ng na isyu Mayroon itong gawin sa deklarasyon ito. Deklarasyon ng function na ay mentioning ito sa unang pagkakataon. At ginamit namin ang mga terminolohiya noong nakaraang linggo ng deklarasyon prototype ng isang function, ang alinman sa isang linya sa itaas ng iyong sariling file o sa isang tinatawag na file header. At sa kung ano ang file ay sinasabi namin noong nakaraang linggo na printf ay quote, magpanipi, ipinahayag? Sa anong file ay ang kanyang prototype? Kaya kung isipin ang mo, ang tunay unang bagay na ako type, halos bawat programa noong time-- at sinasadyang isang sandali ang nakalipas ay nagsimula pag-type myself-- ay ang isang ito here-- hash-- # isama