DAVID J MALAN: Ang lahat karapatan, sa gayon ito ay CS50. At ito ay malinaw na ang isang Biyernes. At ito ay ang katapusan ng linggo ng isa. Kaya maaari mong isipin na iniwanan namin off, huling panahon, na may isang cliffhanger ng masama. Kung saan namin ilantad ang kasinungalingan, na walang kahit na ano ang iyong na-itinuro lumalagong up, 1 hinati sa 10 ay hindi, sa katunayan, 0.1 o 0.100 o 0.10000. Sa katunayan, kung compile namin ito program, tulad ng ginawa namin kahapon, sa, gumawa imprecision, at pagkatapos ay gawin tuldok, slash, imprecision, nalaman namin na ito ay kung ano ang 1 hinati sa 10 ay tunay. Kaya na hindi talaga lubos na ang kaso. Ngunit ito ay pahiwatig sa ilang pangunahing limitasyon ng mga computer. At sa katunayan, sa gitna ng bagay na kami ay pagpunta sa gawin ngayon ay kumuha ng isang pagtingin sa kung bakit ito ay may ang nangyari, kung ano ang mga implikasyon na ito ay, kung paano ang sangkatauhan ay nabigo hawakang mahigpit na ito sa ilang mga napaka malubhang situations-- ang resulta ng kung saan ay lubos na trahedya at expensive-- at din kumuha ng isang pagtingin sa kung paano namin aktwal na maaaring ipagtanggol laban sa mga uri ng mga limitasyon. Kaya intuitively, marahil, kung bakit ay 1 hinati sa 10, ayon sa aking computer dito, hindi lamang ang 1/10, 0.10? Oo. Ano sa tingin mo? Madla MIYEMBRO: ugat ay naiiba? DAVID J MALAN: Ang ano? Oh, ang mga ugat ay iba? Kaya hindi lubos. Ito ay talagang mas pangunahing sa hardware. Iba pang mga saloobin? Oo. Madla MIYEMBRO: Sila kumakatawan numero naiiba? DAVID J MALAN: Kaya they-- Karapatan. Sila ay kumakatawan sa mga numero na naiiba. Hindi tumpak, tila. Kaya na is-- Well, naiiba mula sa kung ano? O mula kanino? Mula sa amin? Madla MIYEMBRO: Oo. Hindi nila gamitin decimal system upang [hindi marinig]. DAVID J MALAN: OK. Kaya sa isang katuturan, hindi sila gamitin ang decimal system. Sa ilalim ng hood, lahat ng bagay ay, sa katunayan, binary, at na ang mga kaugnay na, sa katunayan. Ngunit ito ay mas ng isang mas simpleng paliwanag kaysa. Oo. Madla MIYEMBRO: Sila lamang magkaroon ng maraming mga bits. Sila ay maaari lamang mag-imbak ng hanggang sa isang tiyak na lawak, tulad ng sa mga decimal. DAVID J MALAN: Oo. Ito ay kung ano talaga ang nakakakuha at ito. Lumalabas na mga computer kadalasan, ay palaging lamang gumamit ng isang tiyak na halaga ng impormasyon upang kumatawan ng isang bagay. Right? Pagkatapos ng lahat, kami lamang magkaroon ng isang nakapirming halaga ng puwang sa hard disk. Kami lamang magkaroon ng isang takdang halaga ng RAM, o computer memory. At kung mayroon ka lamang ng isang nakapirming halaga ng isang bagay, tiyak na hindi ka maaaring aktwal na bilang ng hanggang sa kawalang-hanggan o anumang bilang gusto mo. Ikaw, uri ng, kung piliin kung ano ang range ng halaga ang iyong pagpunta sa suporta. At kaya halimbawa, sa isang linggo o dalawang nakalipas, kapag usapan natin ang tungkol ASCII, at usapan natin ang tungkol sa 8 bits, o isang byte, kaya na magsalita, ang pinakamalaking bilang ng dati namin kumakatawan na may 8 bits ay kung ano? 255. At maaari naming kumakatawan 256 kabuuang mga halaga ngunit hindi kung gastusin namin ang isa sa kanila on 0-- Well, ngunit kung tayo gumastos ng isa sa mga ito sa 0, pagkatapos ay ang pinakamalaking bilang ay, of course, 255. Kaya ito ay lumiliko out, na ito ay kaso masyadong, sa ganitong konteksto. Sinimulan namin ang pakikipag-usap, huling oras, tungkol sa mga lumulutang-point numero, na kung saan ay naiiba mula sa integer, sa na sila ng isang decimal point at, sana, ang ilang mga numero matapos na, ngunit masyadong sila. Ang isang computer ay karaniwang lamang ang pagpunta gamitin 32 bits, marahil 64 bits upang kumatawan sa isang lumulutang na halaga ng point. Kaya kahit na kami ay lumago up pag-aaral ng matematika at pag-alam na maaari mong ganap na walang may isang walang-katapusang bilang ng mga numero pagkatapos ng decimal point, hindi kung ikaw ay may hangganan memory. Ikaw, uri ng, kung isalin, o piliin kung aling mga numero ikaw ay pagpunta sa kumakatawan. At upang maaari mong isipin, sa isang kahulugan, ito ay ang computer na pinakamalapit pagtatantya sa halaga 1/10 na maaari itong makuha, may 32 lang o kaya bits. At ito ay hindi 1/10 lamang. Halimbawa, kung binago ko ito sa 1/3, na sa palagay namin ay kahit na mas simple. Kaya 1 hinati sa 3. Hayaan akong i-save ang file. Hayaan akong sige at mag-recompile ito. At hayaan mo akong muling patakbuhin ito. Dito rin, tila, 1/3 ay hindi 0.3 at pagkatapos ay isang walang-katapusang bilang ng mga 3 ni pagkatapos noon. Mayroon kang ito imprecision sa dulo. Kaya namin ang mga tao ay tama, at kung ano ang ang iyong natutunan ay, sa katunayan, tama, ngunit na dakdak namin up laban sa ilang mga limitasyon. At kung ano ang naisip ko Gusto naming gawin ngayon, ay magsisimulang sa pamamagitan ng pagtingin, lantaran, ang trahedya kahihinatnan ng mga ito kung minsan, kapag ang sangkatauhan Mukhang hindi ito ipatupad para sa mga ito sa katotohanan at ang mga limitasyon. At kami na makita ang isang serye ng vignettes mula sa kasaysayan ng channel na tumatagal ng isang pagtingin sa kung paano mga bagay ay wala na mali. Ito ay tungkol sa 8 minuto ang haba, at kami ay bumalik pagkatapos nito at tingnan ang eksaktong kung ano pa ang maaaring magkamali. Kung maaari naming madilim ang lights-- [Playback ng video] -Computers, Lahat tayo ay nakakita na tanggapin ang madalas na nakakabigo problema na pumunta sa kanila. Mga bug, mga virus, at software glitches ay maliit na mga presyo magbayad para sa kaginhawaan. Ngunit sa high-tech at high-speed militar at space program application, ang pinakamaliit na problema na maaari maging Pinalaking sa kalamidad. Sa Hunyo 4, 1996, na inihanda siyentipiko na maglunsad ng isang pinuno ang mga tauhan Ariane 5 rocket. Ito ay nagdadala ng agham satellite dinisenyo upang magtatag ng mga tiyak na kung paano ang Magnetic field nakikipag-ugnayan Earth may solar wind. Rocket ay ginawa para sa European Space Agency at itinaas off mula sa kanyang pasilidad sa baybayin ng French Guiana. -At Sa mga 30 segundo sa ang flight, sila muna Napansin ng isang bagay ay pagpunta mali. Na ang nozzles ay swiveling sa isang paraan na sila ay talagang hindi dapat. Around 40 segundo sa flight, malinaw na ang sasakyan ay may problema, at na kapag ginawa nila ang desisyon upang wasakin ito. A Range Safety Officer sa napakalaking tapang pinindot ang button, hinipan up ang rocket bago ito ay maaaring maging isang panganib sa kaligtasan ng publiko. -Ang Ay ang maiden paglalayag ng Ariane 5, at kinuha nito pagkawasak ilagay dahil sa isang lamat naka-embed sa mga software sa rocket ni. -Ang Problema sa Ariane ay na may ay isang numero na kinakailangan 64 bits upang ipahayag, at nais niyang mag-convert ito sa isang 16 bit na numero. Sila ipinapalagay na ang bilang ay hindi kailanman magiging masyadong malaki, na ang karamihan ng mga numero sa ang 64 bit na numero ay 0 ni. Sila ay mali. -Ang Kawalan ng kakayahan ng isang software program upang tanggapin ang mga uri ng bilang na nabuo sa pamamagitan ng isa pa ay sa ugat ng mga kabiguan. Software pag-unlad ay naging isang masyadong magastos bahagi ng mga bagong teknolohiya. Ang Ariane 4 rocket ay napaka matagumpay, kaya magkano ng software nilikha para sa mga ito ay din ng ginagamit sa Ariane 5. -Ang Pangunahing problema ay na ang Ariane 5 ay mas mabilis, mas pinabilis na mas mabilis. At ang mga software ay hindi alang para sa na. -Ang Pagkawasak ng rocket ay isang malaking pinansiyal na kalamidad, lahat dahil sa isang error minutong software. Ngunit hindi ito ang unang time problema sa data ng conversion nagkaroon plagued modernong teknolohiya rocket. -Sa 1991, sa simula ng Unang Gulf War, Patriot missile nakaranas ng isang katulad na uri ng numero ng problema sa conversion. Bilang isang resulta, 28 tao, 28 mga sundalong Amerikano ay namatay at tungkol sa 100 iba pa ang nasugatan, kapag ang Patriot, kung saan ay dapat upang maprotektahan laban sa mga papasok na scuds, Nabigo sa sunog isang misayl. -Kapag Iraq invaded Kuwait at Amerika inilunsad Desert Storm sa unang bahagi ng 1991, Patriot misayl baterya ay deploy upang protektahan ang Saudi Arabia at Israel mula sa Iraqi atake malaking ulan misayl. Ang Patriot ay isang US, medium-range ibabaw-to-air system panindang ng kumpanya Raytheon. -Ang Laki ng Patriot interceptor, mismo, ay tungkol sa, humigit-kumulang 20 talampakan ang haba. At ito weighs tungkol sa 2000 pounds. At ito ay nagdadala ng isang warhed ng about-- Sa tingin ko ito ay halos 150 pounds. At ang warhed, mismo, ay isang mataas na paputok, kung saan ay may fragment sa paligid nito. Ang casing ng warhed ay dinisenyo upang kumilos tulad buckshot. -Ang Missiles ay natupad, 4 per container, at transported sa pamamagitan ng isang semi-trailer. -Ang Patriot anti misayl sistema napupunta likod ng hindi bababa sa 20 taon na ngayon. Ito ay orihinal na idinisenyo bilang isang air pagtatanggol misayl mag-shoot down kaaway eroplano. Sa Unang Gulf War, kapag digmaan na dumating kasama, ang Army nais na gamitin ito upang shoot down scuds, hindi eroplano. Ang Iraqi Force ay hindi kaya marami ng isang problema, ngunit ang Army ay nag-aalala tungkol sa scuds. At kaya sinubukan nilang i-upgrade ang Patriot. -Intercepting Isang kaaway misayl na naglalakbay sa Mach limang ay magiging sapat na hamon. Ngunit kapag ang mga taong makabayan ay rushed sa serbisyo, ang Army ay hindi alam ng isang Iraqi pagbabago na ginawa kanilang scuds halos imposible upang maabot. Ano-ang nangyari, ay ang scuds na ay darating sa, ay hindi matatag, sila ay wobbling. Ang dahilan sa ito, ay ang Iraqis, upang upang makakuha ng 600 kilometro sa labas ng isang 300 kilometro hanay ng misayl, Kinuha timbang sa labas ng front warhed at ginawa lighter ang warhed. Kaya ngayon, ang mga taong makabayan ni sinusubukang magkaroon sa malaking ulan, at ang karamihan ng oras, ang napakalaki karamihan ng mga panahon, ito ay lumipad sa pamamagitan lamang ng malaking ulan. -Kapag Ang sistema operator Patriot natanto nasagot ang Patriot target nito, sila mina warhed ang Patriot ni, upang maiwasan ang mga posibleng casualties kung ito ay pinahihintulutan na mahulog sa lupa. -Na Kung ano ang nakita karamihan ng mga tao, mga malaking fireballs sa kalangitan, at gusot bilang intercepts ng malaking ulan warheads. Kahit na sa gabi kalangitan, lumitaw Patriots Matagumpay na pagsira scuds, sa Dhahran, doon ay maaaring walang pagkakamali tungkol sa pagganap nito. Doon, radar system ang Patriot ni nawala ang pagsubaybay ng isang papasok na malaking ulan, at hindi kailanman inilunsad, dahil sa isang software depekto. Ito ay ang Israelis na unang natuklasan na ang mga na ang sistema ay sa, ang mas higit na pagkakaiba ng oras naging, dahil sa isang orasan na naka-embed sa computer ng system. -About 2 linggo bago trahedya sa Dhahran, ang Israelis iniulat sa ang Defense Department, na ang sistema ay mawala ang oras, na matapos ang tungkol sa 8 oras ng tumatakbo, sila napansin na ang sistema ay nagiging kapansin-pansing mas tumpak. Ang Defense Department tumugon sa pamamagitan ng na nagsasabi sa lahat ng mga baterya Patriot na hindi iwan ang system sa para sa isang mahabang panahon. Hindi kailanman sila sinabi kung ano ng mahabang panahon ay. 8 oras? 10 oras? 1000 na oras? Walang alam. -Ang Baterya Patriot puwesto sa kuwartel sa Dhahran, at ang mga flawed panloob orasan, ay sa higit sa 100 oras sa gabi ng Pebrero 25. Nag sinusubaybayan oras sa isang kawastuhan ng tungkol sa 1/10 ng isang segundo. Ngayon 1/10 ng isang segundo ay isang nakawiwiling number dahil hindi ito maaaring maging ipinahayag sa binary, eksakto. Anong ibig sabihin nito, hindi na ito ipinahayag, eksakto, sa anumang modernong digital computer. Ito ay mahirap na paniwalaan, ngunit gamitin ito bilang isang halimbawa. Magpahinga ang numero, 1/3. 1/3 ay hindi maaaring ipinahayag sa decimal, eksakto. 1/3 ay 0.333 pagpunta sa para sa infinity. Walang paraan upang gawin iyon, na may ganap na kawastuhan, sa decimal. Iyon ang eksaktong parehong uri ng problema na nangyari sa mga taong makabayan. Bumangga Ang na sistema, ang mga mas masahol pa ang naging error oras. -After 100 oras ng pagpapatakbo, ang error in time ay lamang tungkol sa 1/3 ng isang segundo. Ngunit sa mga tuntunin ng pag-target ng isang misayl na naglalakbay sa Mach 5, ito ay nagdulot ng isang tracking error ng higit sa 600 metro. Gusto ito ay isang malalang error para sa mga sundalo sa Dhahran. Ano-ang nangyari, ay isang malaking ulan launch ay nakita ng maagang-babala satellite, at sila ay bagong na ang malaking ulan ay pagdating sa kanilang pangkalahatang direksyon. Hindi nila alam kung saan ito ay darating. Nag ay ngayon hanggang sa mga radar bahagi ng Patriot system, pagtatanggol Dhahran, upang hanapin at panatilihin subaybayan ng mga papasok na misayl kaaway. -Ang Radar ay napaka-smart. Gusto talaga itong subaybayan ang posisyon ng malaking ulan at pagkatapos ay hulaan kung saan marahil ito ay magiging, sa susunod na panahon, ang mga ipinadala radar ng pulso out. Iyon ay tinawag na hanay gate. -Then, Sa sandaling ang Patriot nagpapasya ng sapat na panahon ay lumipas na bumalik at suriin ang susunod na lokasyon para sa Nakita bagay, nito ay babalik. Kaya kapag ito ay bumalik sa mga maling lugar, nakikita pagkatapos ito hindi bagay at ito ay nagpasiya na walang bagay, ito ay isang maling detection, at bumaba ang mga track. Ang mga papasok na tumakbo Naglaho mula sa screen ng radar, at segundo mamaya, ito slammed sa kuta. Ang malaking ulan pumatay 28 at ang huling isa fired sa panahon ng Unang Digmaang Gulf. Nakalulungkot, ang mga update ng software Dumating ito sa Dhahran sa susunod na araw. Ang software depekto ay naging maayos, pagsasara isang kabanata sa gusot kasaysayan ng mga Patriot missile. [END playback] DAVID J MALAN: Kaya kami ay kumuha ng isang pagtingin sa ilang mga katulad na mga limitasyon sa ilang saglit lamang. Ngunit una, sabihin paglipat sa loob ng ilang Para sa Iyong Impormasyon kung. Kaya one-- ito katapusan ng linggo, may ay magiging sobrang seksyon, na kung saan ay sinadya upang palitan regular na naka-iskedyul na mga seksyon, na kung saan ay magsisimula up sa isang linggo mula ngayon. Tingnan ang website ng CS50 para sa karagdagang impormasyon sa mga iyon. Sila rin ay kinukunan at stream mabuhay para sa mga hindi na dumalo. Itakda Problema 1 ay sa website kurso na, at kami ay kumuha ng tumingin sa na sa loob lamang ng isang maliit na bit. At oras ng opisina masyadong, ay magdadala ang lugar na ito mula Lunes hanggang Huwebes. Kaya ito ay ang pinaka-canonical program itinuturing namin ang huling oras. Ito ay tulad ng ang pinakasimpleng program na maaari mong isulat sa C, at kahit na ang isang piraso ng isang naka-bold claim. Right? Dahil mayroong isang pulutong ng mga tila kumplikado na ito. Kaya sabihin kumuha ng isang mabilis na pagtingin sa ano ang ilan sa mga sangkap na ito ay at pagkatapos ay subukan na magbigay ng isang modelo ng kaisipan para sa kung paano mga pinakasimpleng ng mga programa trabaho, at pagkatapos ay gagamitin namin simulan pagtingin sa mga bagay kailanman mas kumplikadong. Kaya ito linya dito, naka-highlight na ngayon, sa dilaw, ano ang sinabi namin, huling oras, na ang nagagawa nito para sa atin? Ano ang layunin na ito ay nagsisilbi? Sinuman mula sa malayo sa likod? Oo. Madla MIYEMBRO: [hindi marinig] DAVID J MALAN: Magandang. Kaya ito ay nagbibigay sa iyo ng access sa mga utos, o sabihin mga function na tawag sa kanila, na ang isang tao mga isinulat, na ipinahayag, wika nga, sa ilang mga iba pang mga file. Kaya makikita namin makita kung ano ang isang h file ay laban sa isang C file, sa kalaunan. Ngunit sa ngayon, malaman lamang na printf, halimbawa, ay kabilang ang mga function na ay ipinahayag sa ilang iba pang mga file, sa isang lugar pa sa hard drive ng ulap na ay nagbibigay-daan sa amin upang ma-access ang printf at gamitin ito nang hindi mag-reinvent na gulong ating sarili. Samantala, main. Ano ang analog ng main, noong nakaraang linggo? Oo. Madla MIYEMBRO: Green bandila ay nag-click. DAVID J MALAN: Oo. Scratch, kapag nag-click green flag. Ito ay tulad ng mga piraso ng puzzle na kicks bagay off. At kaya katulad, ginawa ang mundo nagpasya ang ilang mga taon na nakalipas na sa C, at isang bungkos ng iba pang mga wika, kung nais mong magsulat ng isang programa, ang iyong unang pag-andar Matagal na tinatawag, main. At ito ay upang maging ganito ang hitsura. Ngunit kami ay bumalik, sa ibang panahon, sa kung ano ang, int, at, walang bisa, ang ibig sabihin sa konteksto. Sa ngayon, ang curly braces mga uri ng tulad ng hugis piraso ng puzzle scratch na pinapalooban ang ilang bilang ng mga linya. At kabilang sa mga linya dito, ang isang ito dito. printf ay isang function na ang layunin sa buhay ay upang i-print ng isang format na string. At sa pamamagitan ng na-format, ibig sabihin ko sa iyo maaaring plug sa mga halaga ng placeholder, at maaari mong tukuyin kung gaano karaming decimal points, kung gaano karaming mga numero upang i-print pagkatapos ng decimal point at ang gusto. At printf, siyempre, ay tumatagal ng isa o higit pang mga argumento o mga parameter, sa kabilang banda na kilala, mas lamang, tulad ng input. Kaya printf, tulad ng maraming pag-andar, tumatagal ng input. At yaong mga input ay niyakap sa pamamagitan ng dalawang mga panaklong dito. At sa loob ng mga ito ay isa sa input. Ito ay isang string, bilang namin na tinatawag na ito, na kung saan ay isang pagkakasunod-sunod lamang ng mga character, tulad ng isang salita, o ng isang parirala, o ng isang buong sanaysay kahit na, sa pagitan ng double quotes. At na kung ano ang nangyayari sa impluwensiya ng pag-uugali ng printf dahil, siyempre, ito ay isang pangkaraniwang function print lamang. Ito ay hindi pagpunta upang malaman kung ano mag-print, maliban kung sabihin mo ito. At pagkatapos, ang ilang mga detalye. Ano ang sinabi namin ito kakaiba pagkakasunod-sunod ng mga simbolo ay? Oo. Madla MIYEMBRO: New linya. DAVID J MALAN: New linya. Kaya ito ay lumiliko out, hindi mo pwedeng pindutin ang, ipasok, kapag sumusulat ka sa programa. Sa pangkalahatan, ang tagatala ay pagpunta upang makakuha ng isang maliit na nalilito bilang sa kung ano ang ibig sabihin. Sa halip, kailangan mong literal sabihin, bigyan ako ng isang bagong linya dito. At kaya / n ay kung ano ang namin sa pangkalahatan tumawag sa isang escape character. Kaya n, para sa mga bagong linya. At alam ang compiler na kapag ito ay nakikita / n, ito ay dapat talagang magbuod ang computer, sa huli, o printf, sa kasong ito, upang i-print out ang isang aktwal na bagong linya, tulad ng pagpindot sa pindutang, ipasok, key sa iyong keyboard. At sa wakas, kung ano ang ginawa namin sabihin ito piraso ng syntax ay para sa? Ano ang ginagawa ng ito ay kumakatawan? Oo. Madla MIYEMBRO: [hindi marinig] DAVID J MALAN: Ito ay lamang sa dulo ng linya. Ito ay ang katapusan ng pahayag. At napagtanto na namin na hindi namin ilagay ang mga ito sa lahat ng dako. Kami ay tiyak na hindi ilagay ang mga ito sa dulo ng bawat linya. Halimbawa, mayroong wala sa unang linya, mayroong wala sa linya sa, main, may none pagkatapos ng curly braces, ngunit ikaw ay magsisimulang upang makita at makakuha ng pamilyar sa kung saan ito ay tinatawag na para sa. At ito ay halos palaging pagkatapos ng isang function tumawag o isang pahayag, ang ilang mga aksyon na ang tunay na ikaw ay pagkuha. At alam na ngayon, lalo na kung bukod sa mga mas kumportable, ito ay ang mga uri ng tangang bagay na makakapunta ka sinasadyang banging ang iyong ulo laban sa pader sa ibabaw. Dahil makikita mo ang lohikal tiwala sa ilang mga problema mo na lutasin para sa isang problema set, at ang sumpain bagay lamang hindi sumulat ng libro o kahit tumakbo. At kaya madalas, sa maagang bahagi, ito ay pagpunta sa maaaring dahil hindi nakuha ng isang panaklong, o ikaw ay hindi nakuha ng isang tuldok-kuwit. At kaya alintanahin lamang ng ganitong uri ng mga bagay-bagay, at subukan hindi upang makakuha ng bigo sa pamamagitan ng ang mga ito dahil masyadong mabilis gumagawa nito maging lumang sumbrero. Ngunit ito ay mas madali upang makakuha ng bigo sa maagang bahagi, bilang isang resulta. Kaya ngayon, sabihin kumuha ng isang pagtingin sa kung paano ang linyang ito ay aktwal na nagtatrabaho at pagkatapos ay tumingin sa isang bahagyang mas kumplikado isa. Kaya kami ay may higit sa dito, ang mga kakayahan upang gumuhit sa screen na ito. At sabihin ipagpalagay na ipaalam ito ay ang aking computer screen, ngunit ako ay sumusulat ang, hello program, at hindi ko pa ipinatupad, printf. May ibang tao ay ipinatupad, printf. Sino ang gusto upang i-claim sa Nagpatupad, printf? Kung maaari naming? Sige, ano ang pangalan mo? MAG-AARAL 1: [? Copal. ?] DAVID J MALAN: Copal, dumating sa up. Lumapit sa up. Ayos lang. Kaya kami, dito, ang ilang mga name tag, dahil kami ay gumawa ng isang maliit na laro ng mga ito. At kami ay tumawag sa iyo, printf. At kung nais mong dumating sa paglipas dito, kung ano lamang ko na inilabas sa screen, ito ay lubos na lamang, may akin, na ito. Lahat ng karapatan, kaya, hello ang aking pangalan ay, printf, kung gusto mo na ilagay na sa. Ayos lang. At kung maaari kang pumunta stand sa pamamagitan ng mga computer screen parang ikaw ang pag-andar na dumating na may ganitong sistema ng computer. At ang iyong mga layunin sa buhay ay upang aktwal na i-print ang isang bagay. Ngunit marami na tulad ng program namin nagkaroon lamang sa screen, dito, kami ay pagpunta sa may sa tunay na magbibigay sa iyo ng ilang mga input. At kaya, kung ang aking input, dito, ay tila, kung ano ang lumipas sa printf, ni uri ng mock up ito tulad nito ipaalam. Pupunta ako sa literal na magsulat sa isang piraso ng papel, "hello, world," backslash N. At upang maging malinaw, kung ano Lamang ko na inilabas sa ito piraso ng papel, ganito ang hitsura nito. Kaya kapag nagpatakbo ako ng programang ito, at ito dilaw na linya ng code ay naisakatuparan, ito ay parang ako, ang programa hello, am handing ilang input off sa isang function na may ibang tao sinulat ni. At kung ikaw, sa iyong mga daliri, dati talaga, gamit ang iyong daliri, gumuhit sa screen ano pa man ito ay ikaw ay nai-kamay, ang epekto, sa huli, ay upang makita ang eksakto na, sa screen. At isang Little corner kaso dito. At mabuti, hindi tayo dapat makita ang, ang mga bagong linya, sa puntong ito. Gusto Ito ay hindi tama para sa iyo upang tahasang gumuhit ng newline. Ngunit kung itinatago namin ang pagsusulat ng mga salita sa screen, sila end up sa ibaba na. Kaya mo salamat talaga, ngunit stick sa paligid dito para sa sandali lang. Kailangan namin ngayon ng isa sa iba pang mga volunteer, kung magagawa namin, na ang pagpunta sa kailangan upang i-play ang papel na ginagampanan of-- Ito ay lamang ng mga tao sa orchestra ngayon. Paano about-- OK. Right dito. Lumapit sa up. Ano ang inyong pangalan? ESTUDYANTE 2: [? Ivay. ?] DAVID J MALAN: Paumanhin? ESTUDYANTE 2: [? Ivay. ?] DAVID J MALAN: Ethan, dumating sa up. Hindi? Tama ba ako na mali, kahit na pagkatapos mong sinabi ito ng dalawang beses? Lumapit sa up. Ito ay mabuti upang marinig up dito. OK. At Sorry, ano ang pangalan mo? ESTUDYANTE 2: [? Ivay. ?] [? DAVID J MALAN: Ivay. ?] OK. Para sa ngayon, kung hindi mo gusto isip, ikaw ay GetString. ESTUDYANTE 2: OK. Cool. DAVID J MALAN: Kaya kung nais mong tumayo dito para sa isang sandali lamang, sabihin kumuha ng isang pagtingin sa isang bahagyang mas kumplikadong programa, na na ngayon ay may tatlong linya ng code. Kaya kami, isa, estado ang iyong pangalan gamit printf; dalawang, ang tawag sa GetString, sinusundan ng isang pagtatalaga sa isang variable na tinatawag, string s, o tinatawag na s; at pagkatapos ay isa pang tawag sa, printf, ngunit oras na ito na may dalawang input. Kaya nagagawa namin ang estado ang iyong pangalan, o sa halip, na namin nagagawa ng printf tawag. Kaya ako pagpunta sa magsulat, ng estado ang iyong pangalan. At kaya, kung ano ako ng pagpunta sa pumasa, printf, sa sandali lamang, ay lubos na lamang, na ito. Kaya kung nais mong magpatuloy at gumuhit ito sa screen, na ang iyong input ngayon. Ayos lang. At kalimutan string, kami ngayon aming sariling linya ng code dito. Kaya in, GetString, kailangan namin sa tunay na tawag, GetString. Kaya ang iyong mga layunin sa buhay ay upang maglakad lamang out sa orchestra, kung maaari mong, at makakuha ng pangalan ng isang tao. Ngunit bigyan ni mong hayaan isang bagay upang ilagay ito sa. Kung nais mong, pumunta magpatuloy at makakuha ng isang string, makakuha ng pangalan ng isang tao sa na piraso ng papel, kung kaya mo. Ayos lang. At kami na makita, sa sandali lamang, na ang pangalan namin nakukuha. Samantala, kung ano ako ng pagpunta sa Mayroon handa na, ay isang blangkong piraso ng papel, kung saan, pupuntahan ko sa tindahan ng kahit anong halaga na ito ay na GetString ay bumabalik sa akin, Ako, na isang string variable na tinatawag, s. Ayos lang. Kaya ano ang gagawin mo dito? Nik. Ayos lang. Kaya kami ay may pangalan Nik dito. Kaya ito ay kung ano ang literal ay nagbalik sa akin, sa gayon na magsalita, sa pamamagitan ng GetString. Ko, ngayon, sa pagpunta sa execute kaliwang gilid ng na expression, kung saan ako lang kopyahin down, para sa mga layunin sa ngayon, Nik. Kaya ngayon, mayroon akong isang variable tinatawag, s, pagtatago name Nik. Naka ko na ipinasa sa printf, isang nakaraang argument. Ngunit sa aming ikatlong at huling linya ng code, tunay na ako ay may sa kamay printf isang bagay na medyo different-- "hello,% s," backslash n. At kaya ang huling linya pupuntahan ko upang send-- ang huling bagay na ako pagpunta sa isulat ngayon, ay ito. Kaya ang dalawang linya ng code, o sa halip ang huling linya ng code, tawag para sa dalawang inputs-- isa, na ito, at ang dalawa, na ito. Kaya kung ang aming printf function Maaari na ngayong kumuha ng mga ito bilang input, hayaan mo akong i-clear ang screen para sa iyo. Talagang hindi, maaari mong sige. Kami ay umalis ito up, dahil ito ay sa parehong programa. Dapat nating makita, hello, Nik. Ayos lang. Kaya ito ay lubos ng ilang mga hoops na tumalon sa pamamagitan ng, lamang na isulat, estado ang iyong pangalan, at, hello, Nik. Ngunit ito simpleng ideya ng pagpasa ng mensahe, ng input pagpasa at output pagtanggap, ay ang eksaktong modelo namin ay pagpunta sa may para sa kahit na ang pinaka-kumplikadong pag-andar. Kaya salamat sa iyo kaya marami sa mga kapwa mo. Kami ay may isang kaibig-ibig na stress ball dito para sa iyo. At salamat sa iyo sa aming GetString at printf volunteers kapwa. Salamat sa inyo. Ayos lang. Salamat sa kapwa mo. Kaya ang pakikipag-usap namin tungkol sa kaya sa ngayon, halos lahat tungkol sa mga string. At ito ay lumiliko out na ang C ay maaaring aktwal na maunawaan ang ilang iba't ibang mga uri ng data. Sa katunayan, sabihin isang tumingin sa mga ito dito. Kaya C, at ng maraming mga wika, maunawaan ang mga bagay na tinatawag na karakter. Ang isang pansamantalang trabaho ay karaniwang isang solong byte, o walong bits. At ito ay kumakatawan sa isang solong character, tulad ng titik A, o ang capital sulat A, o ang lowercase na titik A, o ng isang tandang padamdam, o anumang mga character na maaari mong i-type sa iyong keyboard, at kung minsan kahit na higit pa. Mangyayari din kaming makita sa kamay. Ang isang float ay, sa pangkalahatan, ang isang 32-bit na halaga, o apat na bytes dahil muli, isang byte ay walong bits. Kaya ang isang float ay isang lumulutang na halaga ng point, isang bagay na may isang decimal point. At sa katunayan, iyon ang ang pelikula ay pakikipag-usap tungkol sa kapag nagsalita sila tungkol sa mga lumulutang mga halaga ng point, ang ilang mga takdang bilang ng bits ginagamit upang kumatawan sa isang tunay na numero. Ngunit may mga bagay na tinatawag na doble din. Ang mga umiiral sa Java, kung kinunan APCS, at isang double, tulad ng pangalan thankfully nagmumungkahi, ay dalawang beses bilang malaking bilang isang float. Ito ay isang tunay na numero pa rin, ito lamang ay may higit pang mga piraso na kung saan upang maging kailanman mas tiyak, o sa tindahan ng kahit na mas malaking mga numero. int ay madali. Usapan natin ang tungkol na noong nakaraang panahon. Ito lamang ay isang integer. At ito ay karaniwang 32 bits, o apat na bytes. At kaya, kung mayroon kang, tingnan natin ngayon, 32 bits-- at ginawa namin ito sa linggo 0, napaka briefly-- kung mayroon kang 32 bits, ano ang pinakamalaking ang numero na maaari mong kumatawan bilang isang integer? Magbigay o kumuha? Ito ay tulad ng 4 na bilyon, at na lamang kung kami ay na kumakatawan sa mga positibong numero lamang. Kung mayroon kang 32 bit, at nais mong kumakatawan negatibong numero pati na rin, iyong saklaw ay, mahalagang, negatibo 2 bilyong sa positibong 2 bilyong. Ngunit sa pangkalahatan, kami ay magsisimula sa 0 pumunta ng hanggang sa 4 na bilyon. Hindi mo na kailangang malaman ang tiyak na, ngunit maaari naming makita na ito, sa katunayan, kung ako lang magbukas ng isang maliit na calculator, dito. Ang maaari kong gawin 2 sa 32, at na eksakto kung paano malaki, kung gaano karaming mga halaga na maaari mong kumakatawan, na may 32 bits. At ito ay humigit-kumulang 4 na bilyon. Kaya makikita namin panatilihin ang nakakakita ng numero na sa loob ng ilang iba't-ibang mga lugar. Ngunit kung kailangan mo na numero sa na, ito ay lumiliko out doon ni bagay na tinatawag na isang matagal na matagal. At ng mahabang mahaba ay pangkalahatan ay 64 bits, na nangangahulugan na ito ay isang order ng magnitude kahit na mas malaki kaysa sa isang int. Kaya kahit na hindi ko maaaring bumigkas ang pinakamalaking number na maaari mong kumatawan, ngunit ito ay kitang-kita na mas malaki. Ngayon bilang isang bukod, kasaysayan, kung ang isang int ay 32 bits, at isang mahabang mahabang ay 64 bits, kung paano big ay isang mahaba, hindi isang matagal na matagal na? Gusto mo tingin ito ay mas mahaba kaysa sa isang int pero siguro mas kaunti ang haba kaysa sa isang matagal na matagal na, ngunit ito ay talagang depende. At kaya ito ay lumiliko out sa isa ng masyadong ang kabiguan, sa pagsulat ng code sa ilang mga sistema, ay na hindi lahat ng mga uri ng data may pre-natukoy na mga halaga. Minsan ito ay ang mga bits. Minsan ito ay na ang maraming mga bits. Kaya ang tunay na may malaman, minsan, kung ano ang hardware ikaw ay nagpapatakbo ng iyong software sa. Sa kabutihang palad, ang iba pang mga wika at iba pang mga uri na ngayon umiiral na data, magpapahintulot sa inyo na maging mas tiyak. Well, nakita namin ang string, at nakita namin bool, masyadong, ngunit ito ay lumiliko out sa mga darating lamang sa pamamagitan ng CS50 library. Kaya ang mga ito ay hindi na binuo sa C. Ang mga halip, dumating sa na file na tinatawag na CS50.h, na bibigyan namin ng huli alisan ng balat pabalik ang mga layer ng. Ngunit sa ngayon, hindi lang nila karagdagang mga uri ng data. Ang isang bool ay isang true o false, at isang string ay isang pagkakasunod-sunod ng mga character, tulad ng isang salita. Ngayon printf, nasaksihan namin, ay may placeholder,% s ay isa. At maaari mong ma, sa ngayon, magpakilala mula sa mga iba pang halimbawa, kung paano maaari kang magkaroon ng isang placeholder para sa iba't ibang mga uri ng data. Halimbawa, kumuha ng hulaan, kung ikaw nais na i-print ang isang solong char gamit printf, ang placeholder ay marahil% c. At kung gusto mong i-print out ang isang integer may mga placeholder,% i. % lld ay isang matagal na matagal na halaga ng decimal, ngunit matagal na matagal na, kaya na ang mga mapa na iyon. At pagkatapos ay% f para sa mga lumulutang na halaga ng point o para sa isang double, kaya kung minsan ang mga ito ay muling ginamit sa iba't ibang konteksto. Kaya makikita namin makita at gamitin ang ilan sa mga paglipas ng panahon. At printf at iba pang mga pag-andar rin escape sequence suporta ng iba, at kung minsan, ang mga ito ay kinakailangan. Kaya backslash n ay isang bagong linya. Backslash t, ay kahit sino nais na kumuha ng isang ulos? Madla MIYEMBRO: Tab. DAVID J MALAN: Tab. Kaya kung talagang nais upang i-print out ang isang tab, hindi isang takdang bilang ng mga puwang ngunit isang aktwal na tab ng character, hindi mo maabot ang iyong, tab, key sa keyboard, sa pangkalahatan, mo talagang gawin backslash t. Backslash double quote, kung bakit ako ay kailanman nais na? Right? Bakit hindi na lang nagta-type ako ng isang double quote sa aking keyboard? Madla MIYEMBRO: Dahil, kung hindi man, ito ay pagpunta sa tingin ito ay ang end ng nais ang iyong mga print [? text. ?] DAVID J MALAN: Eksakto. Tandaan, sa aming printf halimbawa, kapag kami ay pagpasa sa printf sa input, sa kaliwa ng na input string at sa kanan ng input na spring, siyempre, ay isang double quote. Kung ang iyong sariling mga input ay may isang double quote sa gitna ng mga iyon, ang computer baka potensyal makakuha ng nalilito, tulad ng sa, Ginagawa ito sa double quote nabibilang sa gitna? Ito ay hindi nabibilang sa kaliwa ng isa? Ito ay hindi nabibilang sa mga karapatan ng isa? At kaya, kung nais mong upang gawin itong super malinaw, gawin mo backslash double quote, upang ito ay nakatakas, kaya na magsalita, at hindi ito conflated para sa ibang bagay. At may ilan pa dito, backslash r, single quotes, 0, upang aming makita sa paglipas ng panahon, pati na rin. At ngayon, kung ano ang tungkol sa mga function? Kaya mga aksyon na maaari naming gawin sa gayon ay malayo sa wikang ito, C, well, nasaksihan namin, printf, siyempre, at ang lahat ng iba sa screen, dito, na gagamitin namin para sa unang ilang linggo kurso ni lamang, darating kapag ang CS50 library. At sila ay gumawa ito lubhang mas madaling, sa C, sa aktwal na makakuha ng input ng user. Ito ay lumiliko out na sa C, at lantaran sa loob ng ilang mga wika, ito ay isang tunay na sakit sa ulo ang gagawin isang bagay na simple, tulad ng prompt ang user para sa keyboard, para sa kanilang mga input. At kaya gawing mas madali ang mga function. At mayroon din itong error pagsuri sa buong, nang sa gayon, kapag kayo pagpapabalik sa Miyerkules, kami ay Nakita ang, muling subukan, babala, kapag hindi ko tumulong, at nag-type ako ng isang salita, sa halip ng isang numero? Tapos na namin ang mga mabibigat na nakakataas maaga sa upang tiyakin nakikipagtulungan user. Ngunit ang mga ito ay training lang gulong na kami sa huli, at mabilis, mag-alis. Kaya sa paglalagom, pagkatapos, tumagal ng isang mabilis na pagtingin ipaalam, marami tulad ng ginawa namin sa simula, at ilang canonical constructs sa C. Ito ay sinadya upang, uri ng, maging isang ipoipo tour, kaya lang na ikaw ay may isang reference at na nakita mo bagay sa simula. Ngunit pagkatapos ay titingnan namin aktwal na coding gamitin ang ilan sa mga bloke ng gusali. Kaya marami tulad ng sa simula, kapag kami ay nais na mga pahayag, sabihin o, maghintay, sa C, mayroon kaming mga function pati na rin, tulad ng printf. Kung nais naming ipahayag ang isang kondisyon sa C, ito ay katulad na, sa espiritu, sa na piraso ng palaisipan na mukhang ito sa scratch. Ngunit sa halip, kami ay literal magsulat lamang, kung. At pagkatapos, sa mga panaklong, ilalagay namin ang isang kondisyon, kung saan ang kondisyon na ito ay kung ano ang makikita namin tumawag, muli, isang boolean expression. At muli, ito ay isang uri ng pseudocode. At, sa katunayan, ang // ay isang puna. Ito ay mga salita lamang ng Ingles sa sarili ko. Ngunit ito ay ang pangkalahatang istraktura ng isang, kung, kalagayan. Ngunit kami ay makita kongkreto mga halimbawa sa sandali lamang. Kung nais mong magkaroon ng isang two-way tinidor sa kalye, marami tulad ng ginawa namin sa aming mga volunteer sa Wednesday, maaari kang magkaroon ng isang, iba kung. At kung gusto mong magkaroon ng isang third at huling kalagayan, o default na sitwasyon, maaari kang magkaroon lamang ng isang iba pa block, doon. At katulad, sa boolean expression, maaari mong, at, kasama ang mga ito. At nakita namin sa Miyerkules, na ito ay hindi isang solong ampersand, ito ay dalawang, para sa mga kadahilanang mas mababa sa antas na kami ay makakita at makipaglaro sa. O-ing mga bagay-sama ay 2 vertical bar. Sa isang US keyboard, ito ay karaniwang isang key sa mga Shift key sa itaas iyong Enter o Return key. Pagkatapos ay may mga bagay na ito gagamitin namin siguro isa o dalawang beses. Ang mga ito ay umiiral na katumbas sa kung ano ang maaari mong gawin sa isang, kung, iba kung, ibang tao kung tao, tayuan, ngunit ang mga ito ay tinatawag na isang switch. Inaasahan nila ibang-iba, ngunit bibigyan namin ng makita sa ilan sa aming mga distribution code, para sa isang hinaharap hanay problema, malamang, na ito ay minsan lang sa isang prettier paraan ng pagpapahayag ng isang buong grupo ng mga kondisyon, walang pagkakaroon ng isang pulutong ng mga kulot tirante at isang pulutong ng mga panaklong at indentation. Ngunit bigyan sila sa amin ng hindi hihigit kapangyarihan kaysa kami na. At ngayon loop. At isa na ito, kami ay tumingin sa mas mabagal ng kaunti. Ngunit pagkatapos, magsisimula kami upang gamitin ang mga ito, lalo na para sa mga na pamilyar. Ito ang canonical paraan, kung hindi kapani-paniwalang arcane paraan, upang magsulat ng isang loop sa C. Ngayon isang loop sa scratch ay medyo direkta. Mayroon kang, magpakailanman, block. Mayroon kang, ulitin, block na may lamang ng isang numero ng kailangan mong i-type sa. At sa pamamagitan ng, para sa loop, maaari mong ipatupad pareho ng mga ideya, ngunit ito ay isang maliit na mas teknikal. Subalit lantaran, ito ay din medyo simple. Kapag alam mo ang pagkakasunud-sunod ng operations, literal mo ay lamang ng pagpunta sa plug sa halaga at sabihin ang computer kung ano ang gagawin. Kaya narito ang isang halimbawa. Ito ay isang loop na, lubos na lang, binibilang mula sa isang numero up sa pamamagitan ng isa pa. At sa pamamagitan lamang ng glancing at ito, kahit na mayroon kang walang bago karanasan sa wikang ito, kung ano ang bilang ay ito ay marahil simulan ang pagbibilang sa? OK, 0. At ako sa paghula na dahil sa iyo makita na mayroong isang int at isang i, kung saan ay isang variable. Ito ay initialize sa 0. At pagkatapos ay sa ibang pagkakataon, mukhang kami ay pagpasa printf, ang halaga. At, sa katunayan, ginawa ko ang isang maliit na typo dito. Ngunit na maaaring maayos. Hayaan akong magdagdag sa, i dito. Kami ngayon ay may printf pagkatao lumipas na ang halaga ng placeholder. At kung ano ang nangyayari sa count up sa pamamagitan ng? Madla: 50. 50. 49. DAVID J MALAN: 49. Kaya 50, sa unang tingin, tila karapatan. Ngunit iyon, ito ay lumiliko out, ay magiging aming kalagayan na ating tuparin ang checking. At kami ay pagpunta upang ihinto ang isang beses i ay hindi na mas mababa sa 50. Kaya ito loop, pasalungat, dapat execute, kaya hangga't i ay mas mababa sa 50. Ngunit sa lalong madaling ito ay nagiging 50, o 51, o mas masahol pa, ay dapat na awtomatikong itong itigil. Ayos lang. Kaya kung ano talaga ang mangyayari dito? Kaya ito ay ang pagkakasunud-sunod ng operasyon para sa isang loop. One, mayroon ka ng mga tinatawag na Pinasimulan. Ang dilaw na naka-highlight na tipak ng code ay unang naisakatuparan, at ito ay ang epekto na, per Miyerkules, marahil naisip mo. Ito ay lumilikha ng tinatawag na i at ito ang isang variable tindahan sa variable na ang halaga sa 0. Kaya ako ay 0 sa puntong ito sa kuwento. Ang susunod na bagay na mangyayari sa ito bumuo, ay na ang mga kondisyon ay makakakuha ng naka-check. Kaya agad na suriin ko, ay i mas mababa sa 50? At siyempre, ang sagot para sa ngayon ay, tiyak, yes. Oo, dahil i ay 0, at iyan ay tiyak na mas mababa sa 50. Pagkatapos ay ano ang mangyayari, ay na ito linya ng code ay naisakatuparan. At sa katunayan, kung mayroong maramihang linya ng code sa mga kulot tirante, lahat sila ay naisasagawa isa-isa. At sa epekto dito, ay tila, i-print out ang bilang i, na kung saan ay pagpunta sa 0, at pagkatapos ay 1, at pagkatapos ay 2. Ngunit bakit? Bakit ito makakuha incremented? Well, ang ika-apat na bagay na ang mangyayari ay na ang syntax na ito ay naisakatuparan, pagkatapos ng tuldok-kuwit. i ++ ay isang shorthand paraan ng sinasabi; tumagal ang halaga ng i, at magdagdag ng 1 sa mga ito; at pagkatapos ay sa susunod na pagkakataon sa paligid, idagdag 1 sa mga ito; at ang susunod na pagkakataon sa paligid, magdagdag ng 1 sa mga ito. Kaya kung panatilihin namin ang pagpunta, kung ano ang nangyayari sa mangyayari susunod ay hindi ako pagpunta sa magpasimula kailanman muli i. Kung ako malinis Sinisimulan i sa 0, halimbawa na ito ay hindi kailanman dulo dahil i ay natigil sa 0. Ngunit ano ang nangyayari sa mangyari ay na ang mga kondisyon ay naka-check, ang mga linya ng code ay naisasagawa, ang i ay incremented, kondisyon ay naka-check, code ay naisasagawa. At patuloy na cycling muli, at muli, at muli, hanggang i ++ induces ang halaga na 50. Ang kalagayan pagkatapos ay nagsasabing, ay 50 mas mababa sa 50? Ang sagot, siyempre, ay hindi, at kaya ang buong code hihinto Isinasagawa. At kung mayroon kang higit pang mga code sa screen down sa ibaba, na kung ano ang susunod na mangyayari. Ito nagpa-pop out ng mga kulot braces at ay patuloy na i-print ang mas pagkatapos na. Kaya ang isang joke ngayon, mula pakstrat, na Makikita marahil mo na ngayong maunawaan. Ito ay palaging nakakatawa. Ito ay tulad ng chuckles uri ng tumagos, at pagkatapos ay mapagtanto mo na hindi mo dapat maging tumatawa sa katatawanan tulad nito. Subalit may ilang mga takeaway dito, pedagogically, masyadong. Kaya ito ay lumiliko out na ako nawawala ang isang piraso ng syntax, o pakstrat ni Kulang ng piraso ng syntax dito. Ano ang nawawala, na mayroon kaming sa bawat iba pang mga halimbawa, kaya ngayon? Return, ay doon, kaya iyon ang ibang bagay, na kami ay bumalik sa bago ang haba. Ano ang nawawala, bagaman? Oo. Madla MIYEMBRO: Ang Pinasimulan ng [hindi marinig]. DAVID J MALAN: OK. Kaya oo. Sa aktwal, ito is-- Well, at count ay nasimulan hanggang sa itaas, o sa halip, ipinahayag up sa itaas. Kaya ito ay isa pang paraan ng paggawa nito. Ngunit hindi sa isang linya na ito ay may-bisa kahit na. Paano ang tungkol dito? Madla MIYEMBRO: Ito ba ang kulot tirante? DAVID J MALAN: Oo. Kaya ang curly braces ay nawawala. Ngunit ang code na ito, ibig sabihin ko, na ang kanilang credit, ay talagang, syntactically wasto. Ito ay lumiliko out, hindi mo kailangan ang kulot tirante kung mayroon ka lamang isang linya ng code na na gusto mong isagawa sa loob ng loop. Ngayon kami ay palaging, sa klase at sa lahat ng aming mga distribution code, isama ang kulot tirante anyway, para lamang sa kapakanan ng kaliwanagan ni. Ngunit mapagtanto na sa mga aklat-aralin at mga online na mga halimbawa, maaari mong tunay mabuti makita ang kulot braces nawawala ang ilang sandali. At iyan ay OK, kung ano ang iyong may naka-indent at inilaan ay lamang ng isang solong linya ng code, at hindi maramihang mga linya ng code, potensyal na. Ayos lang. So kaugnay sa isyu ng imprecision, ay isang isyu ng overflow, sa kamalayan na, katulad, huwag integer ay may mga limitasyon na ito tulad ng lumulutang na halaga ng point? Sa mundo ng mga lumulutang na tuldok mga halaga, maaari lamang naming maging tumpak, pagkatapos nito, kung minsan Maaaring mangyari ang masasamang bagay, at ang aming mga programa ay maaaring maging maraming surot at error. Ngayon kahit na may integer, maaari kang magkaroon ng problema. Ngayon isang integer ay walang decimal point o numero pagkatapos na ito. Ito lamang ay isang likas na numero, karaniwang. Kaya kung ano ang maaaring maging mali sa isang int? Kung gumagamit ako ng isang int sa count, kung ano ang maaaring maging mali? Mukhang ng maraming mas simple. Oo. Madla MIYEMBRO: Kung ang makakakuha number [hindi marinig] DAVID J MALAN: Oo. Paano kung bilangin mo kaya mataas, na ikaw hindi maaaring ipahayag na talagang malaking numero. Right? Sa ilang mga punto, ikaw ay pagpunta na lumampas sa hangganan ng halaga ng isang 32-bit o 64-bit na halaga. Ngayon muli, hindi ako sigurado kung paano upang ipahayag na ang isang 64-bit na halaga, pero alam ko na may isang 32-bit integer, ang pinakamalaking halaga na maaari itong maging, kung ito ay lamang ng positibong mga halaga, ay humigit-kumulang 4 na bilyon. Kaya kung subukan ko upang mabilang sa 5 bilyon, isang bagay ang nangyayari sa mangyari. Ngunit sabihin makita kung ano, sa katunayan, ay maaaring mangyari. Sa mundo ng mga integer overflow, kung saan ka, sa isang kahulugan, mapuno ng mga kakayahan ng isang integer, ano ang maaaring mangyari? Kaya narito ang isang binary na numero, ito ay isang kilos sa pabalik sa 0. Lahat ng ito ay 1, at ang mga placeholder doon, kapangyarihan ng 2, kaya ito ay binary. Kaya ito ang 8, 1 bits sa screen. At kung ang pagpapabalik sa iyo o mabilis kang gawin ang matematika, kung ano ang halaga ay kinakatawan dito sa mga walong 1 bits? 255. At kahit na kung ikaw ay hindi pa sigurado ng matematika, maaari mong gawin ito. O maaari mong uri lamang ng dahilan sa pamamagitan nito, maghintay ng isang minuto, kung hindi ako kumakatawan sa isang 8 bit na halaga, at Mayroon akong 256 posibleng halaga, ngunit ang unang na kung saan ay 0, Alam ko lang na ang pinakamalaking ay magiging 255, at na kung ano ang maaaring maging ang isang ito. Kaya ipagpalagay subukan ko na magdagdag ng 1 sa halaga na ito. Ano ang gagawin mo sa grade paaralan kapag nagdadagdag ng isang 1, at ito ay hindi talagang magkasya dahil kailangan mong dalhin ang 1? Ano ang bilang na ito ay pagpunta upang maging kapag nagdagdag ka ng 1? Ito ay pagpunta sa maging 0. Right? Dahil kung ikaw ay nagkaroon ng mas maraming bits-- at idedetalye ko subukan na, uri ng, uri ito here-- kung tayo ay mas bits, kung ano ang aming maaaring gawin dito ay idagdag ang 1, at pagkatapos ay gusto naming makuha ang mga ito. Oops. Gusto naming magkaroon ng isang 1 bit lahat ng mga paraan sa paglipas dito. Ngunit kung ito ay isang may wakas halaga, ito ay bits lamang 8, at iyon ang nauna nang itinakdang sa pamamagitan ng computer, na ang 1 ay epektibo hindi doon. Ito lang ang uri ng talon sa bangin. At kaya kung magdagdag ka ng 1 sa 255, kung ano halaga mo tila makuha? 0. At kaya numero sinasadyang, at marahil, hindi sinasadya, humantong sa pambalot sa paligid tulad nito. Kaya kung ano ang maaaring maging ang mga implikasyon ng mga ito? Well, mayroong ilang iba't ibang mga bagay. Kaya isa, ito ay humantong sa hinahanap tulad ng 0, hindi sinasadya, ngunit maaari mong uri ng makita, kahit na sa tunay na mundo, para sa mas mahusay o mas masahol pa, manipestasyon ng ideya na ito ng isang limitasyon. Halimbawa, ang anumang mga mo na may kailanman play Lego Star Wars, ay mangyayari na malaman ng sinuman ang maximum na bilang ng mga barya maaari mong mangolekta sa Lego Star Wars? Kumuha ng isang hulaan batay sa nangungunang mga katanungan sa ngayon. Ito ay mas malaki kaysa sa 256 o 255. Ito ay 4 na bilyon. Kaya ito ay lumiliko out, at mayroong ilang mga people-- ilang-Google nakumpirma noong nakaraang night-- may tapat na paraan 4 bilyong mga gintong barya, o watnat, sa Lego Star Wars. Kahit na tila, may isang paraan upang linlangin ang laro, may isang bug o tampok, na nagpapahintulot sa inyo makaipon lamang ng maraming at maraming ng mga puntos. Ngunit ang pinakamalaking posibleng halaga, ayon sa screen shot ng isang tao na aking matatagpuan online, ay sa katunayan, 4 na bilyon. Ngayon kung bakit ay na? Ito ay tiyak na 4 na bilyon, marahil dahil nagpasya ang isang tao, na pagsulat laro na ito, na maaari nilang gawin 4 na bilyon, bagay, isang bagay, isang bagay, tulad ng mga halaga ng ko bang ilagay up sa calculator mas maaga, ngunit ito lamang ay isang maliit na cleaner para sa mga tao sabihin ang maximum na bilang ng coins-- o studs, habang sila ay tumawag them-- na kayo maaaring mangolekta ay 4 na bilyon. At kaya, kung bakit ito? Paano ay ang laro Lego pagpapatupad ng counter na nag-iingat subaybayan ng ay bilang ng mga barya na mayroon ka? Sila ay gumagamit ng kung ano? Madla MIYEMBRO: Ito tumitigil pagbibilang matapos ang 4 na bilyon. DAVID J MALAN: Ito tumitigil pagbibilang matapos ang 4 na bilyon, na nangangahulugan na ikaw ay maaaring ipahiwatig, bilang programmer, na ang mga ito ay malamang na gamit ang isang 32 bit integer. Tulad ng mga programmer literal lamang nag-type, int, sa kanyang code, at iyon ang uri ng variable na sila ay gumagamit upang mag-imbak code ng isang tao. Kaya may iba pang manipestasyon ng mga ganitong uri ng mga limitasyon. Kaya hindi ko na nilalaro na ito game-- at ako ay pagbabasa up sa kasaysayan upang kumpirmahin na much-- ngunit sa orihinal na bersyon ng sibilisasyon, kung saan ka malas-ugnayan sa bawat isa at maaaring mandigma o magkaroon ng kapayapaan, Gandhi ay dapat na maging isa sa mga ang pinaka-mapayapang character, bilang ako maunawaan ito, sa unang bersyon ng kabihasnan. At sa katunayan, sa isang sukat na 1 hanggang 10, kanyang handulong ay lamang ng isang 1. Kaya napaka nang mahinahon agresibo, tila. Ngunit sa ilang mga punto, maaari mong malas i-install ang demokrasya sa iyong heograpiya. At kung i-install mo ang demokrasya sa iyong mga bersyon ng laro, pagkatapos ay napupunta down na ang iyong pagsalakay level. Ito ay isang magandang bagay. Ang mga tao ay mas matiwasay tila, sa na sitwasyon. Ngunit tila, ang isang tao ay na ng, kung, kalagayan sa orihinal na bersyon ng code. Kaya nagpunta level pagsalakay Gandhi mula positive 1, minus 2, sa mga negatibong 1, ngunit ang laro ay hindi Naiintindihan negatibong numero. Kaya kung ano ang nangyari noon ay pagsalakay Gandhi nagpunta na antas mula sa 1, sa 0, na negatibong 1, na kung saan ay ang epekto ng pambalot sa paligid sa pagiging ang pinaka-agresibo karakter sa laro, sa isang halaga ng 255, sa isang sukat na 1 hanggang 10. At mula noon, mayroong nangyaring higit pang mga anyo ng larong ito, at nag-iingat nila ito bilang isang uri ng Easter itlog, na Gandhi ay tila kaya masyado agresibo. Ngunit ito ay ang resulta ng isang napaka-simpleng programming error sa tunay maagang bersyon ng ang laro. Ngayon higit disturbingly, mas kamakailan lamang, ang Boeing 787 na naitala bilang pagkakaroon ng isang bug, hindi ang uri ng aparato lalo na gusto mong magkaroon ng isang bug. At ang mga sintomas, na kukunin ko na basahin dito, mula sa isang artikulo sa online, ay ito, isang modelo 787 airplane na ay patuloy na pinapatakbo para sa 248 araw ay maaaring mawala ang lahat alternating kasalukuyang, AC, electrical kapangyarihan, dahil sa ang generator control units, GCUs, sabay-sabay pagpunta sa mabibigo-safe mode. Kaya ito ay isang babala na inisyu kapag ang problemang ito ay natuklasan. Ang kondisyon na ito ay sanhi sa pamamagitan ng isang software counter, panloob sa GCUs, kaya isang integer o isang variable, na kalooban overflow matapos 248 araw ng tuloy-tuloy na kapangyarihan. Boeing ay nasa proseso ng pagbuo ng isang pag-upgrade GCU software na ay malunasan ang mga hindi ligtas na kalagayan. Kaya marami na tulad ng misayl senaryo, kung saan sila ay nagkaroon ng ilang mga uri ng variable na pagbibilang, at pagbilang, at bilangin, ngunit unti-unting umaapaw ang mga hangganan ng kakayahan nito, katulad ng ginawa ng mga sumpain airplane magkaroon ng isang variable overflow pagkatapos ng sapat na oras ng pagpapatakbo. At upang ang mga dila-in-pisngi paraan ng mga nagtatrabaho sa paligid ang isyu ay ang tunay na, reboot, ang iyong eroplano bawat 247 araw, sa gayon na ang memory makakakuha wiped at ang mga variable ay babalik sa 0. Ngunit mapagtanto, ito ay isang napaka malaking pagkakatawang-tao ng software, ngunit lalo na habang naririnig namin tungkol sa Apple operating system ng pagpunta sa mga kotse, at self-nagmamaneho kotse mula sa Google, at ng anumang numero ng mga anyo ng mga software sa ating pang-araw araw na buhay, TVs at relo, at iba pa, mapagtanto ay napapalibutan ng software, lahat ng kung saan ay nakasulat sa pamamagitan amin ng mga tao. At tulad ng makikita lahat sa lalong madaling panahon namin matuklasan, ito ay tunay madali at napaka tipikal upang gumawa ng mga pagkakamali kapag pagsulat software. At kung hindi mo makuha ang mga ito, Maaari itong mangyari sa ilang mga masasamang bagay. Ngayon minsan, ang ilang mga maaaring mangyari nakakatawang bagay, o hindi bababa sa minsan namin malaman upang asahan ang ilang mga kasamaan. Kaya 0 hinahati sa pamamagitan ng 0, mula grade paaralan, sa pangkalahatan ay isang masamang bagay. Ito ay hindi maliwanag. At ito ay lumiliko out-- at sabihin makita kung aking mic maaaring kunin ito up-- na Apple nagkaroon ng ilang mga masaya sa mga ito kamakailan. Kaya Mayroon akong isang iPhone dito. Pupunta ako sa makipag-usap sa Siri at hilingin sa kanya upang bigyan ako ang sagot sa 0 hinati sa 0. Anong 0 hinati sa 0? SIRI: Ipagpalagay na ikaw ay may 0 cookies, at ikaw split ang mga ito nang pantay-pantay bukod 0 mga kaibigan. Gaano karaming mga cookies ay hindi makakuha ng bawat tao? Tingnan? Hindi ito magkaroon ng kahulugan. At Cookie Halimaw ay malungkot na walang mga cookies. At ikaw ay malungkot na wala kang mga kaibigan. DAVID J MALAN: Ito ay uri ng kasuklam-suklam. Kaya ito ay kung ano ang sinabi lang doon. Ito ay walang katiyakan, hindi ito ay tinukoy, at sa katunayan, maraming mga wika programming o, talaga, compiler ay makita kapag mo, sa isang programa, subukan upang hatiin 0 ng 0. Mas masaya kaysa ito bagaman, ay na tila, Cookie Halimaw ay sa Twitter ang mga araw. At siya ay tumugon sa mga ito, ang mga ito, na kung saan ay ganap na kaibig-ibig. Ngunit tumagal ng isang mabilis na pagtingin sa ipaalam isang pares ng mga iba pang mga constructs, at pagkatapos ay ilagay ang ilan sa mga ito code upang gamitin, sa mabuting paraan. Kaya ito ay lumiliko out, bukod sa para sa mga loop, may bagay na tinatawag na isang habang loop, na mukhang naiiba at ito ay ipinatupad isang maliit na differently-- at kami ay makakita examples-- ngunit sa ilang mga kahulugan, ito ay mas simple dahil ito hindi daan sa iyo upang magpasimula at agad sa loob ng hangganan ng loop. Maaari mo pa ring ipatupad ito. Kaya maaari mong gawin ang parehong bagay sa isang habang loop, tulad ng sa isang para sa loop, ngunit ang iyong mga syntax, ultimately-- bilang kami sa huli see-- ay pagpunta sa iba. Mayroong kahit isang gawin habang loop, na ay talagang isang maliit na naiiba, sa na kung saan ang isang para sa loop at isang habang loop laging suriin muna ang kanilang kalagayan, kung basahin mo ang bagay na ito sa itaas sa ibaba, ito uri ng mukhang ito ay pagpunta sa suriin ito ni condition huling dahil sa ito ay tunay na ang huling linya ng code. At sa katunayan, na ang pagpunta sa maging kapaki-pakinabang sa ilang mga programa na isulat namin, kung gusto mong walang taros lamang gawin ang isang bagay at sa huli suriin ang kalagayan. Iyan ay hindi isang masamang bagay. Kung gusto namin na variable, maaari naming gawin ito sa isang pares ng mga iba't-ibang paraan. At nakita natin sa Foxtrot cartoon, isang paraan ng paggawa nito, kung saan mo idedeklara ang iyong variable, tulad ng int counter semicolon, at pagkatapos later-- siguro sa susunod na line, siguro 10 na linya later-- ang tunay na ikaw magpasimula ito. Kaya ang mga ito 2 linya ng code ipinapahayag ng isang variable ng uri int at tumawag ito counter, kaya nagbibigay ito sa akin ng sapat bits upang i-hold ang isang int. At pagkatapos ay sa wakas, inilalagay ito ang halaga 0 sa variable na. Ayos nito ang ni 0 at 1 sa isang pattern, na alam natin mula sa nakaraang linggo, kumakatawan sa bilang alam namin bilang 0. O lantaran, maaari mong gawin ito magkano mas succinctly, gusto lamang ito. Ngayon ay mayroon din namin ang kakayahang tumawag function. At sa katunayan, narito ang isang 2 linya programa, o isang sipi niyon, na nagbibigay-daan sa amin upang aktwal sumulat ng ilang mga code na makakakuha ng isang string mula sa user-- marami tulad ng ating volunteer ng isang sandali ago-- pagtatago ng mga resulta sa isang variable na tinatawag na pangalan, at then-- marami tulad ng sa aming mga volunteer may printf-- prints out ang mga halaga sa pamamagitan ng pagpasa sa dalawang argumento, ang string, sinusundan ng mga variable tinatawag, pangalan, mismo. Kaya sabihin tumagal ng isang pagtingin, bago namin na bumalik sa Mario doon, sa isang pares ng mga ngayon, halimbawa nito. Pupunta ako sa sige at bukas up, sabihin nating, function-0.c. At tulad ng dati, ang code na ito ay na makukuha sa website ng kurso, sa gayon maaari mong i-play kasama sa bahay at tingnan ang mga ito sa ibang pagkakataon. Ngunit narito ang programa sa ito ay kakanyahan, mula sa 17 na linya sa 22. Ang mga pangunahing programa ay kung saan ang program ay palaging pagpunta upang magsimula. Ang program na ito, tila, ay pagpunta upang i-print out ang iyong pangalan, colon. Pagkatapos Ito ay pagpunta sa tawag GetString, tulad ng ginawa namin sa aming mga volunteers. At pagkatapos, ito ay kawili-wili, ito ay pagpunta sa tumawag PrintName. Ito ay lumiliko out, ang lahat ng mga oras na ito, may parang isang function na tinatawag na PrintName. Na ang mga kopya ng pangalan ng isang tao. Hindi namin kailangan na gumamit ng printf mula nakalipas na panahon, may PrintName. Ngunit iyon lamang ang nakaliligaw dahil PrintName hindi sumama sa C. Ang mga tao ay hindi likhain ito ng mga 40 o 50 taon na ang nakaraan, Ginawa ko, sa halip. At sa katunayan, kung mag-scroll ko down pa, pansinin paano ko isulat ang aking sariling function sa C. idedetalye namin sa huli magpaliwanag kung bakit namin patuloy na sinasabi, walang bisa, sa loob ng ilang mga lugar, ngunit para sa araw na ito, sabihin natin tingnan lamang sa mga pangalan. Sa 24 na linya, kung nais mong lumikha ng iyong sariling function, mong literal isulat ang pangalan ng function. Pinili ko PrintName. Sa mga panaklong, ikaw pagkatapos ay tukuyin kung anong mga uri ng mga input, at kung gaano karaming mo gusto ang function na ito upang kumuha. Sa kasong ito, nais kong kunin 1 variable na tinatawag, pangalan, at ito ay pagpunta sa maging ng type, string, kaya ito ay pagpunta na ang ilang mga pagkakasunod-sunod ng mga character. At pagkatapos, ito program-- marami tulad ng sa simula, maaari kang magkaroon ng custom puzzle pieces-- ay pagpunta sa may ito pasadyang pag-uugali. Ito ay pagpunta sa tawagan printf pagpasa sa, hello, placeholder, at pagkatapos ito ay pagpunta sa plug sa kahit anong tinatawag user. Kaya ito ay isang halimbawa ng kung ano ang isang computer scientist gagawin call abstraction o functional agnas, na kung saan ay lamang magarbong paraan ng saying-- Ay kung gusto mo ang ideya na ito ng mataas na antas, tulad ng gusto ko ang pag-andar na Kopya pangalan ng isang tao, kung talagang maaaring literal isulat printf at pagkatapos ay At mangyayari sa mga argumento na gusto mo, at ang programa ay gumagana, tulad ng ito ay dahil Miyerkules. Ngunit maaari kang magsimula sa abstract layo ang paniwala ng pag-print ng isang pangalan. Maaari mong bigyan ito ng isang pangalan, tulad PrintName, at ito ay ito ideya ng layering mula sa linggo 0. Simula ngayon, hindi ko at mo na kailangang malaman o pag-aalaga kung paano PrintName ay ipinatupad. Oo ito ay gumagamit ng printf, marahil ito ay hindi, na nakakaalam kung ano ang gumagamit? Sino ang nagmamalasakit? Ngayon ako ng pakikipag-usap dito, sa halip ng mga down dito. At sa katunayan, bilang makakuha ng aming programa mas advanced at sopistikadong, kami ay pagpunta upang panatilihin ang pagkuha para sa ipinagkaloob na mas mababa ang antas ng mga piraso ng puzzle umiiral. Dahil kami ay sumulat ng mga ito o ang ibang tao ay, kaya na maaari naming pagkatapos ay bumuo sa tuktok ng mga ito. Tingnan natin ang isang pagtingin sa ito variant, aandar isa. Kaya ang isang ito ay isang kaunti pa advanced, ngunit ito ay lumiliko out na sa library CS50, mayroon lamang isang GetInt function. Hindi namin naisip, taon na ang nakakaraan, upang ipatupad ang isang GetPositiveInt function. At iyon ay isang maliit na nakakainis dahil kung ka guys ay pagsulat ng isang programa kung saan nais mong makakuha ng isang positibong integer mula sa user, Maaari mong ganap na gamitin ang GetInt. At maaari mong ganap na i-tsek sa sa kalagayan at marahil isang loop kung na int ay mas malaki kaysa sa 0 at sumigaw sa user ang kung siya ay hindi nagbibigay sa ikaw ay isang positibong numero. Ngunit sabihin bumuo ito ipaalam building harangan ang ating mga sarili, ang isang, custom scratch piraso, kung ikaw ay. Pupunta ako sa magkaroon ng isang programa dito na sa huli, ako nais na ma-tawag GetPositiveInt, at gusto kong maging ma-print out kahit na ano na int ay. Ngunit ito ay lumilipad ang isip ang layo ngayon. Ito lang ang na ibinigay ng isang mataas na antas name na nagsasabi kung ano ang ginagawa nito, na kung saan ay kahanga-hanga dahil sa ito ay very intuitive ngayon na basahin. At kung gagawin ko pag-aalaga kung ano ang sa ilalim hood, hayaan mo akong mag-scroll pababa. At ito ay isang maliit na pananakot sa una, lalo na kung ito ang iyong unang programa, ngunit hayaan ang isang pagtingin. Hindi na ako na nagsasabi, walang bisa, dahil ito ay lumiliko out-andar, marami tulad ng GetString, maaari nagbabalik ng halaga sa akin. Sila ay hindi lamang magkaroon ng upang i-print sa screen, sila ay maaaring aktwal kamay akin ng isang bagay sa likod. At samantalang bago PrintName, Hindi ko na kailangan ng kahit ano sa likod. Kailangan ko ng mga side effect ng isang bagay na nagpapakita up sa screen, ngunit hindi ko na kailangan ng isang tao na ibigay sa akin ang isang bagay sa likod. Dito, may GetPositiveInt, tulad ng sa GetInt, Gusto kong makipag-kamay ng isang bagay sa likod. Kaya ko sinasabi na hindi, walang bisa, sa 23 na linya, ngunit int, na nagsasabing, ang function na ito na ako ay sumusulat, tinatawag GetPositiveInt ay pagpunta sa kamay ako pabalik ng isang integer, hindi wala, hindi walang bisa. Samantala, ito ay pagpunta sa tumagal ng walang input, kaya ko na, uri ng, reverse ko ito. Hindi ako nagbibigay GetPositiveInt anumang input, Gusto ko ito upang magbigay sa akin ang output nito. At pagkatapos ay kung ano ang mangyayari ngayon? Kaya narito kung paano ko maaaring magpahayag ng isang variable. Ginawa ko na ito sa labas ng loop, para sa mga kadahilanang kami ay makakita, ngunit ito lamang ay nagbibigay sa sa akin 32 bits tinatawag, n, at na ako pre-pagtukoy ang mga ito sa mga tindahan ng integer. At narito ang na, gawin habang tayuan, at ito ang dahilan kung bakit ito ay kapaki-pakinabang. Literal gawin ito, habang n ay mas mababa sa 1. Kaya sabihin makita kung ano ang mangyayari. I-print out ko, mangyaring bigyan ako ng isang positibong int. Pagkatapos ay kumuha ako ng isang int, gamit ang CS50 function at naka-imbak sa n. At pagkatapos ay, kung ano ang linya ng code marahil ay naisakatuparan susunod, lohikal? Aling line number? Oo, kaya 31. Hindi mo malalaman kung ito hanggang sa ikaw ay nasabihan o uri ng magpakilala ito, ngunit iyan ay totoo. Ito napupunta sa itaas sa ibaba at pagkatapos ay para mapigil ang paulit-ulit. Kaya kung ako ay nag-type sa sabihin, ang bilang negatibong 1, ay n mas mababa sa negatibong 1? Oo. Dahil negatibong 1 ay mas mababa sa 1. Kaya kung ano ang dapat mangyari? Pupunta ako sa gawin ito habang n ay mas mababa sa 1, kaya ako pagpunta upang bumalik sa 28 linya. Ni patakbuhin this-- At sa bawat time-- at hayaan gumawa ng function 1 upang ipunin ito, at ngayon tuldok slash function 1. Kung nagta-type ako ng mga negatibong 1, ito ay pagpunta sa panatilihin ang sumisigaw sa akin hanggang tumulong ako dahil ang bawat isa ng aking mga input ay mas mababa sa 1 at kung ito ay habang mas mababa sa 1, Pupunta ako sa panatilihin ang paggawa nito. Kung sa wakas ay ibinigay ko sa isang numero tulad ng 50, Sa kabutihang palad, ang sinasabi nito, salamat para sa 50. Bakit? Dahil sa lalong madaling n ay hindi kukulangin sa 1, I itigil nagsisimula natigil sa loop na ito, at ang bagong keyword sa ngayon, return, ginagawa literal na. Kaya lamang ko na ipinatupad, sa isang kahulugan, ang katumbas ng GetString, kung saan ako handing bumalik sa kahit sino ay gumagamit ng sa akin, ang ilang mga halaga. Hindi nito kailangang maging isang string, ito ay isang int. Kaya ang isang simple, mabilis na halimbawa, ngunit ipapakita namin sa lalong madaling panahon makita ang ilang higit pang mga kumplikadong bersyon pa rin. Sa katunayan, sabihin kumuha ng isang pagtingin sa isang isa pang numero, na kung saan ay tinatawag na return.c. At ang isang ito ay aktwal na isang maliit na mas simple. Kaya layunin ng programang ito sa life-- ni itala at patakbuhin ito ipaalam, kaya bumalik, tuldok slash, return-- notice cube lang programa ang halaga 2. Ito ay medyo bobo, mahirap code, ito ay hindi kumuha ng anumang mga input, ngunit ito ay nagpapakita ng isa pang function na iyong isinulat ko ang aking sarili. Kaya dito, na ipinahayag ko ang isang variable, na tinatawag na x, uri ng int, katumbas ng bilang 2, ganap na arbitrary. Ito ang ilan lamang sa mga malalambot na printing. Sinasabi nito x ay ngayon, tulad at tulad, cubing dot dot dot. At ang magic ay tila sa 21 linya. Ako ng pagtawag ng isang function na tinatawag na, kubo, Ako ito ibigay sa isang sheet ng papel may number 2 na nakasulat dito, at kung ano ang halaga, mathematically, gusto ko upang makakuha ng out ng mga ito? Tulad ng isang katinuan check? 8. Right? 2 gusto ko nakakubo back, 2 hanggang ang kapangyarihan ng 3, kaya 8 likod. Kaya kung saan ipinapatupad ang kubo? Well, abisuhan ang mga ito ay ipinatupad dito sa ibaba. At tulad ng dati, lohikal, kahit na ang syntax ay marahil sobrang bago sa marami sa inyo, Gusto ko ang function na ito sa kamay ako sa likod ng isang sheet ng papel na may isang int sa mga ito. Kaya Mayroon akong isang int, ang pangalan ay nagkataon, ngunit Maginhawang tinatawag na kubo. Ang input na ito, ay n ng type integer, kaya na paano ko ipasa sa ang bilang 2 sa isang sheet ng papel. At pagkatapos ito ay lumiliko out C suporta matematika, kaya hindi mo na kailangang x para sa mga panahon, ikaw lamang gamitin ang asterisk para sa pagpaparami. At ito ay nagbabalik ng n beses n ulit n, na kung saan ay lamang ng isang halaga nakakubo. Kaya kung saan ay namin pagpunta sa lahat ng mga ito? Ito ay talagang isang ipoipo tour, makatitiyak, na sa sobrang seksyon at sa hanay ng problema 1, ikaw ay lumakad sa pamamagitan ng ang lahat ng ito sa lahat ng iba pa. At sa set problema 1, makikita namin sa paglipat mula sa mga graphical mundo ng mga scratch isang bagay na mas command line sa C. Ngunit kami ay gumuhit ng inspirasyon mula sa mga ito dito laro mula sa nakalipas na, kung saan gamit C at ang standard na edisyon ng p set makikita mo ipatupad pyramid ni Mario. At sa hacker na edisyon ng p set, kung pinili mo ito upang maghalal, ikaw ay ipatupad ng kaunti pang Hinahamon pyramid na may dalawang Peaks. Makikita mo rin ipatupad ang isang algorithm, isang sakim algorithm. Ito ay lumiliko out doon ni ang ilang mga interesanteng logic sa likod ng proseso ng tumatakbo station isang cashier at talagang handing isang tao na pagbabago pabalik. Mayroong isang algorithm na medyo tapat, na maaaring kahit na sa iyo hawakang mahigpit intuitively noong una mong basahin it-- realizing na kung ano na hindi ko na laging gawin anumang oras ko na ibinigay ng isang tao sa ilang pera back-- na nagbibigay-daan sa iyo upang palagi i-minimize ang bilang ng mga mga tala sa papel o metal barya na kayo ay handing bumalik sa user. At ito, siyempre, ay nag-uudyok dahil kung ikaw ay pumunta sa CVS o watnat, hindi mo nais na maging kamay isang buong grupo ng mga o ng isang buong grupo ng mga pennies. Gusto mong pinakakaunting barya, marahil, maaari. Sa wakas, ikaw ay hinamon din sa magwilig sa mundo ng tubig at talagang makakuha ng isang pagpapahalaga para sa isang mapping pagitan ng mga rate ng daloy, ng gusto, tubig sa isang shower, lamang kung magkano ang tubig ay ginagamit. At ang parunggit sa ganyang bagay, ay magiging dito ang clip na ito, na kung saan kami magtatapos sa para sa 60 segundo lamang, na paints isang larawan ng mababang-daloy shower ulo. [Playback ng video] -Ang Lahat ng karapatan. Nakakuha ako ng lahat ng bagay dito. Nakakuha ako ng Bagyong F Series, Hydra, Jetflow, Stockholm Supersteam, pangalan mo ito. -At Ano ang gagawin kayong magrekomenda? Ano-ikaw ay naghahanap para sa? -Power Tao. Power. -tulad Silkwood. -Na Ay para sa radiation. -Na Ang karapatan. -Ngayon Kung ano ito? -Na Ang Commando 450. Hindi ako nagbebenta ng isang iyon. -Pero Na kung ano ang gusto namin. Ito ay isang commando 450. Naniniwala -Hindi akin. Ito ay ginagamit lamang sa sirko. Ito ay para sa mga elepante. -I'll Magbayad ng anumang bagay. -Kung Ano ang tungkol Jerry? -Hindi Maaaring hawakan na. Siya ay maselan. Oh oo. [END playback] DAVID J MALAN: Lahat ng karapatan. Iyon ang dahilan kung para sa CS50. Kami ay makikita mo sa susunod na linggo. Tagapagsalita 1: [? Scully?], [? Ian,?] makasapit proyektong ito outro, kung ano ang iyong guys makabuo ng? Tagapagsalita 2: Well, binigyan ka namin ito ang iba't ibang mga pag-iisip, at sa tingin namin na ang pinakamahusay na paraan to-- Tagapagsalita 3: May I? Tagapagsalita 2: Oo. Sa pamamagitan ng lahat ng paraan, talaga. Tagapagsalita 3: Kaya sa tingin ko Maaari naming sabihin sa ilang ang aming mga ideya para sa outros may isa word-- wala. DAVID J MALAN: Wala? Tagapagsalita 3: Nothing. DAVID J MALAN: Ano ang ibig sabihin nito? Tagapagsalita 3: Ang outros ay tungkol sa wala. Tagapagsalita 2: Well, ibig sabihin ko, sa pilosopiya, Ibig kong sabihin, walang ay palaging isang bagay. Tagapagsalita 1: Kaya what's-- ano ang premise? Tagapagsalita 3: Kaya ito ay tulad ng buhay. OK. Ano ang ginawa mo sa araw na ito? DAVID J MALAN: Nakatanggap ako, nagkaroon almusal, at ang dumating sa trabaho. Tagapagsalita 3: Iyan ay isang outro. Tagapagsalita 2: Ngunit, ibig sabihin ko, hindi dapat isang bagay na mangyayari sa kanya sa the-- Tagapagsalita 3: Hindi, hindi, hindi, hindi. Walang mangyayari. Tagapagsalita 1: kaya kung bakit kami pinapanood? Tagapagsalita 3: Dahil ito ay isang outro para CS50. DAVID J MALAN: Hindi pa.