1 00:00:00,000 --> 00:00:00,000 2 00:00:00,000 --> 00:00:00,000 [MUSIC nagpe-play] 3 00:00:00,000 --> 00:00:13,950 4 00:00:13,950 --> 00:00:16,240 >> David J. MALAN: Lahat ng karapatan, ito ay CS50. 5 00:00:16,240 --> 00:00:18,010 At ito ay kung week isa. 6 00:00:18,010 --> 00:00:22,050 Kaya isipin ang na huling oras sa linggo zero, kami ay nakatutok sa computational pag-iisip. 7 00:00:22,050 --> 00:00:25,440 At kami transitioned mula sa na kung Scratch, isang graphical programming 8 00:00:25,440 --> 00:00:27,360 wika mula sa aming mga kaibigan sa MIT Media Lab. 9 00:00:27,360 --> 00:00:31,730 >> At sa pamamagitan Scratch, ay namin galugarin mga ideya tulad ng pag-andar, at mga kondisyon, 10 00:00:31,730 --> 00:00:35,210 at mga loop, at mga variable, at kahit na mga kaganapan, at mga thread, at higit pa. 11 00:00:35,210 --> 00:00:37,880 At ngayon, kami ay pagpunta sa magpatuloy sa paggamit ng mga ideya, 12 00:00:37,880 --> 00:00:40,630 at talagang pagkuha ng mga ito para sa ipinagkaloob, ngunit isalin ang mga ito 13 00:00:40,630 --> 00:00:44,220 sa ibang wika na kilala bilang C. Ngayon, C ay isang mas tradisyunal na wika. 14 00:00:44,220 --> 00:00:46,020 Ito ay isang mas mababang antas wika, kung ikaw ay. 15 00:00:46,020 --> 00:00:47,300 >> Ito ay pulos sa texto. 16 00:00:47,300 --> 00:00:49,910 At kaya sa unang tingin, ito ay lahat ng pagpunta sa tumingin sa halip misteriyoso 17 00:00:49,910 --> 00:00:51,430 kung hindi mo pa-program bago. 18 00:00:51,430 --> 00:00:53,530 Kami ay pagpunta sa may semi-colons, at panaklong, 19 00:00:53,530 --> 00:00:55,150 at kulot tirante, at higit pa. 20 00:00:55,150 --> 00:00:57,240 Ngunit mapagtanto na kahit na bagaman ang syntax ay 21 00:00:57,240 --> 00:01:00,600 tungkol upang tumingin ng kaunti pamilyar sa karamihan sa inyo, makita ang mga nakaraang iyon. 22 00:01:00,600 --> 00:01:03,220 At subukan upang makita ang mga ideya na, sa katunayan, pamilyar, 23 00:01:03,220 --> 00:01:06,750 dahil dito sa linggo ng isa kung ano ang sisimulan namin na gawin ay upang ihambing, 24 00:01:06,750 --> 00:01:08,980 sa una, Kaskasin versus C. 25 00:01:08,980 --> 00:01:12,350 >> Kaya, halimbawa, isipin ang na kapag kami ipinatupad ang unang ng aming mga programa 26 00:01:12,350 --> 00:01:16,220 huling oras, kami ay nagkaroon ng isang bloke na tumingin isang maliit na bagay tulad ng this-- kapag 27 00:01:16,220 --> 00:01:19,990 berdeng bandila click, at pagkatapos ay nagkaroon kami isa o higit pang mga piraso ng puzzle sa ibaba nito, 28 00:01:19,990 --> 00:01:22,150 sa kasong ito, sabihin, kumusta mundo. 29 00:01:22,150 --> 00:01:24,870 Kaya, sa katunayan, sa simula, kapag nag-click ko na berdeng bandila 30 00:01:24,870 --> 00:01:27,390 upang patakbuhin ang aking programa, kaya na magsalita, ang mga ito ay 31 00:01:27,390 --> 00:01:29,520 ang mga bloke na makakuha ng executed, o tumakbo. 32 00:01:29,520 --> 00:01:32,230 At, partikular, Scratch sinabi, hello, world. 33 00:01:32,230 --> 00:01:35,377 >> Ngayon, maaari ba akong magkaroon tinukoy iba't ibang mga salita dito. 34 00:01:35,377 --> 00:01:37,960 Ngunit kami ay makita na, sa katunayan, maraming mga sa mga blocks-- at sa katunayan, 35 00:01:37,960 --> 00:01:41,880 sa C maraming functions-- maaaring maging parametrized o customized 36 00:01:41,880 --> 00:01:43,150 upang gawin ang iba't ibang bagay. 37 00:01:43,150 --> 00:01:45,520 Sa katunayan, sa C kung kami nais i-convert, ngayon, 38 00:01:45,520 --> 00:01:47,567 ito Scratch program sa ang iba pang mga wika, 39 00:01:47,567 --> 00:01:49,650 kami ay pagpunta sa magsulat ng isang maliit na bagay tulad nito. 40 00:01:49,650 --> 00:01:52,540 >> Ipinagkaloob, may ilang mga pamilyar syntax doon malamang, int, 41 00:01:52,540 --> 00:01:54,380 at panaklong, at walang bisa. 42 00:01:54,380 --> 00:01:57,740 Ngunit printf-- kahit gagawin mo tingin ito would makatarungan maaari print. 43 00:01:57,740 --> 00:02:00,120 Ngunit print ay nangangahulugan print format, dahil kakailanganin namin sa lalong madaling panahon makita. 44 00:02:00,120 --> 00:02:02,140 Ito literal ay i-print sa screen kahit anong 45 00:02:02,140 --> 00:02:05,990 ay sa loob ng mga panaklong, na kung saan siyempre sa kasong ito ay, kumusta mundo. 46 00:02:05,990 --> 00:02:09,290 >> Ngunit mapapansin mo ang ilang iba pang mga syntax, ang ilang mga double quotes, 47 00:02:09,290 --> 00:02:11,890 na ang mga panaklong sa dulo, ang semi-colon at ang gusto. 48 00:02:11,890 --> 00:02:15,027 Kaya doon ay isang bit ng overhead, kaya na magsalita, parehong cognitively 49 00:02:15,027 --> 00:02:17,860 at syntactically, na kami ay pagpunta sa may sa tandaan bago ang haba. 50 00:02:17,860 --> 00:02:20,720 Ngunit mapagtanto na may kasanayan, ito ay simulan upang tumalon out sa iyo. 51 00:02:20,720 --> 00:02:24,920 >> Sa katunayan, sabihin tumuon sa isa na function na specifically-- sa kasong ito, 52 00:02:24,920 --> 00:02:26,290 kamustahin mundo. 53 00:02:26,290 --> 00:02:27,560 Kaya sabihin ay ang function. 54 00:02:27,560 --> 00:02:31,320 Hello world ay parameter nito, o argumento, pagpapasadya nito. 55 00:02:31,320 --> 00:02:34,320 >> At ang pagkapareho sa C ay lamang pagpunta sa maging ang isang ito linya dito, 56 00:02:34,320 --> 00:02:38,710 kung saan printf ay katumbas ng, sabihin, ang double may panipi string, hello 57 00:02:38,710 --> 00:02:41,470 mundo ay katumbas, siyempre, sa kung ano ang sa puting kahon doon. 58 00:02:41,470 --> 00:02:45,680 At ang backslash n, kahit na isang maliit kakaiba at absent mula sa simula, 59 00:02:45,680 --> 00:02:49,380 lamang ay pagpunta sa magkaroon ng epekto bibigyan namin makita sa isang computer, tulad ng aking Mac o isang PC, 60 00:02:49,380 --> 00:02:51,660 na lamang ng paggalaw sa cursor sa susunod na linya. 61 00:02:51,660 --> 00:02:53,970 Ito ay tulad ng paghagupit Enter sa iyong keyboard. 62 00:02:53,970 --> 00:02:55,580 >> Kaya makikita namin makita na muli bago ang haba. 63 00:02:55,580 --> 00:02:58,640 Ngunit una, sabihin tumagal ng isang pagtingin sa ito iba pang mga halimbawa sa kaso ng mga loop. 64 00:02:58,640 --> 00:03:02,830 Nagkaroon kami ito magpakailanman loop huling oras, kung saan ay isang serye ng mga piraso ng puzzle 65 00:03:02,830 --> 00:03:05,490 na ginawang isang bagay na literal forever-- sa kasong ito, 66 00:03:05,490 --> 00:03:08,360 sabihin, hello world, kumusta mundo, hello world, hello mundo. 67 00:03:08,360 --> 00:03:10,350 Kaya ito ay isang walang-katapusang loop sa pamamagitan ng disenyo. 68 00:03:10,350 --> 00:03:14,580 >> Sa C, kung gusto naming ipatupad ito parehong ideya, maaari naming lamang gawin ito. 69 00:03:14,580 --> 00:03:19,570 Habang totoo, printf kumusta world-- ngayon habang, lamang semantically, uri ng 70 00:03:19,570 --> 00:03:23,090 conjures up ang ideya ng paggawa isang bagay muli, at muli, at muli, 71 00:03:23,090 --> 00:03:23,980 at para sa kung gaano katagal? 72 00:03:23,980 --> 00:03:27,990 Well, true-- recall na totoo ay lamang sa o isa. 73 00:03:27,990 --> 00:03:30,660 >> At ang tunay na ay, siyempre, laging totoo. 74 00:03:30,660 --> 00:03:33,060 Kaya ito ay uri ng isang walang kahulugan pahayag lamang upang sabihin totoo. 75 00:03:33,060 --> 00:03:36,890 Ngunit sa katunayan, ito ay sinadya, dahil kung totoo ay lamang laging totoo, 76 00:03:36,890 --> 00:03:40,850 kaysa habang totoo lang nagpapahiwatig, kung ang isang maliit hindi direkta, 77 00:03:40,850 --> 00:03:44,070 na ang mga sumusunod na linya ng code sa pagitan ng mga kulot tirante 78 00:03:44,070 --> 00:03:48,320 dapat lamang execute muli, at muli, at muli, at hindi kailanman talagang itigil. 79 00:03:48,320 --> 00:03:50,230 >> Ngunit kung mo nais ang iyong loop upang ihinto, bilang namin 80 00:03:50,230 --> 00:03:54,500 ang huling oras na may isang bagay tulad ng ito, ulitin ang mga sumusunod na 50 beses, 81 00:03:54,500 --> 00:03:57,700 sa C maaari naming gawin ang parehong sa kung ano ang tinatawag na isang para loop-- keyword 82 00:03:57,700 --> 00:03:59,330 hindi pagiging habang, ngunit para sa. 83 00:03:59,330 --> 00:04:03,290 At pagkatapos ay mayroon kaming ilang mga bagong syntax dito, sa int i katumbas ng 0, i mas mababa sa 50, 84 00:04:03,290 --> 00:04:03,880 i ++. 85 00:04:03,880 --> 00:04:05,430 At kami ay bumalik sa na. 86 00:04:05,430 --> 00:04:09,660 Ngunit ito ay lamang ng kung paano gusto namin isalin ang hanay ng Scratch bloke 87 00:04:09,660 --> 00:04:13,079 sa isang hanay ng C linya ng code. 88 00:04:13,079 --> 00:04:14,450 >> Samantala, isaalang-alang variable. 89 00:04:14,450 --> 00:04:16,540 At, sa katunayan, kami lang nakita ko ang isa sa isang sandali ang nakalipas. 90 00:04:16,540 --> 00:04:21,220 At sa kaso ng simula, kung kami nais na idedeklara ng isang variable na tinatawag na i 91 00:04:21,220 --> 00:04:24,590 para i pagiging integer, lamang ng isang numero, at gusto naming upang i-set ito sa ilang mga halaga, 92 00:04:24,590 --> 00:04:28,410 Gusto naming gamitin ang orange harangan here-- itakda i sa 0. 93 00:04:28,410 --> 00:04:30,800 >> At kami makita ngayon at lampas, tulad ng nakaraang linggo, 94 00:04:30,800 --> 00:04:33,850 programmers gawin halos palaging magbilangan mula sa zero, really 95 00:04:33,850 --> 00:04:34,950 sa pamamagitan ng convention. 96 00:04:34,950 --> 00:04:37,250 Ngunit din dahil pagpapabalik mula aming mga talakayan ng binary, 97 00:04:37,250 --> 00:04:39,990 ang pinakamaliit na bilang maaari mong kumakatawan sa anumang bilang ng bits 98 00:04:39,990 --> 00:04:41,640 ay lamang pagpunta sa maging 0 mismo. 99 00:04:41,640 --> 00:04:45,190 At kaya kami ay karaniwang simulan Sinisimulan maging ang aming mga variable sa 0. 100 00:04:45,190 --> 00:04:47,710 >> At sa C upang gawin ang parehong, kami ay pagpunta sa sabihin int 101 00:04:47,710 --> 00:04:50,110 para integer, i sa pamamagitan lamang ng convention. 102 00:04:50,110 --> 00:04:53,390 Maaari ba akong magkaroon na tinatawag na ito variable kahit ano ang gusto ko, tulad ng sa scratch. 103 00:04:53,390 --> 00:04:57,770 At pagkatapos ay ay katumbas ng 0 lamang pinaglaanan ang halaga ng 0 mula sa kanan 104 00:04:57,770 --> 00:05:01,319 at naglalagay ito sa mga variable, o ang imbakan lalagyan doon, sa kaliwa. 105 00:05:01,319 --> 00:05:04,360 At ang semi-colon dahil kakailanganin namin see-- at nasaksihan namin ang ilan sa mga already-- 106 00:05:04,360 --> 00:05:06,530 lamang ay nangangahulugan end ng pag-iisip. 107 00:05:06,530 --> 00:05:09,430 Magpatuloy upang gawin ang isang bagay sino pa ang paririto sa mga linya na sundin. 108 00:05:09,430 --> 00:05:11,330 >> Ngayon, kung ano ang tungkol Boolean expression? 109 00:05:11,330 --> 00:05:14,320 Sariwain sa alaala na sa simula, ito'y mga expression 110 00:05:14,320 --> 00:05:16,740 na alinman true o false-- katanungan, 111 00:05:16,740 --> 00:05:18,910 talaga, na alinman true o false. 112 00:05:18,910 --> 00:05:21,960 Kaya sa kaso ng simula, maaari naming magtanong sa isang simpleng tanong na tulad nito, 113 00:05:21,960 --> 00:05:24,586 ay i mas mababa sa 50? 114 00:05:24,586 --> 00:05:25,710 Kaya ako, muli, ay isang integer. 115 00:05:25,710 --> 00:05:27,210 Siguro kami ay gumagamit ng ito sa isang Scratch program 116 00:05:27,210 --> 00:05:29,310 upang subaybayan ang isang marka o isang bagay tulad na. 117 00:05:29,310 --> 00:05:33,810 Kaya ito syntax dito sa Scratch lamang ay nangangahulugan, ay i mas mababa sa 50? 118 00:05:33,810 --> 00:05:37,330 Well, thankfully, ang isang bagay ay simple sa C. At upang isalin, 119 00:05:37,330 --> 00:05:41,780 ito ay lamang namin i say mas mababa sa 50, gamit ang mga pamilyar na key 120 00:05:41,780 --> 00:05:42,850 sa iyong keyboard. 121 00:05:42,850 --> 00:05:45,141 >> Samantala, kung nais mong sabihin ng isang bagay mas pangkalahatang, 122 00:05:45,141 --> 00:05:49,890 tulad ng, well, ay x mas mababa sa y kung saan ang bawat ng x at y ay ang kanilang sarili variable? 123 00:05:49,890 --> 00:05:52,280 Maaari naming gawin ang parehong bagay sa C, kaya hangga't hindi namin 124 00:05:52,280 --> 00:05:53,942 nilikha ang mga variable na. 125 00:05:53,942 --> 00:05:55,650 At kami makita kung paano gawin na bago ang haba. 126 00:05:55,650 --> 00:05:58,590 Nais naming lamang sabihin x mas mababa sa y. 127 00:05:58,590 --> 00:06:00,530 >> Kaya ikaw ay nagsisimula upang makita ang ilang mga pagkakatulad. 128 00:06:00,530 --> 00:06:03,490 At ang mga tao na ginawa Scratch ay tiyak 129 00:06:03,490 --> 00:06:05,250 inspirasyon sa pamamagitan ng ilan sa mga pangunahing ideya. 130 00:06:05,250 --> 00:06:10,350 At makikita mo ang ganitong uri ng syntax sa maraming languages-- 131 00:06:10,350 --> 00:06:12,160 hindi lamang scratch, hindi lamang C, ngunit sawa, 132 00:06:12,160 --> 00:06:14,790 at JavaScript, at iba pang mga wika pa rin. 133 00:06:14,790 --> 00:06:18,270 >> Isaalang-alang natin ang isa pang tayuan Hayaan mula sa C, ang paniwala ng isang kondisyon, 134 00:06:18,270 --> 00:06:20,370 paggawa ng isang bagay nang may pasubali. 135 00:06:20,370 --> 00:06:22,720 Kung ang isang bagay ay totoo, gawin ito. 136 00:06:22,720 --> 00:06:24,457 Kung ibang bagay ay totoo, gawin na. 137 00:06:24,457 --> 00:06:27,040 Ito ay uri ng programming katumbas ng isang tinidor sa kalye. 138 00:06:27,040 --> 00:06:29,730 Siguro ito ay isang two-way tinidor, isang tatlong-way tinidor, o higit pa. 139 00:06:29,730 --> 00:06:32,800 At sa simula, magkaroon tayo ng nakakita ng isang bagay na katulad nito. 140 00:06:32,800 --> 00:06:34,010 >> Kaya ang isang ito ay isang malaking isa. 141 00:06:34,010 --> 00:06:36,750 Subalit isaalang-alang ang kamag-anak simple ng logic. 142 00:06:36,750 --> 00:06:44,010 Kung x ay mas mababa sa y, iyo ngang sabihing x ay mas mababa kaysa y, iba kung x ay mas malaki kaysa y, 143 00:06:44,010 --> 00:06:46,230 iyo ngang sabihing x ay mas malaki kaysa y. 144 00:06:46,230 --> 00:06:48,300 At pagkatapos, logically, kung sa tingin mo bumalik sa Scratch 145 00:06:48,300 --> 00:06:52,610 o lamang ang iyong sariling mga tao intuwisyon, well, kung x ay hindi dakila kay y, at x 146 00:06:52,610 --> 00:06:57,000 ay hindi mas mababa kaysa sa y, pagkatapos ng kurso x ay magiging katumbas ng y. 147 00:06:57,000 --> 00:06:59,690 Kaya sa kasong ito, sa pamamagitan ng nesting mga Scratch bloke, 148 00:06:59,690 --> 00:07:02,580 maaari naming makamit ang isang tatlong paraan tinidor sa kalsada? 149 00:07:02,580 --> 00:07:04,980 >> Samantala, kung gusto naming gawin na sa C, ito arguably 150 00:07:04,980 --> 00:07:08,420 hitsura ng isang maliit simpler-- hindi bababa sa sandaling makuha pamilyar sa syntax. 151 00:07:08,420 --> 00:07:12,050 Kung x ay mas mababa sa y, printf x ay mas mababa sa y. 152 00:07:12,050 --> 00:07:16,140 Iba Pa kung ang x ay mas malaki kaysa sa y, printf x ay mas malaki kaysa y. 153 00:07:16,140 --> 00:07:21,210 Else printf x ay katumbas ng y-- at, muli, may mga backslash ay nagtatapos lamang 154 00:07:21,210 --> 00:07:24,160 para sa mga bagong linya sa gayon ay kung ikaw aktwal na tumakbo sa ganitong uri ng programa 155 00:07:24,160 --> 00:07:25,940 ito would makatarungan ilipat ang iyong cursor sa huli 156 00:07:25,940 --> 00:07:28,100 sa susunod na linya ng screen. 157 00:07:28,100 --> 00:07:31,270 >> Ngayon, samantala Scratch nagkaroon ng iba pang mas sopistikadong mga tampok, lamang 158 00:07:31,270 --> 00:07:34,320 ilan sa kung saan kami ay pagpunta sa una ilipat sa ibabaw sa mundo ng C. 159 00:07:34,320 --> 00:07:37,010 At isa sa kanila ay tinatawag na isang listahan sa scratch. 160 00:07:37,010 --> 00:07:39,100 At ito ay isang espesyal na uri ng variable na 161 00:07:39,100 --> 00:07:42,840 pinapayagan ka na mag-imbak ng maramihang mga bagay sa loob nito pabalik, sa likod, sa likod, upang i-back. 162 00:07:42,840 --> 00:07:45,540 >> Sa C, ito ay hindi magkaroon mga listahan, per se, ngunit ang isang bagay 163 00:07:45,540 --> 00:07:48,090 na higit pa sa pangkalahatan tinatawag arrays, bagaman kami ay 164 00:07:48,090 --> 00:07:50,590 bumalik sa ibang pagkakataon ito semestre sa pagtingin sa isang bagay 165 00:07:50,590 --> 00:07:52,780 tinatawag na isang listahan, o talagang isang naka-link na listahan. 166 00:07:52,780 --> 00:07:55,510 Ngunit sa ngayon, ang pinakamalapit na katumbas sa C para sa amin 167 00:07:55,510 --> 00:07:57,345 ay pagpunta sa maging isang bagay tinatawag na isang array. 168 00:07:57,345 --> 00:07:59,740 At isang array ay lamang ng isang espesyal na uri ng variable 169 00:07:59,740 --> 00:08:03,160 na nagpapahintulot sa iyo upang mag-imbak ng data likod, sa likod, sa likod, sa likod. 170 00:08:03,160 --> 00:08:05,840 >> At, sa katunayan, sa simula, kung gusto naming upang ma-access 171 00:08:05,840 --> 00:08:09,030 ang unang elemento ng isang array o isang list-- at ako pagpunta sa tumawag ito, 172 00:08:09,030 --> 00:08:13,600 sa pamamagitan ng convention, argv, argument vector, ngunit higit pa sa na bago ang haba. 173 00:08:13,600 --> 00:08:17,090 Kung gusto kong upang makakuha ng sa unang elemento ng argv, sa mundo ng Scratch 174 00:08:17,090 --> 00:08:20,930 aktwal mong gawin ay karaniwang magbilangan mula sa 1. 175 00:08:20,930 --> 00:08:22,850 >> At kaya maaari ba akong makakuha item 1 of argv. 176 00:08:22,850 --> 00:08:26,310 Iyan na lamang kung paano MIT ipinatupad ang paniwala ng mga listahan. 177 00:08:26,310 --> 00:08:29,860 Ngunit sa C, ako pagpunta sa mas lamang lang sabihin, argv, 178 00:08:29,860 --> 00:08:32,758 na muli ay ang pangalan ng aking list-- o upang maging malinaw, isang array. 179 00:08:32,758 --> 00:08:34,549 At kung gusto ko ang unang elemento, pupuntahan ko 180 00:08:34,549 --> 00:08:37,890 gamitin square bracket, kung saan mo maaaring hindi kadalasang ginagamit sa ilalim ng isang keyboard. 181 00:08:37,890 --> 00:08:40,150 >> Ngunit 0 lamang ay nangangahulugan, kumuha ako sa una. 182 00:08:40,150 --> 00:08:42,160 Kaya kung minsan at bilang pagpasa sa oras, kami ay pagpunta 183 00:08:42,160 --> 00:08:44,570 upang simulan upang makita ang mga dichotomies pagitan Scratch at C, 184 00:08:44,570 --> 00:08:46,070 kung saan Scratch gumagamit ng isa. 185 00:08:46,070 --> 00:08:47,670 Kami ay nasa C gamitin 0 dito. 186 00:08:47,670 --> 00:08:49,420 Ngunit makikita mo mabilis na makita sa sandaling maunawaan mo 187 00:08:49,420 --> 00:08:52,920 ang pundasyon ng bawat wika, na anopa't mga bagay simulan upang makakuha ng lahat ng mga mas 188 00:08:52,920 --> 00:08:56,860 pamilyar sa pamamagitan ng pagsasanay at pagsasanay. 189 00:08:56,860 --> 00:08:59,700 >> Kaya sabihin aktwal na hitsura ngayon sa isang programa. 190 00:08:59,700 --> 00:09:04,031 Narito ang magiging unang sa aming C source code para sa kumpletong mga programa. 191 00:09:04,031 --> 00:09:06,280 At ang program kami ay pagpunta upang mag-alok para sa konsiderasyon 192 00:09:06,280 --> 00:09:09,340 ay ang isang bagay na katumbas sa na mas maaga Scratch piraso. 193 00:09:09,340 --> 00:09:13,210 >> Kaya sa dito, mayroon kaming kung ano ang arguably ang pinakasimpleng programa C 194 00:09:13,210 --> 00:09:15,410 maaari mong isulat na talaga ang isang bagay. 195 00:09:15,410 --> 00:09:18,250 Ngayon, kami ay tumingin nakaraan, para sa ngayon, ay kasama, 196 00:09:18,250 --> 00:09:21,190 karaniwang io.h, at ang mga anggulo bracket, at int, at walang laman, 197 00:09:21,190 --> 00:09:22,840 at ang kulot tirante, at ang gusto. 198 00:09:22,840 --> 00:09:25,390 >> At sabihin tumuon lamang sa ano, hindi bababa sa intuitively, 199 00:09:25,390 --> 00:09:26,860 maaaring tumalon out sa iyo na. 200 00:09:26,860 --> 00:09:30,300 Sa katunayan, main, hindi ko ginagawa kinakailangang malaman kung ano ito ay, 201 00:09:30,300 --> 00:09:34,580 ngunit halos tulad Scratch nagkaroon na kapag berdeng bandila click palaisipan piraso, 202 00:09:34,580 --> 00:09:39,070 kaya ang ginagawa C bilang isang programming language magkaroon ng isang pangunahing piraso ng code na 203 00:09:39,070 --> 00:09:43,380 ay naisakatuparan sa pamamagitan ng default. At walang pag aalinlangan, literal ito ay pagpunta sa ay tinatawag na main. 204 00:09:43,380 --> 00:09:44,720 >> Kaya pangunahing ay isang function. 205 00:09:44,720 --> 00:09:48,720 At ito ay isang espesyal na function na umiiral sa C na kapag nagpatakbo ka ng isang programa, 206 00:09:48,720 --> 00:09:52,720 ito ay pangunahing na ay makakakuha ng tumakbo sa pamamagitan ng default. Sa mundo ng simula, 207 00:09:52,720 --> 00:09:56,970 ito ay karaniwang kapag berde bandila nag-click na got tatakbo sa pamamagitan ng default. 208 00:09:56,970 --> 00:10:01,130 >> Samantala, nakakita kami ito bago, printf o i-print-format, na ang dahilan 209 00:10:01,130 --> 00:10:05,620 pagpunta sa maging isang function na ito ay may C, kasama ang isang buong grupo ng mga iba, 210 00:10:05,620 --> 00:10:10,140 na kalooban sa pana at oras muli, upang gawin eksakto 211 00:10:10,140 --> 00:10:12,450 bilang ang pangalan nito ay nagpapahiwatig, i-print ang isang bagay. 212 00:10:12,450 --> 00:10:13,500 Ano ang gusto naming i-print? 213 00:10:13,500 --> 00:10:15,770 Well, kami na sa pamamagitan ng nasasakupang mga letra 214 00:10:15,770 --> 00:10:18,680 tulad these-- kumusta mundo, backslash n sa loob ng double quotes, 215 00:10:18,680 --> 00:10:23,040 maaari naming sabihin printf eksakto kung ano ang i-print sa screen. 216 00:10:23,040 --> 00:10:26,430 >> Ngunit upang gawin na, sa kasamaang-palad namin 217 00:10:26,430 --> 00:10:30,010 kailangang gumawa ng isang bagay na ay na cryptic sa amin mga tao, 218 00:10:30,010 --> 00:10:34,510 ngunit hindi bababa sa ito ay medyo readable-- matalim isama, karaniwang io.h, int, 219 00:10:34,510 --> 00:10:39,340 main, walang bisa, printf, ang lahat ng mga kahima-himala incantations lang namin nakita sa screen. 220 00:10:39,340 --> 00:10:42,470 Ngunit namin talagang kung pumunta mas arcane pa rin. 221 00:10:42,470 --> 00:10:47,140 unang kailangan namin upang i-translate ang code sumulat tayo sa machine code. 222 00:10:47,140 --> 00:10:51,370 At isipin ang mula noong nakaraang linggo na machine, ng hindi bababa sa ang mga alam namin dito, 223 00:10:51,370 --> 00:10:54,450 sa pagtatapos ng araw lamang maunawaan zero at mga. 224 00:10:54,450 --> 00:10:58,100 >> At ang aking Diyos, kung kami ay upang isulat ang mga zero at mga upang aktwal na programa, 225 00:10:58,100 --> 00:11:01,260 gagawin ito napaka, masyadong mabilis tumagal ng kasiyahan sa labas ng kahit ano. 226 00:11:01,260 --> 00:11:05,150 Ngunit ito ay lumiliko out, per noong nakaraang linggo, na ang mga pattern ng mga zero at mga 227 00:11:05,150 --> 00:11:06,400 na lang ay espesyal na kahulugan. 228 00:11:06,400 --> 00:11:08,500 Sa ilang mga konteksto, maaaring sila ibig sabihin ng mga numero. 229 00:11:08,500 --> 00:11:11,840 >> Sa ilang mga konteksto, maaari nilang sabihin mga titik, o kulay, o anumang bilang 230 00:11:11,840 --> 00:11:14,710 ng iba pang mga abstractions nasasabog sa. 231 00:11:14,710 --> 00:11:18,450 Ngunit tulad ng iyong computer ay may isang CPU, Central Processing Unit, 232 00:11:18,450 --> 00:11:20,390 o ang talino sa loob ng iyong computer. 233 00:11:20,390 --> 00:11:22,240 Ito ay karaniwang Intel sa loob, dahil na 234 00:11:22,240 --> 00:11:24,900 isa sa mga pinakamalaking kumpanya na gumagawa ng CPUs para sa mga computer. 235 00:11:24,900 --> 00:11:28,910 >> Well, Intel CPUs at iba pa lamang ay nagpasya nang maaga 236 00:11:28,910 --> 00:11:33,970 na ang ilang mga pattern ng mga zero at iyan ay mangangahulugang tiyak na mga bagay. 237 00:11:33,970 --> 00:11:37,040 Ang ilang mga pattern ng mga zero at mga ay ibig sabihin, i-print ito sa screen, 238 00:11:37,040 --> 00:11:39,710 o magdagdag ng mga ito ng dalawang mga numero, o ibawas ang dalawang numero, 239 00:11:39,710 --> 00:11:43,310 o galaw ng mga piraso ng data mula sa memorya ng aking computer sa paglipas dito, 240 00:11:43,310 --> 00:11:47,870 o anumang bilang ng iba pang mga mababang antas, ngunit sa huli kapaki-pakinabang, mga operasyon. 241 00:11:47,870 --> 00:11:53,022 Ngunit, thankfully, namin ang mga tao ay hindi pagpunta sa kailangan upang malaman na ito antas ng detalye. 242 00:11:53,022 --> 00:11:56,230 Sa katunayan, gusto lamang noong nakaraang panahon, na kung saan kami lumilipad ang isip muli, at muli, at muli, 243 00:11:56,230 --> 00:11:58,930 gusali mula napakababang antas primitives tulad zero at mga 244 00:11:58,930 --> 00:12:01,160 sa mas mataas na antas ng konsepto tulad ng mga numero, at mga titik, 245 00:12:01,160 --> 00:12:04,330 at mga kulay, at iba pa, upang maaari naming bilang programmer 246 00:12:04,330 --> 00:12:07,080 tumayo sa mga balikat ng iba na dumating bago sa amin 247 00:12:07,080 --> 00:12:11,260 at gumamit ng software na ang ibang mga tao ay may nakasulat na bago us-- 248 00:12:11,260 --> 00:12:14,340 namely mga programa na tinatawag compiler. 249 00:12:14,340 --> 00:12:17,770 >> C ay isang wika na ay karaniwang naipon, 250 00:12:17,770 --> 00:12:22,130 na nangangahulugan na-convert mula source code sa makina code. 251 00:12:22,130 --> 00:12:25,230 Sa partikular, kung ano ang ibig sabihin nito ay na kung mayroon ka sa iyong source 252 00:12:25,230 --> 00:12:29,530 code na ikaw mismo sumulat, bilang namin sa lalong madaling panahon ay sa sandali lamang sa screen, 253 00:12:29,530 --> 00:12:33,140 at nais mong i-convert ito sa huli sa machine code-- 254 00:12:33,140 --> 00:12:37,100 mga zero at mga bago na lamang ang iyong Mac o iyong PC 255 00:12:37,100 --> 00:12:41,230 understands-- mayroon ka ng isang unang feed na source code sa bilang 256 00:12:41,230 --> 00:12:46,340 input sa isang espesyal na programa na tinatawag na isang tagatala, 257 00:12:46,340 --> 00:12:48,974 ang output ng na kung saan namin dapat makita ay machine code. 258 00:12:48,974 --> 00:12:51,890 At, sa katunayan, huling oras namin talked tungkol sa, talaga, sa dulo ng araw, 259 00:12:51,890 --> 00:12:52,610 pagtugon sa suliranin. 260 00:12:52,610 --> 00:12:53,360 Mayroon kayong inputs. 261 00:12:53,360 --> 00:12:54,318 At mayroon ka outputs. 262 00:12:54,318 --> 00:12:56,560 At mayroon ka ng ilang mga uri ng algorithm sa gitna. 263 00:12:56,560 --> 00:12:59,830 >> Algorithm ay maaaring tiyak maging ipinatupad sa software, 264 00:12:59,830 --> 00:13:02,900 tulad ng nakita natin sa pseudocode noong nakaraang linggo at dahil kakailanganin namin makita na may aktwal na code 265 00:13:02,900 --> 00:13:03,490 ngayong linggo. 266 00:13:03,490 --> 00:13:06,430 At sa gayon ang isang compiler talagang lamang ay may isang hanay ng mga algorithm sa loob 267 00:13:06,430 --> 00:13:10,060 ng mga ito na malaman kung paano convert ang mga espesyal na mga keyword, 268 00:13:10,060 --> 00:13:12,180 tulad main, at printf, at iba pa na kami lang 269 00:13:12,180 --> 00:13:17,620 Nakita sa ang mga pattern ng mga zero at mga na Intel loob at iba pang mga CPUs 270 00:13:17,620 --> 00:13:20,020 talagang nauunawaan. 271 00:13:20,020 --> 00:13:22,460 Kaya kung paano ang gagawin namin ito? 272 00:13:22,460 --> 00:13:24,470 Saan kami makakuha ng isang compiler? 273 00:13:24,470 --> 00:13:26,400 >> Karamihan sa atin dito ay may isang Mac o isang PC. 274 00:13:26,400 --> 00:13:29,152 At ikaw ay nagpapatakbo ng Mac OS, o Windows, o Linux, o Solaris, 275 00:13:29,152 --> 00:13:30,860 o anumang bilang ng iba pang mga mga operating system. 276 00:13:30,860 --> 00:13:32,568 At, sa katunayan, maaari naming pumunta out papunta sa web 277 00:13:32,568 --> 00:13:35,710 at i-download ng isang tagatala para sa iyong Mac o iyong PC 278 00:13:35,710 --> 00:13:37,360 para sa iyong partikular na operating system. 279 00:13:37,360 --> 00:13:39,617 Ngunit Gusto namin ang lahat ng maging sa iba't ibang mga pahina, kaya na magsalita. 280 00:13:39,617 --> 00:13:41,450 Gusto naming magkaroon ng bahagyang iba't ibang mga configuration. 281 00:13:41,450 --> 00:13:43,210 At mga bagay ay hindi gumagana sa lahat ng mga parehong. 282 00:13:43,210 --> 00:13:45,280 At, sa katunayan, ang mga araw marami sa amin ay hindi gumagamit 283 00:13:45,280 --> 00:13:47,516 software na tumatakbo lamang sa aming laptops. 284 00:13:47,516 --> 00:13:49,390 Sa halip, gamitin namin ang isang bagay tulad ng isang browser na 285 00:13:49,390 --> 00:13:52,930 ay nagbibigay-daan sa amin upang ma-access ang web-based application sa cloud. 286 00:13:52,930 --> 00:13:55,630 At sa ibang pagkakataon sa semestre, kami ay gawin eksakto na. 287 00:13:55,630 --> 00:13:59,660 Susubukan naming magsulat ng mga aplikasyon o software hindi gumagamit code-- C, 288 00:13:59,660 --> 00:14:02,860 ngunit ang iba pang mga wika tulad ng sawa at JavaScript-- na tumakbo sa cloud. 289 00:14:02,860 --> 00:14:05,860 >> At upang gawin iyon, tayo mismo sa panahon ng semestre 290 00:14:05,860 --> 00:14:11,890 ay tunay na gumamit ng isang ulap-based kapaligiran na kilala bilang CS50 IDE. 291 00:14:11,890 --> 00:14:16,030 Ito ay isang web-based programming kapaligiran, o isinama unlad 292 00:14:16,030 --> 00:14:20,610 kapaligiran, IDE, na binuo sa ibabaw ng ilang open source software na tinatawag na Cloud 9. 293 00:14:20,610 --> 00:14:22,966 At hindi na namin na ginawa ng ilang paturo simplifications dito 294 00:14:22,966 --> 00:14:25,840 sa gayon ay upang itago ang ilang mga tampok sa ang unang linggo na hindi namin kailangan, 295 00:14:25,840 --> 00:14:27,770 matapos na kung saan maaari mong ipakita ang mga ito at gawin ang karamihan 296 00:14:27,770 --> 00:14:29,400 anumang nais mo sa kapaligiran. 297 00:14:29,400 --> 00:14:32,470 >> At ito ay nagbibigay-daan sa amin, masyadong, upang pre-install ng ilang mga software. 298 00:14:32,470 --> 00:14:35,330 Mga bagay na tulad ng isang tinatawag na CS50 library, na kung saan kami ay sa lalong madaling panahon makita ang 299 00:14:35,330 --> 00:14:39,210 ay nagbibigay sa amin sa C na may ilang karagdagang pag-andar. 300 00:14:39,210 --> 00:14:44,392 Kaya kung ikaw ay pupunta sa, sa huli, CS50.io, ipo-prompt upang mag-log in, 301 00:14:44,392 --> 00:14:46,350 at sa sandaling gawin mo at lumikha ng account para sa libre, 302 00:14:46,350 --> 00:14:52,150 ikaw ay maaaring na ang isang kapaligiran na mukhang lubos na tulad nito. 303 00:14:52,150 --> 00:14:53,760 >> Ngayon, ito ay sa default mode. 304 00:14:53,760 --> 00:14:55,650 Lahat ng bagay ay maganda at maliwanag sa screen. 305 00:14:55,650 --> 00:14:57,941 Marami sa atin ay may isang ugali ng nagtatrabaho sa CS50 piraso na 306 00:14:57,941 --> 00:14:59,150 medyo late sa gabi. 307 00:14:59,150 --> 00:15:02,400 At kaya ang ilan sa inyo ay maaaring ginusto na on ito sa night mode, kaya na magsalita. 308 00:15:02,400 --> 00:15:05,550 >> Ngunit, sa huli, ano ang ikaw ay pagpunta upang makita ang loob ng CS50 IDE 309 00:15:05,550 --> 00:15:08,340 ay tatlong natatanging mga areas-- isang lugar sa kaliwa kung saan 310 00:15:08,340 --> 00:15:12,604 ang iyong mga file ay pagpunta sa maging sa cloud, isang lugar sa kanang tuktok 311 00:15:12,604 --> 00:15:14,270 kung saan ang iyong code ay pagpunta sa maging nae-edit. 312 00:15:14,270 --> 00:15:16,650 Magagawa mong upang buksan indibidwal na mga tab para sa anumang programa 313 00:15:16,650 --> 00:15:19,670 na sinulat mo ito semestre loob ng na tuktok na kanang sulok. 314 00:15:19,670 --> 00:15:23,070 At pagkatapos ay pinaka-arcanely, at pa powerfully, 315 00:15:23,070 --> 00:15:26,610 ay pagpunta sa maging ang bagay na ito sa bottom kilala bilang isang terminal window. 316 00:15:26,610 --> 00:15:29,450 >> Ito ay isang lumang paaralan Command Line Interface, 317 00:15:29,450 --> 00:15:32,240 o CLI, na nagbibigay-daan mong execute command 318 00:15:32,240 --> 00:15:35,260 sa computer-- sa kasong ito, ang computer sa ang cloud-- 319 00:15:35,260 --> 00:15:39,090 gumawa ng mga bagay tulad ng itala ang iyong code mula sa source code sa makina code, 320 00:15:39,090 --> 00:15:43,600 upang patakbuhin ang iyong mga programa, o upang simulan ang iyong web server, o i-access ang iyong database, 321 00:15:43,600 --> 00:15:47,454 at anumang bilang ng iba pang mga diskarte na magsisimula kami upang gamitin bago ang haba. 322 00:15:47,454 --> 00:15:49,370 Ngunit upang makarating doon, hindi namin pagpunta sa aktwal na magkaroon ng 323 00:15:49,370 --> 00:15:51,240 upang mag-online at simulan ang paglalaro. 324 00:15:51,240 --> 00:15:54,399 At upang gawin iyon, sabihin muna simulan tinkering sa main, 325 00:15:54,399 --> 00:15:55,940 at isulat ang mga pangunahing bahagi ng isang programa. 326 00:15:55,940 --> 00:15:59,170 At gamitin natin na function printf, na ginamit namin nang mas maaga, 327 00:15:59,170 --> 00:16:01,050 lamang sabihin ng isang bagay. 328 00:16:01,050 --> 00:16:04,910 >> Kaya dito ako na sa loob ng CS50 IDE. 329 00:16:04,910 --> 00:16:05,930 Ko na naka-log in advance. 330 00:16:05,930 --> 00:16:07,360 At ako'y puspos screened window. 331 00:16:07,360 --> 00:16:09,670 At kaya, sa huli, ikaw masyadong sa pagdating problema 332 00:16:09,670 --> 00:16:12,960 ay sundin katulad na hakbang na ay magbibigay ng online na dokumentasyon. 333 00:16:12,960 --> 00:16:16,360 Kaya hindi mo na kailangang mag-alala tungkol sa lubhang kaganyak-ganyak ang bawat maliit na teknikal na hakbang 334 00:16:16,360 --> 00:16:17,730 ay siya kong ginagawa dito ngayon. 335 00:16:17,730 --> 00:16:19,222 >> Ngunit makakakuha ka ng isang screen na tulad nito. 336 00:16:19,222 --> 00:16:20,430 Mangyayari kong maging sa gabi mode. 337 00:16:20,430 --> 00:16:22,944 At maaari mong magpasaya ang lahat ng bagay up sa pamamagitan ng hindi gabi mode. 338 00:16:22,944 --> 00:16:24,860 At sa katapusan ng araw, ikaw ay pagpunta upang makita 339 00:16:24,860 --> 00:16:30,090 ang tatlong pangunahing areas-- ang file browser sa kaliwa, ang code ay tabs up tuktok, 340 00:16:30,090 --> 00:16:32,430 at ang terminal window sa ibaba. 341 00:16:32,430 --> 00:16:34,890 >> Hayaan akong sige at isulat ang aking unang programa. 342 00:16:34,890 --> 00:16:42,300 Pupunta ako sa preemptively pumunta sa File, I-save, at i-save ang aking file bilang hello.c. 343 00:16:42,300 --> 00:16:46,850 Sa katunayan, sa pamamagitan ng convention, ang anumang mga programa namin isulat na nakasulat sa C wika 344 00:16:46,850 --> 00:16:49,739 ay dapat na pinangalanan ng isang bagay dot c, sa pamamagitan ng convention. 345 00:16:49,739 --> 00:16:53,030 Kaya ako ng pagpunta upang pangalanan ito hello.c, dahil Gusto ko lang kamustahin sa mundo. 346 00:16:53,030 --> 00:16:54,820 Ngayon ako pagpunta upang mag-zoom out at i-click ang I-save. 347 00:16:54,820 --> 00:16:58,180 At lahat ng kailangan kong dito ngayon ay isang tab kung saan ang maaari kong simulan ang pagsusulat code. 348 00:16:58,180 --> 00:16:59,490 >> Ito ay hindi pagpunta sa sumulat ng libro. 349 00:16:59,490 --> 00:17:00,300 Ang ibig sabihin nito wala. 350 00:17:00,300 --> 00:17:02,750 At kaya kahit na ako napalitan ito sa mga zero at mga bago, 351 00:17:02,750 --> 00:17:05,390 ang CPU ay pagpunta sa magkaroon ng walang ideya kung ano ang nangyayari sa paligid. 352 00:17:05,390 --> 00:17:14,170 Ngunit kung ako ay sumulat ng mga linya na tumutugma up gamit ni C conventions-- C pagkatao, 353 00:17:14,170 --> 00:17:20,150 muli, ito language-- may syntax tulad ito, printf kumusta world-- at na ako 354 00:17:20,150 --> 00:17:22,210 gotten komportable sa paggawa na ito sa paglipas ng panahon. 355 00:17:22,210 --> 00:17:24,510 Kaya hindi ko sa tingin ko ginawa anumang mga typographical error. 356 00:17:24,510 --> 00:17:27,910 >> Ngunit, walang paltos, ang pinakaunang oras na gawin mo ito, ikaw ay. 357 00:17:27,910 --> 00:17:31,090 At kung ano ako tungkol sa upang gawin baka very well hindi gumagana para sa iyo sa unang pagkakataon. 358 00:17:31,090 --> 00:17:33,610 At na ay ganap na ganap ang OK, dahil sa ngayon mo 359 00:17:33,610 --> 00:17:37,662 maaaring lamang makita ang isang buong pulutong ng kabaguhan, ngunit sa paglipas ng panahon sa sandaling makuha mo pamilyar 360 00:17:37,662 --> 00:17:39,870 sa environment na ito, at wikang ito, at iba pa, 361 00:17:39,870 --> 00:17:42,370 ikaw ay magsisimulang upang makita ang mga bagay na ay alinman sa tama o hindi tama. 362 00:17:42,370 --> 00:17:44,369 >> At ito ay kung ano ang Fellows ng pagtuturo at kurso 363 00:17:44,369 --> 00:17:48,780 assistants makakuha kaya magandang sa paglipas ng panahon, ay pagtutuklas mga pagkakamali o mga bug sa iyong code. 364 00:17:48,780 --> 00:17:52,110 Ngunit inaangkin ko na Walang mga bug sa code na ito. 365 00:17:52,110 --> 00:17:53,990 Kaya ako ngayon ay nais na patakbuhin ang program na ito. 366 00:17:53,990 --> 00:17:57,440 >> Ngayon sa aking sariling Mac o PC, ako sa ang ugali ng pag-double click icon 367 00:17:57,440 --> 00:17:59,350 kapag gusto kong magpatakbo ng ilang mga programa. 368 00:17:59,350 --> 00:18:01,080 Ngunit hindi iyon ang modelo dito. 369 00:18:01,080 --> 00:18:04,570 Sa environment na ito, na kung saan ay CS50 IDE. 370 00:18:04,570 --> 00:18:07,192 Kami ay gumagamit ng isang operating sistema na tinatawag na Linux. 371 00:18:07,192 --> 00:18:09,900 Linux ay nakapagpapaalaala ng isa pang operating system, karaniwang kilala 372 00:18:09,900 --> 00:18:10,850 bilang Unix. 373 00:18:10,850 --> 00:18:16,340 At Linux ay partikular na kilala para sa pagkakaroon ng isang Command Line Environment, CLI. 374 00:18:16,340 --> 00:18:20,070 Ngayon, kami ay gumagamit ng isang tiyak na lasa ng Linux tinatawag Ubuntu. 375 00:18:20,070 --> 00:18:22,770 At Ubuntu ay lamang ng isang tiyak na bersyon ng Linux. 376 00:18:22,770 --> 00:18:27,900 >> Ngunit ang mga Linux ang ayon sa mga araw na ito gawin ang tunay na sumama sa graphical user interface. 377 00:18:27,900 --> 00:18:30,360 At ang isa mangyari namin upang ay gumagamit dito ay web-based. 378 00:18:30,360 --> 00:18:32,735 Kaya ito ay maaaring tumingin kahit na isang maliit na naiiba mula sa isang bagay 379 00:18:32,735 --> 00:18:35,310 mo ang iyong sarili ay maaaring magkaroon ng nakita o tumakbo sa nakaraan. 380 00:18:35,310 --> 00:18:37,910 >> Kaya ako pagpunta sa sige ngayon at gawin ang sumusunod. 381 00:18:37,910 --> 00:18:40,950 Ko na naka-save ang file bilang hello.c. 382 00:18:40,950 --> 00:18:47,350 Ako pagpunta sa sige at type clanghello.c Kaya Clang 383 00:18:47,350 --> 00:18:49,850 para sa C wika ay isang tagatala. 384 00:18:49,850 --> 00:18:51,952 Ito ay pre-install sa CS50 IDE. 385 00:18:51,952 --> 00:18:54,910 At maaari mong ganap na i-download at i-install ito sa iyong sariling Mac o PC. 386 00:18:54,910 --> 00:18:57,910 >> Ngunit, muli, ikaw ay hindi magkaroon ng lahat ng ang pre-configuration ginawa sa inyo. 387 00:18:57,910 --> 00:19:00,940 Kaya sa ngayon, ako lang pagpunta sa tumakbo clanghello.c. 388 00:19:00,940 --> 00:19:03,240 At ngayon mapansin ang syntax na ito dito ay tuluyang 389 00:19:03,240 --> 00:19:06,930 mapagtanto lamang ay nangangahulugan na ako sa isang folder o direktoryo na tinatawag na workspace. 390 00:19:06,930 --> 00:19:11,030 Ito dollar sign ay lamang convention para sa kahulugan, i-type ang iyong mga utos dito. 391 00:19:11,030 --> 00:19:14,560 >> Ito ay kung ano ang tinatawag na isang prompt, lamang sa pamamagitan ng convention ay dollar sign. 392 00:19:14,560 --> 00:19:19,130 At kung pumunta ako magpatuloy ngayon at i-click ang Ipasok, wala tila sa nangyari. 393 00:19:19,130 --> 00:19:20,930 Ngunit iyon lamang ang tunay na isang magandang bagay. 394 00:19:20,930 --> 00:19:23,650 Ang mas mababa na ang mangyayari sa iyong screen, mas malamang na 395 00:19:23,650 --> 00:19:26,710 ang iyong code ay upang maging tama, hindi bababa sa syntactically. 396 00:19:26,710 --> 00:19:29,120 >> Kaya kung nais kong patakbuhin ito programa, kung ano ang gagawin ko? 397 00:19:29,120 --> 00:19:33,770 Well, ito ay lumiliko out na ang mga default na pangalan sa pamamagitan ng convention 398 00:19:33,770 --> 00:19:38,854 para sa mga programa na hindi mo tukuyin ang isang pangalan para sa iyong programa ay lamang a.out. 399 00:19:38,854 --> 00:19:41,270 At ito syntax masyadong, bibigyan ka maging pamilyar sa bago ang haba. 400 00:19:41,270 --> 00:19:47,500 >> Dot iwa lamang ay nangangahulugan, hey, CS50 IDE, magpatakbo ng isang programa na tinatawag na a.out 401 00:19:47,500 --> 00:19:49,400 na sa loob ng aking kasalukuyang direktoryo. 402 00:19:49,400 --> 00:19:51,520 dot Ito ay nangangahulugan na ang kasalukuyang direktoryo. 403 00:19:51,520 --> 00:19:55,040 At kami makita kung ano ang iba pang tulad sequences ng mga character ay nangangahulugan bago ang haba. 404 00:19:55,040 --> 00:19:58,430 >> Kaya dito namin pumunta, Ipasok, kumusta mundo. 405 00:19:58,430 --> 00:20:00,080 At mapapansin mo, na kung ano ang nangyari? 406 00:20:00,080 --> 00:20:01,580 Hindi lamang i-print ito kumusta mundo. 407 00:20:01,580 --> 00:20:05,990 Ito rin ay inilipat ang cursor sa susunod na linya. 408 00:20:05,990 --> 00:20:07,160 >> At bakit ay na? 409 00:20:07,160 --> 00:20:12,400 Ano ang code na aming sinulat bago na nakasisiguro na ang cursor ng gagawin 410 00:20:12,400 --> 00:20:14,882 pumunta sa susunod na linya? 411 00:20:14,882 --> 00:20:16,840 Nakakatawang bagay tungkol sa isang computer ay lamang ito ay pagpunta 412 00:20:16,840 --> 00:20:18,570 gawin literal kung ano ang iyong sabihin sa ito upang gawin. 413 00:20:18,570 --> 00:20:26,050 >> Kaya kung sabihin mo ito sa printf hello, comma, space, world, malapit quote, 414 00:20:26,050 --> 00:20:29,090 ito ay literal lamang ang pagpunta upang i-print ang mga character. 415 00:20:29,090 --> 00:20:31,980 Ngunit ako ay ang mga espesyal na karakter sa dulo, pagpapabalik, backslash n. 416 00:20:31,980 --> 00:20:34,230 At na kung ano nakasisiguro na ang karakter nagpunta 417 00:20:34,230 --> 00:20:36,570 sa susunod na linya ng screen. 418 00:20:36,570 --> 00:20:38,097 >> Sa katunayan, hayaan mo akong pumunta at gawin ito. 419 00:20:38,097 --> 00:20:39,430 Hayaan akong sige at tanggalin ito. 420 00:20:39,430 --> 00:20:41,180 Ngayon, mapapansin na ang tuktok ng aking screen mayroong 421 00:20:41,180 --> 00:20:42,890 isang maliit na pulang ilaw sa ang tab na nagpapahiwatig, 422 00:20:42,890 --> 00:20:45,047 hey, hindi na-save mo ang iyong mga file. 423 00:20:45,047 --> 00:20:47,880 Kaya ako pagpunta sa sige sa control S o command S, i-save ang file. 424 00:20:47,880 --> 00:20:51,130 Ngayon ito goes-- nagpunta para sa isang moment-- green. 425 00:20:51,130 --> 00:20:53,760 At ngayon ito ay bumalik sa lamang ang pagiging isang malapit icon. 426 00:20:53,760 --> 00:21:01,860 >> Kung ako ngayon tumakbo clanghello.c muli, Ipasok, tuldok slash, a.out, Ipasok, 427 00:21:01,860 --> 00:21:04,110 makikita mo na ito pa rin nagtrabaho. 428 00:21:04,110 --> 00:21:06,020 Ngunit ito ay arguably isang maliit na maraming surot. 429 00:21:06,020 --> 00:21:08,714 Sa ngayon, ang aking prompt-- workspace, at pagkatapos na dollar sign, 430 00:21:08,714 --> 00:21:10,880 at pagkatapos ay ang aking aktwal na prompt-- ay ang lahat sa parehong linya. 431 00:21:10,880 --> 00:21:14,540 Kaya ito ay tiyak na isang Aesthetic bug, kahit na ito ay hindi talagang isang lohikal bug. 432 00:21:14,540 --> 00:21:16,250 >> Kaya ako pagpunta sa i-undo kung ano ko lang ginawa. 433 00:21:16,250 --> 00:21:18,560 Pupunta ako sa muling palabas ng pelikula a.out. 434 00:21:18,560 --> 00:21:22,710 Paunawa Idinagdag ko na ang newline character likod. 435 00:21:22,710 --> 00:21:24,280 Ko na nai-save ang file. 436 00:21:24,280 --> 00:21:31,630 >> Kaya ako ng pagpunta sa gawin uli a.out, at- dammit, isang bug, isang bug na nangangahulugang tama. 437 00:21:31,630 --> 00:21:35,020 Kaya ang bug ay na kahit na Idinagdag ko ang backslash n doon, 438 00:21:35,020 --> 00:21:41,180 re-save, muling tumakbo ang programa, ang pag-uugali ay ang parehong. 439 00:21:41,180 --> 00:21:42,640 Bakit nais na maging? 440 00:21:42,640 --> 00:21:43,910 >> Ako nawawala ang isang hakbang, right? 441 00:21:43,910 --> 00:21:47,620 Iyon mahalagang hakbang mas maaga ay na ikaw ay may to-- kapag binago mo ang iyong source code, 442 00:21:47,620 --> 00:21:49,610 ito ay lumiliko out naman ay iyong patakbuhin ito sa pamamagitan ng compiler 443 00:21:49,610 --> 00:21:51,102 muli upang makakuha ka ng mga bagong machine code. 444 00:21:51,102 --> 00:21:52,810 At ang machine code, ang mga zero at mga bago, 445 00:21:52,810 --> 00:21:56,260 ay pagpunta sa maging halos magkapareho, ngunit hindi ganap na ito, dahil kailangan namin, 446 00:21:56,260 --> 00:21:57,510 siyempre, na ang mga bagong linya. 447 00:21:57,510 --> 00:22:02,640 >> Kaya upang ayusin ito, ako pagpunta sa kailangan upang muling palabas ng pelikula clanghello.c, ipasok, tuldok 448 00:22:02,640 --> 00:22:03,800 slash, a.out. 449 00:22:03,800 --> 00:22:08,402 At ngayon, hello world ay bumalik sa kung saan ko inaasahan ito upang maging. 450 00:22:08,402 --> 00:22:09,610 Kaya ito ay ang lahat ng fine at mabuti. 451 00:22:09,610 --> 00:22:13,150 Ngunit a.out ay isang medyo bobo pangalan para sa isang programa, kahit na ito ang mangyayari sa maging, 452 00:22:13,150 --> 00:22:16,530 para sa mga makasaysayang dahilan, ang default-- ibig sabihin assembly outputs. 453 00:22:16,530 --> 00:22:20,780 >> Ngunit ipaalam sa akin sige dito at gawin ito sa ibang paraan. 454 00:22:20,780 --> 00:22:24,760 Gusto ko ang aking hello world program upang aktwal na tinatawag na kumusta. 455 00:22:24,760 --> 00:22:28,320 Kaya kung ito ay isang icon sa aking desktop, hindi na ito ay a.out. 456 00:22:28,320 --> 00:22:29,730 Gusto Ito ay tinatawag na hello. 457 00:22:29,730 --> 00:22:33,660 >> Kaya upang gawin ito, ito ay lumiliko out na Clang, tulad ng maraming mga programa, 458 00:22:33,660 --> 00:22:37,980 sinusuportahan command line argumento, o flags, o switch, 459 00:22:37,980 --> 00:22:39,600 na lang maka-impluwensya nito pag-uugali. 460 00:22:39,600 --> 00:22:45,160 Sa partikular, Clang ay sumusuporta sa isang gitling o flag, na kung saan pagkatapos ay tumatagal ng isang pangalawang salita. 461 00:22:45,160 --> 00:22:48,190 Sa kasong ito, makikita ko nagkataon, ngunit makatwirang, tumawag ito hello. 462 00:22:48,190 --> 00:22:50,710 Ngunit maaari kong tumawag ito anumang bagay gusto ko, maliban a.out, na kung saan 463 00:22:50,710 --> 00:22:52,390 ay sa halip bukod sa point. 464 00:22:52,390 --> 00:22:55,640 >> At pagkatapos lamang tukuyin ang pangalan ng file ang gusto kong sumulat ng libro. 465 00:22:55,640 --> 00:22:59,190 Kaya ngayon kahit na sa simula ng utos ko pa rin magkaroon Clang, 466 00:22:59,190 --> 00:23:01,410 sa dulo ng command Ako pa rin ay filename, 467 00:23:01,410 --> 00:23:05,520 Ako ngayon ay mayroon ang mga command line argumento, ang mga flags na sinasabi, 468 00:23:05,520 --> 00:23:11,180 oh, maiba ako, output-o, ang isang file na tinatawag na halo, hindi ang default a.out. 469 00:23:11,180 --> 00:23:13,810 >> Kaya kung ako pindutin ang Enter ngayon, wala Parang may nangyari. 470 00:23:13,810 --> 00:23:17,900 At, gayon pa man, ngayon ko magagawa dot slash kumusta. 471 00:23:17,900 --> 00:23:19,089 Kaya ito ay ang parehong programa. 472 00:23:19,089 --> 00:23:21,380 Ang mga zero at mga bago ay magkapareho sa dulo ng araw. 473 00:23:21,380 --> 00:23:24,210 >> Ngunit ang mga ito sa loob ng dalawang iba't ibang files-- a.out, 474 00:23:24,210 --> 00:23:26,490 kung saan ay ang unang bersyon at lamang maloko pinangalanan, 475 00:23:26,490 --> 00:23:30,250 at ngayon hello, na kung saan ay isang mas mas nakakahimok pangalan para sa isang programa. 476 00:23:30,250 --> 00:23:33,195 Ngunit, totoo lang, ako ay hindi kailanman pagpunta sa tandaan na ito muli, 477 00:23:33,195 --> 00:23:34,070 at muli, at muli. 478 00:23:34,070 --> 00:23:36,411 At, talaga, bilang isulat namin mas masalimuot na mga programa, 479 00:23:36,411 --> 00:23:38,160 ang mga utos ikaw ay pagpunta sa may sa sumulat 480 00:23:38,160 --> 00:23:40,920 ay pagpunta upang makakuha ng kahit mas kumplikado pa rin. 481 00:23:40,920 --> 00:23:41,940 >> At kaya hindi mag-alala. 482 00:23:41,940 --> 00:23:46,220 Ito ay lumiliko out na ang mga tao bago sa amin ay may natanto sila ay masyadong 483 00:23:46,220 --> 00:23:47,530 nagkaroon na ito eksaktong parehong problema. 484 00:23:47,530 --> 00:23:50,900 Sila ay masyadong ay hindi mag-enjoy pagkakaroon upang type medyo matagal, arcane utos, 485 00:23:50,900 --> 00:23:52,200 pabayaan mag-isa tandaan ang mga ito. 486 00:23:52,200 --> 00:23:56,070 At kaya ang mga tao sa harap namin ay may ginawa iba pang mga programa na gawing mas madali 487 00:23:56,070 --> 00:23:57,670 upang ipunin ang iyong software. 488 00:23:57,670 --> 00:24:01,609 >> At, sa katunayan, isa tulad programa ay tinatawag Make. 489 00:24:01,609 --> 00:24:03,150 Kaya ako pagpunta sa sige at gawin ito. 490 00:24:03,150 --> 00:24:05,691 Pupunta ako upang i-undo lahat ng bagay ako lang ginawa sa mga sumusunod na paraan. 491 00:24:05,691 --> 00:24:07,690 Hayaan akong i-type LS. 492 00:24:07,690 --> 00:24:10,980 At mapapansin mo tatlong bagay- a.out, at isang star, hello 493 00:24:10,980 --> 00:24:12,810 at isang bituin, at hello.c. 494 00:24:12,810 --> 00:24:14,730 Sana, ito ay dapat maging isang maliit na madaling maunawaan, 495 00:24:14,730 --> 00:24:18,220 insofar bilang mas maaga nagkaroon wala sa workspace na ito. 496 00:24:18,220 --> 00:24:21,240 Nagkaroon walang na ako ay nilikha hanggang sinimulan namin class. 497 00:24:21,240 --> 00:24:22,840 >> At ako nilikha hello.c. 498 00:24:22,840 --> 00:24:24,544 Ako pagkatapos ay pinagsama-sama ito, at tinawag na a.out. 499 00:24:24,544 --> 00:24:27,460 At pagkatapos ay ako compiled ito muli bahagyang sa ibang paraan at tinawag na hello. 500 00:24:27,460 --> 00:24:32,830 Kaya Mayroon akong tatlong mga file sa direktoryong ito, sa folder na ito na tinatawag na workspace. 501 00:24:32,830 --> 00:24:35,005 Ngayon, maaari ko bang makita na pati na rin kung ako mag-zoom out talaga. 502 00:24:35,005 --> 00:24:37,530 >> Kung ako mag-zoom out dito at tumingin sa na tuktok na kanang 503 00:24:37,530 --> 00:24:39,940 sulok, tulad ng ipinangako sa kaliwa kamay bahagi ng iyong screen 504 00:24:39,940 --> 00:24:42,990 ay palaging pagpunta upang ipakita sa iyo kung ano ang sa iyong account, kung ano ang 505 00:24:42,990 --> 00:24:44,790 sa loob ng CS50 IDE. 506 00:24:44,790 --> 00:24:46,680 At doon ay tatlong mga file doon. 507 00:24:46,680 --> 00:24:49,070 >> Kaya gusto kong kumuha alisan ng a.out at kumusta. 508 00:24:49,070 --> 00:24:51,275 At bilang maaari mong isipin intuitively, ikaw 509 00:24:51,275 --> 00:24:53,400 maaaring ayusin ng control click o i-right click sa mga ito. 510 00:24:53,400 --> 00:24:54,590 At ito maliit na menu nagpa-pop up. 511 00:24:54,590 --> 00:24:57,170 Maaari mong i-download ang file, patakbuhin ito, i-preview ito, i-refresh, palitan ang pangalan, 512 00:24:57,170 --> 00:24:57,700 o kung ano ang hindi. 513 00:24:57,700 --> 00:25:00,260 >> At hindi ko na lang tanggalin, at ito ay pumunta ang layo. 514 00:25:00,260 --> 00:25:05,260 Ngunit sabihin gawin mga bagay na may isang command line para sa ngayon, sa gayon ay upang makakuha ng komportable 515 00:25:05,260 --> 00:25:07,010 Kaugnay nito, at gawin ang mga sumusunod. 516 00:25:07,010 --> 00:25:12,345 Ako pagpunta sa sige at mag-alis a.out sa pamamagitan ng pagtype literal rma.out. 517 00:25:12,345 --> 00:25:14,890 Ito ay lumiliko out, ang utos para sa pag-alis o pagtanggal ng isang bagay, 518 00:25:14,890 --> 00:25:16,280 ay hindi mag-alis o tanggalin. 519 00:25:16,280 --> 00:25:21,260 >> Ito ay higit pa succinctly RM, lamang upang i-save ang sa iyo ng ilang mga keystroke, at pindutin ang Enter. 520 00:25:21,260 --> 00:25:24,707 Ngayon kami ay pagpunta sa maging tila cryptically alisin regular file a.out. 521 00:25:24,707 --> 00:25:27,040 Hindi ko talaga alam kung ano ang isang irregular file ay magiging pa. 522 00:25:27,040 --> 00:25:28,660 Ngunit ko nais na alisin ito. 523 00:25:28,660 --> 00:25:30,150 >> Kaya ako pagpunta sa i-type y para sa yes. 524 00:25:30,150 --> 00:25:31,940 O maaari kong i-type ito, at pindutin ang Enter. 525 00:25:31,940 --> 00:25:33,440 At, muli, wala tila sa mangyayari. 526 00:25:33,440 --> 00:25:35,840 Ngunit iyon ay, sa pangkalahatan, isang magandang bagay. 527 00:25:35,840 --> 00:25:40,490 >> Kung nagta-type ako LS oras na ito, ano ang dapat kong makita? 528 00:25:40,490 --> 00:25:44,930 Sana, lamang hello and hello.c. 529 00:25:44,930 --> 00:25:47,286 Ngayon, bilang isang bukod, makikita mo mapansin ito star, asterisk, 530 00:25:47,286 --> 00:25:48,660 na sa dulo ng aking mga programa. 531 00:25:48,660 --> 00:25:50,201 At sila ay nagpapakita rin up sa berde. 532 00:25:50,201 --> 00:25:53,970 Iyon ay lamang CS50 IDE ng paraan ng cluing ka sa ang katunayan 533 00:25:53,970 --> 00:25:55,280 na iyan ay hindi source code. 534 00:25:55,280 --> 00:25:58,880 Iyan ay isang executable, isang runnable programa na maaari mong aktwal na patakbuhin 535 00:25:58,880 --> 00:26:01,020 sa pamamagitan ng paggawa dot slash, at pagkatapos ito ay pangalan. 536 00:26:01,020 --> 00:26:05,860 >> Ngayon, ipaalam sa akin sige at mag-alis ito, rm kumusta, Ipasok, alisin regular 537 00:26:05,860 --> 00:26:08,010 maghain hello, yes. 538 00:26:08,010 --> 00:26:11,180 At ngayon, kung nagta-type ako LS, hindi namin pabalik sa hello.c. 539 00:26:11,180 --> 00:26:13,917 Subukan ang hindi upang tanggalin ang iyong aktwal na source code. 540 00:26:13,917 --> 00:26:16,250 Kahit na may mga tampok binuo sa CS50 IDE kung saan 541 00:26:16,250 --> 00:26:19,870 maaari kang pumunta sa pamamagitan ng iyong kasaysayan ng pagbabago at rewind sa oras kung hindi mo sinasadyang 542 00:26:19,870 --> 00:26:23,660 tanggalin ang isang bagay, gawin alintanahin bilang bawat ang mga senyas oo o hindi, 543 00:26:23,660 --> 00:26:25,381 ng kung ano ang iyong aktwal na nais na gawin. 544 00:26:25,381 --> 00:26:27,380 At kung pumunta ako hanggang sa tuktok kaliwang kamay sulok dito, 545 00:26:27,380 --> 00:26:30,696 lahat na nananatiling ay hello.c. 546 00:26:30,696 --> 00:26:32,570 Kaya mayroong bunches ng iba pang mga utos na ikaw 547 00:26:32,570 --> 00:26:37,550 maaaring magsagawa sa mundo ng Linux, isa rito ay, muli, Makipagkaibigan. 548 00:26:37,550 --> 00:26:40,180 At kami ay pagpunta sa Gumawa ang aking mga programa na ngayon bilang mga sumusunod. 549 00:26:40,180 --> 00:26:43,270 >> Sa halip ng paggawa kalatungin, sa halip ng paggawa kalatungin-o, 550 00:26:43,270 --> 00:26:45,860 Pupunta ako sa kailangan lang literal type, gumawa ng halo. 551 00:26:45,860 --> 00:26:49,630 At ngayon mapansin, ako hindi pag-type gumawa hello.c. 552 00:26:49,630 --> 00:26:50,910 Ako ay pag-type gumawa ng halo. 553 00:26:50,910 --> 00:26:54,840 >> At ang program na ito Gawin na lumapit kumuha CS50 IDE, at higit pa 554 00:26:54,840 --> 00:26:57,090 sa pangkalahatan ay may Linux, ay isang programa na ay 555 00:26:57,090 --> 00:26:59,120 pagpunta sa gumawa ng isang programa na tinatawag Hello. 556 00:26:59,120 --> 00:27:03,680 At ito ay pagpunta sa ipinapalagay, sa pamamagitan ng convention, na kung ang program na ito ay maaaring gawin, 557 00:27:03,680 --> 00:27:09,030 ito ay pagpunta sa gawin mula sa isang pinagmulan code file na nagtatapos sa tuldok c, hello.c. 558 00:27:09,030 --> 00:27:12,210 >> Kaya kung ako pindutin ang Enter ngayon, mapapansin na ang utos na ay naisakatuparan 559 00:27:12,210 --> 00:27:14,340 ay talagang mas mahaba bago kaysa dati. 560 00:27:14,340 --> 00:27:16,670 At iyon ay dahil hindi namin preconfigured CS50 IDE na magkaroon 561 00:27:16,670 --> 00:27:19,878 ilang karagdagang mga tampok na binuo sa na hindi namin lamang pa kailangan, ngunit sa lalong madaling panahon ay. 562 00:27:19,878 --> 00:27:23,470 Ngunit ang pangunahing bagay upang mapagtanto ngayon ay mayroon akong isang Kamusta programa. 563 00:27:23,470 --> 00:27:27,080 >> Kung nagta-type ako LS muli, ako magkaroon ng isang kumusta programa. 564 00:27:27,080 --> 00:27:32,070 At maaari ba akong magpatakbo ng ito sa dot slash a.out, hindi, 565 00:27:32,070 --> 00:27:35,590 dahil ang buong punto ng mga ito exercise ay dot slash kumusta. 566 00:27:35,590 --> 00:27:38,089 At ngayon, mayroon ko ang aking hello world program. 567 00:27:38,089 --> 00:27:39,880 Kaya ang paglipat ng pasulong, kami ay halos palaging lamang 568 00:27:39,880 --> 00:27:42,088 pagpunta sa sumulat ng libro sa aming mga programa paggamit ng command Make. 569 00:27:42,088 --> 00:27:45,300 At pagkatapos ay kami ay pagpunta sa patakbuhin ang mga ito sa pamamagitan ng dot slash, at pangalan ng program. 570 00:27:45,300 --> 00:27:49,610 Ngunit mapagtanto kung ano Gumawa ginagawa para iyo, ay hindi ito mismo ay isang tagatala. 571 00:27:49,610 --> 00:27:53,310 Ito lamang ay isang convenience program na nakakaalam kung paano upang palitawin ang isang compiler 572 00:27:53,310 --> 00:27:56,470 na tumakbo sa gayon ay maaari mo ang iyong sarili na gamitin ito. 573 00:27:56,470 --> 00:28:00,220 >> Ano ang iba pang mga utos na umiiral sa Linux, at sa turn ang CS50 IDE? 574 00:28:00,220 --> 00:28:03,107 Susubukan naming lalong madaling panahon makita na mayroong isang CD command, Baguhin Directory. 575 00:28:03,107 --> 00:28:05,190 Ito ay nagpapahintulot sa iyo sa loob ng iyong command line interface 576 00:28:05,190 --> 00:28:07,610 upang sumulong, at likod, at buksan up ng iba't ibang mga folder 577 00:28:07,610 --> 00:28:08,860 walang gamit ang iyong mouse. 578 00:28:08,860 --> 00:28:12,470 >> LS nakita natin, na nakatayo para sa listahan ang mga file sa kasalukuyang directory. 579 00:28:12,470 --> 00:28:14,650 Gumawa Dir, maaari mong marahil simulan upang ipahiwatig 580 00:28:14,650 --> 00:28:18,150 kung ano ang mga ibig sabihin now-- gumawa direktoryo, kung nais mong lumikha ng isang folder. 581 00:28:18,150 --> 00:28:21,270 RM para tanggalin, RM Dir para alisin directory-- at ang mga ito, 582 00:28:21,270 --> 00:28:24,160 muli, ang mga command line katumbas ng kung ano ang iyong 583 00:28:24,160 --> 00:28:26,945 ay maaaring gawin sa CS50 IDE gamit ang iyong mouse. 584 00:28:26,945 --> 00:28:28,820 Ngunit makikita mo sa lalong madaling panahon mahanap na kung minsan ito lamang ay 585 00:28:28,820 --> 00:28:30,610 ng maraming mas mabilis na gawin bagay na may isang keyboard, 586 00:28:30,610 --> 00:28:33,690 at sa huli ng isang pulutong mas malakas na. 587 00:28:33,690 --> 00:28:36,440 >> Ngunit ito ay mahirap na magtaltalan na anumang bagay na-paggawa namin sa ngayon 588 00:28:36,440 --> 00:28:39,990 ay ang lahat na malakas, kapag ang lahat ng kami ay sinasabi ay, kumusta mundo. 589 00:28:39,990 --> 00:28:43,740 At, sa katunayan, ako hardcoded ang salita hello world sa aking programa. 590 00:28:43,740 --> 00:28:45,530 Walang dynamism pa. 591 00:28:45,530 --> 00:28:49,320 Scratch ay isang order ng magnitude mas kawili-wiling noong nakaraang linggo. 592 00:28:49,320 --> 00:28:51,220 >> At kaya sabihin makakuha ng doon. 593 00:28:51,220 --> 00:28:55,310 Tingnan natin ang isang hakbang patungo sa na sa pamamagitan ng paraan ng ilan sa mga pag-andar. 594 00:28:55,310 --> 00:28:59,470 Kaya hindi lamang ang C sumama sa printf, at bunches ng iba pang mga function 595 00:28:59,470 --> 00:29:01,850 ilan sa kung saan kami ay makita sa paglipas ng panahon, ito ay hindi 596 00:29:01,850 --> 00:29:05,760 gawin itong lahat na madali karapatan sa labas ng pintuang-daan sa pagkuha ng user input. 597 00:29:05,760 --> 00:29:08,140 >> Sa katunayan, ang isa sa mga kahinaan ng mga wika tulad ng C, 598 00:29:08,140 --> 00:29:10,140 at kahit na Java at pa iba, ay na ito ay hindi 599 00:29:10,140 --> 00:29:15,860 gawing madali upang makakuha lamang ng mga bagay tulad integers mula sa mga gumagamit, o mga string, mga salita, 600 00:29:15,860 --> 00:29:19,970 at mga parirala, pabayaan mag-isa ang mga bagay tulad lumulutang halaga punto, o tunay na mga numero 601 00:29:19,970 --> 00:29:23,240 may mga decimal point, at talagang mahaba ang mga numero, dahil kakailanganin namin sa lalong madaling panahon makita. 602 00:29:23,240 --> 00:29:27,000 Kaya ito listahan ng mga function dito, ang mga ito ay tulad ng iba pang mga piraso Scratch puzzle 603 00:29:27,000 --> 00:29:31,090 na kami ay pre-install sa CS50 IDE na gagamitin namin para sa ilang linggo 604 00:29:31,090 --> 00:29:34,010 bilang training wheels ng mga uri, at sa wakas kumuha ng mga ito off, at hanapin 605 00:29:34,010 --> 00:29:37,210 sa ilalim ng hood, marahil, sa kung paano ang mga bagay na ito ay ipinatupad. 606 00:29:37,210 --> 00:29:40,460 >> Ngunit upang gawin ito, sabihin aktwal na magsulat ng isang programa. 607 00:29:40,460 --> 00:29:41,770 Hayaan akong magpatuloy ngayon. 608 00:29:41,770 --> 00:29:44,750 At ako pagpunta upang lumikha ng isang bagong maghain iki-click mo ito maliit na plus, 609 00:29:44,750 --> 00:29:45,970 at pag-click New File. 610 00:29:45,970 --> 00:29:49,250 >> Pupunta ako upang i-save ito sa susunod na isa bilang, sabihin nating, string.c, 611 00:29:49,250 --> 00:29:50,750 dahil gusto kong i-play sa mga string. 612 00:29:50,750 --> 00:29:53,990 At string sa C ay lamang isang pagkakasunod-sunod ng mga character. 613 00:29:53,990 --> 00:29:56,090 Kaya ngayon sabihin sige at gawin ang mga sumusunod. 614 00:29:56,090 --> 00:30:01,204 >> Isama ang standard IO.h-- at ito ay lumiliko out standard IO, 615 00:30:01,204 --> 00:30:03,360 IO ay nangangahulugan lamang input at output. 616 00:30:03,360 --> 00:30:05,920 Kaya ito lumiliko out na ang linyang ito dito ay kung ano 617 00:30:05,920 --> 00:30:08,140 ay ang mga karatig sa amin upang gamitin printf. 618 00:30:08,140 --> 00:30:10,410 Printf, siyempre, ay gumagawa ng output. 619 00:30:10,410 --> 00:30:15,000 Kaya upang magamit printf, ito ay lumiliko out kailangan mong magkaroon ng ito linya ng code 620 00:30:15,000 --> 00:30:16,040 sa tuktok ng iyong mga file. 621 00:30:16,040 --> 00:30:18,456 >> At kami ay bumalik sa kung ano ang na talagang ay nangangahulugan bago ang haba. 622 00:30:18,456 --> 00:30:20,400 Ito ay lumiliko out na sa anumang C program isulat ko, 623 00:30:20,400 --> 00:30:23,640 Mayroon akong upang simulan ito sa code na ganito ang hitsura. 624 00:30:23,640 --> 00:30:26,860 At mapapansin mo CS50 IDE, at iba pang mga pinagsamang pag-unlad 625 00:30:26,860 --> 00:30:30,050 kapaligiran tulad nito, ay pagpunta sa subukan bilang pinakamahusay na 626 00:30:30,050 --> 00:30:31,780 maaari nilang upang tapusin ang iyong pag-iisip. 627 00:30:31,780 --> 00:30:35,930 Sa katunayan, isang sandali ang nakalipas kung i-undo ko ano ko lang ginawa, ako hit ang Enter. 628 00:30:35,930 --> 00:30:39,160 >> Ako pagkatapos ay pindutin open curly suhay, pindutin ang Enter muli. 629 00:30:39,160 --> 00:30:40,430 At natapos ang aking pag-iisip. 630 00:30:40,430 --> 00:30:45,140 Ito ay ibinigay sa akin ng isang bagong linya, yupi hindi kukulangin for nice pangkakanyahan dahilan kami makita. 631 00:30:45,140 --> 00:30:48,559 At pagkatapos ito ay awtomatikong ibinigay sa akin na kulot suhay upang tapusin ang aking pag-iisip. 632 00:30:48,559 --> 00:30:50,600 Ngayon, ito ay hindi laging hulaan kung ano ang gusto mong gawin. 633 00:30:50,600 --> 00:30:53,620 Ngunit sa malaking bahagi, ginagawa nito save ka ng ilang mga keystroke. 634 00:30:53,620 --> 00:30:59,560 Kaya ang isang sandali ang nakalipas, tumakbo namin ito program-- kumusta, mundo, at pagkatapos ay pinagsama-sama ito, 635 00:30:59,560 --> 00:31:00,460 at pagkatapos ay tumakbo ito. 636 00:31:00,460 --> 00:31:01,867 Ngunit walang dynamism dito. 637 00:31:01,867 --> 00:31:03,700 Paano kung gusto naming gawin ang isang bagay naiiba? 638 00:31:03,700 --> 00:31:07,630 Well, kung ano kung ako pinaghahanap upang aktwal na makakuha ng isang string mula sa user? 639 00:31:07,630 --> 00:31:11,250 Ako pagpunta sa gumamit ng isang piraso puzzle tinatawag eksakto na- makakuha string. 640 00:31:11,250 --> 00:31:15,860 >> Lumiliko out sa C na kapag hindi mo nais upang magbigay ng input sa isang piraso puzzle, 641 00:31:15,860 --> 00:31:19,360 o mas maayos sa isang function, ikaw literal lamang gawin bukas panaklong, 642 00:31:19,360 --> 00:31:20,430 malapit panaklong. 643 00:31:20,430 --> 00:31:25,540 Kaya ito ay bilang bagaman diyan ay walang puting kahon upang i-type sa. 644 00:31:25,540 --> 00:31:27,720 Ang say bloke bago ay nagkaroon ng isang maliit na puting kahon. 645 00:31:27,720 --> 00:31:29,660 Wala kaming na puting kahon na ngayon. 646 00:31:29,660 --> 00:31:33,310 >> Ngunit kapag ang tawag ko get string, ako nais na ilagay ang resulta sa isang lugar. 647 00:31:33,310 --> 00:31:37,680 Kaya isang napaka-karaniwang paradaym sa C ay upang tumawag sa isang function, tulad ng get string dito, 648 00:31:37,680 --> 00:31:41,070 at pagkatapos ay tindahan nito return value. 649 00:31:41,070 --> 00:31:44,450 Ito ay ang resulta ng kanyang pagsisikap sa isang bagay. 650 00:31:44,450 --> 00:31:47,630 >> At kung ano ang tayuan sa programming, 651 00:31:47,630 --> 00:31:53,450 kung sa scratch o ngayon C, na kami ay maaaring gamitin upang aktwal na tindahan ng isang bagay? 652 00:31:53,450 --> 00:31:55,990 Tinatawag ito ng isang variable, right? 653 00:31:55,990 --> 00:32:00,320 At sa simula, hindi namin talagang pag-aalaga kung ano ang nangyayari sa mga variable. 654 00:32:00,320 --> 00:32:02,170 >> Ngunit sa kasong ito, kami talagang gawin. 655 00:32:02,170 --> 00:32:03,719 Pupunta ako sa sabihin string. 656 00:32:03,719 --> 00:32:05,510 At pagkatapos ay maaari kong tumawag ito kahit ano ang gusto ko. 657 00:32:05,510 --> 00:32:08,340 Ako pagpunta sa tumawag ito pangalan, ay makakakuha makakuha string. 658 00:32:08,340 --> 00:32:10,250 >> At ngayon kahit na ikaw ay isang maliit na bago sa ito, 659 00:32:10,250 --> 00:32:11,984 mapansin na ako ng kulang ilang mga detalye. 660 00:32:11,984 --> 00:32:13,150 Ako forgetting isang semi-colon. 661 00:32:13,150 --> 00:32:14,400 Kailangan ko upang matapos-iisip na ito. 662 00:32:14,400 --> 00:32:17,480 Kaya ako pagpunta sa ilipat ang aking cursor, at pindutin semi-colon doon. 663 00:32:17,480 --> 00:32:19,130 At ano ang ko na lang ginawa? 664 00:32:19,130 --> 00:32:21,440 Sa ganitong linya ng code, number 5 sa sandaling ito, 665 00:32:21,440 --> 00:32:23,799 Ako ng pagtawag get string na walang inputs. 666 00:32:23,799 --> 00:32:26,090 Kaya walang maliit na puting kahon tulad ng mga save block ay may. 667 00:32:26,090 --> 00:32:28,590 >> Lang ako sa sinasabi, hey, computer, kumuha ako ng isang string. 668 00:32:28,590 --> 00:32:31,390 Ang katumbas sign ay hindi tunay equal sign, per se. 669 00:32:31,390 --> 00:32:33,790 Ito ay ang assignment operator, na nangangahulugan, 670 00:32:33,790 --> 00:32:37,860 hey, computer, ilipat ang halaga mula sa kanan sa ibabaw ng mga kaliwa. 671 00:32:37,860 --> 00:32:40,480 At sa kaliwa, mayroon akong mga sumusunod. 672 00:32:40,480 --> 00:32:43,580 >> Hey, computer, bigyan ako ng isang string isang pagkakasunod-sunod ng mga character. 673 00:32:43,580 --> 00:32:45,637 At tumawag na string Name. 674 00:32:45,637 --> 00:32:47,220 At ako ay hindi kahit na sa tawag na ito Name. 675 00:32:47,220 --> 00:32:49,970 >> kaya kong tumawag ito, conventionally, isang bagay tulad ng S, 676 00:32:49,970 --> 00:32:52,900 marami tulad ng ginamit namin i upang tawagan ang variable i. 677 00:32:52,900 --> 00:32:54,829 Ngunit ngayon kailangan kong gawin ang isang bagay sa mga ito. 678 00:32:54,829 --> 00:32:57,370 Gusto Ito ay medyo bobo sa subukan kino-compile ang code, tumatakbo 679 00:32:57,370 --> 00:32:59,410 ang program na ito, kahit na Nakakakuha ako ng isang string, 680 00:32:59,410 --> 00:33:01,580 dahil ito ay pa rin lamang pagpunta sa sabihin kumusta mundo. 681 00:33:01,580 --> 00:33:06,140 >> Ngunit paano kung ang gusto kong baguhin ito. 682 00:33:06,140 --> 00:33:07,940 Bakit hindi ko ito? 683 00:33:07,940 --> 00:33:11,632 Percent s, comma s. 684 00:33:11,632 --> 00:33:13,090 At ito ay isang maliit na misteriyoso pa rin. 685 00:33:13,090 --> 00:33:15,560 >> Kaya hayaan mo akong gumawa ng aking mga variable mas malinaw. 686 00:33:15,560 --> 00:33:17,510 Hayaan akong pangalanan ito variable Name. 687 00:33:17,510 --> 00:33:20,230 At sabihin makita kung hindi namin maaaring manunudyo bukod kung ano ang nangyayari dito. 688 00:33:20,230 --> 00:33:22,770 >> Kaya sa limang linya, Nakakakuha ako ng isang string. 689 00:33:22,770 --> 00:33:25,620 At ako sa pag-iimbak na string, kahit anong ang gumagamit ay nai-type sa 690 00:33:25,620 --> 00:33:28,430 sa kanyang keyboard, sa isang variable na tinatawag na Pangalan. 691 00:33:28,430 --> 00:33:30,590 At ito ay lumiliko out na printf ay hindi lamang 692 00:33:30,590 --> 00:33:34,220 kumuha ng isang argument sa double quotes, isa input sa loob ng double quotes. 693 00:33:34,220 --> 00:33:39,100 >> Maaari itong tumagal ng dalawa, o tatlo, o higit pa, tulad na ang pangalawa, o pangatlo, o pang-apat, 694 00:33:39,100 --> 00:33:42,320 ay ang lahat ng mga pangalan ng variable, o partikular halaga, 695 00:33:42,320 --> 00:33:48,610 na nais mong plug sa, pabago-bago, na string sa mga panipi. 696 00:33:48,610 --> 00:33:52,110 Sa ibang salita, kung ano ay mali sa mga ito? 697 00:33:52,110 --> 00:33:57,920 Kung sinabi ko lang kumusta pangalan, backslash n, na-save ang aking file, pinagsama-sama ang aking code, 698 00:33:57,920 --> 00:34:01,660 at tumakbo ito, ano ang mangyayari? 699 00:34:01,660 --> 00:34:05,139 >> Lamang Ito ay pagpunta sa sabihin, hello pangalan, literal N-A-M-E, 700 00:34:05,139 --> 00:34:07,900 na kung saan ay uri ng bobo dahil ito ay hindi naiiba mula sa mundo. 701 00:34:07,900 --> 00:34:10,400 Kaya kahit ano sa mga panipi ay ano literal ay makakakuha ng naka-print na. 702 00:34:10,400 --> 00:34:12,520 Kaya kung nais ko na magkaroon ng isang placeholder doon, 703 00:34:12,520 --> 00:34:14,422 Ako tunay na kailangan na gumamit ng ilang mga espesyal na syntax. 704 00:34:14,422 --> 00:34:17,380 At ito ay lumiliko out kung basahin mo ang dokumentasyon para sa printf function, 705 00:34:17,380 --> 00:34:21,320 ito ay sabihin sa iyo na kung gumagamit ka ng porsiyento s, 706 00:34:21,320 --> 00:34:23,920 maaari mong kapalit ang halaga ng isang sumusunod. 707 00:34:23,920 --> 00:34:27,190 >> Pagkatapos ng isang comma pagkatapos na double quote, kailangan lang 708 00:34:27,190 --> 00:34:29,179 isulat ang pangalan ng variable na nais mong 709 00:34:29,179 --> 00:34:33,790 mag-plug in sa format na code, o format specifier, 710 00:34:33,790 --> 00:34:35,469 porsiyento s para sa mga string. 711 00:34:35,469 --> 00:34:39,190 At ngayon kung ako na-save ang aking file, pumunta ako pabalik pababa sa aking terminal. 712 00:34:39,190 --> 00:34:42,870 At i-type Ako Magkakaroon ng String, dahil, muli, ang pangalan ng ito 713 00:34:42,870 --> 00:34:45,510 file na pinili ko bago ay string.c. 714 00:34:45,510 --> 00:34:48,510 >> Kaya ako pagpunta sa sabihin Gumawa String, ipasok. 715 00:34:48,510 --> 00:34:51,550 Oh aking kabutihan, tumingin sa lahat ng ang mga pagkakamali na ginawa namin na. 716 00:34:51,550 --> 00:34:55,540 At ito is-- kung ano, ito ay talagang tulad ng isang anim, pitong line program? 717 00:34:55,540 --> 00:34:57,790 Kaya ito ay kung saan ito maaari tunay mabilis na makakuha ng napakalaki. 718 00:34:57,790 --> 00:35:00,890 >> Ito terminal window ay ngayon lang regurgitated 719 00:35:00,890 --> 00:35:03,230 isang malaking bilang ng mga mensahe ng error. 720 00:35:03,230 --> 00:35:07,560 Tiyak, hindi ko magkaroon ng higit error mensahe kaysa sa ako ay may linya ng code. 721 00:35:07,560 --> 00:35:08,680 Kaya kung ano ang nangyayari? 722 00:35:08,680 --> 00:35:10,920 >> Well, ang pinakamahusay na diskarte na gawin sa anumang oras mo 723 00:35:10,920 --> 00:35:13,710 magkasalubong ng isang napakalaki listahan ng mga error tulad na, 724 00:35:13,710 --> 00:35:16,690 ay mag-scroll pabalik, hanapin ang utos ikaw na lang tumakbo, na kung saan sa aking kaso 725 00:35:16,690 --> 00:35:18,020 ay gumawa ng string. 726 00:35:18,020 --> 00:35:21,630 Tumingin sa kung ano gumawa did, at na ang dahilan na long Clang command, hindi sang-ayon doon. 727 00:35:21,630 --> 00:35:22,950 >> Ngunit ang pulang ay masama. 728 00:35:22,950 --> 00:35:24,750 Green ay sinusubukan upang maging magiliw at helpful. 729 00:35:24,750 --> 00:35:26,140 Ngunit ito ay pa rin masama, sa kasong ito. 730 00:35:26,140 --> 00:35:27,510 Ngunit kung saan ay ito masama? 731 00:35:27,510 --> 00:35:31,450 >> String.c, limang linya, character limang. 732 00:35:31,450 --> 00:35:32,930 Kaya ito ay lamang ng sentido convention. 733 00:35:32,930 --> 00:35:36,060 Something colon isang bagay ay nangangahulugan linya ng numero at karakter number. 734 00:35:36,060 --> 00:35:41,080 Error, ang paggamit ng hindi nagbigay-alam identifier string. 735 00:35:41,080 --> 00:35:42,900 Ibig mo bang sabihin standard sa? 736 00:35:42,900 --> 00:35:45,530 >> Kaya, sa kasamaang-palad, Clang ay sinusubukan upang maging kapaki-pakinabang. 737 00:35:45,530 --> 00:35:46,850 Ngunit ito ay mali, sa kasong ito. 738 00:35:46,850 --> 00:35:49,350 Hindi, Clang, ako ay hindi ibig sabihin standard IO. 739 00:35:49,350 --> 00:35:51,070 sinadya ko na sa linya ng isa, yes. 740 00:35:51,070 --> 00:35:53,420 >> Ngunit limang linya ay ito ang isa dito. 741 00:35:53,420 --> 00:35:57,040 At Clang ay hindi maunawaan S-T-R-I-N-G. 742 00:35:57,040 --> 00:36:01,490 Ito ay isang hindi nagbigay-alam identifier, isang salita ito lamang ay hindi kailanman nakita bago. 743 00:36:01,490 --> 00:36:05,730 At iyon ay dahil C, ang wika kami ay sumusulat code sa ngayon, 744 00:36:05,730 --> 00:36:08,070 Wala variable na tinatawag na string. 745 00:36:08,070 --> 00:36:11,380 >> Ito ay hindi, sa pamamagitan ng default, suporta isang bagay na tinatawag na isang string. 746 00:36:11,380 --> 00:36:16,750 Iyan ay isang CS50 piraso ng magulong pag-uusap, ngunit napaka-maginoo. 747 00:36:16,750 --> 00:36:18,600 Ngunit maaari kong ayusin ito tulad ng sumusunod. 748 00:36:18,600 --> 00:36:22,090 >> Kung idagdag ko isang linya ng code sa tuktok ng programang ito, 749 00:36:22,090 --> 00:36:27,890 isama CS50.h, na kung saan ay isa pang file isang lugar sa loob ng CS50 IDE, sa isang lugar 750 00:36:27,890 --> 00:36:30,820 sa hard drive, kaya na magsalita, ng Ubuntu operating system 751 00:36:30,820 --> 00:36:33,590 na ako sa pagtakbo, na ay ang file na 752 00:36:33,590 --> 00:36:38,740 pagpunta sa magturo sa operating sistema kung ano ang isang string ay, lamang 753 00:36:38,740 --> 00:36:41,930 tulad ng standard io.h ay ang file sa operating system na 754 00:36:41,930 --> 00:36:44,430 pagpunta sa magturo sa mga ito kung ano printf ay. 755 00:36:44,430 --> 00:36:46,810 >> Sa katunayan, kami ay may tapat na paraan isang napaka-katulad na mensahe 756 00:36:46,810 --> 00:36:50,600 kung IO ay admitido karaniwang Io.h at tried sa gumamit printf. 757 00:36:50,600 --> 00:36:53,632 Kaya ako pagpunta sa sige at lamang kumuha Control L upang i-clear ang aking screen. 758 00:36:53,632 --> 00:36:56,340 O maaari mong i-type malinaw at ito ay lamang i-clear ang terminal window. 759 00:36:56,340 --> 00:36:58,020 Ngunit maaari mo pa ring mag-scroll pabalik sa panahon. 760 00:36:58,020 --> 00:37:01,100 >> At ako pagpunta sa muling palabas ng pelikula Gumawa String. 761 00:37:01,100 --> 00:37:03,660 Cross ang mga daliri ko oras na ito, ang Enter. 762 00:37:03,660 --> 00:37:05,380 Oh Dios ko, ito ay nagtrabaho. 763 00:37:05,380 --> 00:37:09,280 ito ay nagpapakita sa akin ng isang mahabang misteriyoso utos iyon ay kung ano Gumawa nabuo sa pamamagitan Clang, 764 00:37:09,280 --> 00:37:10,460 ngunit walang mensahe ng error. 765 00:37:10,460 --> 00:37:12,460 Kaya Napagtanto, kahit na maaari kang makakuha ng ganap na 766 00:37:12,460 --> 00:37:14,480 bumagsak sa bilang ng mga mensahe ng error, 767 00:37:14,480 --> 00:37:17,540 ito lamang ay maaaring maging ito nakakainis cascading effect, kung saan Clang ay hindi maunawaan 768 00:37:17,540 --> 00:37:19,620 isang bagay, na nangangahulugan na ito pagkatapos ay hindi maunawaan ang susunod na salita, 769 00:37:19,620 --> 00:37:20,560 o sa susunod na linya. 770 00:37:20,560 --> 00:37:22,850 At kaya ito lamang chokes sa iyong code. 771 00:37:22,850 --> 00:37:24,440 Ngunit ang pag-aayos ay maaaring maging simple. 772 00:37:24,440 --> 00:37:27,822 At kaya laging tumutok sa mga pinakaunang linya ng output. 773 00:37:27,822 --> 00:37:29,530 At kung hindi mo gusto maunawaan ito, tingnan lamang 774 00:37:29,530 --> 00:37:32,480 para sa mga keyword na maaaring pahiwatig, at ang linya ng numero, 775 00:37:32,480 --> 00:37:34,650 at ang character, kung saan na pagkakamali ay maaaring maging. 776 00:37:34,650 --> 00:37:40,328 >> Ngayon hayaan mo akong magpatuloy at i-type dot slash, string, ipasok. 777 00:37:40,328 --> 00:37:44,340 Hm, hindi ito saying hello kahit ano. 778 00:37:44,340 --> 00:37:46,210 Bakit? 779 00:37:46,210 --> 00:37:48,170 Well, isipin ang, kung saan ito ay tumatakbo? 780 00:37:48,170 --> 00:37:53,730 >> Marahil ito ay natigil sa sandaling ito sa isang loop, kung ikaw ay, sa linya anim, 781 00:37:53,730 --> 00:37:56,950 dahil Kumuha String pamamagitan ng disenyo, nakasulat sa pamamagitan ng CS50 kawani, 782 00:37:56,950 --> 00:38:00,350 Literal na sinadya upang lamang umupo may naghihintay, at naghihintay, 783 00:38:00,350 --> 00:38:01,850 at naghihintay para sa isang string. 784 00:38:01,850 --> 00:38:03,792 Lahat ang ibig sabihin namin sa pamamagitan ng string ay pantao input. 785 00:38:03,792 --> 00:38:04,500 Kaya alam mo kung ano? 786 00:38:04,500 --> 00:38:05,166 Hayaan akong magpatuloy. 787 00:38:05,166 --> 00:38:08,704 At lamang sa isang kapritso, hayaan mo akong type ang aking pangalan, David, ipasok. 788 00:38:08,704 --> 00:38:10,120 Ngayon Mayroon akong isang mas dynamic na programa. 789 00:38:10,120 --> 00:38:11,240 Sinabi nito, hello David. 790 00:38:11,240 --> 00:38:16,280 >> Kung pumunta ako magpatuloy at patakbuhin ito muli, hayaan mo akong subukan sabihin ang pangalan Zamila, ipasok. 791 00:38:16,280 --> 00:38:17,940 At ngayon kami ay may isang dynamic na programa. 792 00:38:17,940 --> 00:38:19,380 Hindi ko pa hard-code mundo. 793 00:38:19,380 --> 00:38:21,760 Hindi ko pa hard-code pangalan, o David, o Zamila. 794 00:38:21,760 --> 00:38:25,350 >> Ngayon ito ay mas tulad ng mga programa alam namin, kung saan kung dalhin ito input, 795 00:38:25,350 --> 00:38:27,870 ito ang nagbibigay ng bahagyang naiiba output. 796 00:38:27,870 --> 00:38:31,020 Ngayon, ito ay hindi ang pinakamahusay na karanasan ng gumagamit, o UX. 797 00:38:31,020 --> 00:38:33,000 tumakbo ako sa programa. 798 00:38:33,000 --> 00:38:35,830 >> hindi ko alam kung ano ako dapat na maaaring gawin, maliban kung ako talagang tumingin sa 799 00:38:35,830 --> 00:38:37,290 o tandaan ang source code. 800 00:38:37,290 --> 00:38:39,640 Kaya sabihin gawin ang gumagamit karanasan ng isang maliit na mas mahusay 801 00:38:39,640 --> 00:38:41,240 sa pinakasimpleng ng mga bagay. 802 00:38:41,240 --> 00:38:44,782 Hayaan akong bumalik sa ito programa, at lang sabihin printf. 803 00:38:44,782 --> 00:38:48,870 >> At hayaan mo akong sige at sabihin ang pangalan, colon, at isang puwang, at pagkatapos ay isang semi-colon. 804 00:38:48,870 --> 00:38:51,170 At para lamang sa mga kicks, walang sumasagot na hampas n. 805 00:38:51,170 --> 00:38:52,980 At iyon ang sinadya, dahil hindi ko gusto 806 00:38:52,980 --> 00:38:54,590 ang prompt upang lumipat sa susunod na linya. 807 00:38:54,590 --> 00:38:58,800 >> Gusto kong, sa halip, gawin ito, gumawa ng string mag-recompile ang aking code sa bagong machine 808 00:38:58,800 --> 00:39:00,980 code dot slash string. 809 00:39:00,980 --> 00:39:02,460 Ah, ito ay lubhang mas prettier. 810 00:39:02,460 --> 00:39:05,780 Ngayon ko talaga alam kung ano ang computer nais sa akin na gawin, bigyan ito ng isang pangalan. 811 00:39:05,780 --> 00:39:10,020 >> Kaya ako pagpunta sa sige at i-type sa Rob, ipasok, at hello, Rob. 812 00:39:10,020 --> 00:39:13,640 Kaya, mapagtanto, ito ay pa rin, sa dulo ng araw, lamang ng siyam na linya programa. 813 00:39:13,640 --> 00:39:15,090 Ngunit nagsagawa kami ng mga hakbang na sanggol. 814 00:39:15,090 --> 00:39:18,380 >> Wrote namin ang isang linya na kung saan kami Pamilyar, printf, kumusta mundo. 815 00:39:18,380 --> 00:39:19,980 Pagkatapos namin undid ng kaunting iyon. 816 00:39:19,980 --> 00:39:21,560 At hindi na namin talagang ginagamit get string. 817 00:39:21,560 --> 00:39:23,362 At kami tossed na halaga sa isang variable. 818 00:39:23,362 --> 00:39:26,070 At pagkatapos namin nagpunta maaga at pinahusay ito ng karagdagang na may isang ikatlong linya. 819 00:39:26,070 --> 00:39:29,220 At ito umuulit proseso ng pagsulat ng software ay tunay na key. 820 00:39:29,220 --> 00:39:33,420 Sa CS50, at sa buhay sa pangkalahatan, dapat mong pangkalahatan ay hindi umupo, 821 00:39:33,420 --> 00:39:36,800 magkaroon ng isang programa sa isip, at subukan pagsulat ang buong sumpain bagay ng sabay-sabay. 822 00:39:36,800 --> 00:39:40,810 >> Ito, hindi maaaring hindi, magresulta sa paraan higit pang mga error kaysa sa ating sarili nakita dito. 823 00:39:40,810 --> 00:39:44,070 Kahit ako, sa araw na ito, patuloy na gumawa ng iba pang bobo pagkakamali, 824 00:39:44,070 --> 00:39:47,480 ay talagang mas mahirap pagkakamali na mas mahirap para malaman. 825 00:39:47,480 --> 00:39:52,095 Ngunit ikaw ay gumawa ng mas maraming mga pagkakamali ang mas mga linya ng code isulat mo ang lahat nang sabay-sabay. 826 00:39:52,095 --> 00:39:54,220 At kaya ito pagsasanay ng, magsulat ng isang maliit na piraso ng code 827 00:39:54,220 --> 00:39:57,930 na ikaw ay komportable sa, sumulat ng libro ito, patakbuhin ito, subukan ito mas pangkalahatang paraan, 828 00:39:57,930 --> 00:40:01,370 pagkatapos ay ilipat on-- tulad kaya lang namin itinatago layering at layering noong nakaraang linggo, 829 00:40:01,370 --> 00:40:04,190 gusali mula sa isang bagay very simple sa isang bagay mas kumplikado, 830 00:40:04,190 --> 00:40:05,200 gawin ang parehong dito. 831 00:40:05,200 --> 00:40:08,500 Huwag umupo, at subukan upang magsulat ng isang buong problema. 832 00:40:08,500 --> 00:40:10,780 Sa totoo lang gawin ang mga hakbang na sanggol. 833 00:40:10,780 --> 00:40:15,100 >> Ngayon, mga string ay hindi lahat na kapaki-pakinabang sa kanilang sarili. 834 00:40:15,100 --> 00:40:18,210 Gusto namin talagang, sa isip, tulad ng upang may iba pang dahilan sa aming toolkit. 835 00:40:18,210 --> 00:40:20,990 Kaya sabihin aktwal na gawin eksakto na. 836 00:40:20,990 --> 00:40:24,900 >> Hayaan akong magpatuloy ngayon at gumawa ng isang bahagyang kakaibang programa. 837 00:40:24,900 --> 00:40:28,320 At kami ay tumawag ito int.c, para sa integer. 838 00:40:28,320 --> 00:40:30,870 Ako pagpunta sa, katulad, isama CS550.h. 839 00:40:30,870 --> 00:40:33,060 Ako pagpunta sa isama ang standard IO. 840 00:40:33,060 --> 00:40:36,630 At na ay pagpunta sa maging pretty karaniwan sa mga unang ilang araw ng klase. 841 00:40:36,630 --> 00:40:39,050 >> At ako pagpunta sa handa aking sarili sa isang pangunahing pag-andar. 842 00:40:39,050 --> 00:40:43,370 At ngayon sa halip ng pagkuha ng isang string, sabihin sige at makakuha ng isang int. 843 00:40:43,370 --> 00:40:49,285 Sabihin tumawag ito i, at tumawag ito makakuha int, malapit parens, semi-colon. 844 00:40:49,285 --> 00:40:51,410 At ngayon sabihin gawin isang bagay na may ito, printf. 845 00:40:51,410 --> 00:40:56,190 >> Sabihin natin na isang bagay tulad ng hello, backslash n, comma i. 846 00:40:56,190 --> 00:41:00,010 Kaya ako medyo marami paggaya kung ano ako did sa isang sandali lamang ang nakalipas. 847 00:41:00,010 --> 00:41:01,660 Mayroon akong isang placeholder dito. 848 00:41:01,660 --> 00:41:05,150 Ako ay may kuwit i dito, dahil gusto kong mag-plug i sa placeholder iyon. 849 00:41:05,150 --> 00:41:07,250 >> Kaya sabihin sige at subukan ipon programang ito. 850 00:41:07,250 --> 00:41:10,060 Ang file ay tinatawag int.c. 851 00:41:10,060 --> 00:41:12,920 Kaya ako pagpunta sa sabihin, gumawa ng int, ipasok. 852 00:41:12,920 --> 00:41:16,420 Oh Dios ko, ngunit hindi sang-ayon, right? 853 00:41:16,420 --> 00:41:17,230 May isang di-tama. 854 00:41:17,230 --> 00:41:19,810 >> May isang sintaktik pagkakamali dito tulad na hindi ang programa maaari 855 00:41:19,810 --> 00:41:25,460 naipon sa loob int.c, linya pitong, karakter 27, error format 856 00:41:25,460 --> 00:41:28,400 tumutukoy type char lagyan ng star, anumang na ay. 857 00:41:28,400 --> 00:41:30,020 Ngunit ang argument uri ay int. 858 00:41:30,020 --> 00:41:33,110 >> Kaya dito, masyadong, kami ay hindi pagpunta to-- kahit na ngayon ay isang pulutong ng mga materyal, 859 00:41:33,110 --> 00:41:35,710 kami ay pagpunta upang mapuspos sa iyo ng absolutely bawat tampok ng C, 860 00:41:35,710 --> 00:41:38,070 at programming mas pangkalahatang paraan, sa loob lamang ng mga unang ilang linggo. 861 00:41:38,070 --> 00:41:40,400 Kaya doon ay madalas na pagpunta sa maging magulong pag-uusap na kung saan ikaw ay hindi pamilyar. 862 00:41:40,400 --> 00:41:43,350 At, sa katunayan, char star ay isang bagay kami ay pagpunta sa bumalik sa 863 00:41:43,350 --> 00:41:44,830 sa isang linggo o oras ng dalawang ni. 864 00:41:44,830 --> 00:41:47,530 >> Ngunit sa ngayon, sabihin makita kung maaari naming parse ng mga salita na pamilyar. 865 00:41:47,530 --> 00:41:50,750 Formats-- kaya narinig namin format specifier, format code bago. 866 00:41:50,750 --> 00:41:51,840 Iyan ay pamilyar. 867 00:41:51,840 --> 00:41:53,840 Type-- ngunit ang argument ay may type int. 868 00:41:53,840 --> 00:41:55,980 Maghintay ng isang minuto, ako ay isang int. 869 00:41:55,980 --> 00:41:59,230 >> Siguro porsiyento s aktwal na ay may ilang mga tinukoy kahulugan. 870 00:41:59,230 --> 00:42:00,230 At, sa katunayan, ito ay hindi. 871 00:42:00,230 --> 00:42:03,101 Isang integer, kung nais mong printf upang palitan ito, 872 00:42:03,101 --> 00:42:05,350 aktwal na ikaw ay may sa gumamit ng isang iba't ibang mga format specifier. 873 00:42:05,350 --> 00:42:06,890 At hindi mo nais na malaman ito maliban na lamang kung may sinabi sa iyo, 874 00:42:06,890 --> 00:42:07,973 o ikaw ay tapos na ito bago. 875 00:42:07,973 --> 00:42:10,490 Ngunit porsiyento i ay kung ano ang maaaring karaniwang ginagamit 876 00:42:10,490 --> 00:42:12,240 sa printf para i-plug sa isang integer. 877 00:42:12,240 --> 00:42:14,920 Maaari mo ring gamitin porsiyento d para sa isang decimal integer. 878 00:42:14,920 --> 00:42:16,490 Subalit ako ay maganda at simpleng dito. 879 00:42:16,490 --> 00:42:17,590 Kaya makikita namin pumunta sa na. 880 00:42:17,590 --> 00:42:21,160 >> Ngayon ipaalam sa akin sige at gawin uli ang make int, ang Enter. 881 00:42:21,160 --> 00:42:23,328 Iyan ay mabuti, walang mga error. 882 00:42:23,328 --> 00:42:27,260 Dot iwa int OK, masamang karanasan ng gumagamit, dahil hindi ko nasasabi ang aking sarili 883 00:42:27,260 --> 00:42:27,760 anong gagawin. 884 00:42:27,760 --> 00:42:28,426 Ngunit iyon lamang ang fine. 885 00:42:28,426 --> 00:42:29,480 Ako kaakit-akit sa mabilis. 886 00:42:29,480 --> 00:42:36,260 >> At ngayon hayaan mo akong sige at type sa David, OK, Zamila, Rob. 887 00:42:36,260 --> 00:42:37,820 OK, sa gayon ito ay isang magandang bagay. 888 00:42:37,820 --> 00:42:41,710 Oras na ito, gumagamit ako ng isang function, isang palaisipan piraso, na tinatawag na get int. 889 00:42:41,710 --> 00:42:44,230 At ito ay lumiliko out-- at kami makita ito sa ibang pagkakataon sa term-- 890 00:42:44,230 --> 00:42:47,730 CS50 kawani ay ipinatupad makakuha ng string sa paraan 891 00:42:47,730 --> 00:42:50,350 na ito ay lamang pisikal makakuha ng isang string para sa iyo. 892 00:42:50,350 --> 00:42:54,340 >> Ito ay ipinatupad ng get int in tulad ng isang paraan na ito ay lamang 893 00:42:54,340 --> 00:42:55,590 makakuha ng isang integer para sa iyo. 894 00:42:55,590 --> 00:42:57,830 At kung ikaw, ang tao, huwag makipagtulungan, ito ay 895 00:42:57,830 --> 00:43:00,590 literal lamang ng pagpunta sa sabihin subukan muli, muling subukan, subukan muli, 896 00:43:00,590 --> 00:43:05,200 literal upo doon looping, hanggang utang na loob sa iyo ng ilang mga kahima-himala number, 897 00:43:05,200 --> 00:43:07,670 tulad ng 50, at hello 50. 898 00:43:07,670 --> 00:43:11,440 >> O kung nagpapatakbo namin ito muli at i-type sa 42, hello 42. 899 00:43:11,440 --> 00:43:15,750 At kaya ang get int function na sa loob ng na piraso puzzle 900 00:43:15,750 --> 00:43:19,050 ay sapat na logic, sapat-iisip, upang malaman kung, kung ano ang isang salita? 901 00:43:19,050 --> 00:43:20,330 At kung ano ang isang numero? 902 00:43:20,330 --> 00:43:23,165 Tanging pagtanggap, sa huli, mga numero. 903 00:43:23,165 --> 00:43:25,690 904 00:43:25,690 --> 00:43:30,230 >> Kaya ito ay lumiliko out na ito ay hindi lahat na nagpapahayag. 905 00:43:30,230 --> 00:43:30,910 so far. 906 00:43:30,910 --> 00:43:33,690 Kaya, yay, huling oras namin nagpunta medyo mabilis 907 00:43:33,690 --> 00:43:38,320 sa pagpapatupad ng mga laro, at animation, at artistikong gawa sa scratch. 908 00:43:38,320 --> 00:43:42,260 At dito, kami ay pagiging nilalaman may hello world, and hello 50. 909 00:43:42,260 --> 00:43:43,696 >> Ito ay hindi lahat kagila iyon. 910 00:43:43,696 --> 00:43:46,070 At, sa katunayan, ang mga unang ilang halimbawa ay aabot ng ilang oras 911 00:43:46,070 --> 00:43:47,510 sa ramp up sa kaguluhan. 912 00:43:47,510 --> 00:43:49,854 Ngunit kami ay may kaya marami pang iba kontrolin ngayon, sa katunayan. 913 00:43:49,854 --> 00:43:51,770 At kami ay pagpunta sa tunay mabilis na simulan layering 914 00:43:51,770 --> 00:43:53,870 sa itaas ng mga pangunahing primitives. 915 00:43:53,870 --> 00:43:56,370 >> Ngunit una, sabihin maunawaan kung ano ang mga limitasyon ay. 916 00:43:56,370 --> 00:43:58,620 Sa katunayan, isa sa mga bagay Scratch ay hindi madaling 917 00:43:58,620 --> 00:44:00,990 ipaalam sa amin gawin ay talagang tumingin ilalim ng hood, 918 00:44:00,990 --> 00:44:03,740 at maunawaan kung ano ang isang computer ay, kung ano ang maaari itong gawin, 919 00:44:03,740 --> 00:44:05,250 at kung ano ang kanyang mga limitasyon ay. 920 00:44:05,250 --> 00:44:08,580 At, sa katunayan, na ang kakulangan ng unawa, potensyal na, pang-matagalang 921 00:44:08,580 --> 00:44:12,520 ay maaaring humantong sa aming sariling mistakes-- pagsulat bugs, pagsulat hindi secure na software na 922 00:44:12,520 --> 00:44:13,880 ay makakakuha ng hacked sa ilang paraan. 923 00:44:13,880 --> 00:44:17,130 >> Kaya ipaalam sa tumagal ng ilang mga hakbang patungo sa unawa ito ng kaunti mas mahusay sa pamamagitan ng 924 00:44:17,130 --> 00:44:19,710 paraan ng, sabihin nating, ang mga sumusunod na halimbawa. 925 00:44:19,710 --> 00:44:23,550 Ako pagpunta sa sige at ipatupad tunay na mabilis isang programa na tinatawag Adder. 926 00:44:23,550 --> 00:44:25,134 Like, sabihin magdagdag ng ilang mga numero ng magkasama. 927 00:44:25,134 --> 00:44:27,800 At ako pagpunta sa code ilang mga sulok dito, at kopyahin lamang at i-paste 928 00:44:27,800 --> 00:44:30,270 kung saan ako ay bago, lamang upang maaari naming makakuha ng pagpunta nang mas maaga. 929 00:44:30,270 --> 00:44:33,090 Kaya ngayon Mayroon akong ang pangunahing beginnings ng isang programa na tinatawag Adder. 930 00:44:33,090 --> 00:44:34,670 >> At sabihin sige at gawin ito. 931 00:44:34,670 --> 00:44:38,680 Ako pagpunta sa sige at sabihin nating, intx makakakuha makakuha int. 932 00:44:38,680 --> 00:44:39,430 At alam mo kung ano? 933 00:44:39,430 --> 00:44:40,990 Natin gumawa ng isang mas mahusay na karanasan ng gumagamit Hayaan. 934 00:44:40,990 --> 00:44:45,740 >> Kaya sabihin lamang sabihin x ay, at mabisa prompt ng gumagamit upang bigyan kami ng x. 935 00:44:45,740 --> 00:44:50,600 At pagkatapos ay hayaan mo akong magpatuloy at sabihin, printf kung paano ang tungkol y ay, oras na ito umaasa 936 00:44:50,600 --> 00:44:53,140 dalawang mga halaga mula sa user. 937 00:44:53,140 --> 00:44:59,759 At pagkatapos ay sabihin pumunta lamang magpatuloy at sabihin nating, printf, ang kabuuan ng x at y ay. 938 00:44:59,759 --> 00:45:01,300 At ngayon hindi ko nais na gawin porsiyento s. 939 00:45:01,300 --> 00:45:09,080 Gusto kong gawin porsiyento i, backslash n, at pagkatapos ay plug sa sum na halaga. 940 00:45:09,080 --> 00:45:10,620 >> Kaya kung paano ang maaari kong pumunta tungkol sa paggawa nito? 941 00:45:10,620 --> 00:45:11,270 Alam mo ba? 942 00:45:11,270 --> 00:45:12,840 alam ko kung paano gamitin ang mga variable. 943 00:45:12,840 --> 00:45:15,140 Hayaan akong lamang magpahayag ng isang bagong isa, int z. 944 00:45:15,140 --> 00:45:16,770 >> At ako pagpunta sa tumagal ng isang hula dito. 945 00:45:16,770 --> 00:45:21,470 Kung may mga pantay na mga palatandaan sa wika, marahil lamang ang maaari kong gawin x plus y, 946 00:45:21,470 --> 00:45:23,660 kaya hangga't tapusin ko ang aking naisip na may isang semi-colon? 947 00:45:23,660 --> 00:45:28,170 Ngayon ay maaari kong bumalik pababa dito, plug sa z, matapos-iisip na ito na may isang semi-colon. 948 00:45:28,170 --> 00:45:33,160 At tingnan natin ngayon, kung ang mga pagkakasunud-sunod ng lines-- x ay ang makakuha ng int. 949 00:45:33,160 --> 00:45:34,770 Y ay ang makakuha ng int. 950 00:45:34,770 --> 00:45:37,980 >> Idagdag x at y, mag-imbak ang halaga sa z-- kaya, muli, tandaan ang katumbas sign 951 00:45:37,980 --> 00:45:38,560 ay hindi matuwid. 952 00:45:38,560 --> 00:45:41,100 Walang assignment mula sa karapatan sa kaliwa. 953 00:45:41,100 --> 00:45:45,180 At sabihin i-print out na ang kabuuan ng x at y ay hindi literal z, 954 00:45:45,180 --> 00:45:46,830 ngunit kung ano ang nasa loob ng z. 955 00:45:46,830 --> 00:45:50,090 Kaya sabihin gawin Adder - nice, walang pagkakamali ngayon. 956 00:45:50,090 --> 00:45:53,030 Dot iwa Adder, ipasok, x ay pagpunta sa maging 1. 957 00:45:53,030 --> 00:45:55,380 >> Y ay magiging 2. 958 00:45:55,380 --> 00:45:58,964 At ang kabuuan ng x at y ay 3. 959 00:45:58,964 --> 00:46:00,130 Kaya na ang lahat ng fine at mabuti. 960 00:46:00,130 --> 00:46:03,260 >> Kaya Gusto mong isipin na ang matematika ay dapat na gumana sa isang programa tulad nito. 961 00:46:03,260 --> 00:46:04,040 Pero alam mo kung ano? 962 00:46:04,040 --> 00:46:06,904 Ito ba ay variable, linya 12, kahit na kinakailangan? 963 00:46:06,904 --> 00:46:09,820 Hindi mo na kailangan upang makakuha ng sa ugali na lamang sa pag-iimbak ng mga bagay sa mga variable 964 00:46:09,820 --> 00:46:10,980 dahil lang sa maaari mong. 965 00:46:10,980 --> 00:46:13,550 At, sa katunayan, ito ay sa pangkalahatan itinuturing masamang disenyo 966 00:46:13,550 --> 00:46:18,100 kung ikaw ay ang paglikha ng isang variable, na tinatawag na z sa kasong ito, sa pag-iimbak ng isang bagay sa loob nito, 967 00:46:18,100 --> 00:46:21,390 at pagkatapos ay kaagad paggamit nito, ngunit hindi kailanman muli. 968 00:46:21,390 --> 00:46:24,700 Bakit magbigay ng isang bagay ng isang pangalan tulad z kung ikaw ay literal 969 00:46:24,700 --> 00:46:26,770 pagpunta sa paggamit na bagay nang isang beses lamang, at iba pa 970 00:46:26,770 --> 00:46:29,380 proximal sa kung saan mo nilikha ito sa simula pa lamang, 971 00:46:29,380 --> 00:46:31,052 kaya malapit sa mga tuntunin ng mga linya ng code? 972 00:46:31,052 --> 00:46:31,760 Kaya alam mo kung ano? 973 00:46:31,760 --> 00:46:34,480 Ito ay lumiliko out na ang C ay medyo may kakayahang umangkop. 974 00:46:34,480 --> 00:46:36,586 Kung ako talagang nais na plug-in mga halaga dito, 975 00:46:36,586 --> 00:46:38,210 Hindi ko kailangan na idedeklara ng isang bagong variable. 976 00:46:38,210 --> 00:46:41,680 hindi ko na lang plug-in x plus y, dahil C nauunawaan 977 00:46:41,680 --> 00:46:43,390 arithmetic, at matematika operator. 978 00:46:43,390 --> 00:46:47,140 >> Kaya maaari ko lang sabihin, gawin ito sa matematika, x plus y, kahit anong mga halaga ay, 979 00:46:47,140 --> 00:46:50,780 plug ang mga nagresultang integer sa na string. 980 00:46:50,780 --> 00:46:53,730 Kaya ito ay maaaring maging, bagaman lamang ng isang linya ng mas maikli, 981 00:46:53,730 --> 00:46:58,480 isang mas mahusay na disenyo, ang isang mas mahusay na programa, dahil mayroong mas code, samakatuwid 982 00:46:58,480 --> 00:46:59,921 mas mababa para sa akin upang maunawaan. 983 00:46:59,921 --> 00:47:01,920 At ito ay din lamang cleaner, insofar bilang hindi kami 984 00:47:01,920 --> 00:47:04,620 pagpapasok ng bagong mga salita, bagong mga simbolo, tulad ng z, 985 00:47:04,620 --> 00:47:07,510 kahit na hindi sila tunay maglingkod karami ng isang layunin. 986 00:47:07,510 --> 00:47:12,890 >> Sa kasamaang palad, matematika ay hindi lahat na maaasahang minsan. 987 00:47:12,890 --> 00:47:15,270 Sabihin sige at gawin ito. 988 00:47:15,270 --> 00:47:18,200 Ako pagpunta sa sige ngayon at gawin ang sumusunod. 989 00:47:18,200 --> 00:47:27,650 >> gawin ni printf, porsiyento i, plus percent Hayaan i, ay magiging porsiyento i, backslash n. 990 00:47:27,650 --> 00:47:32,240 At ako pagpunta sa gawin this-- Xyx plus y. 991 00:47:32,240 --> 00:47:34,821 Kaya Lamang ako ng pagpunta sa pagsulat na muli ito bahagyang naiiba dito. 992 00:47:34,821 --> 00:47:36,320 Hayaan akong lamang gawin ang isang mabilis katinuan check. 993 00:47:36,320 --> 00:47:37,986 Muli, sabihin hindi makakuha ng maagang ng ating sarili. 994 00:47:37,986 --> 00:47:41,420 Gumawa adder, dot slash adder. 995 00:47:41,420 --> 00:47:44,950 x ay 1, y ay 2, 1 plus 2 ay 3. 996 00:47:44,950 --> 00:47:45,870 Kaya na mabuti. 997 00:47:45,870 --> 00:47:49,060 Ngunit sabihin makapagpalubha ito ngayon ng kaunti, at lumikha ng isang bagong file. 998 00:47:49,060 --> 00:47:53,350 >> Ako pagpunta sa tumawag ito ng isa, sabihin, ints, plural para integers. 999 00:47:53,350 --> 00:47:55,980 Hayaan ninyo akong magsimula kung saan ako ay isang sandali ang nakalipas. 1000 00:47:55,980 --> 00:47:57,770 Ngunit ngayon sabihin gawin ng ilang iba pang mga linya. 1001 00:47:57,770 --> 00:48:03,430 Hayaan akong magpatuloy at gawin ang mga sumusunod, printf, porsiyento i, minus porsiyento i, 1002 00:48:03,430 --> 00:48:08,959 ay porsiyento i, comma x, comma yx minus y. 1003 00:48:08,959 --> 00:48:10,750 Kaya ako ng paggawa bahagyang iba't ibang math doon. 1004 00:48:10,750 --> 00:48:11,624 Tayo'y gawin ang isa pa Hayaan. 1005 00:48:11,624 --> 00:48:16,610 Kaya porsiyento i beses porsiyento i ay porsiyento i, backslash n. 1006 00:48:16,610 --> 00:48:21,430 ni plug-in x, at y, at x beses y Hayaan. 1007 00:48:21,430 --> 00:48:24,530 Gagamitin namin ang asterisk sa ang iyong computer para sa mga oras. 1008 00:48:24,530 --> 00:48:26,390 >> Hindi mo gamitin x. x ay isang pangalan ng variable dito. 1009 00:48:26,390 --> 00:48:28,270 Gamitin mo ang star para sa pagpaparami. 1010 00:48:28,270 --> 00:48:29,020 Natin gawin isa pang Hayaan. 1011 00:48:29,020 --> 00:48:34,580 Printf percent ko, na hinati sa pamamagitan ng porsiyento i, ay porsiyento i, 1012 00:48:34,580 --> 00:48:40,460 backslash n. xy hinahati sa pamamagitan y-- kaya mong gamitin ang forward slash sa C 1013 00:48:40,460 --> 00:48:41,502 gawin division. 1014 00:48:41,502 --> 00:48:42,460 At sabihin gawin isa isa. 1015 00:48:42,460 --> 00:48:47,920 1016 00:48:47,920 --> 00:48:55,240 Naiwan ng porsiyento i, na hinati sa pamamagitan ng porsiyento i, ay percent i. 1017 00:48:55,240 --> 00:48:59,550 xy-- at ngayon naiwan ay kung ano ang natira. 1018 00:48:59,550 --> 00:49:02,980 Kapag sinubukan mong paghahati ng isang denominador sa isang tagabilang, 1019 00:49:02,980 --> 00:49:05,570 kung magkano na naiwan sa paglipas na hindi mo maaaring hatiin out? 1020 00:49:05,570 --> 00:49:07,910 >> Kaya doon ay hindi tunay, kinakailangan, isang simbolo 1021 00:49:07,910 --> 00:49:09,470 namin na nagamit ko sa grade school para sa. 1022 00:49:09,470 --> 00:49:13,830 Ngunit doon sa C. Maaari kang sabihin x modulo y, kung saan 1023 00:49:13,830 --> 00:49:18,000 ito porsyento sign in context-- ito confusingly kapag ikaw ay sa loob 1024 00:49:18,000 --> 00:49:20,170 ng double quotes, sa loob ng printf, porsiyento 1025 00:49:20,170 --> 00:49:21,830 ay ginagamit bilang ang specifier format. 1026 00:49:21,830 --> 00:49:25,420 >> Kapag gumamit ka ng porsiyento sa labas ng na sa isang mathematical expression, 1027 00:49:25,420 --> 00:49:29,910 ito ay ang modulo operator para modular arithmetic-- para sa aming mga layunin 1028 00:49:29,910 --> 00:49:33,650 dito, lamang ay nangangahulugan na, kung ano ang naiwan ng x hinahati sa pamamagitan ng y? 1029 00:49:33,650 --> 00:49:36,130 Kaya x hinahati sa pamamagitan ng y ay x slash y. 1030 00:49:36,130 --> 00:49:38,220 Ano ang ang mga natitira sa x hinahati sa pamamagitan ng y? 1031 00:49:38,220 --> 00:49:41,780 Walang x mod y, bilang programmer nais sabihin. 1032 00:49:41,780 --> 00:49:48,300 >> Kaya kung ako ginawa walang pagkakamali dito, hayaan mo akong sige at gumawa ng ints, plural, maganda, 1033 00:49:48,300 --> 00:49:50,010 at tuldok slash ints. 1034 00:49:50,010 --> 00:49:55,270 At sabihin sige at gawin, sabihin nating, 1, 10. 1035 00:49:55,270 --> 00:49:58,390 O sige, 1 plus 10 ay 11, check. 1036 00:49:58,390 --> 00:50:01,240 1 minus 10 ay negatibo 9, suriin. 1037 00:50:01,240 --> 00:50:03,420 >> 1 beses 10 ay 10, check. 1038 00:50:03,420 --> 00:50:07,090 1 hinati sa 10 is-- OK, kami ay laktawan ang isa. 1039 00:50:07,090 --> 00:50:09,480 Naiwan ng 1 hinati sa 10 ay 1. 1040 00:50:09,480 --> 00:50:10,680 Tama iyan. 1041 00:50:10,680 --> 00:50:12,630 Subalit mayroong isang bug sa dito. 1042 00:50:12,630 --> 00:50:15,390 >> Kaya ang isa ko bang ilagay ang aking iabot, hindi tama. 1043 00:50:15,390 --> 00:50:16,670 Ibig kong sabihin, ito ay malapit sa 0. 1044 00:50:16,670 --> 00:50:20,670 1 hinati sa 10, alam mo, kung kami ay pagputol ilang mga sulok, sigurado, ito ay zero. 1045 00:50:20,670 --> 00:50:28,050 Ngunit ito ay dapat talagang maging 1/10, 0.1, o 0.10, .1000, o iba pa. 1046 00:50:28,050 --> 00:50:30,600 >> hindi talaga ito dapat zero. 1047 00:50:30,600 --> 00:50:35,990 Well, ito ay lumiliko out na ang computer ay ginagawa literal kung ano ang sinabi namin ito upang gawin. 1048 00:50:35,990 --> 00:50:39,460 Kami ay gumagawa ng math tulad ng x hinahati sa pamamagitan ng y. 1049 00:50:39,460 --> 00:50:44,680 At parehong x at y, per ang mga linya ng code ng mas maaga, ay integers. 1050 00:50:44,680 --> 00:50:50,440 >> Bukod dito, on line 15, kami ay na nagsasabi sa printf, hey, printf plug-in 1051 00:50:50,440 --> 00:50:54,230 isang integer, mga plug-in sa isang integer, plug-in na ng integer-- partikular 1052 00:50:54,230 --> 00:50:57,580 x, at pagkatapos ay y, at pagkatapos ay x hinati sa y. x at y ay ints. 1053 00:50:57,580 --> 00:50:59,060 Humihingi kami ng magandang doon. 1054 00:50:59,060 --> 00:51:01,250 >> Ngunit kung ano ang x hinahati sa pamamagitan ng x? 1055 00:51:01,250 --> 00:51:06,790 x hinati sa dapat y maging, mathematically, 1/10, o 0.1, 1056 00:51:06,790 --> 00:51:11,600 kung saan ay isang tunay na numero, isang tunay na numero pagkakaroon, potensyal na, isang decimal point. 1057 00:51:11,600 --> 00:51:13,230 Ito ay hindi isang integer. 1058 00:51:13,230 --> 00:51:18,290 >> Ngunit ano ay ang pinakamalapit na integer sa 1/10, o 0.1? 1059 00:51:18,290 --> 00:51:21,114 Yeah, ito uri ng ay zero. 1060 00:51:21,114 --> 00:51:22,030 0.1 ay tulad nito magkano. 1061 00:51:22,030 --> 00:51:22,890 At 1 ay ganito karami. 1062 00:51:22,890 --> 00:51:25,870 Kaya 1/10 ay mas malapit sa 0 kaysa ito ay sa isa. 1063 00:51:25,870 --> 00:51:30,800 >> At kaya kung ano C ginagawa para us-- uri ng dahil sinabi namin ito to-- 1064 00:51:30,800 --> 00:51:32,600 ay truncating na integer. 1065 00:51:32,600 --> 00:51:40,540 Ito ay pagkuha ng halaga, na muli ay dapat na maging isang bagay tulad ng 0.1000, 1066 00:51:40,540 --> 00:51:41,800 0 at iba pa. 1067 00:51:41,800 --> 00:51:45,320 At ito ay ang lahat ng bagay truncating pagkatapos ng decimal point 1068 00:51:45,320 --> 00:51:47,510 ano pa't ang lahat ng mga ito bagay-bagay, dahil ito ay hindi 1069 00:51:47,510 --> 00:51:51,910 magkasya sa ang paniwala ng isang integer, na kung saan ay lamang ng isang numero tulad ng mga negatibong 1, 0, 1, 1070 00:51:51,910 --> 00:51:55,830 pataas at pababa, ito throws ang layo ng lahat ng bagay pagkatapos ng decimal point dahil ikaw 1071 00:51:55,830 --> 00:51:59,020 ay hindi maaaring magkasya sa isang decimal point sa isang integer sa pamamagitan ng kahulugan. 1072 00:51:59,020 --> 00:52:01,290 >> Kaya ang sagot dito ay zero. 1073 00:52:01,290 --> 00:52:02,600 Kaya paano namin ayusin ito? 1074 00:52:02,600 --> 00:52:04,400 Kailangan namin ng isa pang solusyon ng magkakasama. 1075 00:52:04,400 --> 00:52:06,880 At maaari naming gawin ito, tulad ng sumusunod. 1076 00:52:06,880 --> 00:52:12,820 >> Hayaan akong magpatuloy at lumikha ng isang bagong file, ang isang ito na tinatawag floats.c. 1077 00:52:12,820 --> 00:52:16,500 At i-save ito dito sa parehong directory, float.c. 1078 00:52:16,500 --> 00:52:19,360 1079 00:52:19,360 --> 00:52:23,260 At ipaalam sa akin sige at kopyahin ang ilan sa na code mula sa mas maaga. 1080 00:52:23,260 --> 00:52:27,690 >> Ngunit sa halip ng pagkuha ng isang int, sabihin gawin ito. 1081 00:52:27,690 --> 00:52:31,037 Bigyan mo ako ng isang lumulutang na halaga ng point tinatawag na x. kung saan ang isang lumulutang na tuldok 1082 00:52:31,037 --> 00:52:33,370 halaga ay lamang literal isang bagay na may isang lumulutang point. 1083 00:52:33,370 --> 00:52:34,410 Maaari itong ilipat sa kaliwa, sa kanan. 1084 00:52:34,410 --> 00:52:35,530 Ito ay isang tunay na numero. 1085 00:52:35,530 --> 00:52:38,050 >> At huwag mo akong tawagan makakuha int, ngunit makakuha ng float, 1086 00:52:38,050 --> 00:52:41,420 na kung saan din ay kabilang sa mga menu ng mga pagpipilian sa C250 library. 1087 00:52:41,420 --> 00:52:43,220 baguhin ang y sa isang float Hayaan. 1088 00:52:43,220 --> 00:52:45,000 Kaya ito ay nagiging makakuha float. 1089 00:52:45,000 --> 00:52:47,620 >> At ngayon, hindi namin nais mag-plug ng ints. 1090 00:52:47,620 --> 00:52:53,130 Ito ay lumiliko out mayroon kaming upang gamitin porsiyento f para float, porsiyento f para float, 1091 00:52:53,130 --> 00:52:54,560 at ngayon i-save ito. 1092 00:52:54,560 --> 00:53:01,220 At ngayon, mga daliri crossed, gumawa kamay, nice, dot slash kamay. 1093 00:53:01,220 --> 00:53:04,280 x ay pagpunta sa maging isa 1. y Ay pagpunta sa maging 10 ulit. 1094 00:53:04,280 --> 00:53:08,240 >> At, nice, OK aking karagdagan ay tama. 1095 00:53:08,240 --> 00:53:10,240 Ako ay umaasa para sa karagdagang, ngunit Nakalimutan ko ang upang isulat ito. 1096 00:53:10,240 --> 00:53:13,250 Kaya sabihin pumunta at ayusin ito lohikal error. 1097 00:53:13,250 --> 00:53:16,280 >> Sabihin sige at grab ang mga sumusunod. 1098 00:53:16,280 --> 00:53:18,080 Susubukan naming lamang gawin ng isang maliit na kopya at i-paste. 1099 00:53:18,080 --> 00:53:20,080 At ako pagpunta sa sabihin minus. 1100 00:53:20,080 --> 00:53:21,890 >> At ako pagpunta sa sabihin ng oras. 1101 00:53:21,890 --> 00:53:24,060 At ako pagpunta sa sabihin hinati. 1102 00:53:24,060 --> 00:53:28,240 At hindi ako pagpunta sa gawin modulo, na kung saan ay hindi bilang dyermeyn dito, 1103 00:53:28,240 --> 00:53:33,690 hinati sa f, at oras plus-- OK, sabihin gawin ito muli. 1104 00:53:33,690 --> 00:53:44,210 >> Gumawa kamay, tuldok slash sa kamay, at 1, 10, at- nice, no, OK. 1105 00:53:44,210 --> 00:53:45,250 Kaya ako ay isang idiot. 1106 00:53:45,250 --> 00:53:47,000 Kaya ito ay napaka-pangkaraniwan sa computer science 1107 00:53:47,000 --> 00:53:49,780 upang gumawa ng tangang pagkakamali tulad nito. 1108 00:53:49,780 --> 00:53:53,100 >> Para paturo layunin, kung ano ako talagang nais na gawin 1109 00:53:53,100 --> 00:53:57,410 ay baguhin ang science dito sa plus, sa minus, upang beses, 1110 00:53:57,410 --> 00:54:01,140 at upang maghiwalay, habang ikaw sana napansin sa panahon ng ehersisyo na ito. 1111 00:54:01,140 --> 00:54:04,700 Kaya ngayon sabihin muling sumulat ng libro na ito programa, gawin dot slash kamay. 1112 00:54:04,700 --> 00:54:07,950 >> At para sa pangatlong beses, sabihin makita kung ito ay nakakatugon sa aking mga inaasahan. 1113 00:54:07,950 --> 00:54:21,480 1, 10, ipasok, yes, OK, 1.000, hinati sa 10.000, ay 0.100000. 1114 00:54:21,480 --> 00:54:24,952 At ito ay lumiliko out maaari naming kontrolin kung gaano karaming numerong ito ay pagkatapos ng mga decimal point. 1115 00:54:24,952 --> 00:54:25,660 Kami ay talagang ay. 1116 00:54:25,660 --> 00:54:26,790 Susubukan naming bumalik sa na. 1117 00:54:26,790 --> 00:54:28,440 >> Ngunit ngayon, sa katunayan, ang matematika ay tama. 1118 00:54:28,440 --> 00:54:30,090 Kaya, muli, ano ang takeaway dito? 1119 00:54:30,090 --> 00:54:33,050 Ito ay lumiliko out na sa C, may mga hindi lamang lamang strings-- at, sa katunayan, 1120 00:54:33,050 --> 00:54:36,120 may mga hindi talaga, dahil kami magdagdag ng mga sa CS50 library. 1121 00:54:36,120 --> 00:54:37,710 Ngunit may mga hindi lamang ints. 1122 00:54:37,710 --> 00:54:38,990 >> Mayroon ding mga kamay. 1123 00:54:38,990 --> 00:54:42,810 At ito ay lumiliko out ng grupo ng mga iba pang data uri masyadong, na gagamitin namin bago ang haba. 1124 00:54:42,810 --> 00:54:46,270 Lumiliko out kung nais mo ang isang solong character, hindi isang string ng mga character, 1125 00:54:46,270 --> 00:54:47,610 maaari mong gamitin lamang ng isang pansamantalang trabaho. 1126 00:54:47,610 --> 00:54:52,350 >> Lumiliko out na kung nais mo ang isang bool, isang Boolean halaga, tama o mali lamang, 1127 00:54:52,350 --> 00:54:56,840 salamat sa CS50 library, na namin idinagdag sa C ang uri bool data pati na rin. 1128 00:54:56,840 --> 00:54:59,180 Kundi pati na rin ito ay ipakita sa maraming iba pang mga wika pati na rin. 1129 00:54:59,180 --> 00:55:04,130 At ito ay lumiliko out na kung minsan ka kailangan mas malaking mga numero at pagkatapos ay sa pamamagitan ng default 1130 00:55:04,130 --> 00:55:05,210 may ints at kamay. 1131 00:55:05,210 --> 00:55:10,590 >> At, sa katunayan, ang isang double ay isang numero na gumagamit ng hindi 32 bits, ngunit 64 bits. 1132 00:55:10,590 --> 00:55:14,990 At isang mahabang mahabang ay isang numero na ay gumagamit ng hindi 32, bits ngunit 64 bits, 1133 00:55:14,990 --> 00:55:19,190 ayon sa pagkakabanggit, para sa mga lumulutang na tuldok halaga at integers, ayon sa pagkakabanggit. 1134 00:55:19,190 --> 00:55:22,780 Kaya sabihin aktwal na ngayon makita ito sa aksyon. 1135 00:55:22,780 --> 00:55:26,150 >> Ako pagpunta sa sige dito at gumawa ng isa pang programa. 1136 00:55:26,150 --> 00:55:32,020 Narito, ako pagpunta sa sige at huwag isama CS50.h. 1137 00:55:32,020 --> 00:55:34,910 At hayaan mo akong pumunta, ng pamantayang io.h. 1138 00:55:34,910 --> 00:55:37,320 >> At mapapansin mo ang isang bagay funky ang nangyayari dito. 1139 00:55:37,320 --> 00:55:40,592 Hindi ito kulayan coding bagay sa sa parehong paraan tulad ng ginawa dati. 1140 00:55:40,592 --> 00:55:43,550 At ito ay lumiliko out, iyon ay dahil ako hindi binigyan ng bagay na ang isang pangalan ng file. 1141 00:55:43,550 --> 00:55:47,270 >> Ako pagpunta sa tumawag ang isang ito sizeof.c, at pindutin ang I-save. 1142 00:55:47,270 --> 00:55:51,039 At pansinin kung ano ang mangyayari sa aking pinaka puting code laban na itim backdrop. 1143 00:55:51,039 --> 00:55:52,830 Ngayon, hindi bababa sa may ilang mga lilang sa doon. 1144 00:55:52,830 --> 00:55:54,490 At ito ay syntax-highlight. 1145 00:55:54,490 --> 00:55:57,700 >> Ito ay dahil, medyo simple, na ako sinabi sa mga IDE kung anong uri ng file 1146 00:55:57,700 --> 00:56:01,060 ito ay sa pamamagitan ng pagbibigay ito ng isang pangalan, at partikular na ang isang file extension. 1147 00:56:01,060 --> 00:56:03,620 Ngayon, sabihin sige at gawin ito. 1148 00:56:03,620 --> 00:56:08,910 Ako pagpunta sa sige at napaka lamang i-print ang following-- bool 1149 00:56:08,910 --> 00:56:11,080 ay percent LU. 1150 00:56:11,080 --> 00:56:12,950 >> Darating kami pabalik sa na sa loob lamang ng ilang sandali. 1151 00:56:12,950 --> 00:56:15,840 At pagkatapos ay ako pagpunta sa print laki ng bool. 1152 00:56:15,840 --> 00:56:18,170 At ngayon, lamang upang i-save ang ang aking sarili sa ilang oras, ako 1153 00:56:18,170 --> 00:56:20,280 pagpunta sa gawin ang isang buong grupo ng mga sabay-sabay. 1154 00:56:20,280 --> 00:56:24,620 At, partikular, ako pagpunta sa baguhin ito sa isang pansamantalang trabaho at pansamantalang trabaho. 1155 00:56:24,620 --> 00:56:27,760 Isa na ito, ako pagpunta upang baguhin sa isang double at isang double. 1156 00:56:27,760 --> 00:56:31,440 >> Isa na ito, ako pagpunta upang baguhin sa isang float at isang float. 1157 00:56:31,440 --> 00:56:35,670 Ang isang ito, ako pagpunta sa baguhin sa isang int at isang int. 1158 00:56:35,670 --> 00:56:38,660 At ang isang ito, pupuntahan ko upang baguhin sa isang mahabang mahabang. 1159 00:56:38,660 --> 00:56:40,840 At pa rin ito ay ang pagkuha isang mahabang panahon, matagal na matagal na. 1160 00:56:40,840 --> 00:56:44,572 >> At pagkatapos, sa wakas, ako nagbigay ang aking sarili ng isa masyadong maraming, string. 1161 00:56:44,572 --> 00:56:47,030 Ito ay lumiliko out na sa C, may ang mga espesyal na operator na tinatawag na 1162 00:56:47,030 --> 00:56:50,260 laki ng iyan ay literal pagpunta sa, kapag tumakbo, 1163 00:56:50,260 --> 00:56:52,099 sabihin sa amin ang laki ng bawat isa sa mga variable. 1164 00:56:52,099 --> 00:56:53,890 At ito ay isang paraan, ngayon, maaari naming ikonekta likod 1165 00:56:53,890 --> 00:56:57,140 sa discussion noong nakaraang linggo ng data at representasyon. 1166 00:56:57,140 --> 00:57:00,330 >> Hayaan akong sige at mag-compile laki ng dot slash laki ng. 1167 00:57:00,330 --> 00:57:01,210 At sabihin makita. 1168 00:57:01,210 --> 00:57:05,210 Ito ay lumiliko out na sa C, partikular sa CS50 IDE, 1169 00:57:05,210 --> 00:57:08,170 partikular sa operating system Ubuntu, 1170 00:57:08,170 --> 00:57:11,100 kung saan ay isang 64-bit operating sistema sa kasong ito, 1171 00:57:11,100 --> 00:57:14,189 isang bool ay pagpunta sa gamitin ang isa byte ng espasyo. 1172 00:57:14,189 --> 00:57:16,480 Iyan ay kung paano ang laki ay sinusukat, hindi sa bits, ngunit sa bytes. 1173 00:57:16,480 --> 00:57:18,690 At isipin na ang isa byte ay walong bits. 1174 00:57:18,690 --> 00:57:22,030 Kaya ang isang bool, kahit na kayo technically lamang ang kailangan ng isang 0 o 1, 1175 00:57:22,030 --> 00:57:24,092 ito ay isang maliit na mapag-aksaya kung paano namin na ipatupad ito. 1176 00:57:24,092 --> 00:57:26,800 talagang Ito ay pagpunta sa gumamit ng isang buong byte-- kaya lahat ng mga zero, ikaw ay marahil 1177 00:57:26,800 --> 00:57:31,050 lahat sa buhay, o ng isang bagay tulad na, o isa lamang 1 sa walong bits. 1178 00:57:31,050 --> 00:57:34,962 >> Ang isang pansamantalang trabaho, samantala, na ginagamit para sa isang character tulad ng isang Ascii karakter bawat noong nakaraang linggo, 1179 00:57:34,962 --> 00:57:36,170 ay pagpunta sa maging isang character. 1180 00:57:36,170 --> 00:57:42,340 At na synchs up sa aming paniwala ng ito sa pagiging hindi hihigit sa 256 bits-- sa halip, 1181 00:57:42,340 --> 00:57:45,360 synchs up sa mga ito sa pagiging walang mas mahaba kaysa sa 8 bits, na kung saan 1182 00:57:45,360 --> 00:57:47,450 ay nagbibigay sa amin ng maraming mga bilang 256 mga halaga. 1183 00:57:47,450 --> 00:57:49,680 Ang isang double ay pagpunta sa maging 8 bytes o 64 bits. 1184 00:57:49,680 --> 00:57:50,510 >> A float ay 4. 1185 00:57:50,510 --> 00:57:51,690 Isang int ay 4. 1186 00:57:51,690 --> 00:57:52,980 Ang isang mahaba, mahabang ay 8. 1187 00:57:52,980 --> 00:57:54,716 At isang string ay 8. 1188 00:57:54,716 --> 00:57:55,840 Ngunit huwag mag-alala tungkol sa na. 1189 00:57:55,840 --> 00:57:57,340 Kami ay pagpunta sa alisan ng balat pabalik na layer. 1190 00:57:57,340 --> 00:57:59,940 Ito ay lumiliko out, mga string Maaari mas mahaba kaysa sa 8 bytes. 1191 00:57:59,940 --> 00:58:02,310 >> At, sa katunayan, na naisulat namin string na, kumusta mundo, 1192 00:58:02,310 --> 00:58:03,700 mas mahaba kaysa sa 8 bytes. 1193 00:58:03,700 --> 00:58:06,270 Ngunit kami ay bumalik sa na sa loob lamang ng ilang sandali. 1194 00:58:06,270 --> 00:58:09,690 Ngunit ang tumagal ang layo dito ay ang mga sumusunod. 1195 00:58:09,690 --> 00:58:15,320 >> Anumang computer lamang ay may isang may hangganan halaga ng memorya at espasyo. 1196 00:58:15,320 --> 00:58:17,860 Maaari ka lamang mag-imbak sa gayon maraming file sa iyong Mac o PC. 1197 00:58:17,860 --> 00:58:23,030 Maaari ka lamang mag-imbak ng maraming mga programa sa RAM tumatakbo nang sabay-sabay, kinakailangan, kahit na 1198 00:58:23,030 --> 00:58:26,360 sa virtual memory, dahil mayroon kang isang tiyak na halaga ng RAM. 1199 00:58:26,360 --> 00:58:28,990 >> At lamang upang ang larawang kung hindi kailanman na iyong binuksan up ng isang laptop 1200 00:58:28,990 --> 00:58:31,300 o iniutos dagdag memory para sa isang computer, maaari mo 1201 00:58:31,300 --> 00:58:33,670 maaaring hindi malaman na loob ng iyong computer 1202 00:58:33,670 --> 00:58:36,590 ay isang bagay na mukhang isang maliit na tulad nito. 1203 00:58:36,590 --> 00:58:40,540 Kaya ito ay lamang ng isang pangkaraniwang kumpanya pinangalanan Crucial na gumagawa RAM para sa mga computer. 1204 00:58:40,540 --> 00:58:43,620 At RAM ay kung saan ang mga programa mabuhay habang sila ay tumatakbo. 1205 00:58:43,620 --> 00:58:46,630 >> Kaya sa bawat Mac o PC, kapag double mo i-click ang isang programa, at ito ay bubukas up, 1206 00:58:46,630 --> 00:58:48,921 at ito ay bubukas ang ilang dokumento na Word o isang bagay tulad na, 1207 00:58:48,921 --> 00:58:51,764 ito nag-iimbak ito pansamantala sa RAM, dahil RAM ay mas mabilis 1208 00:58:51,764 --> 00:58:53,680 kaysa sa iyong hard disk, o iyong solid estado disk. 1209 00:58:53,680 --> 00:58:56,600 Kaya ito ay lamang kung saan ang mga programa pumunta upang mabuhay kapag sila ay tumatakbo, 1210 00:58:56,600 --> 00:58:58,060 o kapag ang mga file ay ginagamit. 1211 00:58:58,060 --> 00:59:00,890 >> Kaya ikaw ay may mga bagay na tumingin tulad nito sa loob ng iyong laptop, 1212 00:59:00,890 --> 00:59:03,320 o bahagyang mas malaking bagay loob ng iyong desktop. 1213 00:59:03,320 --> 00:59:07,440 Ngunit ang susi ay mayroon ka lamang ng may hangganan bilang ng mga bagay na ito. 1214 00:59:07,440 --> 00:59:11,230 At mayroon lamang isang tiyak na halaga ng hardware upo sa ito desk karapatan 1215 00:59:11,230 --> 00:59:11,730 dito. 1216 00:59:11,730 --> 00:59:15,920 >> Kaya, tiyak, maaari naming hindi nag-iimbak walang katapusan ang haba numero. 1217 00:59:15,920 --> 00:59:19,030 At, pa, kung sa tingin mo bumalik sa grade school, kung gaano karaming mga digit Maaari 1218 00:59:19,030 --> 00:59:21,400 ikaw ay may sa kanan ng isang decimal point? 1219 00:59:21,400 --> 00:59:24,680 Para sa mga bagay, kung gaano karaming mga digit Maaari ikaw ay may sa kaliwa ng isang decimal point? 1220 00:59:24,680 --> 00:59:26,300 Talagang, walang hanggan maraming. 1221 00:59:26,300 --> 00:59:30,840 >> Ngayon, tayong mga tao maaaring lamang alam kung paano ipahayag na milyon, 1222 00:59:30,840 --> 00:59:34,990 at billion, trillion, at quadrillion, at quintillion. 1223 00:59:34,990 --> 00:59:39,370 At ako patulak ang mga limitasyon ng aking understanding-- o my-- Naiintindihan ko 1224 00:59:39,370 --> 00:59:41,110 numero, ngunit ang aking pagbigkas ng mga numero. 1225 00:59:41,110 --> 00:59:44,720 Ngunit maaari silang makakuha ng walang hanggan malaki sa walang hanggan maraming mga digit sa kaliwa 1226 00:59:44,720 --> 00:59:47,050 o sa kanan ng decimal point. 1227 00:59:47,050 --> 00:59:50,040 >> Ngunit computer lamang magkaroon ng isang takda na halaga ng memory, 1228 00:59:50,040 --> 00:59:53,510 isang may hangganan bilang ng mga transistors, isang may hangganan bilang ng ilaw bombilya sa loob. 1229 00:59:53,510 --> 00:59:57,350 Kaya kung ano ang mangyayari kapag naubusan ka ng space? 1230 00:59:57,350 --> 00:59:59,620 Sa ibang salita, kung ikaw sa tingin bumalik sa nakaraang linggo 1231 00:59:59,620 --> 01:00:03,160 kapag usapan natin ang tungkol sa mga numero kanilang mga sarili na kinakatawan sa binary, 1232 01:00:03,160 --> 01:00:05,480 ipagpalagay na namin nakuha ito 8-bit halaga dito. 1233 01:00:05,480 --> 01:00:08,290 >> At kami ay may pitong 1 at isa 0. 1234 01:00:08,290 --> 01:00:10,827 At ipagpalagay na gusto naming magdagdag ng 1 sa halaga na ito. 1235 01:00:10,827 --> 01:00:12,410 Ito ay isang talagang malaking bilang ngayon. 1236 01:00:12,410 --> 01:00:16,610 >> Ito ay 254, kung matandaan ko ang matematika mula noong nakaraang linggo karapatan. 1237 01:00:16,610 --> 01:00:19,480 Ngunit paano kung baguhin ko na rightmost 0 sa isang 1? 1238 01:00:19,480 --> 01:00:22,800 Ang kabuoan ng bilang, ng Siyempre, nagiging eight 1 ni. 1239 01:00:22,800 --> 01:00:24,050 Kaya kami ay pa rin mabuti. 1240 01:00:24,050 --> 01:00:27,204 >> At na marahil ay kumakatawan sa 255, bagaman depende sa konteksto 1241 01:00:27,204 --> 01:00:29,120 maaaring ito ang tunay na kumakatawan isang negatibong numero. 1242 01:00:29,120 --> 01:00:31,240 Ngunit higit pa sa na ibang oras. 1243 01:00:31,240 --> 01:00:34,220 Ito nararamdaman tulad ng ito ay tungkol sa bilang mataas na bilang maaari kong mabibilang. 1244 01:00:34,220 --> 01:00:35,290 >> Ngayon, ito ay lamang ng 8 bits. 1245 01:00:35,290 --> 01:00:38,170 At ang aking Mac, tiyak, ay may paraan higit sa 8 bits ng memorya. 1246 01:00:38,170 --> 01:00:39,170 Ngunit ito ay hindi magkaroon may hangganan. 1247 01:00:39,170 --> 01:00:43,230 Kaya ang parehong argument ay sumasaklaw, kahit na kami may higit pa sa mga iyan sa screen. 1248 01:00:43,230 --> 01:00:47,020 >> Ngunit ano ang mangyayari kung ikaw ay pag-iimbak ang numerong ito, 255, 1249 01:00:47,020 --> 01:00:49,290 at nais mong bilangin 1 bit mas mataas? 1250 01:00:49,290 --> 01:00:51,600 Gusto mong pumunta mula sa 255 sa 256. 1251 01:00:51,600 --> 01:00:55,800 Ang problema, siyempre, ay na kung ikaw magbilangan sa zero tulad noong nakaraang linggo, 1252 01:00:55,800 --> 01:00:59,670 hindi ka maaaring bilangin bilang mataas bilang 256, pabayaan mag-isa 257, 1253 01:00:59,670 --> 01:01:02,584 pabayaan mag-isa 258, m dahil kung ano ang mangyayari kapag nagdagdag ka ng isang 1? 1254 01:01:02,584 --> 01:01:05,000 Kung gagawin mo ang lumang grade school diskarte, kang maglagay ng 1 dito, 1255 01:01:05,000 --> 01:01:08,150 at pagkatapos ay 1 plus 1 ay 2, ngunit iyan ay talagang isang zero, dalhin mo ang 1, 1256 01:01:08,150 --> 01:01:09,695 magtataglay ng mga 1, dalhin ang 1. 1257 01:01:09,695 --> 01:01:12,620 Ang lahat ng mga bagay na ito, mga 1, pumunta sa zero. 1258 01:01:12,620 --> 01:01:17,820 At hangin mo up, yes, bilang isang tao nakaumang out, ang isang 1 sa kaliwang bahagi. 1259 01:01:17,820 --> 01:01:22,540 Ngunit lahat ng iyong makakaya aktwal na makita at magkasya sa memory 1260 01:01:22,540 --> 01:01:27,960 ay lamang ng walong 0, na ang ibig sabihin ay sa ilang mga punto kung ikaw, isang computer, 1261 01:01:27,960 --> 01:01:32,490 tried pagbibilang sapat na mataas up, ikaw ay pagpunta sa wrapper sa paligid, ito ay tila, 1262 01:01:32,490 --> 01:01:35,850 sa zero, o marahil kahit na mga negatibong numero, na kung saan ay kahit na mas mababa kaysa sa zero. 1263 01:01:35,850 --> 01:01:37,260 >> At maaari naming uri ng makita ito. 1264 01:01:37,260 --> 01:01:39,900 Hayaan akong sige at isulat isang tunay na mabilis na programa dito. 1265 01:01:39,900 --> 01:01:43,690 Hayaan akong sige at isulat isang programa na tinatawag overflow. 1266 01:01:43,690 --> 01:01:49,980 Isama CS50.h, isama karaniwang IO.h-- oh, 1267 01:01:49,980 --> 01:01:51,730 Ko talagang nasagot ang aking syntax highlight. 1268 01:01:51,730 --> 01:01:54,440 Kaya sabihin i-save ito bilang overflow.c. 1269 01:01:54,440 --> 01:01:57,084 >> At ngayon int main void-- at di-nagtagal, kami 1270 01:01:57,084 --> 01:01:59,500 bumalik sa na nagpapaliwanag kung bakit panatilihin namin ang pagsusulat int pangunahing walang bisa. 1271 01:01:59,500 --> 01:02:02,080 Ngunit sa ngayon, sabihin lamang gawin ito, ang pagkuha ng ito para sa ipinagkaloob. 1272 01:02:02,080 --> 01:02:06,200 Sabihin bigyan ang aking sarili ng isang int, at initialize ito sa 0. 1273 01:02:06,200 --> 01:02:11,716 >> ni pagkatapos ay gawin para sa int Hayaan makakuha i zero-- actually, sabihin gawin ang isang walang hanggan loop 1274 01:02:11,716 --> 01:02:12,590 at makita kung ano ang mangyayari. 1275 01:02:12,590 --> 01:02:22,440 Habang totoo, pagkatapos ay sabihin i-print out n ay porsiyento i, backslash n, mga plug-in n. 1276 01:02:22,440 --> 01:02:27,200 Ngunit, ngayon, sabihin gawin n nakakakuha n plus 1. 1277 01:02:27,200 --> 01:02:29,660 >> Kaya sa ibang salita, sa bawat pag-ulit ng walang-katapusang loop, 1278 01:02:29,660 --> 01:02:32,550 ipaalam sa tumagal ng halaga ni n, at magdagdag ng 1 sa mga ito, at pagkatapos ay 1279 01:02:32,550 --> 01:02:34,350 mag-imbak ang mga resulta pabalik sa n sa kaliwa. 1280 01:02:34,350 --> 01:02:37,150 At, sa katunayan, nasaksihan namin syntax bahagyang tulad nito, sa madaling sabi. 1281 01:02:37,150 --> 01:02:39,730 Ang isang cool na bilis ng kamay ay sa halip ng pagsulat ang lahat ng ito out, 1282 01:02:39,730 --> 01:02:42,770 maaari mong talagang sabihin isang n plus ay katumbas ng 1. 1283 01:02:42,770 --> 01:02:47,480 >> O kung ikaw ay talagang nais na maging fancy, maaari mong sabihin n plus plus semi-colon. 1284 01:02:47,480 --> 01:02:50,130 Ngunit ang mga huling dalawang ay lamang kung ano ang gusto naming tumawag sintaktik asukal 1285 01:02:50,130 --> 01:02:50,790 para sa unang bagay. 1286 01:02:50,790 --> 01:02:53,456 >> Ang unang bagay ay mas malinaw, lubos pinong, lahat-lahat tama. 1287 01:02:53,456 --> 01:02:55,470 Ngunit ito ay mas karaniwan, kukunin ko na sabihin. 1288 01:02:55,470 --> 01:02:57,210 Kaya makikita namin gawin ito para sa sandali lamang. 1289 01:02:57,210 --> 01:03:01,685 >> Sabihin ngayon gumawa overflow, na tunog halip nagbabala, dot slash overflow. 1290 01:03:01,685 --> 01:03:04,380 1291 01:03:04,380 --> 01:03:09,852 Tayo'y makita, n Nagiging medyo malaki Hayaan. 1292 01:03:09,852 --> 01:03:11,310 Nguni't ni mag-isip, kung paano malaki maaari n makakuha ng? 1293 01:03:11,310 --> 01:03:12,870 >> n ay isang int. 1294 01:03:12,870 --> 01:03:16,400 Nakita namin ang isang sandali ang nakalipas sa laki ng halimbawa na isang int ay apat bytes. 1295 01:03:16,400 --> 01:03:22,070 Alam namin mula sa nakaraang linggo, apat na bytes ay 32 bits, dahil 8 beses 4, na ang 32. 1296 01:03:22,070 --> 01:03:23,460 Iyon ay magiging 4 na bilyon. 1297 01:03:23,460 --> 01:03:25,802 >> At kami ng hanggang sa 800,000. 1298 01:03:25,802 --> 01:03:28,510 Ito ay pagpunta sa tumagal magpakailanman upang mabibilang bilang mataas na bilang ko marahil maaari. 1299 01:03:28,510 --> 01:03:30,635 Kaya ako pagpunta sa sige, bilang maaari mong bago ang haba, 1300 01:03:30,635 --> 01:03:34,910 at pindutin Control C-- lantaran, Control C, ang isang pulutong, kung saan Control C pangkalahatan 1301 01:03:34,910 --> 01:03:36,034 paraan kanselahin. 1302 01:03:36,034 --> 01:03:38,200 Sa kasamaang palad, dahil ito ay tumatakbo sa ulap, 1303 01:03:38,200 --> 01:03:41,190 kung minsan ang ulap ay pagsigam out kaya magkano bagay-bagay, 1304 01:03:41,190 --> 01:03:44,180 so much output, ito ay pagpunta sa tumagal ng ilang sandali para sa aking input 1305 01:03:44,180 --> 01:03:45,630 upang makakuha ng sa cloud. 1306 01:03:45,630 --> 01:03:49,240 Kaya kahit na ako hit Control C ng ilang segundo ang nakalipas, 1307 01:03:49,240 --> 01:03:53,110 ito ay tiyak ang side epekto ng isang walang-katapusang loop. 1308 01:03:53,110 --> 01:03:56,070 >> At kaya sa ganitong mga kaso, hindi namin pagpunta sa umalis na maging. 1309 01:03:56,070 --> 01:03:59,050 At kami ay pagpunta sa magdagdag ng isa pang terminal window sa paglipas dito 1310 01:03:59,050 --> 01:04:03,186 may plus, na siyempre ay hindi tulad na, dahil ito ay pa rin pag-iisip. 1311 01:04:03,186 --> 01:04:05,310 At sabihin sige at maging isang maliit na mas makatwirang. 1312 01:04:05,310 --> 01:04:07,768 >> Ako pagpunta sa sige at gawin ito lamang finitely maraming beses. 1313 01:04:07,768 --> 01:04:10,047 ni gumamit ng isang para sa loop Hayaan, na aking alluded sa mas maaga. 1314 01:04:10,047 --> 01:04:10,630 Gawin natin ito. 1315 01:04:10,630 --> 01:04:13,430 Bigyan mo ako ng isa pang variable int i nakakakuha 0. 1316 01:04:13,430 --> 01:04:17,430 i ay mas mababa sa, sabihin nating, 64 i ++. 1317 01:04:17,430 --> 01:04:24,010 At ngayon hayaan mo akong magpatuloy at i-print out n ay porsiyento i, kuwit n. 1318 01:04:24,010 --> 01:04:27,547 At pagkatapos n-- ito ay pa rin pagpunta sa tumagal magpakailanman. 1319 01:04:27,547 --> 01:04:28,130 Gawin natin ito. 1320 01:04:28,130 --> 01:04:30,620 >> n ay makakakuha n beses 2. 1321 01:04:30,620 --> 01:04:34,140 O maaari naming maging fancy at gawin ulit ay katumbas ng 2. 1322 01:04:34,140 --> 01:04:37,120 Ngunit sabihin lamang sabihin n ay katumbas ng kanyang sarili, beses 2. 1323 01:04:37,120 --> 01:04:39,321 Sa ibang salita, sa ganitong bagong bersyon ng programa, 1324 01:04:39,321 --> 01:04:41,820 Hindi ko nais na maghintay magpakailanman mula sa tulad ng 800,000 sa 4 billion. 1325 01:04:41,820 --> 01:04:43,070 Sabihin lang makakuha ng ito sa paglipas ng sa. 1326 01:04:43,070 --> 01:04:44,920 >> Natin ang aktwal na double n sa bawat oras. 1327 01:04:44,920 --> 01:04:47,660 Kung saan, pagpapabalik, pagdodoble ang kabaligtaran ng pagkakaroon, siyempre. 1328 01:04:47,660 --> 01:04:50,035 At yamang noong nakaraang linggo kami ay may isang bagay muli, at muli, 1329 01:04:50,035 --> 01:04:52,200 at muli, sobrang bilis, pagdodoble ay tiyak 1330 01:04:52,200 --> 01:04:58,080 mapahubad kami mula 1 hanggang ang pinakamalaking posibleng halaga na maaari naming bilangin sa na may isang int. 1331 01:04:58,080 --> 01:04:59,750 >> Kaya sabihin gawin eksakto na ito. 1332 01:04:59,750 --> 01:05:01,720 At kami ay bumalik sa ito bago ang haba. 1333 01:05:01,720 --> 01:05:04,180 Ngunit ito, muli, ay tulad ng ang umuulit na block sa scratch. 1334 01:05:04,180 --> 01:05:05,600 At gagamitin mo ito bago ang haba. 1335 01:05:05,600 --> 01:05:10,170 >> Ito lamang ay nangangahulugan count mula sa zero hanggang sa, ngunit hindi pantay-pantay, sa 64. 1336 01:05:10,170 --> 01:05:14,285 At sa bawat pag-ulit ng mga ito loop, lamang panatilihin ang incrementing i. 1337 01:05:14,285 --> 01:05:18,990 Kaya i ++ - at ito pangkalahatang tayuan on line 7 ay lamang ng isang super-karaniwang paraan 1338 01:05:18,990 --> 01:05:22,290 ng paulit-ulit ng ilang mga linya ng code, ang ilang bilang ng beses. 1339 01:05:22,290 --> 01:05:23,362 Aling linya ng code? 1340 01:05:23,362 --> 01:05:25,570 Ang mga kulot tirante, habang ikaw maaaring may gleaned mula ngayon, 1341 01:05:25,570 --> 01:05:26,780 ay nangangahulugan, gawin ang mga sumusunod. 1342 01:05:26,780 --> 01:05:29,510 >> Ito ay sa tulad ng simula, kapag ito ay ang dilaw na bloke 1343 01:05:29,510 --> 01:05:32,680 at iba pang mga kulay na uri ng yakapin o yakapin iba pang mga bloke. 1344 01:05:32,680 --> 01:05:34,750 Iyan ay kung ano ang mga kulot braces ang ginagawa dito. 1345 01:05:34,750 --> 01:05:40,200 Kaya kung ako got ang aking syntax right-- mo maaaring makita ang mga karot simbolo sa C paraan 1346 01:05:40,200 --> 01:05:42,706 na kung gaano karaming beses ako ay sinusubukan upang malutas ang problemang ito. 1347 01:05:42,706 --> 01:05:45,330 Kaya sabihin mapupuksa ng walang inaasahan sama-sama, at isara na window. 1348 01:05:45,330 --> 01:05:46,520 At gagamitin namin ang bagong isa. 1349 01:05:46,520 --> 01:05:51,980 Gumawa overflow, dot slash overflow, ang Enter, lahat ng karapatan, 1350 01:05:51,980 --> 01:05:53,090 mukha itong masama sa unang. 1351 01:05:53,090 --> 01:05:56,200 Ngunit sabihin mag-scroll pabalik sa panahon, sapagka't yao'y ginawa ko ito 64 ulit. 1352 01:05:56,200 --> 01:05:58,700 >> At mapansin sa unang pagkakataon, n ay 1. 1353 01:05:58,700 --> 01:06:03,110 Ikalawa, n ay 2, pagkatapos ay 4, pagkatapos ay 8, at pagkatapos 16. 1354 01:06:03,110 --> 01:06:09,450 At tila na sa lalong madaling nakukuha ko na halos 1 bilyon, 1355 01:06:09,450 --> 01:06:12,800 kung ako double itong muli, na ay dapat magbigay sa akin 2 bilyon. 1356 01:06:12,800 --> 01:06:14,980 Ngunit ito ay lumiliko out, ito ay right sa tulis. 1357 01:06:14,980 --> 01:06:18,930 >> At kaya ito ang tunay na overflows isang int mula sa 1 bilyong 1358 01:06:18,930 --> 01:06:23,514 sa humigit-kumulang negatibong 2 billion, sapagka't isang integer, 1359 01:06:23,514 --> 01:06:25,430 hindi katulad ng mga numero namin ay sa pag-aakala noong nakaraang linggo, 1360 01:06:25,430 --> 01:06:28,397 ay maaaring maging parehong positibo at negatibong sa katotohanan at sa isang computer. 1361 01:06:28,397 --> 01:06:30,730 At kaya hindi bababa sa isa sa mga bits ay epektibong ninakaw. 1362 01:06:30,730 --> 01:06:34,190 Kaya kami ay talagang lamang magkaroon 31 bits, o 2 bilyong mga posibleng halaga. 1363 01:06:34,190 --> 01:06:38,220 >> Ngunit sa ngayon, ang takeaway ay lubos lang, kahit anong mga numerong ito ay 1364 01:06:38,220 --> 01:06:42,280 at kahit na ano ang matematika ay, may masamang mangyayari sa huli, 1365 01:06:42,280 --> 01:06:46,980 dahil sa huli ikaw ay sinusubukan upang ibahin ang ayos ang mga bits ng isa masyadong maraming beses. 1366 01:06:46,980 --> 01:06:51,060 At sa iyo na epektibong pumunta mula sa lahat 1 na siguro lahat ng 0, o marahil 1367 01:06:51,060 --> 01:06:54,260 lamang sa ilang ibang mga pattern na ito malinaw na, depende sa konteksto, 1368 01:06:54,260 --> 01:06:56,342 ay maaaring interpreted bilang isang negatibong numero. 1369 01:06:56,342 --> 01:06:59,300 At kaya ito ay tila ang pinakamataas na ko maaaring bilangin sa ito partikular na programa 1370 01:06:59,300 --> 01:07:01,210 ay lamang ng humigit-kumulang 1 bilyon. 1371 01:07:01,210 --> 01:07:02,760 Subalit mayroong isang bahagyang solusyon dito. 1372 01:07:02,760 --> 01:07:03,480 Alam mo ba? 1373 01:07:03,480 --> 01:07:07,600 >> Hayaan akong baguhin mula sa isang int sa isang mahaba haba. 1374 01:07:07,600 --> 01:07:10,633 At hayaan mo akong magpatuloy dito at say-- ako pagpunta sa magkaroon ng 1375 01:07:10,633 --> 01:07:12,290 upang baguhin ito sa isang hindi linagdaan mahaba. 1376 01:07:12,290 --> 01:07:16,860 O kaya naman, sabihin makita, hindi ko matandaan ang aking sarili. 1377 01:07:16,860 --> 01:07:19,920 >> Sabihin sige at gumawa overflow. 1378 01:07:19,920 --> 01:07:21,860 Hindi, na hindi ito, LLD, salamat. 1379 01:07:21,860 --> 01:07:23,430 Kaya minsan Clang ay maaaring helpful. 1380 01:07:23,430 --> 01:07:27,550 Hindi ko matandaan kung ano ang format specifier ay para sa isang mahabang mahabang. 1381 01:07:27,550 --> 01:07:28,950 >> Ngunit, sa katunayan, Clang sinabi sa akin. 1382 01:07:28,950 --> 01:07:31,570 Green ay ang ilang mga uri ng mabuti, pa rin ay nangangahulugan na ikaw ay nagkamali. 1383 01:07:31,570 --> 01:07:33,190 Ito ay guessing na sinadya ko LLD. 1384 01:07:33,190 --> 01:07:38,750 >> Kaya hayaan mo akong dalhin ito sa payo, sa isang mahabang long decimal na numero, i-save na. 1385 01:07:38,750 --> 01:07:43,190 At hayaan mo akong muling patakbuhin ito, tuldok slash overflow, ang Enter. 1386 01:07:43,190 --> 01:07:45,020 At ngayon kung ano ang cool ay na ito. 1387 01:07:45,020 --> 01:07:49,140 >> Kung mag-scroll ko pabalik sa panahon, kami pa rin simulan pagbibilang sa parehong place-- 1, 2, 4, 1388 01:07:49,140 --> 01:07:50,220 8, 16. 1389 01:07:50,220 --> 01:07:54,860 Notice, makuha namin ang lahat ng mga paraan ng hanggang sa 1 bilyon. 1390 01:07:54,860 --> 01:07:57,070 Ngunit pagkatapos naming ligtas na makakuha ng sa 2 bilyong. 1391 01:07:57,070 --> 01:08:01,300 >> Pagkatapos namin makakuha ng sa 4 billion, pagkatapos ay 8 bilyon, 17 billion. 1392 01:08:01,300 --> 01:08:03,340 At pumunta kami mas mataas, at mas mataas, at mas mataas. 1393 01:08:03,340 --> 01:08:05,740 Sa kalaunan, ito, masyadong, break. 1394 01:08:05,740 --> 01:08:09,350 >> Sa kalaunan, may isang mahabang mahaba, kung saan ay ang 64-bit na halaga, hindi 1395 01:08:09,350 --> 01:08:13,660 isang 32-bit na halaga, kung bilangin mo masyadong mataas, balutin mo sa paligid 0. 1396 01:08:13,660 --> 01:08:16,410 At sa kasong ito, mangyari namin upang end up na may isang negatibong numero. 1397 01:08:16,410 --> 01:08:17,550 >> Kaya ito ay isang problema. 1398 01:08:17,550 --> 01:08:20,439 At ito ay lumiliko out na ito problema ay hindi ang lahat ng arcane iyon. 1399 01:08:20,439 --> 01:08:23,060 Kahit na hindi ko na sadyang sapilitan ito sa mga pagkakamali, 1400 01:08:23,060 --> 01:08:26,149 ito ay lumiliko out namin makita ito uri ng lahat sa paligid sa amin, o hindi bababa sa ilan sa amin gawin. 1401 01:08:26,149 --> 01:08:28,939 >> Kaya sa Lego Star Wars, kung kailanman na-play ang laro, 1402 01:08:28,939 --> 01:08:33,830 ito ay lumiliko out maaari mong pumunta sa paligid hatiin ang mga bagay sa LEGO mundo, 1403 01:08:33,830 --> 01:08:36,640 at pagkolekta ng mga barya, mahalagang. 1404 01:08:36,640 --> 01:08:39,200 At kung sakaling mo na-play ito laro paraan ng masyadong maraming oras, 1405 01:08:39,200 --> 01:08:42,630 bilang na ito walang pangalan indibidwal dito ay, ang kabuuang bilang 1406 01:08:42,630 --> 01:08:46,700 ng mga barya na maaari mong mangolekta ay, ito ay tila, 4 bilyon. 1407 01:08:46,700 --> 01:08:48,240 >> Ngayon, sa mga ito ang tunay na bilugan. 1408 01:08:48,240 --> 01:08:50,239 Kaya LEGO ay sinusubukan upang panatilihin ang mga bagay user friendly. 1409 01:08:50,239 --> 01:08:53,779 Hindi nila gawin ito eksakto 2 hanggang ang 32 kapangyarihan, per noong nakaraang linggo. 1410 01:08:53,779 --> 01:08:55,310 Ngunit 4 billion ay isang dahilan. 1411 01:08:55,310 --> 01:08:58,979 Tila, batay sa impormasyon na ito, na LEGO, at ang kumpanya na 1412 01:08:58,979 --> 01:09:02,624 ginawa ito tunay na software, nagpasya na ang maximum na bilang ng mga barya 1413 01:09:02,624 --> 01:09:04,540 ang user ay maaaring mag-ipon ay, sa katunayan, 4 bilyon, 1414 01:09:04,540 --> 01:09:12,069 dahil sila ay pinili sa kanilang code gamitin hindi isang long long, tila, 1415 01:09:12,069 --> 01:09:16,140 ngunit lamang ng isang integer, isang wala pang kontratang integer, lamang ng isang positibong integer, na ang 1416 01:09:16,140 --> 01:09:18,089 max halaga ay tinatayang na. 1417 01:09:18,089 --> 01:09:19,380 Well, narito ang isa pang funny isa. 1418 01:09:19,380 --> 01:09:23,500 Kaya sa laro Civilization, na kung saan ang ilan sa inyo ay maaaring maging pamilyar, na may 1419 01:09:23,500 --> 01:09:26,660 ito ay lumiliko out na taon na ang nakakaraan nagkaroon ay isang bug sa ito laro kung saan 1420 01:09:26,660 --> 01:09:28,750 kung i-play ang papel na ginagampanan ng Gandhi sa laro, 1421 01:09:28,750 --> 01:09:34,020 sa halip na sa kanya pagiging napaka pasipista, sa halip ay hindi kapani-paniwalang, hindi kapani-paniwalang 1422 01:09:34,020 --> 01:09:36,399 agresibo, sa ilang mga pangyayari. 1423 01:09:36,399 --> 01:09:40,529 Sa partikular, ang paraan na Civilization gawa ay na kung ikaw, ang player, 1424 01:09:40,529 --> 01:09:44,680 magpatibay demokrasya, ang iyong handulong iskor ay makakakuha ng 1425 01:09:44,680 --> 01:09:48,130 decremented sa pamamagitan ng dalawang, kaya minus minus, at pagkatapos minus minus. 1426 01:09:48,130 --> 01:09:50,569 >> Kaya mo ibawas 2 mula iyong aktwal na iterating. 1427 01:09:50,569 --> 01:09:56,650 Sa kasamaang palad, kung ang iyong iterating ay una 1, at ikaw ibawas 2 mula sa mga ito 1428 01:09:56,650 --> 01:09:59,050 pagkatapos adopting demokrasya bilang Gandhi dito baka 1429 01:09:59,050 --> 01:10:02,200 ginawa, dahil siya ay napaka-passive-- 1 sa ang laki ng handulong. 1430 01:10:02,200 --> 01:10:04,830 Ngunit kung siya adopts demokrasya, at pagkatapos ay siya napupunta mula sa 1 sa mga negatibong 1. 1431 01:10:04,830 --> 01:10:11,470 >> Sa kasamaang palad, sila ay gamit unsigned numero, 1432 01:10:11,470 --> 01:10:15,400 na nangangahulugan na sila ginagamot kahit negatibong numero na tila hayag na positibo. 1433 01:10:15,400 --> 01:10:19,780 At ito ay lumiliko out na ang mga positive katumbas ng negatibong 1, 1434 01:10:19,780 --> 01:10:23,480 sa tipikal programa sa computer, ay 255. 1435 01:10:23,480 --> 01:10:27,250 Kaya kung Gandhi adopts demokrasya, at sa gayon ay 1436 01:10:27,250 --> 01:10:32,470 kanyang handulong marka nabawasan, ito ang tunay na Rolls sa paligid sa 255 1437 01:10:32,470 --> 01:10:35,470 at gumagawa sa kanya ang pinaka agresibo karakter sa laro. 1438 01:10:35,470 --> 01:10:36,930 Kaya maaari mong Google up sa mga ito. 1439 01:10:36,930 --> 01:10:39,380 At ito ay, sa katunayan, ang isang aksidenteng programming bug, 1440 01:10:39,380 --> 01:10:43,010 ngunit iyan ay ipinasok lubos ang tradisyonal na kaalaman mula pa nang. 1441 01:10:43,010 --> 01:10:44,360 >> Iyon lang ang masaya at cute. 1442 01:10:44,360 --> 01:10:47,760 Higit pang mga nakakatakot ay kapag aktwal na tunay na mundo ng mga aparato, at hindi games, 1443 01:10:47,760 --> 01:10:48,820 may mga parehong mga bug. 1444 01:10:48,820 --> 01:10:54,500 Sa katunayan, lamang ng isang taon na ang nakalipas ng isang artikulo ay dumating nang malapit na ang Boeing 787 Dreamliner. 1445 01:10:54,500 --> 01:10:56,850 >> At ang mga artikulo sa unang sulyap nagbabasa ng isang maliit na arcane. 1446 01:10:56,850 --> 01:11:01,480 Ngunit sinabi ito ito, ang isang software kahinaan sa Boeing 1447 01:11:01,480 --> 01:11:04,790 bagong 787 Dreamliner jet ay potensyal na maging sanhi pilots 1448 01:11:04,790 --> 01:11:07,220 upang mawalan ng kontrol ng ang sasakyang panghimpapawid, posibleng 1449 01:11:07,220 --> 01:11:11,750 sa kalagitnaan ng flight, ang mga opisyal FAA Nagbabala airlines nakaraang araw. 1450 01:11:11,750 --> 01:11:14,520 Ito ay ang pagpapasiya na ang isang model 787 1451 01:11:14,520 --> 01:11:19,770 airplane na na-pinapatakbo patuloy na para sa 248 araw 1452 01:11:19,770 --> 01:11:24,880 maaaring mawala ang lahat ng alternating kasalukuyang, AC, de-koryenteng kapangyarihan dahil sa ang generator 1453 01:11:24,880 --> 01:11:28,892 control units, GCUs, sabay-sabay pagpunta sa mabibigo safe mode. 1454 01:11:28,892 --> 01:11:29,850 Ito ay uri ng pagkawala sa akin. 1455 01:11:29,850 --> 01:11:35,390 Ngunit ang memo nakasaad, OK, ngayon nakuha ko na, ang kalagayan ay sanhi ng isang software 1456 01:11:35,390 --> 01:11:38,590 kontrahin panloob sa ng generator control 1457 01:11:38,590 --> 01:11:44,860 yunit na apaw pagkatapos 248 araw ng tuloy-tuloy na kapangyarihan. 1458 01:11:44,860 --> 01:11:47,070 Kami ay nag-isyu na ito mapansin upang maiwasan ang pagkawala 1459 01:11:47,070 --> 01:11:49,300 ng lahat ng AC electrical kapangyarihan, na maaaring magresulta 1460 01:11:49,300 --> 01:11:50,980 sa pagkawala ng kontrol ng eroplano. 1461 01:11:50,980 --> 01:11:55,380 >> Kaya, literal, may ilang mga integer, o ilang katumbas na uri ng data, 1462 01:11:55,380 --> 01:11:57,960 ginagamit sa software sa isang aktwal na eroplano 1463 01:11:57,960 --> 01:12:00,756 na kung ikaw panatilihin ang iyong airplane sa may sapat na katagalan, na tila 1464 01:12:00,756 --> 01:12:03,880 maaaring ang kaso kung lamang ikaw ay nagpapatakbo ng ito patuloy at hindi kailanman unplugging 1465 01:12:03,880 --> 01:12:06,810 ang iyong eroplano, tila, o pagpapaalam baterya nito ay mamatay, 1466 01:12:06,810 --> 01:12:09,840 ay malaon bilangin up, at up, at up, at up, at up, at up. 1467 01:12:09,840 --> 01:12:12,150 >> At, sa pamamagitan ng kalikasan, isang takda na halaga ng memory 1468 01:12:12,150 --> 01:12:15,880 ay apaw, lumiligid bumalik sa zero o ilang negatibong halaga, 1469 01:12:15,880 --> 01:12:19,920 isang pangalawang epekto ng kung saan ay ang frighteningly real katotohanan 1470 01:12:19,920 --> 01:12:23,970 na ang eroplano ay maaaring kailangan na rebooted, mabisa, 1471 01:12:23,970 --> 01:12:27,290 o maaaring mahulog, mas masahol pa, tulad ng ito ay lilipad. 1472 01:12:27,290 --> 01:12:29,230 Kaya ang mga ito uri ng mga isyu pa rin sa amin, 1473 01:12:29,230 --> 01:12:33,130 even-- ito ay isang 2015 artikulo, ang lahat ng mga mas nakakatakot 1474 01:12:33,130 --> 01:12:36,100 kapag ginawa mo hindi kinakailangang maunawaan, pahalagahan, o anticipate 1475 01:12:36,100 --> 01:12:38,640 mga uri ng mga error. 1476 01:12:38,640 --> 01:12:42,030 >> Kaya ito lumiliko out mayroong isang iba pang mga masamang bagay tungkol sa data na representasyon. 1477 01:12:42,030 --> 01:12:47,080 Ito ay lumiliko out na kahit na kamay ay uri ng flawed, dahil sa kamay, masyadong, 1478 01:12:47,080 --> 01:12:51,440 Iminungkahi ko ay 32 bits, o siguro 64 kung gumamit ka ng isang double. 1479 01:12:51,440 --> 01:12:53,070 Ngunit na pa rin may hangganan. 1480 01:12:53,070 --> 01:12:57,070 >> At ang catch ay na kung maaari mong maglagay ng isang walang-katapusang bilang ng mga numero 1481 01:12:57,070 --> 01:12:59,460 pagkatapos ng decimal point, walang paraan ka 1482 01:12:59,460 --> 01:13:02,690 maaaring kumatawan ang lahat ng posibleng numero na kami ay itinuro 1483 01:13:02,690 --> 01:13:04,990 sa mababang paaralan ay maaaring umiiral sa mundo. 1484 01:13:04,990 --> 01:13:08,870 Ang isang computer, mahalagang, ay upang pumili ng isang subset ng mga numero 1485 01:13:08,870 --> 01:13:10,200 upang kumatawan nang wasto. 1486 01:13:10,200 --> 01:13:12,450 >> Ngayon, ang computer ay maaaring ikot marahil ng isang maliit na bit, 1487 01:13:12,450 --> 01:13:17,900 at maaaring magpapahintulot sa inyo na halos store anumang bilang maaari mong marahil gusto. 1488 01:13:17,900 --> 01:13:20,940 Ngunit lamang intuitively, kung ikaw magkaroon ng isang may hangganan bilang ng bits, 1489 01:13:20,940 --> 01:13:24,560 maaari ka lamang ibahin ang ayos ng mga ito sa gayon maraming mga may hangganan paraan. 1490 01:13:24,560 --> 01:13:26,570 Kaya hindi mo maaaring posibleng gumamit ng isang may hangganan bilang 1491 01:13:26,570 --> 01:13:29,880 ng permutasyon ng bits, pattern ng mga zero at mga bago, 1492 01:13:29,880 --> 01:13:32,940 upang kumatawan ng isang walang hanggan bilang ng mga numero, 1493 01:13:32,940 --> 01:13:37,370 na nagmumungkahi na ang mga computer maaaring napakahusay maging namamalagi sa amin paminsan-minsan. 1494 01:13:37,370 --> 01:13:38,770 >> Sa katunayan, sabihin gawin ito. 1495 01:13:38,770 --> 01:13:41,239 Hayaan akong bumalik sa CS50 IDE. 1496 01:13:41,239 --> 01:13:43,030 Hayaan akong sige at lumikha ng isang maliit na programa 1497 01:13:43,030 --> 01:13:47,940 tinatawag imprecision, upang ipakita na mga computer ay, sa katunayan, imprecise. 1498 01:13:47,940 --> 01:13:51,910 >> At hayaan mo akong magpatuloy at magsimula sa ang ilan sa na code mula sa harap, 1499 01:13:51,910 --> 01:13:53,830 at ngayon lamang gawin ang mga sumusunod. 1500 01:13:53,830 --> 01:14:03,640 Hayaan akong magpatuloy at gawin printf, porsiyento f, backslash n, 1 hinati sa 10. 1501 01:14:03,640 --> 01:14:07,430 Sa ibang salita, sabihin sumisid sa mas malalim sa 1/10, tulad ng 1 at hinati sa 10. 1502 01:14:07,430 --> 01:14:09,760 Tiyak, ang isang computer ay maaaring kumatawan sa 1/10. 1503 01:14:09,760 --> 01:14:13,620 >> Kaya sabihin sige at gumawa imprecision. 1504 01:14:13,620 --> 01:14:14,390 Tingnan natin. 1505 01:14:14,390 --> 01:14:16,210 Format tumutukoy type double. 1506 01:14:16,210 --> 01:14:18,160 Ngunit ang argument ay may type int. 1507 01:14:18,160 --> 01:14:19,040 Ano ang nangyayari? 1508 01:14:19,040 --> 01:14:21,970 >> Oh, kawili-wili, kaya ito ay isang aral na natutuhan mula sa bago. 1509 01:14:21,970 --> 01:14:26,050 Ako sinasabi, hey, computer show ako ng isang float na may porsyento f. 1510 01:14:26,050 --> 01:14:28,200 Ngunit ako nagbibigay ito ng 2 ints. 1511 01:14:28,200 --> 01:14:31,120 Kaya ito ay lumiliko out, ang maaari kong ayusin ito sa loob ng ilang mga paraan. 1512 01:14:31,120 --> 01:14:38,430 >> hindi ko na lang i-isa sa 1.0, at 10 sa 10.0, na kung saan ay, sa katunayan, 1513 01:14:38,430 --> 01:14:42,390 magkaroon ng epekto ng pag-convert ng ang mga ito sa floats-- pa rin sana 1514 01:14:42,390 --> 01:14:43,180 sa parehong numero. 1515 01:14:43,180 --> 01:14:45,880 O ito ay lumiliko out mayroong isang bagay kami makita muli bago ang haba. 1516 01:14:45,880 --> 01:14:47,170 Maaari mong palayasin ang mga numero. 1517 01:14:47,170 --> 01:14:49,880 >> Maaari mong, gamit ang parenthetical expression, maaari mong sabihin, 1518 01:14:49,880 --> 01:14:52,560 hey, computer, kumuha ito 10, na alam ko ay isang int. 1519 01:14:52,560 --> 01:14:54,660 Ngunit ituring ito, mangyaring, na parang ito ay isang float. 1520 01:14:54,660 --> 01:14:56,680 Ngunit ito nararamdaman hindi kinakailangan complex. 1521 01:14:56,680 --> 01:14:59,040 >> Para sa aming mga layunin araw na ito, sabihin lang literal 1522 01:14:59,040 --> 01:15:02,700 gumawa ng mga ito lumulutang halaga punto na may isang decimal point, tulad nito. 1523 01:15:02,700 --> 01:15:07,060 Hayaan akong sige at gawin uli, gumawa imprecision, good, dot slash 1524 01:15:07,060 --> 01:15:08,870 imprecision, ipasok. 1525 01:15:08,870 --> 01:15:10,990 OK, kami ay naghahanap ng mabuti. 1526 01:15:10,990 --> 01:15:18,194 >> 1 hinati sa 10, ayon sa aking Mac dito, ay, sa katunayan, 0.100000. 1527 01:15:18,194 --> 01:15:21,360 Ngayon, ako ay itinuro sa mababang paaralan doon ay dapat na isang walang-katapusang bilang ng 0. 1528 01:15:21,360 --> 01:15:23,151 Kaya sabihin hindi bababa sa subukan upang makita ang ilan sa mga. 1529 01:15:23,151 --> 01:15:26,770 Ito ay lumiliko out na printf ay isang maliit na may interes pa rin kaysa kami ay gumagamit ng. 1530 01:15:26,770 --> 01:15:30,890 Ito ay lumiliko out hindi mo na kailangang upang tukuyin lamang porsiyento f, o lamang porsiyento i. 1531 01:15:30,890 --> 01:15:33,830 Maaari mong aktwal na tukuyin ilang mga pagpipilian control dito. 1532 01:15:33,830 --> 01:15:36,470 >> Sa partikular, ako pagpunta sabihin, hey, printf, 1533 01:15:36,470 --> 01:15:39,660 aktwal na ipakita sa akin ang 10 decimal point. 1534 01:15:39,660 --> 01:15:40,820 Kaya ito ang hitsura ng isang maliit na kakaiba. 1535 01:15:40,820 --> 01:15:42,845 Gayon ma'y inyong sinasabi porsiyento, tuldok, kung gaano karaming mga numero 1536 01:15:42,845 --> 01:15:44,970 Gusto mo bang makita pagkatapos ng decimal point, at pagkatapos ay f 1537 01:15:44,970 --> 01:15:48,340 para sa flat, dahil lang iyon ang ano ang sinasabi ng babasahin. 1538 01:15:48,340 --> 01:15:50,080 Hayaan akong sige at i-save na. 1539 01:15:50,080 --> 01:15:52,460 >> At mapansin masyadong, ko natatanggap pagod ng retyping bagay. 1540 01:15:52,460 --> 01:15:55,900 Kaya lang ako sa pag-set up at down na arrow sa aking mga susi dito. 1541 01:15:55,900 --> 01:15:58,710 At kung ako panatilihin ang paghagupit up, ikaw maaaring makita ang lahat ng mga utos 1542 01:15:58,710 --> 01:16:01,090 na ginawa ko, o hindi tama ginawa. 1543 01:16:01,090 --> 01:16:04,630 >> At ako pagpunta sa sige ngayon at hindi talaga gamitin na, tila. 1544 01:16:04,630 --> 01:16:11,416 Gumawa imprecision, tuldok slash imprecision-- kaya 1545 01:16:11,416 --> 01:16:13,290 kung ano ako ay itinuro sa grade school sumusuri out. 1546 01:16:13,290 --> 01:16:19,010 Kahit na i-print ko ito sa 10 decimal mga lugar na ito, sa katunayan, ay 0.10000. 1547 01:16:19,010 --> 01:16:19,840 Pero alam mo kung ano? 1548 01:16:19,840 --> 01:16:21,150 >> Sabihin makakuha ng isang maliit na matakaw. 1549 01:16:21,150 --> 01:16:23,990 Sabihin natin, tulad ng, ipakita sa akin 55 puntos pagkatapos ng decimal. 1550 01:16:23,990 --> 01:16:26,160 Sabihin talagang kumuha ito programa para sa isang iikot. 1551 01:16:26,160 --> 01:16:31,170 Hayaan akong gawing muli ito sa make imprecision, tuldok slash, imprecision. 1552 01:16:31,170 --> 01:16:32,390 >> At dito namin pumunta. 1553 01:16:32,390 --> 01:16:34,420 Ang iyong pagkabata ay isang kasinungalingan. 1554 01:16:34,420 --> 01:16:48,410 Sa malas, 1 hinati sa 10 ay sa katunayan 0.100000000000000005551115123-- 1555 01:16:48,410 --> 01:16:49,740 >> Ano ang nangyayari? 1556 01:16:49,740 --> 01:16:53,360 Well, ito ay lumiliko out, kung ikaw uri ng Tumingin malayo sapat out sa ang kalakip na 1557 01:16:53,360 --> 01:16:55,950 representasyon ng mga ito number, ito ang tunay na 1558 01:16:55,950 --> 01:17:00,400 ay hindi eksakto 1/10, o 0.1 at isang walang hanggan bilang ng mga zero. 1559 01:17:00,400 --> 01:17:01,630 Ngayon, kung bakit ay na? 1560 01:17:01,630 --> 01:17:06,250 >> Well, kahit na ito ay isang simpleng numero sa amin mga tao, 1 hinati sa 10, 1561 01:17:06,250 --> 01:17:10,910 ito ay pa rin ang isa sa mga walang katapusan maraming mga numero na maaaring sa tingin namin up. 1562 01:17:10,910 --> 01:17:14,490 Ngunit ang isang computer ay maaaring lamang kumakatawan finitely maraming mga kaya numero. 1563 01:17:14,490 --> 01:17:18,710 At kaya, mabisa, kung ano ang computer ay nagpapakita sa amin ay ang pinakamalapit 1564 01:17:18,710 --> 01:17:22,940 approximation sa bilang gusto naming naniniwala ay 1/10, 1565 01:17:22,940 --> 01:17:27,760 o talagang 0.10000 ad infinitum. 1566 01:17:27,760 --> 01:17:30,425 >> Sa halip, bagaman, ito ay mas malapit hangga't maaari itong makuha. 1567 01:17:30,425 --> 01:17:32,300 At, sa katunayan, kung titingnan mo ilalim ng hood, 1568 01:17:32,300 --> 01:17:37,050 gaya naman natin na dito sa pamamagitan ng pagtingin 55 digit pagkatapos ng decimal, 1569 01:17:37,050 --> 01:17:39,990 namin talagang na katotohanan. 1570 01:17:39,990 --> 01:17:42,610 Ngayon bilang isang bukod, kung na sa iyo kailanman makikita ang movie-- 1571 01:17:42,610 --> 01:17:45,780 karamihan sa inyo malamang haven't-- ngunit Superman 3 ilang taon na nakalipas, 1572 01:17:45,780 --> 01:17:49,500 Richard Pryor mahalagang leveraged ito katotohanan sa kanyang kumpanya upang magnakaw ng maraming 1573 01:17:49,500 --> 01:17:53,500 ng mga fraction at fractions ng pennies, dahil ang company-- bilang ko pagpapabalik, 1574 01:17:53,500 --> 01:17:57,210 ito ay naging isang while-- ay mahalagang itsa anumang bagay na hindi umangkop 1575 01:17:57,210 --> 01:17:58,790 sa paniwala ng cents. 1576 01:17:58,790 --> 01:18:01,480 >> Ngunit kung ikaw magdagdag ng hanggang ang lahat ng mga maliit na maliit, maliit na maliit, maliit na maliit mga numero muli, 1577 01:18:01,480 --> 01:18:04,960 at muli, at muli, maaari mong, tulad ng sa kanyang kaso, gumawa ng isang mahusay na halaga ng pera. 1578 01:18:04,960 --> 01:18:08,010 >> Na parehong ideya ay natastas off sa pamamagitan isang mas bagong, ngunit pa rin ngayon mas matanda 1579 01:18:08,010 --> 01:18:10,500 movie, na tinatawag na Office Space, kung saan ang mga guys sa movie na, 1580 01:18:10,500 --> 01:18:13,501 ginawa ang parehong bagay, screwed up ito ganap, natapos na may paraan ng masyadong maraming 1581 01:18:13,501 --> 01:18:14,666 pera sa kanilang mga account sa bangko. 1582 01:18:14,666 --> 01:18:15,800 Ito ay ang lahat ng tunay kahina-hinala. 1583 01:18:15,800 --> 01:18:19,290 Ngunit sa pagtatapos ng araw, imprecision ay ang lahat sa paligid sa amin. 1584 01:18:19,290 --> 01:18:22,240 >> At iyon, masyadong, ay maaaring maging frighteningly ang kaso. 1585 01:18:22,240 --> 01:18:25,590 Ito ay lumiliko out na Superman 3 at Office Space tabi, may 1586 01:18:25,590 --> 01:18:28,460 ay maaaring maging ng ilang mga napaka-real mundo ramifications 1587 01:18:28,460 --> 01:18:32,290 ng mga katotohanan ng imprecise representasyon ng data 1588 01:18:32,290 --> 01:18:34,770 na kahit tayong mga tao sa sa araw na ito ay hindi kinakailangang 1589 01:18:34,770 --> 01:18:38,230 maunawaan pati na rin ang dapat namin, o tandaan nang mas madalas hangga't dapat namin. 1590 01:18:38,230 --> 01:18:42,950 At, sa katunayan, ang mga sumusunod na clip ay mula sa isang pagtingin sa ilang mga napaka-tunay na mundo 1591 01:18:42,950 --> 01:18:47,730 ramifications ng kung ano ang mangyayari kung ikaw ay hindi pinasasalamatan ang imprecision na 1592 01:18:47,730 --> 01:18:50,065 Maaari itong mangyari sa mga numero na representasyon. 1593 01:18:50,065 --> 01:18:51,300 >> [Video playback] 1594 01:18:51,300 --> 01:18:55,620 >> -Computers, Lahat kami dumating upang tanggapin ang madalas na nakakabigo problema na 1595 01:18:55,620 --> 01:19:00,310 pumunta sa them-- bugs, mga virus, at software glitches, 1596 01:19:00,310 --> 01:19:03,130 para sa mga maliliit na mga presyo upang bayaran para sa kaginhawahan. 1597 01:19:03,130 --> 01:19:07,800 Ngunit sa mataas na tech at high speed militar at space program application, 1598 01:19:07,800 --> 01:19:12,800 ang pinakamaliit na problema Maaari ay Pinalaking sa kalamidad. 1599 01:19:12,800 --> 01:19:18,900 >> Sa Hunyo 4, 1996, siyentipiko inihanda na maglunsad ng isang unmanned Ariane 5 rocket. 1600 01:19:18,900 --> 01:19:21,220 Ito ay nagdadala ng pang-agham satellite dinisenyo 1601 01:19:21,220 --> 01:19:24,600 upang magtatag tiyak kung paano ang magnetic field ng lupa nakikipag-ugnayan 1602 01:19:24,600 --> 01:19:27,410 may solar na hangin. 1603 01:19:27,410 --> 01:19:30,800 Rocket ay ginawa para sa European Space Agency, 1604 01:19:30,800 --> 01:19:34,370 at lifted off mula sa kanyang pasilidad sa baybayin ng French Guiana. 1605 01:19:34,370 --> 01:19:37,540 >> -Sa Tungkol sa 37 segundo sa ang flight, sila ay unang 1606 01:19:37,540 --> 01:19:39,270 Napansin ng isang bagay ay pagpunta mali. 1607 01:19:39,270 --> 01:19:42,250 Ang nozzles ay swiveling sa isang paraan sila ay talagang dapat hindi. 1608 01:19:42,250 --> 01:19:46,580 Around 40 segundo sa flight, malinaw na, ang sasakyan ay may problema. 1609 01:19:46,580 --> 01:19:48,850 >> At na kapag ginawa nila isang desisyon upang wasakin ito. 1610 01:19:48,850 --> 01:19:52,780 Ang safety officer na layo, na matinding lakas ng loob, pinindot ang button, 1611 01:19:52,780 --> 01:19:58,150 blew up ang rocket, bago ng dati maging isang panganib sa kaligtasan ng publiko. 1612 01:19:58,150 --> 01:20:01,060 >> -Ito Ay ang maiden paglalayag ng Ariane 5. 1613 01:20:01,060 --> 01:20:03,960 At nito pagkawasak kinuha ilagay dahil sa isang lamat 1614 01:20:03,960 --> 01:20:05,822 naka-embed sa software ang rocket ni. 1615 01:20:05,822 --> 01:20:08,280 -Ang Problema sa Ariane ay na nagkaroon ng isang numero na 1616 01:20:08,280 --> 01:20:10,600 kinakailangan 64 bits upang ipahayag. 1617 01:20:10,600 --> 01:20:13,590 At nais nilang i-convert ito sa isang 16-bit na numero. 1618 01:20:13,590 --> 01:20:15,610 Sila ay ipinapalagay na ang mga numero ay hindi kailanman pagpunta 1619 01:20:15,610 --> 01:20:20,980 upang maging napaka-malaki, na ang karamihan ng mga digits sa isang 64-bit na numero ay zeroes. 1620 01:20:20,980 --> 01:20:22,440 Sila ay mali. 1621 01:20:22,440 --> 01:20:25,060 >> -Ang Kawalan ng kakayahan ng isang software program upang tanggapin 1622 01:20:25,060 --> 01:20:29,510 ang uri ng numero na nabuo sa pamamagitan isa pang ay sa ugat ng failure. 1623 01:20:29,510 --> 01:20:34,350 Software development ay naging isang napaka-mahal na bahagi ng mga bagong teknolohiya. 1624 01:20:34,350 --> 01:20:38,140 Ang Ariane rocket ay lubhang matagumpay, kaya magkano ng software 1625 01:20:38,140 --> 01:20:41,550 nilikha para sa ito ay din ginagamit sa Ariane 5. 1626 01:20:41,550 --> 01:20:47,940 >> -Ang Pangunahing problema ay na ang Ariane 5 ay mas mabilis, pinabilis na mas mabilis. 1627 01:20:47,940 --> 01:20:51,450 At ang software ay hindi accounted para sa. 1628 01:20:51,450 --> 01:20:55,060 >> -Ang Pagkawasak ng rocket ay isang malaking pinansiyal na kalamidad, 1629 01:20:55,060 --> 01:20:58,790 lahat dahil sa isang error sa minutong software. 1630 01:20:58,790 --> 01:21:01,210 Ngunit ito ay hindi ang unang time problema sa data ng conversion 1631 01:21:01,210 --> 01:21:04,820 ay plagued modernong rocket teknolohiya. 1632 01:21:04,820 --> 01:21:08,050 >> -Sa 1991, sa simula ng unang Gulf War, 1633 01:21:08,050 --> 01:21:10,570 ang Patriot misayl nakaranas ng isang katulad na uri 1634 01:21:10,570 --> 01:21:12,800 ng problema bilang conversion. 1635 01:21:12,800 --> 01:21:16,090 At bilang isang resulta, 28 tao, 28 mga sundalong Amerikano, 1636 01:21:16,090 --> 01:21:19,080 ay namatay, at tungkol sa 100 iba pa ang nasugatan, 1637 01:21:19,080 --> 01:21:22,780 kapag ang Patriot, na kung saan ay dapat upang maprotektahan laban sa mga papasok na scuds, 1638 01:21:22,780 --> 01:21:25,830 Nabigo sa sunog isang misayl. 1639 01:21:25,830 --> 01:21:31,670 >> -Kapag Iraq invaded Kuwait, at Amerika inilunsad Desert Storm sa unang bahagi ng 1991, 1640 01:21:31,670 --> 01:21:35,780 Patriot misayl baterya ay deployed upang protektahan ang Saudi Arabia at Israel 1641 01:21:35,780 --> 01:21:39,230 mula Iraqi malaking ulan misayl pag-atake. 1642 01:21:39,230 --> 01:21:43,810 Ang Patriot ay isang medium-range US ibabaw upang air system, manufactured 1643 01:21:43,810 --> 01:21:45,770 sa pamamagitan ng Raytheon kumpanya. 1644 01:21:45,770 --> 01:21:52,340 >> -Ang Laki ng Patriot interceptor mismo ay tungkol sa humigit-kumulang 20 talampakan ang haba. 1645 01:21:52,340 --> 01:21:55,230 At ito weighs tungkol sa 2,000 pounds. 1646 01:21:55,230 --> 01:21:59,320 At ito ay nagdadala ng isang warhed ng tungkol sa, tingin ko ito ay humigit-kumulang 150 pounds. 1647 01:21:59,320 --> 01:22:03,930 At ang warhed mismo ay isang mataas na paputok, na kung saan 1648 01:22:03,930 --> 01:22:07,330 ay fragments sa paligid nito. 1649 01:22:07,330 --> 01:22:11,680 Ang casing ng warhed ay dinisenyo upang kumilos tulad buckshot. 1650 01:22:11,680 --> 01:22:14,110 >> -Ang Missiles ay dinala apat bawat lalagyan, 1651 01:22:14,110 --> 01:22:17,130 at ay transported sa pamamagitan ng isang semi trailer. 1652 01:22:17,130 --> 01:22:24,930 >> -Ang Patriot anti-misayl sistema napupunta likod ng hindi bababa sa 20 taon na ngayon. 1653 01:22:24,930 --> 01:22:28,420 Ito ay orihinal na idinisenyo bilang isang air pagtatanggol misayl 1654 01:22:28,420 --> 01:22:30,720 i-shoot down na kaaway eroplano. 1655 01:22:30,720 --> 01:22:34,500 Sa unang Gulf War, kapag digmaan na dumating kasama, 1656 01:22:34,500 --> 01:22:39,745 ang Army nais gamitin ito upang shoot down scuds, hindi eroplano. 1657 01:22:39,745 --> 01:22:43,620 >> Ang Iraqi Air Force ay hindi kaya magkano ng isang problema. 1658 01:22:43,620 --> 01:22:46,670 Ngunit ang Army ay nag-aalala tungkol sa scuds. 1659 01:22:46,670 --> 01:22:50,170 At kaya sila tried sa i-upgrade ang Patriot. 1660 01:22:50,170 --> 01:22:52,800 >> -Intercepting Isang kaaway misayl na naglalakbay sa Mach 5 1661 01:22:52,800 --> 01:22:55,830 ay pagpunta sa maging mahirap sapat. 1662 01:22:55,830 --> 01:22:58,490 Ngunit kapag ang Patriot ay rushed sa serbisyo, 1663 01:22:58,490 --> 01:23:02,860 ang Army ay hindi alam ng isang Iraqi pagbabago na ginawa 1664 01:23:02,860 --> 01:23:05,930 kanilang scuds halos imposible upang maabot. 1665 01:23:05,930 --> 01:23:10,740 >> -Ano Ang nangyari ay ang scuds na ay darating sa mga hindi matatag. 1666 01:23:10,740 --> 01:23:11,692 Sila ay wobbling. 1667 01:23:11,692 --> 01:23:14,910 Ang dahilan sa ito ay ang Iraqis, upang 1668 01:23:14,910 --> 01:23:18,280 upang makakuha ng 600 kilometro sa labas ng isang 300 kilometro 1669 01:23:18,280 --> 01:23:21,700 range missile, kinuha timbang sa labas ng front warhed. 1670 01:23:21,700 --> 01:23:23,390 Sila ay ginawa warhed lighter. 1671 01:23:23,390 --> 01:23:27,330 >> Kaya ngayon ang Patriot ay sinusubukan na dumating sa malaking ulan. 1672 01:23:27,330 --> 01:23:30,230 At halos lahat ng oras, ang napakalaki karamihan ng mga oras, 1673 01:23:30,230 --> 01:23:32,940 ito would makatarungan lumipad sa pamamagitan ng malaking ulan. 1674 01:23:32,940 --> 01:23:37,260 Sa sandaling ang mga operator Patriot sistema maisasakatuparan ang Patriot hindi natamaan ang target, 1675 01:23:37,260 --> 01:23:41,690 sila mina Patriot warhed ni upang maiwasan ang posibleng casualties kung ito 1676 01:23:41,690 --> 01:23:44,570 ay pinapayagan na mahulog sa lupa. 1677 01:23:44,570 --> 01:23:48,790 >> -Na Ay kung ano ang nakita karamihan ng mga tao, mga malaking fireballs sa kalangitan, 1678 01:23:48,790 --> 01:23:54,550 at gusot bilang intercepts ng malaking ulan warheads. 1679 01:23:54,550 --> 01:23:56,630 >> -Kahit sa gabi kalangitan, Patriots lumitaw 1680 01:23:56,630 --> 01:24:00,370 upang maging matagumpay pagsira Scuds, sa Dhahran, 1681 01:24:00,370 --> 01:24:03,360 doon ay maaaring walang pagkakamali tungkol sa pagganap nito. 1682 01:24:03,360 --> 01:24:07,970 Doon, radar system ang Patriot ni nawala subaybayan ng isang papasok na malaking ulan, 1683 01:24:07,970 --> 01:24:10,721 at hindi kailanman Inilunsad dahil sa isang software kapintasan. 1684 01:24:10,721 --> 01:24:14,090 1685 01:24:14,090 --> 01:24:18,940 Ito ay ang Israelis na unang natuklasan na ang mga na ang sistema ay sa, 1686 01:24:18,940 --> 01:24:22,690 ang mas malaki ang pagkakaiba sa oras naging, dahil sa isang orasan na naka-embed 1687 01:24:22,690 --> 01:24:24,810 sa computer system. 1688 01:24:24,810 --> 01:24:28,210 >> -Tungkol Sa dalawang linggo bago trahedya sa Dhahran, 1689 01:24:28,210 --> 01:24:30,770 ang Israelis iniulat sa ang Defense Department 1690 01:24:30,770 --> 01:24:32,590 na ang sistema ay hindi nawawala ang oras. 1691 01:24:32,590 --> 01:24:35,360 Matapos ang tungkol sa walong oras o tumatakbo, napansin nila na ang sistema 1692 01:24:35,360 --> 01:24:37,720 ay magiging kapansin-pansing mas tumpak. 1693 01:24:37,720 --> 01:24:41,900 Ang Defense Department tumugon sa pamamagitan ng na nagsasabi sa lahat ng mga Patriot baterya 1694 01:24:41,900 --> 01:24:44,950 upang mag-iwan ang mga sistema sa para sa isang mahabang panahon. 1695 01:24:44,950 --> 01:24:49,160 Sila ay hindi kailanman sinabi kung ano ang isang mahabang panahon was-- walong oras, 10 oras, 1,000 na oras. 1696 01:24:49,160 --> 01:24:51,360 Hindi ko alam. 1697 01:24:51,360 --> 01:24:53,380 >> -Ang Patriot baterya stationed sa barracks 1698 01:24:53,380 --> 01:24:58,350 sa Dhahran at ang mga flawed panloob orasan ay hindi naging sa higit sa 100 oras 1699 01:24:58,350 --> 01:25:01,670 noong gabi ng Pebrero ika-25. 1700 01:25:01,670 --> 01:25:05,917 >> -Ito Sinusubaybayan oras sa isang kawastuhan ng tungkol sa isang ikasampu ng isang segundo. 1701 01:25:05,917 --> 01:25:08,000 Ngayon, ang isang ikasampu ng isang segundo ay isang nakawiwiling number, 1702 01:25:08,000 --> 01:25:11,920 dahil hindi ito maaaring ipinahayag sa binary eksakto, na kung saan 1703 01:25:11,920 --> 01:25:16,820 ay nangangahulugan na hindi ito maaaring ipinahayag nang eksakto sa anumang modernong digital computer. 1704 01:25:16,820 --> 01:25:18,540 Ito ay mahirap na paniwalaan. 1705 01:25:18,540 --> 01:25:21,210 >> Ngunit gamitin ito bilang isang halimbawa. 1706 01:25:21,210 --> 01:25:23,540 Tingnan natin ang number one third. 1707 01:25:23,540 --> 01:25:27,350 Isang-katlo ay hindi maaaring maging ipinahayag sa decimal eksakto. 1708 01:25:27,350 --> 01:25:32,080 Isang-katlo ay 0.333 pagpunta sa para sa infinity. 1709 01:25:32,080 --> 01:25:36,480 >> Walang paraan upang gawin iyon na may ganap na kawastuhan sa decimal. 1710 01:25:36,480 --> 01:25:39,560 Iyan ay eksakto ang uri ng problema na nangyari sa Patriot. 1711 01:25:39,560 --> 01:25:44,100 Ang mas mahaba ang sistema ay tumakbo, ang mas masahol pa ang naging time error. 1712 01:25:44,100 --> 01:25:48,890 >> -After 100 oras ng pagpapatakbo, ang error sa oras ay lamang tungkol sa isang-katlo 1713 01:25:48,890 --> 01:25:50,600 ng isang segundo. 1714 01:25:50,600 --> 01:25:54,210 Ngunit sa mga tuntunin ng pag-target ng isang misayl na naglalakbay sa Mach 5, 1715 01:25:54,210 --> 01:25:58,710 ito ay nagdulot ng isang tracking error ng higit sa 600 metro. 1716 01:25:58,710 --> 01:26:02,120 Gusto Ito ay isang malalang error para sa mga sundalo sa kung ano ang 1717 01:26:02,120 --> 01:26:08,940 nangyari ay isang malaking ulan launch ay nakita ng maagang babala satellite 1718 01:26:08,940 --> 01:26:12,860 at alam nila na ang malaking ulan ay darating sa kanilang pangkalahatang direksyon. 1719 01:26:12,860 --> 01:26:15,320 Hindi nila alam kung saan ito ay darating. 1720 01:26:15,320 --> 01:26:18,250 >> -Ito Ay ngayon hanggang sa radar bahagi ng sistema ng Patriot 1721 01:26:18,250 --> 01:26:23,190 pagtatanggol Dhahran upang mahanap at mapanatili ang track ng mga papasok na kaaway misayl. 1722 01:26:23,190 --> 01:26:24,609 >> -Ang Radar ay napaka smart. 1723 01:26:24,609 --> 01:26:26,650 gusto talaga itong subaybayan ang posisyon ng malaking ulan, 1724 01:26:26,650 --> 01:26:30,350 at pagkatapos ay hulaan kung saan ito marahil ay ang susunod na oras na ang radar nagpadala 1725 01:26:30,350 --> 01:26:31,420 isang pulso out. 1726 01:26:31,420 --> 01:26:33,110 Iyon ay tinatawag na isang hanay gate. 1727 01:26:33,110 --> 01:26:37,660 >> -Pagkatapos, Sa sandaling ang Patriot nagpasya sapat na oras ay 1728 01:26:37,660 --> 01:26:42,450 lumipas upang bumalik at suriin ang susunod na lokasyon para sa Nakita bagay, 1729 01:26:42,450 --> 01:26:43,600 ito napupunta pabalik. 1730 01:26:43,600 --> 01:26:48,650 Kaya kapag ito ay bumalik sa maling lugar, ito pagkatapos nakikita walang object. 1731 01:26:48,650 --> 01:26:52,160 At ito ay nagpasiya na walang bagay, ito ay isang maling detection, 1732 01:26:52,160 --> 01:26:53,930 at patak ng track. 1733 01:26:53,930 --> 01:26:57,030 >> -Ang Papasok malaking ulan Naglaho mula sa screen radar. 1734 01:26:57,030 --> 01:27:00,260 At segundo mamaya, ito slammed sa kuwartel. 1735 01:27:00,260 --> 01:27:06,150 Ang malaking ulan pumatay 28, at ang huling isa fired sa panahon ng unang Gulf War. 1736 01:27:06,150 --> 01:27:11,960 >> Tragically, ang na-update software Dumating ito sa Dhahran sa susunod na araw. 1737 01:27:11,960 --> 01:27:14,930 Ang software flaw nagkaroon naging maayos, pagsasara 1738 01:27:14,930 --> 01:27:19,806 isang kabanata sa gusot kasaysayan ng Patriot misayl. 1739 01:27:19,806 --> 01:27:20,729 >> [Video playback] 1740 01:27:20,729 --> 01:27:23,520 David J. MALAN: Kaya ito ay ang lahat sa sabihin na ang mga isyu ng overflow 1741 01:27:23,520 --> 01:27:25,860 at imprecision ay ang lahat ng masyadong real. 1742 01:27:25,860 --> 01:27:26,920 Kaya kung paano did we get here? 1743 01:27:26,920 --> 01:27:28,895 Sinimulan namin sa pamamagitan lamang ng pakikipag-usap tungkol sa printf. 1744 01:27:28,895 --> 01:27:31,270 Muli, ito function na Kopya ng isang bagay sa screen, 1745 01:27:31,270 --> 01:27:33,450 at hindi na namin ipinakilala pagkatapos noon ng ilang iba pang mga function 1746 01:27:33,450 --> 01:27:34,945 mula sa tinaguriang library CS50. 1747 01:27:34,945 --> 01:27:36,910 At kami ay patuloy na makita ang mga ito sa angkop na panahon. 1748 01:27:36,910 --> 01:27:40,760 At kami, lalo na, na ginagamit get string, at makakuha ng int, at ngayon din makakuha float, 1749 01:27:40,760 --> 01:27:44,410 at pa iba pa rin kami ay magkasalubong at gamitin ang ating mga sarili bago ang haba. 1750 01:27:44,410 --> 01:27:47,220 >> Ngunit kung minsan, ay may namin na nakita sa isang pangangailangan 1751 01:27:47,220 --> 01:27:50,520 upang mag-imbak kung ano ang mga pag-andar kamay sa likod? 1752 01:27:50,520 --> 01:27:52,920 ipasa nila sa amin sa likod ng isang string, o isang int, o isang Float. 1753 01:27:52,920 --> 01:27:56,070 At kung minsan kailangan namin upang ilagay na string, o int, o float, tabi-tabi. 1754 01:27:56,070 --> 01:28:00,100 >> At upang mag-imbak ng mga bagay, isipin lamang tulad ng sa simula, kami ay may mga variable. 1755 01:28:00,100 --> 01:28:03,260 Ngunit hindi tulad ng sa simula, sa C mayroon kaming aktwal na mga uri 1756 01:28:03,260 --> 01:28:05,530 ng variables-- data uri, mas generally-- 1757 01:28:05,530 --> 01:28:08,640 kasama ng mga ito, ang isang string, isang int, isang lumutang, at ang mga iba pa rin. 1758 01:28:08,640 --> 01:28:12,321 >> At kaya kung ating sinasabi variable sa C, kami ay may upang ipahayag ang aming mga uri ng data. 1759 01:28:12,321 --> 01:28:14,820 Ito ay hindi isang bagay bibigyan namin kailangang gawin sa ibang pagkakataon sa semestre 1760 01:28:14,820 --> 01:28:16,810 bilang namin paglipat sa ibang mga wika. 1761 01:28:16,810 --> 01:28:19,610 Ngunit sa ngayon, namin kailangan upang walang pagsubok nang maaga, 1762 01:28:19,610 --> 01:28:24,370 ipaliwanag sa ang computer kung ano ang uri ng variable gusto naming ito upang ibigay sa amin. 1763 01:28:24,370 --> 01:28:27,290 >> Ngayon, samantala, i-print mga uri ng mga uri ng data, 1764 01:28:27,290 --> 01:28:29,570 kami ay may upang sabihin sa printf ano ang aasahan. 1765 01:28:29,570 --> 01:28:32,450 At nakita natin porsiyento s para sa mga string, at porsyento i para integers, 1766 01:28:32,450 --> 01:28:33,790 at ng ilang mga iba pa. 1767 01:28:33,790 --> 01:28:37,237 At ang mga ito ay simpleng mga kinakailangan para sa mga visual na pagtatanghal 1768 01:28:37,237 --> 01:28:38,070 ng impormasyon na iyon. 1769 01:28:38,070 --> 01:28:42,080 >> At bawat isa sa mga ito ay maaaring aktwal na maging parametrized o tweaked sa anumang paraan, 1770 01:28:42,080 --> 01:28:45,370 kung nais mong palawakin control ang uri ng output na iyong makukuha. 1771 01:28:45,370 --> 01:28:49,604 At, sa katunayan, ito ay lumiliko out na hindi lamang ay diyan backslash n para sa isang bagong linya. 1772 01:28:49,604 --> 01:28:52,520 Mayroong isang bagay sino pa ang paririto na tinatawag backslash r para sa isang carriage return, na kung saan 1773 01:28:52,520 --> 01:28:54,360 ay mas kauri sa isang old school makinilya, 1774 01:28:54,360 --> 01:28:57,690 at din Windows na ginagamit para sa maraming mga taon. 1775 01:28:57,690 --> 01:28:59,690 >> Mayroong backslash t para sa mga tab. 1776 01:28:59,690 --> 01:29:03,170 Lumiliko out, na kung nais mong double quote sa loob ng isang string, 1777 01:29:03,170 --> 01:29:05,000 pagpapabalik na kami ay ginagamit double quote double 1778 01:29:05,000 --> 01:29:07,900 quote sa kaliwa at kanang nagtatapos ng aming mga string kaya malayo. 1779 01:29:07,900 --> 01:29:09,420 Iyon ay tila upang lituhin ang mga bagay. 1780 01:29:09,420 --> 01:29:12,503 >> Kung nais mong ilagay ang isang double quote sa sa gitna ng isang string at, sa katunayan, 1781 01:29:12,503 --> 01:29:13,670 ito ay nakalilito upang makita. 1782 01:29:13,670 --> 01:29:17,120 At kaya mayroon kang upang makatakas, kaya na makipag-usap, ang isang double quote sa isang bagay 1783 01:29:17,120 --> 01:29:18,860 tulad ng, literal, backslash double quote. 1784 01:29:18,860 --> 01:29:20,230 At mayroong ilang mga iba pang pa rin. 1785 01:29:20,230 --> 01:29:24,540 At kami makita higit pa sa mga sa aktwal na paggamit bago ang haba. 1786 01:29:24,540 --> 01:29:27,930 >> Kaya natin ngayon paglipat mula sa data, at representasyon, 1787 01:29:27,930 --> 01:29:30,820 at aritmetika operator, ang lahat ng isa ay nagbigay sa amin ng ilang mga gusali 1788 01:29:30,820 --> 01:29:32,070 bloke na kung saan upang i-play. 1789 01:29:32,070 --> 01:29:34,481 Ngunit ngayon sabihin aktwal bigyan sa amin ang natitirang bahagi ng bokabularyo 1790 01:29:34,481 --> 01:29:36,230 na kami ay mayroon noong nakaraang linggo na may Scratch 1791 01:29:36,230 --> 01:29:39,350 sa pamamagitan ng pagkuha ng isang pagtingin sa ilang mga iba pang constructs sa C-- hindi lahat ng mga ito. 1792 01:29:39,350 --> 01:29:41,680 Ngunit ang mga ideya kami tungkol sa upang makita talagang lamang 1793 01:29:41,680 --> 01:29:45,610 upang bigyan ng diin ang pagsasalin mula sa isang wika, Scratch, sa iba, C. 1794 01:29:45,610 --> 01:29:48,470 >> At sa paglipas ng panahon, kami ay pumili ng up higit pang mga tool para sa aming toolkit, 1795 01:29:48,470 --> 01:29:49,820 kaya na magsalita, syntactically. 1796 01:29:49,820 --> 01:29:54,190 At, sa katunayan, makikita mo na ang mga ideya ay ngayon sa halip pamilyar mula noong nakaraang linggo. 1797 01:29:54,190 --> 01:29:55,200 Kaya sabihin gawin ito. 1798 01:29:55,200 --> 01:29:58,870 >> Sabihin sige at gumawa ng isang program na aktwal na gumagamit ng ilang mga expression, 1799 01:29:58,870 --> 01:30:00,720 isang Boolean expression. 1800 01:30:00,720 --> 01:30:02,810 Hayaan akong magpatuloy dito at lumikha ng isang bagong file. 1801 01:30:02,810 --> 01:30:06,090 Tatawag ako ito condition.c. 1802 01:30:06,090 --> 01:30:09,350 >> Hayaan akong sige at isama ang CS50 library. 1803 01:30:09,350 --> 01:30:12,640 At ipaalam sa akin sige at isama karaniwang io.h para sa aming mga pag-andar, 1804 01:30:12,640 --> 01:30:14,690 at printf, at higit pa ayon sa pagkakabanggit. 1805 01:30:14,690 --> 01:30:18,900 Hayaan akong magbigay sa sarili ko na boilerplate ng int pangunahing walang bisa, na ang paliwanag bibigyan namin 1806 01:30:18,900 --> 01:30:20,360 bumalik sa sa hinaharap. 1807 01:30:20,360 --> 01:30:23,820 >> Ngayon ipaalam sa akin sige at bigyan aking sarili ng isang int sa pamamagitan ng get int. 1808 01:30:23,820 --> 01:30:25,970 Pagkatapos ay hayaan mo akong magpatuloy at gawin ito. 1809 01:30:25,970 --> 01:30:30,150 Gusto kong sabihin kung ako ay less-- sabihin makilala sa pagitan ng positibo, negatibo, 1810 01:30:30,150 --> 01:30:31,260 o zero na halaga. 1811 01:30:31,260 --> 01:30:36,630 >> Kaya kung ako ay mas mababa sa zero, hayaan mo akong na lang ay ang program na ito lang sabihin, 1812 01:30:36,630 --> 01:30:42,370 negatibo, backslash n, sino pa ang paririto kung ako ay mas malaki kaysa zero. 1813 01:30:42,370 --> 01:30:47,030 Ngayon ako, siyempre, pagpunta sa sabihin printf positibong, backslash n. 1814 01:30:47,030 --> 01:30:50,690 At pagkatapos ay sino pa ang paririto if-- kaya kong gawin ito. 1815 01:30:50,690 --> 01:30:53,410 >> kaya kong gawin kung ako ay katumbas ng 0. 1816 01:30:53,410 --> 01:30:55,840 Pero gusto ko ay paggawa sa hindi bababa sa isang pagkakamali na. 1817 01:30:55,840 --> 01:30:59,480 Sariwain sa alaala na ang katumbas sign ay hindi katumbas, bilang namin ang mga tao na malaman ito. 1818 01:30:59,480 --> 01:31:01,010 >> Ngunit ito ay ang assignment operator. 1819 01:31:01,010 --> 01:31:05,640 At hindi namin nais na kumuha ng 0 sa kanan at ilagay ito sa i sa kaliwa. 1820 01:31:05,640 --> 01:31:11,810 Kaya upang maiwasan ang pagkalito, o marahil maling paggamit ng equals sign, 1821 01:31:11,810 --> 01:31:14,740 mga kawani na tao ay nagpasya ilang taon na ang nakakaraan na sa maraming mga wika programming 1822 01:31:14,740 --> 01:31:18,000 kapag gusto mong suriin para sa pagkakapantay-pantay pagitan ng kaliwa at kanan, 1823 01:31:18,000 --> 01:31:19,635 na aktwal mong gamitin katumbas katumbas. 1824 01:31:19,635 --> 01:31:21,010 Kaya mo pindutin ang equals sign dalawang beses. 1825 01:31:21,010 --> 01:31:25,600 Kapag nais mong italaga mula sa kanan sa kaliwa, gumamit ka ng isang solong katumbas sign. 1826 01:31:25,600 --> 01:31:29,360 Kaya maaari naming gawin this-- sino pa ang paririto kung ako ay katumbas katumbas ng zero. 1827 01:31:29,360 --> 01:31:31,710 >> Kaya kong pagkatapos ay pumunta at buksan ang aking mga kulot tirante, 1828 01:31:31,710 --> 01:31:36,087 At iyong sabihin, printf 0, backslash n, tapos na. 1829 01:31:36,087 --> 01:31:38,170 Ngunit tandaan kung paano ang mga tinidor sa kalsada ay maaaring gumana. 1830 01:31:38,170 --> 01:31:39,836 At, talaga, sa tingin lamang tungkol sa logic. 1831 01:31:39,836 --> 01:31:41,510 i ay isang numero. 1832 01:31:41,510 --> 01:31:43,320 Ito ay isang integer, partikular. 1833 01:31:43,320 --> 01:31:48,600 At nangangahulugan ito ay pagpunta sa maging mas mababa kaysa sa 0, o mas mataas kaysa sa 0, o 0. 1834 01:31:48,600 --> 01:31:51,600 Kaya doon ay uri ng ito ipinahiwatig default kaso. 1835 01:31:51,600 --> 01:31:54,920 >> At kaya kami ay maaaring, gusto lang Scratch, alisin ang ibang tao kung, 1836 01:31:54,920 --> 01:31:55,747 at sabihin lamang ng iba pa. 1837 01:31:55,747 --> 01:31:57,830 Logically, kung ikaw ang programmer alam mayroon lamang 1838 01:31:57,830 --> 01:32:01,635 tatlong mga bucket sa kung saan ang isang sitwasyon maaari fall-- ang una, 1839 01:32:01,635 --> 01:32:03,510 sa pangalawa, o pangatlong sa ganitong case-- hindi 1840 01:32:03,510 --> 01:32:07,100 abala ang pagdaragdag ng karagdagang katumpakan at ang karagdagang logic doon. 1841 01:32:07,100 --> 01:32:09,690 sige lang sa default kaso dito ng ibang tao. 1842 01:32:09,690 --> 01:32:11,950 >> Ngayon, sabihin sige pagkatapos i-save ito, gumawa 1843 01:32:11,950 --> 01:32:15,760 kondisyon dot slash conditions-- hindi isang mahusay na user interface, 1844 01:32:15,760 --> 01:32:18,914 dahil hindi ako pagdikta ang user, tulad ng nabanggit ko mas maaga. 1845 01:32:18,914 --> 01:32:19,580 Ngunit iyon lamang ang fine. 1846 01:32:19,580 --> 01:32:20,454 Susubukan naming panatilihin ito simple. 1847 01:32:20,454 --> 01:32:21,890 Natin subukan ang ang bilang 42 Hayaan. 1848 01:32:21,890 --> 01:32:23,240 At iyon ang positibo. 1849 01:32:23,240 --> 01:32:26,120 Natin subukan ang ang bilang Hayaan negatibong 42, negatibo. 1850 01:32:26,120 --> 01:32:28,244 >> Natin subukan ang ang halaga ng 0 Hayaan. 1851 01:32:28,244 --> 01:32:29,160 At, sa katunayan, ito ay gumagana. 1852 01:32:29,160 --> 01:32:33,900 Ngayon, makikita mo na may mga problema bago mahaba, testing bagay ng tatlong beses, 1853 01:32:33,900 --> 01:32:34,980 marahil ay hindi sapat. 1854 01:32:34,980 --> 01:32:37,438 Maaring nais na subukan ang ilang mga mas malaking mga numero, ang ilang mga mas maliit na 1855 01:32:37,438 --> 01:32:40,520 numero, ang ilang mga kaso na sulok, tulad ng kami ay dumating upang ilarawan ang mga ito. 1856 01:32:40,520 --> 01:32:42,500 >> Ngunit para sa ngayon, ito ay isang pretty simpleng programa. 1857 01:32:42,500 --> 01:32:45,160 At ako ay medyo sigurado, logically, na ito ay bumaba sa tatlong mga kaso. 1858 01:32:45,160 --> 01:32:49,360 At, sa katunayan, kahit na kami lang na nakatutok sa ang mga potensyal na downsides 1859 01:32:49,360 --> 01:32:53,480 ng imprecision at aabot, sa katotohanan kung saan marami sa mga problema sa CS50, 1860 01:32:53,480 --> 01:32:56,000 hindi namin ay pagpunta sa mag-alala tungkol sa, lahat ng oras, 1861 01:32:56,000 --> 01:32:59,050 mga isyu ng overflow at imprecision, dahil, sa katunayan, sa C, 1862 01:32:59,050 --> 01:33:01,889 ito ay talagang hindi lahat na madaling iwasan ang mga bagay na ito. 1863 01:33:01,889 --> 01:33:04,180 Kung nais mong bilangin up mas malaki, at mas malaki, at mas malaki, 1864 01:33:04,180 --> 01:33:07,510 ito ay lumiliko out may mga pamamaraan sa iyo maaaring gamitin, madalas na kinasasangkutan bagay na tinatawag na 1865 01:33:07,510 --> 01:33:11,240 mga aklatan, mga koleksyon ng mga code, na ibang mga tao ay sumulat na maaari mong gamitin, 1866 01:33:11,240 --> 01:33:13,910 at iba pang mga wika tulad ng Java at iba pa, ang tunay na 1867 01:33:13,910 --> 01:33:15,800 gawin itong ng maraming mas madali upang mabilang kahit na mas mataas. 1868 01:33:15,800 --> 01:33:19,810 Kaya ito ay tunay na ang ilan sa mga panganib isang katangian ng ang wika na ginagamit mo. 1869 01:33:19,810 --> 01:33:22,710 At sa mga darating na linggo, kami ay makita kung paano mapanganib na C talagang 1870 01:33:22,710 --> 01:33:24,950 ay maaaring maging kung hindi mo gamitin ito ng maayos. 1871 01:33:24,950 --> 01:33:27,610 Nguni't mula roon, at may Python, at JavaScript, ay 1872 01:33:27,610 --> 01:33:32,620 namin layer sa ilang karagdagang proteksyon, at magpatakbo ng mas kaunting mga panganib. 1873 01:33:32,620 --> 01:33:35,820 >> Kaya sabihin gawin ng kaunti pa kagiliw-giliw na lohika sa aming programa. 1874 01:33:35,820 --> 01:33:39,110 Kaya hayaan mo akong magpatuloy at lumikha ng isang programa na tinatawag Logical 1875 01:33:39,110 --> 01:33:43,804 lamang kaya maaari kong i-play na may ilang mga aktwal na logic, logical.c. 1876 01:33:43,804 --> 01:33:46,870 kukunin ko na lang kopyahin at i-paste ang ilang mga code mula sa mas maaga kaya nakukuha ko pabalik 1877 01:33:46,870 --> 01:33:49,950 sa ito maganda ang panimulang punto. 1878 01:33:49,950 --> 01:33:53,980 >> Hayaan akong oras na ito gawin char C. Ako pagpunta sa bigyan ito ng isang pangalan ng C 1879 01:33:53,980 --> 01:33:58,510 lamang dahil ito ay maginoo, makakuha ng isang character mula sa user. 1880 01:33:58,510 --> 01:34:00,730 At sabihin magpanggap tulad Ako ng pagpapatupad bahagi 1881 01:34:00,730 --> 01:34:04,130 ng na Rm programa, ang pag-alis programa bago na sinenyasan ang user 1882 01:34:04,130 --> 01:34:05,400 upang alisin ang isang file. 1883 01:34:05,400 --> 01:34:06,750 Paano maaari naming gawin ito? 1884 01:34:06,750 --> 01:34:11,090 >> gusto kong sabihin, kung C ay katumbas ay katumbas ng, quote magpanipi, 1885 01:34:11,090 --> 01:34:16,304 y, pagkatapos ay ako pagpunta sa ipinapalagay na ang gumagamit ay pinili yes. 1886 01:34:16,304 --> 01:34:17,470 Lamang ako ng pagpunta upang i-print yes. 1887 01:34:17,470 --> 01:34:19,440 Kung tunay na ito ay sumusulat ang pag-alis ng programa, 1888 01:34:19,440 --> 01:34:21,420 maaari naming alisin ang file na may higit pang mga linya ng code. 1889 01:34:21,420 --> 01:34:22,461 Ngunit kami ay panatilihin ito simple. 1890 01:34:22,461 --> 01:34:25,950 1891 01:34:25,950 --> 01:34:31,250 >> Iba Pa kung c ay katumbas ng katumbas n-- at ngayon dito, ako pagpunta sa sabihin, 1892 01:34:31,250 --> 01:34:32,980 ang user ay dapat may ibig sabihin no. 1893 01:34:32,980 --> 01:34:34,360 At pagkatapos ng iba pa, alam mo kung ano? 1894 01:34:34,360 --> 01:34:36,200 Hindi ko alam kung ano pa ang user ay pagpunta upang i-type. 1895 01:34:36,200 --> 01:34:38,533 Kaya lang ako sa pagpunta sa sabihin na na ay isang error, kahit anong 1896 01:34:38,533 --> 01:34:40,070 siya o siya talaga type. 1897 01:34:40,070 --> 01:34:41,180 >> Kaya kung ano ang nangyayari sa dito? 1898 01:34:41,180 --> 01:34:44,530 May ay isang pangunahing pagkakaiba kumpara sa kung ano ang aking nagawa sa nakaraan. 1899 01:34:44,530 --> 01:34:49,300 Double quotes, double quotes, double quotes, at, pa, single quotes, 1900 01:34:49,300 --> 01:34:50,170 single quotes. 1901 01:34:50,170 --> 01:34:52,860 Ito ay lumiliko out sa C, na kapag gusto mong magsulat ng isang string, 1902 01:34:52,860 --> 01:34:56,680 gawin mo gamitin ang double quotes, tulad na namin ay gumagamit ng lahat ng oras na ito sa printf. 1903 01:34:56,680 --> 01:35:02,030 >> Ngunit kung nais mong upang harapin na may lamang ng solong character, isang tinatawag na pansamantalang trabaho, 1904 01:35:02,030 --> 01:35:03,780 pagkatapos mo talagang gamitin single quotes. 1905 01:35:03,780 --> 01:35:05,450 Yaong ng iyo kung sino na programmed bago, hindi ka maaaring magkaroon ng 1906 01:35:05,450 --> 01:35:07,850 ay mag-alala tungkol sa mga ito pagkakaiba sa ilang mga wika. 1907 01:35:07,850 --> 01:35:09,450 Sa C, ginagawa nito bagay. 1908 01:35:09,450 --> 01:35:12,560 At kaya kapag kumuha ako ng isang char at gusto kong upang ihambing na char gamit equals 1909 01:35:12,560 --> 01:35:18,350 katumbas sa ilang mga sulat tulad y o n, gagawin ko, sa katunayan, kailangan na magkaroon ng single quotes. 1910 01:35:18,350 --> 01:35:19,770 >> Ngayon, sabihin sige at gawin ito. 1911 01:35:19,770 --> 01:35:26,180 Sabihin sige at make lohikal dot slash lohikal. 1912 01:35:26,180 --> 01:35:27,305 At ngayon ako diktahan. 1913 01:35:27,305 --> 01:35:30,638 So, siguro, isang mas mahusay na karanasan ng user ay tunay na sabihin sa akin kung ano ang gagawin dito. 1914 01:35:30,638 --> 01:35:33,030 Ngunit ako pagpunta sa lamang nang walang taros sabihin y para sa yes, OK, nice. 1915 01:35:33,030 --> 01:35:35,780 >> ni patakbuhin itong muli Hayaan, n para sa walang, nice. 1916 01:35:35,780 --> 01:35:39,610 Ipagpalagay tulad ng ilang mga taong kilala ko, aking caps lock key ay sa lahat ng masyadong madalas. 1917 01:35:39,610 --> 01:35:43,740 Gayon din ang aking capital Y, ipasok, error. 1918 01:35:43,740 --> 01:35:46,130 OK, ito ay hindi eksakto kung ano ako umaasa. 1919 01:35:46,130 --> 01:35:48,170 Sa katunayan, ang computer ginagawa literal kung ano ang 1920 01:35:48,170 --> 01:35:51,794 Sinabi ko ito sa do-- suriin para lowercase y at lowercase n. 1921 01:35:51,794 --> 01:35:53,960 Ito ay hindi pakiramdam tulad ng mabuting karanasan ng gumagamit, kahit na. 1922 01:35:53,960 --> 01:35:59,010 Hayaan akong humingi at tanggapin mag-lower case o upper case. 1923 01:35:59,010 --> 01:36:02,090 Kaya ito lumiliko out, baka gusto upang sabihin ng isang bagay tulad ng sa simula, 1924 01:36:02,090 --> 01:36:08,150 tulad literal o C ay katumbas ay katumbas ng capital single quoted y. 1925 01:36:08,150 --> 01:36:11,400 Lumiliko out, C ay walang ito literal keyword o. 1926 01:36:11,400 --> 01:36:12,880 >> Ngunit ito ay may dalawang vertical bars. 1927 01:36:12,880 --> 01:36:15,463 Mayroon kang upang i-hold Shift kadalasan, kung gumagamit ka ng isang US keyboard, 1928 01:36:15,463 --> 01:36:18,910 at pindutin ang vertical bar key sa itaas ng iyong return key. 1929 01:36:18,910 --> 01:36:22,410 Ngunit ito vertical bar vertical bar ay nangangahulugan o. 1930 01:36:22,410 --> 01:36:26,220 >> Kung, sa pamamagitan ng kaibahan, gusto naming sabihin at, tulad ng sa simula, 1931 01:36:26,220 --> 01:36:28,180 maaari naming gawin ampersand ampersand. 1932 01:36:28,180 --> 01:36:31,330 Iyon ay hindi gumagawa ng lohikal na kahulugan dito, dahil ang isang tao ay hindi maaaring posibleng 1933 01:36:31,330 --> 01:36:37,110 nai-type sa parehong y at lowercase y at capital Y bilang ang parehong character. 1934 01:36:37,110 --> 01:36:39,470 Kaya o ay kung ano ang balak namin dito. 1935 01:36:39,470 --> 01:36:46,280 >> Kaya kung gagawin ko ito sa parehong mga lugar, oc ay katumbas ng katumbas capital N, ngayon muling palabas ng pelikula, 1936 01:36:46,280 --> 01:36:49,390 gumawa lohikal, muling palabas ng pelikula lohikal. 1937 01:36:49,390 --> 01:36:51,200 Ngayon, maaari kong i-type y. 1938 01:36:51,200 --> 01:36:53,920 At maaari kong gawin ito muli sa capital Y, o capital N. 1939 01:36:53,920 --> 01:36:56,630 At maaari ba akong magdagdag sa mga karagdagang kumbinasyon pa rin. 1940 01:36:56,630 --> 01:36:58,810 >> Kaya ito ay isang lohikal na program insofar bilang ngayon 1941 01:36:58,810 --> 01:37:01,940 Lalabas na ako logically para ang halaga na ito o ang halagang ito. 1942 01:37:01,940 --> 01:37:06,420 At hindi ko na kailangang, kinakailangan, makabuo ng dalawang higit pang mga ifs o iba ifs. 1943 01:37:06,420 --> 01:37:09,960 Maaari ko talagang pagsamahin ang ilan sa mga kaugnay logic magkasama sa ganitong paraan. 1944 01:37:09,960 --> 01:37:11,950 Kaya ito ay magiging mas mahusay dinisenyo na lamang 1945 01:37:11,950 --> 01:37:17,490 na sinasabi, kung C ay katumbas lower case y, print yes, iba kung c ay katumbas ng capital Y, 1946 01:37:17,490 --> 01:37:20,074 print yes, iba kung c ay katumbas ng lower-- sa ibang salita, 1947 01:37:20,074 --> 01:37:21,990 hindi mo na kailangang magkaroon ng higit pa at higit pang mga sanga. 1948 01:37:21,990 --> 01:37:28,840 Maaari mong pagsamahin ang ilan sa ang katumbas sanga logically, tulad ng sa ganitong paraan. 1949 01:37:28,840 --> 01:37:34,150 >> Kaya ipaalam sa tumagal ng isang pagtingin sa isa lamang final sahog, isang huling bumuo, 1950 01:37:34,150 --> 01:37:34,847 na C ay nagbibigay-daan. 1951 01:37:34,847 --> 01:37:36,930 At kami ay bumalik sa hinaharap sa iba pa rin. 1952 01:37:36,930 --> 01:37:41,400 At pagkatapos ay gagamitin namin tapusin sa pamamagitan ng pagtingin sa hindi ang kawastuhan ng code-- 1953 01:37:41,400 --> 01:37:46,070 pagkuha code upang work-- ngunit ang disenyo ng code, at halaman ang mga binhing iyon maaga. 1954 01:37:46,070 --> 01:37:51,337 >> Kaya hayaan mo akong magpatuloy at buksan up ng isang bagong file dito. 1955 01:37:51,337 --> 01:37:51,920 Alam mo ba? 1956 01:37:51,920 --> 01:37:54,450 Pupunta ako upang muling ipatupad na parehong programa, 1957 01:37:54,450 --> 01:37:55,940 ngunit ang paggamit ng isang iba't ibang mga tayuan. 1958 01:37:55,940 --> 01:38:00,110 >> Kaya hayaan mo akong mabilis bigyan ang aking sarili access upang isama CS50.h 1959 01:38:00,110 --> 01:38:04,150 para sa CS50 library, karaniwang io.h para printf. 1960 01:38:04,150 --> 01:38:06,510 Bigyan mo ako ng aking int pangunahing walang bisa. 1961 01:38:06,510 --> 01:38:09,310 At pagkatapos ay sa paglipas dito, sabihin mo akong magpatuloy at gawin ito. 1962 01:38:09,310 --> 01:38:12,010 >> Char c makakakuha makakuha char, tulad ng dati. 1963 01:38:12,010 --> 01:38:16,770 At ako pagpunta sa gumamit ng isang bagong tayuan now-- lumipat, sa kung ano ang character? 1964 01:38:16,770 --> 01:38:19,820 Kaya switch ay uri ng tulad paglipat ng mga track ng tren. 1965 01:38:19,820 --> 01:38:22,070 O kaya naman, talaga, ito ay uri ng isang kung dili, kung sino pa ang paririto kung, 1966 01:38:22,070 --> 01:38:23,980 ngunit nakasulat medyo naiiba. 1967 01:38:23,980 --> 01:38:25,490 >> Ang isang pagpapalit ganito ang hitsura. 1968 01:38:25,490 --> 01:38:29,060 Mayroon kang lumipat, at pagkatapos ay kung ano karakter o numero na gusto mong upang tumingin sa, 1969 01:38:29,060 --> 01:38:32,000 pagkatapos ng ilang mga kulot tirante gusto in Scratch, sabihin lamang gawin ito bagay-bagay. 1970 01:38:32,000 --> 01:38:33,480 At pagkatapos ay mayroon kang iba't ibang mga kaso. 1971 01:38:33,480 --> 01:38:34,830 >> Hindi mo gamitin kung at iba pa. 1972 01:38:34,830 --> 01:38:37,050 Mong literal gamitin ang salitang kaso. 1973 01:38:37,050 --> 01:38:38,790 At ang gusto mong sabihin ng isang bagay tulad nito. 1974 01:38:38,790 --> 01:38:43,820 >> Kaya sa kaso ng isang lowercase y, o sa kaso ng malaking titik Y, 1975 01:38:43,820 --> 01:38:47,350 sige, at i-print out yes. 1976 01:38:47,350 --> 01:38:49,020 At pagkatapos ay magsimula ng switch. 1977 01:38:49,020 --> 01:38:49,580 Ayan yun. 1978 01:38:49,580 --> 01:38:50,880 Tapos na. 1979 01:38:50,880 --> 01:38:57,270 >> Else kung, kaya na magsalita, lower case n, o capital N, 1980 01:38:57,270 --> 01:39:02,560 pagkatapos ay sige at i-print out no, at pagkatapos ay masira. 1981 01:39:02,560 --> 01:39:08,022 Else-- at ito uri ng ay ang default case indeed-- printf error-- 1982 01:39:08,022 --> 01:39:10,980 at para lamang sa mabuting pamamaraan, bagaman logically break ay hindi kinakailangan 1983 01:39:10,980 --> 01:39:12,896 dahil kami sa dulo ng switch anyway, 1984 01:39:12,896 --> 01:39:14,520 ngayon ako paglabag sa labas ng switch. 1985 01:39:14,520 --> 01:39:16,280 Kaya ito ang hitsura ng isang maliit na naiiba. 1986 01:39:16,280 --> 01:39:18,272 >> Ngunit, logically, ito ay aktwal na katumbas. 1987 01:39:18,272 --> 01:39:19,980 At kung bakit nais mong gamitin isa sa isa? 1988 01:39:19,980 --> 01:39:23,220 Minsan, kailangan lang personal na kagustuhan, kung minsan ang mga aesthetics, 1989 01:39:23,220 --> 01:39:25,420 kung sulyap ako sa ito ngayon, mayroong isang bagay 1990 01:39:25,420 --> 01:39:27,510 na sinabi para sa mga pagiging madaling mabasa ng code na ito. 1991 01:39:27,510 --> 01:39:30,690 Ibig sabihin ko, hindi bale ang katunayan na ito code ay bago sa marami sa amin sa kuwarto. 1992 01:39:30,690 --> 01:39:33,515 >> Ngunit ito lamang ang uri ng ay medyo. 1993 01:39:33,515 --> 01:39:37,760 Ang makikita mo lowercase y, capital Y, lower case n, capital N default, 1994 01:39:37,760 --> 01:39:40,150 ito lamang ang uri ng jumps out sa iyo sa isang paraan 1995 01:39:40,150 --> 01:39:42,200 na, arguably, siguro nakaraang halimbawa 1996 01:39:42,200 --> 01:39:45,780 may ifs, at ang vertical bar, at ang iba ifs, hindi maaaring magkaroon. 1997 01:39:45,780 --> 01:39:51,600 Kaya ito ay talagang isang bagay ng mga personal na pagpipilian, talaga, o pagiging madaling mabasa, 1998 01:39:51,600 --> 01:39:52,360 ng code. 1999 01:39:52,360 --> 01:39:58,230 >> Ngunit sa mga tuntunin ng pag-andar, hayaan mo akong sige, at gumawa ng isang lumipat, dot slash 2000 01:39:58,230 --> 01:40:05,830 switch, at ngayon i-type sa lowercase y, capital Y, lowercase n, capital N, 2001 01:40:05,830 --> 01:40:09,250 David, muling subukan dahil na hindi isang solong character. 2002 01:40:09,250 --> 01:40:12,050 Tayo'y gawin ang x, error, tulad ng inaasahan Hayaan. 2003 01:40:12,050 --> 01:40:15,640 At, logically-- at ito ay isang bagay Gusto ko hinihikayat sa general-- kahit 2004 01:40:15,640 --> 01:40:17,790 bagaman lamang kami ay scratching ang ibabaw ng ilan sa mga tampok na ito. 2005 01:40:17,790 --> 01:40:20,560 >> At hindi ito maaaring maging halata kapag ikaw ang iyong sarili umupo sa keyboard, 2006 01:40:20,560 --> 01:40:21,370 kung paano ito gumagana? 2007 01:40:21,370 --> 01:40:22,240 Ano kaya ang gagawin nito? 2008 01:40:22,240 --> 01:40:25,630 Ang magandang bagay tungkol sa pagkakaroon isang laptop, o desktop, o pag-access 2009 01:40:25,630 --> 01:40:29,290 sa isang computer na may isang compiler, at may isang code editor tulad nito, 2010 01:40:29,290 --> 01:40:32,990 ay maaari mong halos palaging sagutin ang mga katanungan para sa iyong sarili sa pamamagitan lamang ng sinusubukan. 2011 01:40:32,990 --> 01:40:36,570 >> Halimbawa, kung ang retorika tanong sa kamay ay, 2012 01:40:36,570 --> 01:40:39,540 kung ano ang mangyayari kung nakalimutan mo iyong bakasyon pahayag? 2013 01:40:39,540 --> 01:40:41,400 Na kung saan ay talagang isang napaka-pangkaraniwan bagay na gawin, 2014 01:40:41,400 --> 01:40:43,540 dahil ito ay hindi hitsura tulad ng talagang kailangan mo sila. 2015 01:40:43,540 --> 01:40:46,790 Hindi sila tunay na makumpleto ang iyong naisip tulad ng isang parenthesis o isang kulot 2016 01:40:46,790 --> 01:40:47,714 suhay ay. 2017 01:40:47,714 --> 01:40:49,630 Sabihin sige at recompile ang code at makita. 2018 01:40:49,630 --> 01:40:53,690 Kaya gumawa switch, dot slash lumipat. 2019 01:40:53,690 --> 01:40:56,435 ni-type sa maliit na titik Hayaan y, tuktok kaso, ang Enter. 2020 01:40:56,435 --> 01:40:59,390 2021 01:40:59,390 --> 01:41:00,700 Kaya ako nag-type y. 2022 01:41:00,700 --> 01:41:04,420 >> Ang programa ay sinabi oo, hindi, error, na parang ito ay ang pagbabago isip nito. 2023 01:41:04,420 --> 01:41:09,280 Ngunit ito uri ng ay, dahil kung ano ang mangyayari na may isang lumipat ay ang unang kaso na 2024 01:41:09,280 --> 01:41:13,899 match mahalagang ay nangangahulugan, hey computer, execute lahat ng code sa ilalim nito. 2025 01:41:13,899 --> 01:41:16,690 At kung hindi mo sasabihin break, o huwag sabihin break, o huwag sabihin break, 2026 01:41:16,690 --> 01:41:19,540 ang computer ay pagpunta sa pumutok sa pamamagitan ng lahat ng mga linya 2027 01:41:19,540 --> 01:41:22,779 at isakatuparan ang lahat ng mga ito hanggang sa ito ay makakakuha ng sa na kulot suhay. 2028 01:41:22,779 --> 01:41:24,320 Kaya ang preno ay, sa katunayan, kung kinakailangan. 2029 01:41:24,320 --> 01:41:27,120 Ngunit isang takeaway dito ay, kapag may pagdududa, subukan ang isang bagay. 2030 01:41:27,120 --> 01:41:29,510 Siguro i-save ang iyong code una, o i-save ito sa extrang file 2031 01:41:29,510 --> 01:41:32,930 kung ikaw ay talagang nag-aalala tungkol messing up at pagkakaroon upang mabawi 2032 01:41:32,930 --> 01:41:34,430 ang gawain na alam mo ay gumagana. 2033 01:41:34,430 --> 01:41:35,410 >> Ngunit subukan ang mga bagay. 2034 01:41:35,410 --> 01:41:38,074 At huwag maging kasing takot, marahil, ng kung ano ang computer ay maaaring gawin, 2035 01:41:38,074 --> 01:41:39,490 o na maaari mong lumalabag sa isang bagay. 2036 01:41:39,490 --> 01:41:42,790 Maaari mong palaging bumalik sa ilang mga mas naunang bersyon. 2037 01:41:42,790 --> 01:41:45,640 >> Kaya sabihin tapusin sa pamamagitan ng pagtingin sa disenyo ng code. 2038 01:41:45,640 --> 01:41:49,020 Mayroon kaming kakayahan na ito ngayon upang isulat kondisyon, at write loops, 2039 01:41:49,020 --> 01:41:50,850 at mga variable, at mga function na tawag. 2040 01:41:50,850 --> 01:41:54,590 Kaya, lantaran, hindi namin uri ng bumalik sa kung saan kami ay sa isang linggo na ang nakakaraan sa simula, 2041 01:41:54,590 --> 01:42:00,120 kahit na may isang mas nakakahimok tekstuwal kapaligiran kaysa Scratch nagbibigay-daan. 2042 01:42:00,120 --> 01:42:03,990 >> Ngunit mapansin kung gaano kabilis namin nakuha na bokabularyo, kahit na ito ay 2043 01:42:03,990 --> 01:42:07,570 pagpunta sa tumagal ng ilang sandali upang lababo in, upang maaari naming ngayong gamitin ang bokabularyo 2044 01:42:07,570 --> 01:42:10,320 na magsulat mas kawili-wiling programa. 2045 01:42:10,320 --> 01:42:12,940 At ipaalam sa tumagal ng isang sanggol na hakbang papunta na, tulad ng mga sumusunod. 2046 01:42:12,940 --> 01:42:14,890 Hayaan akong sige at lumikha ng isang bagong file dito. 2047 01:42:14,890 --> 01:42:17,750 >> Ako pagpunta sa tumawag ito prototype.c, at ipakilala 2048 01:42:17,750 --> 01:42:20,954 sa unang pagkakataon, ang kakayahan gumawa ng iyong sariling mga pag-andar. 2049 01:42:20,954 --> 01:42:22,870 Ang ilan sa iyo ay maaaring magkaroon ng tapos na ito sa simula, 2050 01:42:22,870 --> 01:42:25,430 na kung saan maaari kang lumikha ng iyong sariling pasadyang mga bloke sa simula, 2051 01:42:25,430 --> 01:42:27,892 at pagkatapos ay i-drag ito sa lugar saan man gusto mo sa C. 2052 01:42:27,892 --> 01:42:30,100 At sa karamihan ng programming wika, maaari mong gawin eksakto 2053 01:42:30,100 --> 01:42:33,580 na- gumawa ng iyong sariling mga pag-andar, kung sila ay hindi na umiiral. 2054 01:42:33,580 --> 01:42:38,660 >> Kaya, halimbawa, ipaalam sa akin sige at isama CS50.h, at isama ang 2055 01:42:38,660 --> 01:42:43,110 karaniwang io.h, int pangunahing walang bisa. 2056 01:42:43,110 --> 01:42:46,020 At ngayon kami ay may isang placeholder handa na pumunta. 2057 01:42:46,020 --> 01:42:48,550 Panatilihin ko ang pag-print ng mga bagay tulad ng mga pangalan ng mga tao ngayon. 2058 01:42:48,550 --> 01:42:51,910 At na nararamdaman like-- hindi magiging maganda kung mayroong 2059 01:42:51,910 --> 01:42:53,936 ay isang function na tinatawag na print pangalan? 2060 01:42:53,936 --> 01:42:55,060 Hindi ko na kailangang gumamit ng printf. 2061 01:42:55,060 --> 01:42:56,976 Hindi ko kailangang tandaan ang lahat ng mga format codes. 2062 01:42:56,976 --> 01:43:00,050 Bakit hindi ako, o kung bakit ay hindi isang tao sa harap ko, 2063 01:43:00,050 --> 01:43:02,980 lumikha ng isang function na tinatawag na print pangalan, na ibinigay ng ilang mga pangalan, 2064 01:43:02,980 --> 01:43:03,980 simpleng mga Kopya ito out? 2065 01:43:03,980 --> 01:43:08,700 >> Sa ibang salita, kung ang sinasabi ko, hey, computer, bigyan ako ng isang string 2066 01:43:08,700 --> 01:43:11,870 sa pamamagitan ng pagtatanong sa gumagamit para sa tulad, sa pamamagitan ng get string function CS50. 2067 01:43:11,870 --> 01:43:15,090 Hey, computer, ilagay na string sa ang mga variable sa kaliwang bahagi, 2068 01:43:15,090 --> 01:43:16,150 at tumawag ito s. 2069 01:43:16,150 --> 01:43:22,150 At pagkatapos ay, hey computer, sige at i-print na pangalan ng tao, tapos na. 2070 01:43:22,150 --> 01:43:26,240 >> Ngayon, ito ay magiging nice, dahil ang program na ito, aptly pinangalanan, 2071 01:43:26,240 --> 01:43:29,170 ay nagsasabi sa akin kung ano ang dapat na gawin sa pamamagitan ng paraan ng mga pangalan ng mga function. 2072 01:43:29,170 --> 01:43:32,930 Hayaan akong pumunta at gumawa prototype, ang Enter. 2073 01:43:32,930 --> 01:43:34,930 At, sa kasamaang palad, ito ay hindi pagpunta sa lumipad. 2074 01:43:34,930 --> 01:43:39,430 >> Prototype.c, linya 7, karakter 5, error, implicit deklarasyon 2075 01:43:39,430 --> 01:43:42,960 ng pangalan ng function print ay di-wastong sa C99, C99 2076 01:43:42,960 --> 01:43:45,130 ibig sabihin ay isang bersyon ng C na dumating out sa 1999. 2077 01:43:45,130 --> 01:43:45,730 Iyon lang. 2078 01:43:45,730 --> 01:43:48,780 >> Kaya hindi ko alam kung ano ang lahat ng ito ay nangangahulugan pa. 2079 01:43:48,780 --> 01:43:50,810 Ngunit ko makilala error sa pula. 2080 01:43:50,810 --> 01:43:51,770 Iyan ay medyo halata. 2081 01:43:51,770 --> 01:43:53,769 >> At ito tila na may ang berdeng karakter dito, 2082 01:43:53,769 --> 01:43:57,520 ang isyu ay may pangalan print, open paren s, malapit paren, semi-colon. 2083 01:43:57,520 --> 01:44:01,800 Ngunit implicit deklarasyon ng function na namin nakita sa madaling sabi mas maaga. 2084 01:44:01,800 --> 01:44:04,880 Ang ibig sabihin nito, kailangan lang, na Clang hindi alam kung ano ang ibig sabihin ko. 2085 01:44:04,880 --> 01:44:09,000 >> Ginamit ko ang isang bokabularyo salita na ito ay hindi kailanman nakita o na-itinuro bago. 2086 01:44:09,000 --> 01:44:11,950 At kaya kailangan ko upang magturo ito ano ang function na ito ay nangangahulugan. 2087 01:44:11,950 --> 01:44:13,590 Kaya ako pagpunta sa sige at gawin iyon. 2088 01:44:13,590 --> 01:44:17,970 >> Ako pagpunta sa sige at ipatupad ang aking sariling mga function na tinatawag na Print Name. 2089 01:44:17,970 --> 01:44:24,720 At ako pagpunta sa sabihin, ang mga sumusunod, na ginagawa nito ito, printf, hello, porsiyento 2090 01:44:24,720 --> 01:44:27,760 s, backslash n, pangalan, semi-colon. 2091 01:44:27,760 --> 01:44:29,250 Kaya kung ano ang sinabi ko na lang gawin? 2092 01:44:29,250 --> 01:44:31,325 >> Kaya ito ay lumiliko out, upang ipatupad ang iyong sariling function, 2093 01:44:31,325 --> 01:44:33,845 namin uri ng hiramin ang ilan sa ang parehong istraktura bilang pangunahing 2094 01:44:33,845 --> 01:44:35,720 na lamang kami ay kinuha para sa ipinagkaloob, at ako 2095 01:44:35,720 --> 01:44:37,730 malaman lamang pagkopya at pag-paste medyo marami kung ano 2096 01:44:37,730 --> 01:44:39,170 Gumagamit ako ng pagsulat sa nakaraan. 2097 01:44:39,170 --> 01:44:40,570 Ngunit mapansin ang pattern dito. 2098 01:44:40,570 --> 01:44:43,750 Int, Main, Void, kami manunudyo bukod bago mahaba kung ano na ang tunay na ibig sabihin. 2099 01:44:43,750 --> 01:44:46,160 >> Ngunit para sa ngayon, lamang mapansin ang paralelismo. 2100 01:44:46,160 --> 01:44:48,210 Void, print pangalan, string pangalan, kaya may 2101 01:44:48,210 --> 01:44:50,310 isang purple keyword, na kung saan kami ay pagpunta upang simulan ang 2102 01:44:50,310 --> 01:44:54,067 pagtawag ng isang uri ng bumalik, ang pangalan ng ang function, at pagkatapos ay ang input. 2103 01:44:54,067 --> 01:44:56,400 Kaya, talaga, maaari naming magdistila ito uri ng tulad noong nakaraang linggo 2104 01:44:56,400 --> 01:44:59,030 bilang, ito ay ang pangalan o ang algorithm ng code kami 2105 01:44:59,030 --> 01:45:00,761 pagpunta sa write-- ang algorithm pinagbabatayan 2106 01:45:00,761 --> 01:45:02,010 ang code kami ay pagpunta sa magsulat. 2107 01:45:02,010 --> 01:45:03,180 >> Ito ang input nito. 2108 01:45:03,180 --> 01:45:04,670 Ito ang output nito. 2109 01:45:04,670 --> 01:45:08,730 Function na ito, i-print na pangalan, ay dinisenyo upang tumagal ng isang string na tinatawag na pangalan, 2110 01:45:08,730 --> 01:45:11,350 o ano pa man, tulad ng input, at pagkatapos ay walang bisa. 2111 01:45:11,350 --> 01:45:13,904 ito ay hindi bumalik anumang bagay, tulad ng makakuha string o makakuha int ginagawa. 2112 01:45:13,904 --> 01:45:15,570 Kaya ito ay pagpunta sa ipasa akin ng isang bagay likod. 2113 01:45:15,570 --> 01:45:17,960 Lamang Ito ay pagpunta sa magkaroon ng isang side effect, kaya na magsalita, 2114 01:45:17,960 --> 01:45:19,570 ng pag-print pangalan ng isang tao. 2115 01:45:19,570 --> 01:45:22,260 Kaya mapansin, linya 7, ako maaaring tumawag name print. 2116 01:45:22,260 --> 01:45:25,920 Line 10, ang maaari kong tukuyin o ipatupad name print. 2117 01:45:25,920 --> 01:45:28,450 Ngunit, sa kasamaang-palad, hindi iyon sapat. 2118 01:45:28,450 --> 01:45:31,230 >> Hayaan akong sige at recompile ito pagkatapos i-save. 2119 01:45:31,230 --> 01:45:33,910 Whoa, ngayon, ginawa ko ito mas masahol pa, ito ay tila. 2120 01:45:33,910 --> 01:45:37,027 Kaya implicit deklarasyon ng function na print pangalan ko ay hindi wasto. 2121 01:45:37,027 --> 01:45:38,360 At, muli, may higit pang mga error. 2122 01:45:38,360 --> 01:45:41,430 Ngunit bilang ako cautioned mas maaga, kahit kung ikaw ay makakuha ng bumagsak sa, 2123 01:45:41,430 --> 01:45:44,850 o isang maliit na malungkot upang makita kaya maraming error, tumutok lamang sa ang unang 2124 01:45:44,850 --> 01:45:47,500 una, dahil maaaring ito lamang ay nagkaroon ng isang cascading epekto. 2125 01:45:47,500 --> 01:45:51,970 Kaya C, o Clang higit na partikular, pa rin ay hindi kilala ng pangalan print. 2126 01:45:51,970 --> 01:45:54,580 >> At iyon ay dahil Clang, sa pamamagitan ng disenyo, ay uri ng pipi. 2127 01:45:54,580 --> 01:45:56,280 Ginagawa lamang kung ano ang iyong sabihin sa ito upang gawin. 2128 01:45:56,280 --> 01:46:00,950 At ginagawa nito lamang kaya sa pagkakasunud-sunod kung saan sabihin mo ito gawin. 2129 01:46:00,950 --> 01:46:05,270 >> Kaya ako ay may tinukoy na pangunahing sa apat na linya, tulad namin ang paggawa medyo madalas. 2130 01:46:05,270 --> 01:46:07,980 Ko na tinukoy na pangalan print on line 10. 2131 01:46:07,980 --> 01:46:11,793 Ngunit ako sinusubukan mong gamitin print na pangalan mo sa pitong linya. 2132 01:46:11,793 --> 01:46:13,670 >> Ito ay masyadong lalong madaling panahon, ay hindi pa umiiral. 2133 01:46:13,670 --> 01:46:19,150 Pagayon ako ay maging matalino, at maging tulad ng, OK, kaya sabihin lamang i-play kasama, 2134 01:46:19,150 --> 01:46:23,680 at ilipat name print up dito, at muling sumulat ng libro. 2135 01:46:23,680 --> 01:46:24,550 Oh aking Dios. 2136 01:46:24,550 --> 01:46:25,260 Gumana ito. 2137 01:46:25,260 --> 01:46:26,670 Ito ay bilang simpleng bilang na. 2138 01:46:26,670 --> 01:46:28,120 >> Ngunit ang lohika ay eksakto na. 2139 01:46:28,120 --> 01:46:30,870 Mayroon kang upang magturo Clang kung ano ito ay sa pamamagitan ng pagtukoy sa mga function na muna. 2140 01:46:30,870 --> 01:46:31,920 Pagkatapos ay maaari mong gamitin ito. 2141 01:46:31,920 --> 01:46:33,940 Ngunit, nang tapat, ito nararamdaman tulad ng isang madulas libis. 2142 01:46:33,940 --> 01:46:35,773 >> Kaya sa bawat oras na patakbuhin ko sa isang problema, ako lang 2143 01:46:35,773 --> 01:46:39,450 pagpunta upang i-highlight at kopyahin ang code Ako wrote, i-cut ito at i-paste ito dito. 2144 01:46:39,450 --> 01:46:41,370 At, tiyak, maaari namin balakin ilang mga pangyayari 2145 01:46:41,370 --> 01:46:43,286 kung saan ang isa function na maaaring kailangang tumawag sa isa pa. 2146 01:46:43,286 --> 01:46:46,030 At ikaw lamang ay hindi maaaring ilagay ang bawat function na lalo sa lahat ng iba pang mga. 2147 01:46:46,030 --> 01:46:47,930 >> Kaya ito ay lumiliko out doon ni isang mas mahusay na solusyon. 2148 01:46:47,930 --> 01:46:50,100 Maaari naming mag-iwan ito maging. 2149 01:46:50,100 --> 01:46:53,677 At, lantaran, ito ay sa pangkalahatan nice, at maginhawa, at mahusay na disenyo 2150 01:46:53,677 --> 01:46:56,760 upang ilagay main una, dahil, muli, main tulad ng kapag berde bandila click, 2151 01:46:56,760 --> 01:46:59,027 iyon ay ang pag-andar na ay naisakatuparan sa pamamagitan ng default. 2152 01:46:59,027 --> 01:47:01,110 Kaya maaari mong pati na rin ilagay ito sa tuktok ng file 2153 01:47:01,110 --> 01:47:03,560 kaya na kapag ikaw o anumang iba pang mga tao ay tumitingin sa file 2154 01:47:03,560 --> 01:47:06,360 alam mo kung ano ang nangyayari sa pamamagitan lamang ng pagbabasa main muna. 2155 01:47:06,360 --> 01:47:15,360 Kaya ito ay lumiliko out, maaari naming sabihin sa Clang proactively, hey, Clang, sa apat na linya, 2156 01:47:15,360 --> 01:47:17,940 pangako ko na ipatupad isang function na tinatawag Print 2157 01:47:17,940 --> 01:47:22,600 Pangalan na tumatagal ng isang string na tinatawag na pangalan bilang input, at babalik sa wala, walang bisa. 2158 01:47:22,600 --> 01:47:24,770 At kukunin ko na makakuha ng paligid sa pagpapatupad ng mga ito sa ibang pagkakataon. 2159 01:47:24,770 --> 01:47:25,680 >> Dito lumapit Main. 2160 01:47:25,680 --> 01:47:29,130 Main ngayon sa linya 9 ay maaaring gumamit ng Print Name dahil Clang 2161 01:47:29,130 --> 01:47:32,600 nagtitiwala na, sa huli, ito ay nakatagpo ang kahulugan 2162 01:47:32,600 --> 01:47:34,880 ng pagpapatupad ng Print Name. 2163 01:47:34,880 --> 01:47:37,390 Kaya pagkatapos i-save ang aking file, sabihin mo akong magpatuloy at gumawa prototype, 2164 01:47:37,390 --> 01:47:38,498 asta mabuti oras na ito. 2165 01:47:38,498 --> 01:47:43,470 Dot iwa, prototype, hayaan mo akong sige, at i-type sa isang pangalan. 2166 01:47:43,470 --> 01:47:48,440 David, hello David, Zamila, hello Zamila, at, sa katunayan, ngayon ito gumagana. 2167 01:47:48,440 --> 01:47:52,200 >> Kaya ang sahog dito ay na hindi namin ginawa ng isang pasadyang function, tulad ng isang custom 2168 01:47:52,200 --> 01:47:54,219 Scratch block kami ay pagtawag ito. 2169 01:47:54,219 --> 01:47:57,010 Ngunit hindi tulad ng scratch kung saan maaari mong lamang lumikha ng ito at simulan ang paggamit nito, 2170 01:47:57,010 --> 01:47:59,330 ngayon kami ay may na maging isang kaunti pa pilosopo, 2171 01:47:59,330 --> 01:48:03,410 at talagang sanayin Clang gamitin, o upang asahan ito. 2172 01:48:03,410 --> 01:48:09,140 Ngayon, bilang isang bukod, kung bakit ang lahat ng oras na ito ay may kami ay lamang nang walang taros sa pananampalataya kasama 2173 01:48:09,140 --> 01:48:12,170 CS50.h, at kabilang ang standard io.h? 2174 01:48:12,170 --> 01:48:15,190 >> Well, ito ay lumiliko out, bukod sa ilang iba pang mga bagay na ito, 2175 01:48:15,190 --> 01:48:18,550 lahat na nasa mga tuldok h file, na mangyari upang maging mga file. 2176 01:48:18,550 --> 01:48:20,460 Ang mga ito ay header file, kaya na magsalita. 2177 01:48:20,460 --> 01:48:23,270 Pa rin nila ay nakasulat sa C. Ngunit ang mga ito ay isang iba't ibang mga uri ng file. 2178 01:48:23,270 --> 01:48:28,690 >> Sa ngayon, maaari mong medyo marami ipalagay na ang lahat na sa loob ng CS50.h 2179 01:48:28,690 --> 01:48:33,360 ilang one-liners tulad nito, hindi para sa mga function na tinatawag na Print Name, 2180 01:48:33,360 --> 01:48:36,840 ngunit para sa Kumuha ng String, Kumuha Float, at ng ilang mga iba. 2181 01:48:36,840 --> 01:48:41,510 At may mga katulad na mga modelo, isa liners, sa loob ng mga standard io.h 2182 01:48:41,510 --> 01:48:46,241 para printf, na ngayon ay sa aking sariling Print Pangalan function. 2183 01:48:46,241 --> 01:48:49,490 Kaya sa ibang salita, ito buong oras na namin lamang ay walang taros pagkopya at pag-paste 2184 01:48:49,490 --> 01:48:51,780 isama ito, isama na, kung ano kaya ang nangyari? 2185 01:48:51,780 --> 01:48:55,310 Ang mga ay lamang ang uri ng mga pahiwatig upang Clang bilang sa kung ano ang function 2186 01:48:55,310 --> 01:49:00,170 ay, sa katunayan, ipinatupad, lamang sa ibang lugar sa iba't ibang mga file 2187 01:49:00,170 --> 01:49:02,440 sa ibang lugar sa sistema. 2188 01:49:02,440 --> 01:49:05,160 >> Kaya ipinatupad namin ang pangalan print. 2189 01:49:05,160 --> 01:49:07,910 Mayroon itong mga ito pangalawang epekto ng pag-print ng isang bagay sa screen. 2190 01:49:07,910 --> 01:49:10,170 Ngunit ito ay hindi aktwal na kamay sa akin ng isang bagay likod. 2191 01:49:10,170 --> 01:49:12,200 Paano namin pumunta tungkol sa pagpapatupad ng isang programa na 2192 01:49:12,200 --> 01:49:14,510 ay kamay sa akin ng isang bagay sa likod? 2193 01:49:14,510 --> 01:49:15,580 >> Well, sabihin subukan ito. 2194 01:49:15,580 --> 01:49:21,360 Hayaan akong magpatuloy at ipatupad isang file na tinatawag return.c 2195 01:49:21,360 --> 01:49:24,530 upang maaari naming ipakita kung paano ang isang bagay tulad Kumuha ng String, o Kumuha Int, 2196 01:49:24,530 --> 01:49:27,340 ay talagang bumabalik isang bagay na bumalik sa user. 2197 01:49:27,340 --> 01:49:29,840 Sabihin sige at tukuyin int pangunahing walang bisa. 2198 01:49:29,840 --> 01:49:33,230 >> At, muli, sa hinaharap, kami ay ipaliwanag kung ano na int at na walang bisa 2199 01:49:33,230 --> 01:49:34,090 ay aktwal na paggawa. 2200 01:49:34,090 --> 01:49:35,840 Ngunit para sa ngayon, kami ay dalhin ito para sa ipinagkaloob. 2201 01:49:35,840 --> 01:49:39,970 Ako pagpunta sa sige at printf, para sa isang mahusay na karanasan ng user, x ay. 2202 01:49:39,970 --> 01:49:44,360 At pagkatapos ay ako pagpunta sa maghintay para sa mga user upang bigyan ako ng x na may get int. 2203 01:49:44,360 --> 01:49:48,459 >> At pagkatapos ay ako pagpunta sa sige at i-print out x sa parisukat. 2204 01:49:48,459 --> 01:49:50,500 Kaya kapag mayroon ka lamang ng keyboard, ang mga tao na karaniwang 2205 01:49:50,500 --> 01:49:52,600 gamitin ang maliit na karot simbolo sa keyboard 2206 01:49:52,600 --> 01:49:55,330 upang kumatawan sa kapangyarihan ng, o ang exponent ng. 2207 01:49:55,330 --> 01:49:58,960 Kaya x squared ay naroroon i. 2208 01:49:58,960 --> 01:50:00,660 >> At ngayon ako pagpunta sa gawin ito. 2209 01:50:00,660 --> 01:50:03,940 hindi ko na lang do-- kung ano ang x squared? x squared ay x beses x. 2210 01:50:03,940 --> 01:50:06,690 >> At ginawa namin ito ng ilang panahon ang nakalipas na araw na ito. 2211 01:50:06,690 --> 01:50:08,730 Na ito ay hindi pakiramdam tulad ng lahat na marami progreso. 2212 01:50:08,730 --> 01:50:09,570 Alam mo ba? 2213 01:50:09,570 --> 01:50:13,100 ni pakikinabangan ang ilan sa na ideya Hayaan mula sa huling oras ng abstraction. 2214 01:50:13,100 --> 01:50:16,080 >> Hindi ba ito ay nice kung mayroong isang function na tinatawag na 2215 01:50:16,080 --> 01:50:18,460 square na gumagana nang eksakto na? 2216 01:50:18,460 --> 01:50:20,640 Ito pa rin, sa dulo ng araw, ay ang mga parehong matematika. 2217 01:50:20,640 --> 01:50:22,410 Ngunit sabihin abstract layo ang ideya ng pagkuha 2218 01:50:22,410 --> 01:50:25,280 isang numero multiplied sa pamamagitan ng isa pa, at lang bigyan ito ng isang pangalan, 2219 01:50:25,280 --> 01:50:27,360 tulad parisukat ang halagang ito. 2220 01:50:27,360 --> 01:50:29,560 >> At, sa ibang salita, sa C, sabihin lumikha ng isang function 2221 01:50:29,560 --> 01:50:32,660 tinatawag square na ginagawa eksakto na. 2222 01:50:32,660 --> 01:50:34,600 Ito ay pagpunta sa ay tinatawag na square. 2223 01:50:34,600 --> 01:50:35,790 Ito ay pagpunta sa tumagal ng isang int. 2224 01:50:35,790 --> 01:50:37,820 At bibigyan namin ay lamang tumawag ito n, sa pamamagitan ng default. 2225 01:50:37,820 --> 01:50:39,403 >> Ngunit maaari naming tumawag ito anumang nais namin. 2226 01:50:39,403 --> 01:50:42,900 At ang lahat ng ito ay pagpunta sa gawin, literal, ay bumalik 2227 01:50:42,900 --> 01:50:45,810 ang resulta ng n beses n. 2228 01:50:45,810 --> 01:50:48,980 Ngunit dahil ito ay bumabalik ang isang bagay, na kung saan 2229 01:50:48,980 --> 01:50:53,690 ay ang mga keyword sa purple na namin hindi kailanman nakita bago, ako, on line 11, 2230 01:50:53,690 --> 01:50:55,410 ay hindi maaaring lamang sabihin walang bisa oras na ito. 2231 01:50:55,410 --> 01:51:01,320 >> Void, sa halimbawa lang namin nakita sa halip ng pangalan print, lamang ay nangangahulugan, 2232 01:51:01,320 --> 01:51:02,190 gumawa ng paraan. 2233 01:51:02,190 --> 01:51:04,170 Ngunit huwag mag-kamay sa akin ng isang bagay likod. 2234 01:51:04,170 --> 01:51:06,790 Sa kasong ito, ang gusto ko upang bumalik n beses n, 2235 01:51:06,790 --> 01:51:08,460 o ano pa man iyon ay, ang numerong iyon. 2236 01:51:08,460 --> 01:51:12,460 >> Kaya hindi ko maaaring sabihin, hey, computer, bumalik ako sa wala, walang bisa. 2237 01:51:12,460 --> 01:51:16,166 Ito ay pagpunta upang bumalik, sa pamamagitan ng likas na katangian, isang int. 2238 01:51:16,166 --> 01:51:17,790 At sa gayon ay ang lahat na ang nangyayari sa dito. 2239 01:51:17,790 --> 01:51:20,070 >> input Ang sa parisukat ay pagpunta sa maging isang int. 2240 01:51:20,070 --> 01:51:24,760 At sa gayon ay maaari naming gamitin ito, ito ay upang magkaroon ng isang pangalan, N. Ito ay pagpunta sa output 2241 01:51:24,760 --> 01:51:26,240 isang int na hindi kailangan ng isang pangalan. 2242 01:51:26,240 --> 01:51:29,590 Maaari naming iwanan ito sa main, o sino man ay gamit sa akin na tandaan ang halaga na ito kung kami 2243 01:51:29,590 --> 01:51:31,120 gusto may sariling variable. 2244 01:51:31,120 --> 01:51:33,230 >> At, muli, ang tanging bagong keyword dito ay Return. 2245 01:51:33,230 --> 01:51:34,480 At ako lamang ang paggawa ng ilang mga matematika. 2246 01:51:34,480 --> 01:51:41,825 Kung ako talagang nais na maging hindi kinakailangan, kaya kong sabihin int produkto ay makakakuha ng n beses n. 2247 01:51:41,825 --> 01:51:44,170 >> At pagkatapos ay maaari kong sabihin, bumalik produkto. 2248 01:51:44,170 --> 01:51:47,360 Ngunit, muli, upang ang aking punto ng mas maaga ito hindi lamang mabuting design-- 2249 01:51:47,360 --> 01:51:50,060 tulad ng, kung bakit kitang ipakilala ang isang pangalan, isang simbolo, tulad ng produkto, 2250 01:51:50,060 --> 01:51:51,570 lamang upang agad na ibalik ito? 2251 01:51:51,570 --> 01:51:53,670 Ito ay isang maliit na mas malinis, isang maliit na tighter, kaya 2252 01:51:53,670 --> 01:51:59,380 na magsalita, just to say return n beses n, kumuha alisan ng linya na ito nang sama-sama. 2253 01:51:59,380 --> 01:52:02,860 >> At ito ay lamang ng mas mababa code na basahin, mababawasan ang posibilidad ng mga pagkakamali. 2254 01:52:02,860 --> 01:52:05,180 At sabihin makita kung ito talagang gumagana ngayon. 2255 01:52:05,180 --> 01:52:09,380 Ngayon, ako pagpunta sa pumunta magpatuloy at gumawa ng return. 2256 01:52:09,380 --> 01:52:11,460 >> Uh-oh, implicit deklarasyon ng function. 2257 01:52:11,460 --> 01:52:14,080 Ginawa ko ang pagkakamaling ito bago, hindi sang-ayon. 2258 01:52:14,080 --> 01:52:18,950 Hayaan akong i-type lamang, o i-highlight at kopyahin, ang eksaktong parehong function prototype, 2259 01:52:18,950 --> 01:52:21,342 o lagda, ng pag-andar up dito. 2260 01:52:21,342 --> 01:52:22,800 O maaari ko bang ilipat ang buong function. 2261 01:52:22,800 --> 01:52:23,841 >> Ngunit iyon lamang ang isang maliit na tamad. 2262 01:52:23,841 --> 01:52:24,870 Kaya hindi namin ay gawin na. 2263 01:52:24,870 --> 01:52:27,960 Ngayon, hayaan mo akong gumawa return muli, dot slash return. 2264 01:52:27,960 --> 01:52:32,790 >> x ay 2. x squared ay 4. x ay 3. x squared ay 9. 2265 01:52:32,790 --> 01:52:35,300 At ang pag-andar ay tila ngayon na nagtatrabaho. 2266 01:52:35,300 --> 01:52:36,550 Kaya kung ano ang pagkakaiba dito? 2267 01:52:36,550 --> 01:52:42,520 Mayroon akong isang function na tinatawag na parisukat, sa kasong ito, na aking ilagay sa isang input. 2268 01:52:42,520 --> 01:52:43,830 At kumuha ako ng likod ng isang output. 2269 01:52:43,830 --> 01:52:46,210 At gayon pa man, dati, kung binuksan ko ang iba pang mga halimbawa 2270 01:52:46,210 --> 01:52:51,640 mula sa mas maaga, na kung saan ay tinatawag prototype.c, 2271 01:52:51,640 --> 01:52:54,770 Ako ay nagkaroon ng pangalan print, na kung saan bumalik walang bisa, kaya na magsalita, 2272 01:52:54,770 --> 01:52:58,730 O ito ay bumalik sa wala, at lamang ay nagkaroon ng isang epekto. 2273 01:52:58,730 --> 01:53:00,230 >> Kaya kung ano ang nangyayari sa dito? 2274 01:53:00,230 --> 01:53:03,520 Well, isaalang-alang ang pag-andar makakuha ng string para sa sandali lamang. 2275 01:53:03,520 --> 01:53:06,570 Kami ay gumagamit ng ang pag-andar makakuha ng string sa mga sumusunod na paraan. 2276 01:53:06,570 --> 01:53:10,464 >> Tumanggap kami ng isang function makakuha string, tulad isama CS50.h, 2277 01:53:10,464 --> 01:53:16,624 ng pamantayang io.h, int, pangunahing, walang bisa. 2278 01:53:16,624 --> 01:53:18,790 At pagkatapos ay sa bawat oras na ako tinatawag get string kaya sa ngayon, 2279 01:53:18,790 --> 01:53:23,260 Ko na sinabi ng isang bagay tulad ng, string s makakakuha makakuha ng string, dahil get string 2280 01:53:23,260 --> 01:53:27,880 sabihin tumawag sa ito get.c-- get string mismo ay nagbabalik ng isang string na maaari kong pagkatapos ay 2281 01:53:27,880 --> 01:53:32,050 gamitin, at inyong sabihin, hello, kuwit, porsiyento s, backslash n, s. 2282 01:53:32,050 --> 01:53:35,660 >> Kaya ito ay ang parehong halimbawa, talaga, isa na hindi nabusog mas maaga. 2283 01:53:35,660 --> 01:53:37,920 Kaya makakuha ng string ay nagbabalik ng isang halaga. 2284 01:53:37,920 --> 01:53:41,260 Ngunit isang sandali ang nakalipas, print string hindi nagbabalik ng isang halaga. 2285 01:53:41,260 --> 01:53:42,721 Ito lamang ay may side effect. 2286 01:53:42,721 --> 01:53:44,220 Kaya ito ay isang pangunahing pagkakaiba. 2287 01:53:44,220 --> 01:53:46,710 Nakita namin ang iba't ibang uri ng mga function ngayon, 2288 01:53:46,710 --> 01:53:49,490 ilan sa kung saan ay may ibabalik mga halaga, ang ilan ay hindi. 2289 01:53:49,490 --> 01:53:51,890 Kaya marahil ito ay string, o int, o float. 2290 01:53:51,890 --> 01:53:53,480 O siguro ito lang ang walang bisa. 2291 01:53:53,480 --> 01:53:55,710 >> At ang pagkakaiba ay na ang mga function na 2292 01:53:55,710 --> 01:53:59,940 kumuha ng data at ibalik ang halaga ng isang ay aktwal na nagdadala ng isang bagay pabalik sa table, 2293 01:53:59,940 --> 01:54:01,110 kaya na magsalita. 2294 01:54:01,110 --> 01:54:03,710 Kaya sabihin sige at tumingin sa isang pangwakas na set 2295 01:54:03,710 --> 01:54:09,129 ng mga halimbawa na nagbibigay ng isang pakiramdam, ngayon, ng kung paano namin, sa katunayan, abstract mas mahusay, 2296 01:54:09,129 --> 01:54:11,670 at mas mahusay, at mas mahusay, o higit pa, at higit pa, at higit pa, upang 2297 01:54:11,670 --> 01:54:13,810 na magsulat, sa huli, mas mahusay na code. 2298 01:54:13,810 --> 01:54:16,860 Sabihin sige, at sa espiritu ng simula, gawin ang sumusunod. 2299 01:54:16,860 --> 01:54:21,700 >> Hayaan akong sige at isama CS50.h at standard io.h. 2300 01:54:21,700 --> 01:54:24,010 Hayaan akong sige at bigyan aking sarili ng isang int, pangunahing, walang bisa. 2301 01:54:24,010 --> 01:54:27,380 At hayaan mo akong sige, tawag na ito cough.c. 2302 01:54:27,380 --> 01:54:35,510 >> At ipaalam sa akin sige at lamang tulad Scratch, i-print out ubo / n. 2303 01:54:35,510 --> 01:54:37,170 At gusto kong gawin ito ng tatlong beses. 2304 01:54:37,170 --> 01:54:39,670 Kaya ako, siyempre, lamang ang pagpunta upang kopyahin at i-paste ng tatlong beses. 2305 01:54:39,670 --> 01:54:46,440 ngayon ako pagpunta sa gumawa ng ubo dot slash ubo. 2306 01:54:46,440 --> 01:54:50,120 Sabihin bigyan ang aking sarili ng kaunti pa kuwarto dito, ang Enter, ubo, ubo, ubo. 2307 01:54:50,120 --> 01:54:53,970 >> Mayroong, malinaw naman, isa nang pagkakataon para sa pagpapabuti. 2308 01:54:53,970 --> 01:54:55,679 Ko na kopyahin at ilagay ng ilang beses ngayon. 2309 01:54:55,679 --> 01:54:58,261 Ngunit iyon ay lamang kaya ako ay hindi kailangang i-type ng maraming mga character. 2310 01:54:58,261 --> 01:55:00,250 Ako pa rin ang nagbago ng ano mga linya ng code ay. 2311 01:55:00,250 --> 01:55:04,240 >> Ang mga tatlong linya ay magkapareho, na nararamdaman tamad at sa katunayan ay, 2312 01:55:04,240 --> 01:55:07,110 at ito ay marahil hindi ang tamang diskarte. 2313 01:55:07,110 --> 01:55:11,029 Kaya kung anong sahog maaari naming mapabuti ang code na ito? 2314 01:55:11,029 --> 01:55:12,570 Wala kaming upang kopyahin at i-paste ang code. 2315 01:55:12,570 --> 01:55:15,070 >> At, sa katunayan, ang anumang oras sa tingin mo ang iyong sarili ng pagkopya at pag-paste, 2316 01:55:15,070 --> 01:55:17,700 at hindi kahit na ang pagbabago ng code, logro ay may isang mas mahusay na paraan. 2317 01:55:17,700 --> 01:55:19,470 At, sa katunayan, diyan ay. 2318 01:55:19,470 --> 01:55:22,510 Hayaan akong magpatuloy at gawin ang isang para sa loop, kahit na ang syntax maaaring hindi 2319 01:55:22,510 --> 01:55:24,570 dumating natural pa. 2320 01:55:24,570 --> 01:55:29,494 >> Gawin ito ng tatlong beses, kailangan lang pamamagitan ng paggawa ng following-- 2321 01:55:29,494 --> 01:55:31,160 at mangyayari kong malaman na ito mula sa pagsasanay. 2322 01:55:31,160 --> 01:55:32,810 Ngunit kami ay may isang bilang ng mga halimbawa ngayon. 2323 01:55:32,810 --> 01:55:34,950 At makikita mo ang online higit pang mga sanggunian pa rin. 2324 01:55:34,950 --> 01:55:37,790 >> Ito ang syntax on line 6, na marami tulad Scratch na uulit 2325 01:55:37,790 --> 01:55:40,090 block, ulitin ang mga sumusunod na tatlong beses. 2326 01:55:40,090 --> 01:55:41,340 Ito ay isang maliit mahiwagang para sa ngayon. 2327 01:55:41,340 --> 01:55:43,050 Ngunit ito ay makakakuha ng higit pa, at mas pamilyar. 2328 01:55:43,050 --> 01:55:45,050 >> At ito ay pagpunta sa ulitin line walong tatlong beses, 2329 01:55:45,050 --> 01:55:52,390 kaya na kung ako muling sumulat ng libro make ubo, dot slash ubo, ubo, ubo, ubo. 2330 01:55:52,390 --> 01:55:54,030 Ito pa rin ay gumagana sa parehong paraan. 2331 01:55:54,030 --> 01:55:55,550 Kaya na ang lahat ng fine at mabuti. 2332 01:55:55,550 --> 01:55:58,200 Ngunit iyon lamang ang hindi masyadong abstracted. 2333 01:55:58,200 --> 01:55:59,371 >> Ito ay ganap na tama. 2334 01:55:59,371 --> 01:56:01,370 Ngunit ito nararamdaman tulad ng mayroong ay maaaring isang pagkakataon, 2335 01:56:01,370 --> 01:56:03,750 bilang sa mundo ng Simula, sa uri ng start 2336 01:56:03,750 --> 01:56:07,530 upang magdagdag ng ilang semantics dito kaya na Hindi ko na lang ay ang ilang para sa loop, 2337 01:56:07,530 --> 01:56:09,867 at isang function na nagsasabing ubo, o ay ubo. 2338 01:56:09,867 --> 01:56:10,450 Alam mo ba? 2339 01:56:10,450 --> 01:56:12,620 Hayaan akong subukan na maging isang maliit na palamigan kaysa sa na, 2340 01:56:12,620 --> 01:56:16,090 at talagang magsulat ng isang function na ay may ilang mga epekto, tumawag ito ubo. 2341 01:56:16,090 --> 01:56:20,830 >> At ito ay tumatagal ng walang input, at nagbabalik walang halaga bilang output. 2342 01:56:20,830 --> 01:56:22,680 Pero alam mo kung ano ang ginagawa nito? 2343 01:56:22,680 --> 01:56:29,370 Ginagawa this-- printf, quote magpanipi, ubo. 2344 01:56:29,370 --> 01:56:32,380 >> At ngayon dito, pupuntahan ko sige at para int, 2345 01:56:32,380 --> 01:56:36,070 i makakakuha ng zero, i mas mababa sa 3, i plus plus. 2346 01:56:36,070 --> 01:56:39,770 Pupunta ako upang hindi gawin printf, na kung saan ay arguably isang mababang antas ng pagpapatupad 2347 01:56:39,770 --> 01:56:40,270 detalye. 2348 01:56:40,270 --> 01:56:41,353 Wala akong pakialam kung paano sa pag-ubo. 2349 01:56:41,353 --> 01:56:43,240 Gusto ko lang gamitin ang ubo function. 2350 01:56:43,240 --> 01:56:44,840 At ako lamang ang pagpunta sa tumawag ubo. 2351 01:56:44,840 --> 01:56:46,204 >> Ngayon, pansinin ang paghihiwalay sa dalawang bahagi. 2352 01:56:46,204 --> 01:56:49,370 Kapag tumawag ka ng isang function, kung hindi mo gusto nais na bigyan ito inputs, lahat-lahat fine. 2353 01:56:49,370 --> 01:56:51,780 gawin lamang bukas paren, malapit paren, at tapos ka na. 2354 01:56:51,780 --> 01:56:56,271 >> Kapag mong tukuyin ang isang function, o Ipinahahayag prototype ng isang function, ang 2355 01:56:56,271 --> 01:56:58,770 kung alam mo in advance na ito ay hindi pagpunta sa gumawa ng anumang mga argumento, 2356 01:56:58,770 --> 01:57:01,170 sabihin walang bisa sa mga panaklong doon. 2357 01:57:01,170 --> 01:57:05,660 At na gumagawa ng mga tiyak na kayo Hindi maa-sinasadyang maling paggamit nito. 2358 01:57:05,660 --> 01:57:07,020 Hayaan akong sige at gumawa ubo. 2359 01:57:07,020 --> 01:57:08,540 At, siyempre, ginawa ko ang isang pagkakamali. 2360 01:57:08,540 --> 01:57:10,410 >> Dammit, may na implicit deklarasyon. 2361 01:57:10,410 --> 01:57:11,325 Ngunit iyon lamang ang fine. 2362 01:57:11,325 --> 01:57:12,590 Isa itong madaling ayusin. 2363 01:57:12,590 --> 01:57:18,240 Kailangan ko lang ang prototype mas mataas na up sa aking file kaysa sa aktwal na gumagamit ako ng ito. 2364 01:57:18,240 --> 01:57:20,070 >> Kaya ngayon hayaan mo akong gumawa ubo muli, nice. 2365 01:57:20,070 --> 01:57:20,790 Ngayon, ito ay gumagana. 2366 01:57:20,790 --> 01:57:22,930 Gumawa ubo, ubo, ubo, ubo. 2367 01:57:22,930 --> 01:57:25,930 Kaya maaari mong isipin na kami ay talagang lamang sa paglipas ng engineering ang problemang ito. 2368 01:57:25,930 --> 01:57:26,763 At, sa katunayan, hindi namin. 2369 01:57:26,763 --> 01:57:28,870 Ito ay hindi isang magandang kandidato ng isang programa 2370 01:57:28,870 --> 01:57:31,930 sa sandaling ito para sa refactoring, at paggawa ng kung ano ang 2371 01:57:31,930 --> 01:57:35,645 tinatawag hierarchical agnas, kung saan ka kumuha ng ilang mga code, at pagkatapos ay 2372 01:57:35,645 --> 01:57:38,790 mong uri ng kadahilanan ng mga bagay out, sa gayon ay idahilan pa semantika sa kanila, 2373 01:57:38,790 --> 01:57:40,930 at muling gamitin ito sa huli mas mahaba term. 2374 01:57:40,930 --> 01:57:43,490 Ngunit ito ay isang gusali block papunta mas sopistikadong mga programa 2375 01:57:43,490 --> 01:57:45,600 na magsisimula kami pagsulat bago ang haba na 2376 01:57:45,600 --> 01:57:50,090 ay nagbibigay-daan sa amin upang magkaroon ng bokabularyo na kung saan upang sumulat ng mas mahusay code. 2377 01:57:50,090 --> 01:57:52,920 At, sa katunayan, sabihin makita kung kami ay hindi maaaring ipahayag nang masaklaw ito sa karagdagang. 2378 01:57:52,920 --> 01:57:57,984 >> Tila isang maliit na pilay na ako, main, kailangang mag-alala tungkol darn ito para sa loop, 2379 01:57:57,984 --> 01:57:59,400 at pagtawag ubo muli at muli. 2380 01:57:59,400 --> 01:58:03,050 Bakit hindi ko na lang sabihin ubo, mangyaring ubo makaitlo? 2381 01:58:03,050 --> 01:58:08,170 Sa ibang salita, kung bakit maaaring hindi ko na lang magbigay ng input sa pag-ubo at gawin ito? 2382 01:58:08,170 --> 01:58:11,270 >> Bakit hindi ko na lang sabihin, sa main ubo tatlong beses. 2383 01:58:11,270 --> 01:58:13,150 At ngayon, ito ay uri ng kahima-himala. 2384 01:58:13,150 --> 01:58:14,540 Ito ay napaka-umuulit dito. 2385 01:58:14,540 --> 01:58:15,940 At ito ay, sa katunayan, ang isang sanggol na hakbang. 2386 01:58:15,940 --> 01:58:19,250 >> Ngunit lamang ng kakayahan upang sabihin sa line walo, ubo tatlong beses, 2387 01:58:19,250 --> 01:58:20,730 ito ay lamang kaya marami pang iba nababasa. 2388 01:58:20,730 --> 01:58:24,210 At, plus, hindi ko na kailangang malaman o pag-aalaga kung paano ubo ay ipinatupad. 2389 01:58:24,210 --> 01:58:26,460 At, sa katunayan, sa huling bahagi ng term at para sa pangwakas na proyekto, 2390 01:58:26,460 --> 01:58:29,150 kung matugunan mo ang isang proyekto na may isang kaklase o dalawang mga kaklase, 2391 01:58:29,150 --> 01:58:32,370 makikita mo mapagtanto na ikaw ay pagpunta sa kung, o nais na, hatiin ang trabaho. 2392 01:58:32,370 --> 01:58:34,650 >> At ikaw ay pagpunta sa nais upang magpasya nang maaga, kung sino ang pagpunta sa gawin kung ano ang, 2393 01:58:34,650 --> 01:58:35,483 at sa kung aling mga piraso? 2394 01:58:35,483 --> 01:58:37,520 At Gusto hindi ito gandang kung ikaw, halimbawa, 2395 01:58:37,520 --> 01:58:40,100 mag-alaga sa pagsulat main, tapos na. 2396 01:58:40,100 --> 01:58:43,470 At ang iyong mga kasama sa kuwarto, o ang iyong partner mas pangkalahatang paraan, 2397 01:58:43,470 --> 01:58:45,230 ay siyang bahala sa pagpapatupad ubo. 2398 01:58:45,230 --> 01:58:49,540 >> At ito division, ang mga ito pader ng abstraction, 2399 01:58:49,540 --> 01:58:52,310 o layer ng abstraction kung Makikita ninyo, hindi kaya sobrang malakas, 2400 01:58:52,310 --> 01:58:55,480 dahil lalo na para sa mas malaki, mas kumplikadong mga programa at mga sistema, 2401 01:58:55,480 --> 01:59:00,070 ito ay nagpapahintulot sa maramihang mga tao na bumuo ng mga bagay-sama, at sa huli 2402 01:59:00,070 --> 01:59:02,680 tahiin ang kanilang trabaho magkasama sa ganitong paraan. 2403 01:59:02,680 --> 01:59:05,332 Ngunit, siyempre, kami kailangang ngayon ayusin ubo. 2404 01:59:05,332 --> 01:59:07,290 Kailangan namin upang sabihin sa ubo na, hey, alam mo kung ano? 2405 01:59:07,290 --> 01:59:11,230 Ikaw ay pagpunta sa kailangan upang kumuha ng isang input-- kaya hindi walang bunga, kundi int at ngayon. 2406 01:59:11,230 --> 01:59:15,170 Sabihin sige at ilagay sa ubo ang int. i makakakuha ng zero. 2407 01:59:15,170 --> 01:59:16,890 >> i ay mas mababa sa kung gaano karaming beses. 2408 01:59:16,890 --> 01:59:18,550 sabi ko tatlong bago. 2409 01:59:18,550 --> 01:59:20,420 Ngunit iyon ay hindi kung ano ang gusto ko. 2410 01:59:20,420 --> 01:59:25,520 Gusto ko ubo na generalised sa suportahan ang anumang bilang ng mga iteration. 2411 01:59:25,520 --> 01:59:28,800 >> Kaya, sa katunayan, ito ay n na gusto ko, kahit anong nagsasabi sa mga gumagamit sa akin. 2412 01:59:28,800 --> 01:59:31,620 Ngayon, maaari ko sige at sabihin print ubo. 2413 01:59:31,620 --> 01:59:34,750 At hindi mahalaga kung ano ang numero ang user ay pumasa sa, 2414 01:59:34,750 --> 01:59:36,890 ako umulit na maraming beses. 2415 01:59:36,890 --> 01:59:39,160 >> Kaya sa katapusan ng araw, programa ay magkapareho. 2416 01:59:39,160 --> 01:59:42,820 Ngunit mapansin ang lahat ng ito bagay-bagay maaaring kahit na maging sa isa pang file. 2417 01:59:42,820 --> 01:59:45,620 Sa katunayan, hindi ko alam kung sa sandali kung paano printf ay ipinatupad. 2418 01:59:45,620 --> 01:59:47,980 >> Hindi ko alam kung sa sandaling ito kung paano makakuha ng string, o makakuha ng int, o makakuha ng float 2419 01:59:47,980 --> 01:59:48,646 ay ipinatupad. 2420 01:59:48,646 --> 01:59:50,930 At hindi ko nais na makita ang mga ito sa aking screen. 2421 01:59:50,930 --> 01:59:55,320 Bilang ito ay, ako simula mag-focus sa aking mga programa, hindi ang mga pag-andar. 2422 01:59:55,320 --> 01:59:59,070 >> At sa gayon, sa katunayan, sa lalong madaling mong simulan factoring code tulad nito out, 2423 01:59:59,070 --> 02:00:01,397 maaari naming kahit na ilipat ubo sa isang hiwalay na file? 2424 02:00:01,397 --> 02:00:02,730 Ibang tao ay maaaring ipatupad ito. 2425 02:00:02,730 --> 02:00:06,810 At ikaw at ang iyong programa maging ang very beautiful, at tunay kawili-wili, 2426 02:00:06,810 --> 02:00:10,830 arguably, talagang apat na line program doon. 2427 02:00:10,830 --> 02:00:13,510 >> Kaya sabihin sige ngayon at gumawa ng isa pang pagbabago. 2428 02:00:13,510 --> 02:00:16,180 Pansinin na ang aking prototype ay may upang baguhin up tuktok. 2429 02:00:16,180 --> 02:00:18,390 Kaya hayaan mo akong ayusin na kaya Hindi ako makapag-yelled sa. 2430 02:00:18,390 --> 02:00:22,580 >> Gumawa ubo, ako'y tatakbo ubo isang beses higit pa, pa rin ang paggawa ng parehong bagay. 2431 02:00:22,580 --> 02:00:26,010 Ngunit ngayon, mapansin kami ay may isang sahog para sa isang pangwakas na bersyon. 2432 02:00:26,010 --> 02:00:26,940 Alam mo ba? 2433 02:00:26,940 --> 02:00:29,040 Hindi ko nais na lamang umubo, kinakailangan. 2434 02:00:29,040 --> 02:00:30,802 Gusto kong magkaroon ng isang bagay na mas pangkalahatan. 2435 02:00:30,802 --> 02:00:31,510 Kaya alam mo kung ano? 2436 02:00:31,510 --> 02:00:32,450 Gusto kong gawin ito. 2437 02:00:32,450 --> 02:00:37,140 Gusto kong magkaroon ng, magkano ang gusto Scratch ginagawa nito, isang sabihin block, ngunit hindi lamang 2438 02:00:37,140 --> 02:00:38,680 sabihin ng isang bagay ng ilang bilang ng beses. 2439 02:00:38,680 --> 02:00:41,510 Gusto ko ito upang sabihin ng isang napaka-tukoy na string. 2440 02:00:41,510 --> 02:00:43,850 At, samakatuwid, ako ay hindi nais ito sa makatarungan sabihin ubo. 2441 02:00:43,850 --> 02:00:47,660 Gusto ko ito upang sabihin ang anumang string ay lumipas in. 2442 02:00:47,660 --> 02:00:49,960 >> Kaya mapansin, ako pangkalahatan ito kaya na ngayon 2443 02:00:49,960 --> 02:00:53,110 say nararamdaman tulad ng isang mabuting pangalan para sa mga ito, tulad ng simula, 2444 02:00:53,110 --> 02:00:55,530 tumatagal ng dalawang argumento, hindi katulad scratch. 2445 02:00:55,530 --> 02:00:56,570 Ang isa ay isang string. 2446 02:00:56,570 --> 02:00:57,300 Ang isa ay isang int. 2447 02:00:57,300 --> 02:00:58,130 >> At maaari ko bang ilipat ang mga ito. 2448 02:00:58,130 --> 02:01:00,713 Ko lang ang uri ng tulad ng ideya ng sabihin ang string una, at pagkatapos ay 2449 02:01:00,713 --> 02:01:01,940 kung gaano karaming beses sa ibang pagkakataon. 2450 02:01:01,940 --> 02:01:03,970 Void nangangahulugan ito pa rin ay hindi bumalik anumang bagay. 2451 02:01:03,970 --> 02:01:06,428 Ito ay lamang visual na bahagi effects, tulad ng sa [? Jordan,?] 2452 02:01:06,428 --> 02:01:08,240 isang pandiwang pangalawang epekto ng yelling. 2453 02:01:08,240 --> 02:01:12,630 ginagawa pa rin ito ng isang bagay n beses, 0 hanggang sa, ngunit hindi katumbas ng n. 2454 02:01:12,630 --> 02:01:14,540 Ang ibig sabihin nito n kabuuang beses. 2455 02:01:14,540 --> 02:01:16,540 At pagkatapos lamang i-print out kahit na ano na string ay. 2456 02:01:16,540 --> 02:01:19,060 Kaya talaga ako generalised ang linyang ito ng code. 2457 02:01:19,060 --> 02:01:22,460 Kaya ngayon, paano ko ipatupad ang ubo function? 2458 02:01:22,460 --> 02:01:25,520 >> ang maaari kong gawin walang bisa ubo. 2459 02:01:25,520 --> 02:01:28,501 At maaari ko pa rin gawin sa kung paano maraming beses na gusto mong pag-ubo. 2460 02:01:28,501 --> 02:01:29,250 Pero alam mo kung ano? 2461 02:01:29,250 --> 02:01:31,240 Maaari ko ngayon tumikin sasabihin. 2462 02:01:31,240 --> 02:01:36,540 >> maaari kong tumawag sa sabihin sa salita ubo, pagpasa sa n. 2463 02:01:36,540 --> 02:01:40,410 At kung gusto ko na ring ipatupad, katuwaan lang, isang pagbahin function, 2464 02:01:40,410 --> 02:01:42,290 maaari kong bumahing ilang bilang ng beses. 2465 02:01:42,290 --> 02:01:47,300 At maaari kong panatilihin reusing n, dahil mapapansin na m sa kontekstong ito o saklaw 2466 02:01:47,300 --> 02:01:49,470 ay umiiral lamang sa loob ng function. 2467 02:01:49,470 --> 02:01:52,767 >> At n sa kontekstong ito lamang umiiral sa loob ng function na ito dito. 2468 02:01:52,767 --> 02:01:54,600 Kaya makikita namin bumalik sa mga isyung ito ng saklaw. 2469 02:01:54,600 --> 02:02:01,160 At dito, tingin lang ako pagpunta sa sabihin, Achoo, at pagkatapos n beses, semi-colon. 2470 02:02:01,160 --> 02:02:04,340 >> At ngayon, kailangan ko lang upang humiram mga lagda function up dito. 2471 02:02:04,340 --> 02:02:06,290 Kaya ubo ay tama. 2472 02:02:06,290 --> 02:02:10,090 Void pagbahin ay tama ngayon. 2473 02:02:10,090 --> 02:02:12,390 >> At ako pa rin kailangan lang sabihin. 2474 02:02:12,390 --> 02:02:18,990 Kaya ako pagpunta sa sabihin, sabihin string s, int n, semi-colon. 2475 02:02:18,990 --> 02:02:22,010 Kaya ko na over-engineered ang ano ba sa labas ng programang ito. 2476 02:02:22,010 --> 02:02:23,760 >> At ito ay hindi palaging nangangahulugan na ito ay 2477 02:02:23,760 --> 02:02:26,343 kung ano ang dapat mong gawin kapag sumusulat kahit na ang pinakasimpleng ng mga programa. 2478 02:02:26,343 --> 02:02:29,280 Kumuha ng isang bagay na malinaw naman talagang simple, talagang maikli, 2479 02:02:29,280 --> 02:02:31,800 at muling ipatupad ito gamit paraan ng masyadong maraming code. 2480 02:02:31,800 --> 02:02:34,560 Ngunit makikita mo aktwal na makita, at sa oras na tumingin pabalik sa mga halimbawang ito, 2481 02:02:34,560 --> 02:02:38,610 at mapagtanto, oh, ang mga ay ang mga hakbang kinuha namin upang aktwal na magbigay ng tuntuning panlahat, 2482 02:02:38,610 --> 02:02:40,797 sa kadahilanan ng isang bagay out, hanggang sa dulo ng araw 2483 02:02:40,797 --> 02:02:42,380 ang aking code ay aktwal na medyo makatwirang. 2484 02:02:42,380 --> 02:02:45,960 Dahil kung gusto kong ubo tatlong beses pagkatapos bumahing ng tatlong beses, 2485 02:02:45,960 --> 02:02:50,420 lamang ako ng pagpunta sa muling palabas ng pelikula na ito, program gumawa ubo, at magpatakbo ng ubo. 2486 02:02:50,420 --> 02:02:53,620 At Mayroon akong tatlong coughs at tatlong bumahin. 2487 02:02:53,620 --> 02:02:55,990 >> At kaya ito ay isang basic tularan, kung ikaw ay, 2488 02:02:55,990 --> 02:03:00,110 para sa kung paano namin maaaring pumunta tungkol sa aktwal na pagpapatupad ng isang programa. 2489 02:03:00,110 --> 02:03:03,220 Ngunit sabihin lamang makita ngayon kung ano ito ay ng paggawa namin ang lahat ng oras na ito, 2490 02:03:03,220 --> 02:03:06,940 at kung ano ang ilan sa mga huling piraso ay sa likod na ito simpleng command. 2491 02:03:06,940 --> 02:03:09,620 Sa katapusan ng araw, na namin ay gumagamit Clang bilang aming tagatala. 2492 02:03:09,620 --> 02:03:11,494 Kami ay sumusulat pinagmulan code, pag-convert ito 2493 02:03:11,494 --> 02:03:12,820 sa pamamagitan Clang sa machine code. 2494 02:03:12,820 --> 02:03:15,540 >> At hindi namin ginagamit Gumawa lang upang mapabilis ang aming keystrokes kaya 2495 02:03:15,540 --> 02:03:20,740 na hindi namin kailangang tandaan mga incantations ng Clang mismo. 2496 02:03:20,740 --> 02:03:22,640 Ngunit kung ano ang gumawa ng aktwal na paggawa? 2497 02:03:22,640 --> 02:03:24,750 At ang kapalit, kung ano ang Clang aktwal na paggawa? 2498 02:03:24,750 --> 02:03:28,790 >> Ito ay lumiliko out; sapagka't kami ay pinasimple discussion ngayon sa pamamagitan ng sinasabi, 2499 02:03:28,790 --> 02:03:33,090 mong gawin source code, pumasa ito sa lalong input sa isang compiler, na kung saan ay nagbibigay sa iyo 2500 02:03:33,090 --> 02:03:35,750 output ng machine code, lumiliko out doon ni 2501 02:03:35,750 --> 02:03:37,420 ng ilang iba't ibang mga hakbang sa loob doon. 2502 02:03:37,420 --> 02:03:41,940 At compiling mangyayari sa maging ang umbrella term para sa isang buo paglangkay-langkayin ng mga hakbang. 2503 02:03:41,940 --> 02:03:43,970 Ngunit sabihin lamang mambiro this out talagang mabilis. 2504 02:03:43,970 --> 02:03:48,070 >> Ito ay lumiliko out na kami ay na-paggawa higit pang mga bagay sa bawat oras na tumakbo ako ng isang programa, 2505 02:03:48,070 --> 02:03:50,990 o sa tuwing ako ay sumulat ng libro ng isang programa ngayon. 2506 02:03:50,990 --> 02:03:55,020 Kaya preprocessing ay tumutukoy sa this-- anumang bagay sa isang C programa, 2507 02:03:55,020 --> 02:03:58,720 dahil kakailanganin namin makita muli at muli, na nagsisimula sa ang simbolong hash, 2508 02:03:58,720 --> 02:04:03,320 o ang hashtag simbolo dito, nangangahulugan ito ay isang preprocessor direktiba. 2509 02:04:03,320 --> 02:04:07,330 Ito ay nangangahulugan na, sa kasong ito, hey computer, gawin ang isang bagay sa file na ito 2510 02:04:07,330 --> 02:04:09,430 bago ka talagang ilista ang aking sariling code. 2511 02:04:09,430 --> 02:04:15,220 >> Sa kasong ito, hash isama ay, mahalagang, ni C paraan ng sinasabi, 2512 02:04:15,220 --> 02:04:19,325 hey computer, pumunta makakuha ng ang mga nilalaman ng CS50.h at i-paste ang mga ito dito. 2513 02:04:19,325 --> 02:04:22,170 Hey computer, pumunta makuha ang mga nilalaman ng standard io.h, 2514 02:04:22,170 --> 02:04:24,690 kung saan man na nasa hard drive, i-paste ito dito. 2515 02:04:24,690 --> 02:04:27,390 Kaya ang mga bagay na mangyayari unang panahon preprocessing. 2516 02:04:27,390 --> 02:04:28,880 >> At Clang ang lahat ng ito para sa amin. 2517 02:04:28,880 --> 02:04:30,510 At ito ay hindi ito kaya darn mabilis, hindi mo kahit 2518 02:04:30,510 --> 02:04:32,000 makita ang apat na natatanging mga bagay na nangyayari. 2519 02:04:32,000 --> 02:04:34,100 Ngunit iyon ang unang tulad hakbang. 2520 02:04:34,100 --> 02:04:35,560 >> Ano talaga ang mangyayari susunod? 2521 02:04:35,560 --> 02:04:38,320 Well, ang susunod na opisyal hakbang ay pag-ipon. 2522 02:04:38,320 --> 02:04:40,385 At ito ay lumiliko out na ipon ng isang programa 2523 02:04:40,385 --> 02:04:44,060 technically nangangahulugan ng pagpunta mula sa source code, mga bagay-bagay na namin 2524 02:04:44,060 --> 02:04:47,890 ay sumusulat ngayon, sa isang bagay tinatawag assembly code, isang bagay 2525 02:04:47,890 --> 02:04:49,260 na mukhang isang maliit na naiiba. 2526 02:04:49,260 --> 02:04:51,050 >> At, sa katunayan, maaari naming makita na ito tunay na mabilis. 2527 02:04:51,050 --> 02:04:53,890 Hayaan akong aktwal na pumunta sa aking IDE. 2528 02:04:53,890 --> 02:04:58,050 Hayaan akong sige at buksan hello.c, na kung saan ay ang pinakaunang program na kung saan kami 2529 02:04:58,050 --> 02:04:59,120 nagsimula ngayon. 2530 02:04:59,120 --> 02:05:04,130 At hayaan mo akong magpatuloy at patakbuhin Clang isang maliit na naiiba, Clang-s, hello.c, 2531 02:05:04,130 --> 02:05:07,720 na kung saan ay aktwal na pagpunta sa bigyan ako ng isa pang file hello.s. 2532 02:05:07,720 --> 02:05:10,330 >> At marahil kami ay hindi kailanman muli makita ang ganitong uri ng code. 2533 02:05:10,330 --> 02:05:13,030 Kung magdadala sa iyo ng isang mas mababang antas ng systems klase tulad CS61, 2534 02:05:13,030 --> 02:05:14,920 makikita mo ang isang pulutong ng higit pa ng ganitong uri ng code. 2535 02:05:14,920 --> 02:05:17,020 Ngunit ito ay pagtitipon ng wika. 2536 02:05:17,020 --> 02:05:22,050 Ito ang X86 pagpupulong wika na ang CPU na pinagbabatayan 2537 02:05:22,050 --> 02:05:24,460 CS50 IDE talagang nauunawaan. 2538 02:05:24,460 --> 02:05:27,060 >> At misteriyoso bilang ginagawa nito tumingin, ito ay isang bagay 2539 02:05:27,060 --> 02:05:29,180 ang computer naiintindihan pretty mabuti. 2540 02:05:29,180 --> 02:05:30,790 Sub q, ito ay isang ibawas. 2541 02:05:30,790 --> 02:05:31,660 Mayroong mga paggalaw. 2542 02:05:31,660 --> 02:05:35,730 >> May tumatawag ng mga function dito, x Oring, isang kilusan, isang add, isang pop, 2543 02:05:35,730 --> 02:05:36,430 isang pagbabalik. 2544 02:05:36,430 --> 02:05:38,850 Kaya mayroong ilang mga napaka mababang antas mga tagubilin 2545 02:05:38,850 --> 02:05:41,280 na CPUs maunawaan na I alluded sa mas maaga. 2546 02:05:41,280 --> 02:05:43,100 Iyon ay kung ano Intel Inside. 2547 02:05:43,100 --> 02:05:45,030 >> May mga pattern ng zero at mga bago na 2548 02:05:45,030 --> 02:05:51,800 map sa mga arcanely worded, ngunit medyo well-pinangalanan, mga tagubilin, 2549 02:05:51,800 --> 02:05:52,780 kaya na magsalita. 2550 02:05:52,780 --> 02:05:54,780 Iyon ay kung ano ang mangyayari kapag mong itala ang iyong code. 2551 02:05:54,780 --> 02:05:58,560 Makakakuha ka ng assembly wika sa labas ng ito, na kung saan 2552 02:05:58,560 --> 02:06:04,680 ay nangangahulugan na ang ikatlong hakbang ay upang mag-ipon na assembly code sa, sa huli, 2553 02:06:04,680 --> 02:06:09,080 machine code-- zero at mga, hindi ang text na lang nakita namin ang isang sandali ang nakalipas. 2554 02:06:09,080 --> 02:06:13,370 >> Kaya pre-processing ay na mahanap at palitan, at ng ilang iba pang mga bagay. 2555 02:06:13,370 --> 02:06:16,430 Ipon tumatagal ng iyong pinagmulan code mula sa C, source code 2556 02:06:16,430 --> 02:06:18,980 na sumulat kami ay nagsisampa upang assembly code na lang namin glanced sa. 2557 02:06:18,980 --> 02:06:22,170 Assembling tumatagal na assembly code upang zeroes at mga bago 2558 02:06:22,170 --> 02:06:24,680 na ang CPU talagang ay maunawaan sa dulo ng araw. 2559 02:06:24,680 --> 02:06:27,630 At pag-uugnay ay ang huling hakbang na mangyayari para us-- muli, 2560 02:06:27,630 --> 02:06:29,830 kaya mabilis ang ginagawa namin hindi kahit notice-- na nagsasabing, 2561 02:06:29,830 --> 02:06:32,460 hey computer, gawin ang lahat ng mga zero at mga bago na 2562 02:06:32,460 --> 02:06:36,750 nagresulta mula ipon code ni David, at ang kanyang mga pangunahing pag-andar sa kasong ito. 2563 02:06:36,750 --> 02:06:39,160 >> At hey computer, pumunta makakuha ng ang lahat ng mga zero at mga 2564 02:06:39,160 --> 02:06:42,180 na ang CS50 kawani sinulat sa loob ng CS50 library. 2565 02:06:42,180 --> 02:06:43,440 Paghaluin ang mga nasa may David. 2566 02:06:43,440 --> 02:06:46,648 At hey computer, pumunta makakuha ng lahat ng mga zero at mga bago na ang ibang tao ay sumulat taon 2567 02:06:46,648 --> 02:06:47,470 na nakalipas para sa printf. 2568 02:06:47,470 --> 02:06:49,880 At magdagdag ng mga sa buong bagay, nang sa gayon ay hindi namin 2569 02:06:49,880 --> 02:06:52,870 got ang aking mga zero at mga, ang zero CS50 kawani at mga bago, 2570 02:06:52,870 --> 02:06:55,370 ang printf mga zero at mga bago, at anumang bagay na aming ginagamit. 2571 02:06:55,370 --> 02:07:00,410 >> Lahat sila ay makakuha ng pinagsama-sama sa isang programa na tinatawag na, sa kasong ito, hello. 2572 02:07:00,410 --> 02:07:03,141 Kaya simula ngayon, kami lang gamitin ang salitang ipon. 2573 02:07:03,141 --> 02:07:06,390 At magsisikuha kami ng para sa ipinagkaloob na kapag sinasabi namin, sumulat ng libro ang iyong programa, ang ibig sabihin nito, 2574 02:07:06,390 --> 02:07:08,849 hey gawin ang pre-processing, assembling, at pag-link. 2575 02:07:08,849 --> 02:07:11,890 Ngunit mayroong talagang ilang makatas stuff nangyayari doon sa ilalim ng hood. 2576 02:07:11,890 --> 02:07:13,723 At lalo na kung ikaw makakuha curious ilang oras, 2577 02:07:13,723 --> 02:07:15,900 maaari mong simulan poking sa paligid sa ito mas mababang antas. 2578 02:07:15,900 --> 02:07:19,660 Ngunit sa ngayon, mapagtanto na kabilang sa mga takeaways para sa araw 2579 02:07:19,660 --> 02:07:23,420 ay lubos na lamang ang simula ng isang proseso, 2580 02:07:23,420 --> 02:07:26,700 ng pagkuha ng komportable sa isang bagay tulad ng kumusta mundo. 2581 02:07:26,700 --> 02:07:29,575 Sa katunayan, karamihan sa kung ano ang ginawa namin sa araw tiyak ay hindi lababo sa napakabilis na. 2582 02:07:29,575 --> 02:07:31,491 At ito ay tumagal ng ilang mga oras, at ng ilang mga kasanayan. 2583 02:07:31,491 --> 02:07:33,864 At logro ay, ikaw ay-uri-uriin ng nais na maabot ang iyong keyboard 2584 02:07:33,864 --> 02:07:34,780 o sumigaw sa screen. 2585 02:07:34,780 --> 02:07:35,880 At ang lahat ng iyan ay OK. 2586 02:07:35,880 --> 02:07:38,320 Kahit na, marahil subukang huwag gawin ito sa library kaya magkano. 2587 02:07:38,320 --> 02:07:40,820 >> At sa huli, makikita mo ay magagawang kahit na, upang simulan ang 2588 02:07:40,820 --> 02:07:44,580 nakakakita ng pattern, parehong sa magandang code na iyong isinulat at sa mga pagkakamali 2589 02:07:44,580 --> 02:07:45,370 na iyong ginawa. 2590 02:07:45,370 --> 02:07:48,965 At marami na tulad ng proseso ng pagiging isang TF o isang CA ay tulad ng, 2591 02:07:48,965 --> 02:07:51,590 ikaw ay magsisimulang upang makakuha ng mas mahusay at mas mahusay sa nakakakita ng mga pattern, 2592 02:07:51,590 --> 02:07:53,774 at lamang paglutas ng iyong sariling mga problema sa huli. 2593 02:07:53,774 --> 02:07:56,940 Sa habang panahon, magkakaroon ng maraming sa atin sa bang ipahiram mo ng suporta, at kumuha ka ng 2594 02:07:56,940 --> 02:07:57,481 sa pamamagitan ng ito. 2595 02:07:57,481 --> 02:07:59,450 At sa write-ups para sa lahat ng mga problema 2596 02:07:59,450 --> 02:08:01,366 ikaw ay guided sa pamamagitan ng lahat ng mga utos 2597 02:08:01,366 --> 02:08:05,330 na ako ay tiyak na alam mula sa isang pulutong ng mga pagsasanay sa pamamagitan ng ngayon, 2598 02:08:05,330 --> 02:08:07,380 ngunit maaaring flown hindi kaya ng ulo para sa ngayon. 2599 02:08:07,380 --> 02:08:08,580 At iyon ang lahat-lahat fine. 2600 02:08:08,580 --> 02:08:11,230 >> Ngunit, sa huli, ikaw ay pagpunta upang simulan upang makita ang mga pattern lumitaw. 2601 02:08:11,230 --> 02:08:14,260 At sa sandaling makuha mo nakalipas na ang lahat ng bobo mga detalye, tulad ng mga panaklong, 2602 02:08:14,260 --> 02:08:16,710 at kulot tirante, at semi-colons, at ang mga bagay-bagay, lantaran, 2603 02:08:16,710 --> 02:08:19,360 na ay hindi sa lahat intellectually kawili-wili. 2604 02:08:19,360 --> 02:08:22,690 At ito ay hindi ang layunin ng pagkuha ng anumang pambungad klase. 2605 02:08:22,690 --> 02:08:24,410 Ito ay ang mga ideya na ay pagpunta sa bagay na ito. 2606 02:08:24,410 --> 02:08:26,659 >> Ito ay ang mga loop, at ang kondisyon, at ang pag-andar, 2607 02:08:26,659 --> 02:08:30,552 at higit pa powerfully ang abstraction, at ang factoring ng code, 2608 02:08:30,552 --> 02:08:33,510 at ang magandang disenyo, at ang mabuting estilo, at sa huli ang kawastuhan 2609 02:08:33,510 --> 02:08:37,330 ng iyong code, na sa huli pagpunta sa mahalaga ang pinaka. 2610 02:08:37,330 --> 02:08:40,925 Kaya sa susunod na linggo, kami ay kumuha ng mga mga ideya na namin unang nakita sa scratch 2611 02:08:40,925 --> 02:08:42,800 at ngayon isinalin sa C. At magsisimula kami 2612 02:08:42,800 --> 02:08:45,740 upang ipakilala ang unang ng tunay na mundo domain ni kurso. 2613 02:08:45,740 --> 02:08:50,140 >> kami ay tumutok sa mundo ng seguridad, at higit na partikular cryptography, 2614 02:08:50,140 --> 02:08:51,980 ang sining ng scrambling impormasyon. 2615 02:08:51,980 --> 02:08:54,000 At kabilang sa mga unang problema mo ang iyong sarili 2616 02:08:54,000 --> 02:08:56,840 ay makakakuha ng upang isulat lampas naglalaro sa ilan sa mga syntax 2617 02:08:56,840 --> 02:08:59,880 at paglutas ng ilang mga lohikal na problema, sa huli bago mahaba, 2618 02:08:59,880 --> 02:09:03,960 ay upang aktwal na mag-agawan, o i-encrypt, at sa huli i-decrypt impormasyon. 2619 02:09:03,960 --> 02:09:06,470 At lahat ng bagay tapos na namin araw na ito, ay medyo mababa 2620 02:09:06,470 --> 02:09:09,190 antas, ay lamang pagpunta upang payagan ang sa amin na kumuha ng isa, at isa, 2621 02:09:09,190 --> 02:09:13,550 at isa pang hakbang sa itaas papunta sa pagsusulat ng mga pinaka-interesante code pa. 2622 02:09:13,550 --> 02:09:15,050 >> Kaya higit pa sa na sa susunod na linggo. 2623 02:09:15,050 --> 02:09:17,834 2624 02:09:17,834 --> 02:09:18,762 >> [Video playback] 2625 02:09:18,762 --> 02:09:19,690 2626 02:09:19,690 --> 02:09:22,006 >> -Ano Ang maaari mong sabihin sa akin tungkol sa ang huling beses na nakita mo sa kanya? 2627 02:09:22,006 --> 02:09:26,041 2628 02:09:26,041 --> 02:09:27,040 -Ano Ang maaari kong sabihin, talaga? 2629 02:09:27,040 --> 02:09:30,500 2630 02:09:30,500 --> 02:09:35,340 Ibig kong sabihin, ito ay tulad ng anumang iba pang mga pre-production pag-eensayo, 2631 02:09:35,340 --> 02:09:40,510 maliban nagkaroon ng isang bagay ay sinabi niya sa pinakadulo na natigil sa akin. 2632 02:09:40,510 --> 02:09:44,810 2633 02:09:44,810 --> 02:09:46,640 >> -Ito Ay CS50. 2634 02:09:46,640 --> 02:09:49,440 2635 02:09:49,440 --> 02:09:52,190 >> -Na Ay isang cut sa lahat, mahusay na trabaho sa pag-eensayo. 2636 02:09:52,190 --> 02:09:53,070 >> lunch ni -Na? 2637 02:09:53,070 --> 02:09:54,986 >> -Yeah, Ikaw at ako Maaari grab isang sandwich sa isang bit. 2638 02:09:54,986 --> 02:09:58,380 Hayaan akong lamang debrief may David talagang mabilis. 2639 02:09:58,380 --> 02:09:59,160 David? 2640 02:09:59,160 --> 02:10:01,260 David? 2641 02:10:01,260 --> 02:10:03,110 >> [END-playback]