1 00:00:00,000 --> 00:00:02,970 >> [MUSIC nagpe-play] 2 00:00:02,970 --> 00:00:14,355 3 00:00:14,355 --> 00:00:15,700 >> David J. MALAN: Lahat ng karapatan. 4 00:00:15,700 --> 00:00:18,832 Ito ay CS50 at ito ay ang simula ng Linggo 2. 5 00:00:18,832 --> 00:00:21,040 At makikita mo isipin na sa paglipas ng sa nakalipas na dalawang linggo, 6 00:00:21,040 --> 00:00:24,490 Na-nagpapakilala kami ng computer agham at, sa turn, programming. 7 00:00:24,490 --> 00:00:27,640 >> At sinimulan namin ang kuwento sa pamamagitan ng paraan ng Scratch, na graphical wika 8 00:00:27,640 --> 00:00:28,990 mula sa MIT'S Media Lab. 9 00:00:28,990 --> 00:00:30,780 At pagkatapos ay pinaka-kamakailan lamang, noong nakaraang linggo, ginawa namin 10 00:00:30,780 --> 00:00:34,450 ipakilala ang isang higher-- isang mas mababang antas ng wika na kilala 11 00:00:34,450 --> 00:00:36,770 bilang C, isang bagay na ay pulos sa texto. 12 00:00:36,770 --> 00:00:39,440 At, sa katunayan, huling oras namin ginalugad sa loob ng konteksto 13 00:00:39,440 --> 00:00:40,450 isang bilang ng mga concepts. 14 00:00:40,450 --> 00:00:43,010 >> Na ito, pagpapabalik, ay ang napaka unang programa namin ay tumingin sa. 15 00:00:43,010 --> 00:00:45,710 At ang program na ito, medyo simple, Kopya out, "hello, world." 16 00:00:45,710 --> 00:00:47,730 Ngunit mayroong kaya magkano tila magic nangyayari. 17 00:00:47,730 --> 00:00:51,460 Mayroong ito #include may mga anggulo bracket. 18 00:00:51,460 --> 00:00:52,170 Mayroong int. 19 00:00:52,170 --> 00:00:53,020 Mayroong (walang laman). 20 00:00:53,020 --> 00:00:56,330 Mayroong panaklong, kulot tirante, semi-colons, at kaya marami pang iba. 21 00:00:56,330 --> 00:00:58,480 >> At ito, isipin ang na ipinakilala namin Scratch 22 00:00:58,480 --> 00:01:02,110 kaya na namin maaaring, sa isip, tingnan ang nakaraang na syntax, ang bagay-bagay na talagang hindi 23 00:01:02,110 --> 00:01:04,590 lahat na intellectually kawili-wiling ngunit maaga 24 00:01:04,590 --> 00:01:07,700 ay, walang pasubali, isang bit mapaglalang upang wrap ang iyong isip sa paligid. 25 00:01:07,700 --> 00:01:10,860 At, sa katunayan, ang isa sa mga pinaka-karaniwang bagay nang maaga sa isang programming class, 26 00:01:10,860 --> 00:01:13,443 lalo na para sa mga mas mababa kumportable, ay upang makakuha ng bigo sa pamamagitan 27 00:01:13,443 --> 00:01:17,460 at tripped up sa pamamagitan ng ilang sintaktik error, hindi sa banggitin lohikal na mga error. 28 00:01:17,460 --> 00:01:19,800 At kaya sa gitna ng aming mga layunin ngayon, talaga, ay 29 00:01:19,800 --> 00:01:23,280 ay upang magbigay ng kasangkapan sa iyo ng ilang problema-tuos pamamaraan para sa kung paano 30 00:01:23,280 --> 00:01:26,705 upang mas mahusay na malutas ang mga problema sa kanilang sarili sa anyo ng pag-debug. 31 00:01:26,705 --> 00:01:29,330 At makikita mo isipin, masyadong, na ang kapaligiran na ipinakilala namin 32 00:01:29,330 --> 00:01:31,780 huling beses ay tinatawag na CS50 IDE. 33 00:01:31,780 --> 00:01:34,850 Ito ang web-based software na ay nagbibigay-daan sa iyo na programa sa ulap, 34 00:01:34,850 --> 00:01:38,450 kaya na magsalita, habang pinapanatili ang lahat ng iyong file ng sama-sama, pati na muli namin ay ngayon. 35 00:01:38,450 --> 00:01:41,480 At isipin na kami revisited mga paksang ito dito, 36 00:01:41,480 --> 00:01:44,480 kasama ng mga ito pag-andar, at mga loop, at variable, at Boolean expression, 37 00:01:44,480 --> 00:01:45,110 at kundisyon. 38 00:01:45,110 --> 00:01:49,190 At talagang isang ilang higit pang mga na kami isinalin mula sa mundo ng Scratch 39 00:01:49,190 --> 00:01:50,800 sa mundo ng C. 40 00:01:50,800 --> 00:01:53,220 >> Ngunit ang pangunahing gusali bloke, kaya na magsalita, 41 00:01:53,220 --> 00:01:55,150 ay talagang pa rin ang parehong noong nakaraang linggo. 42 00:01:55,150 --> 00:01:57,900 Sa katunayan, namin talagang lamang nagkaroon ng isang iba't ibang mga puzzle piraso, kung ikaw ay. 43 00:01:57,900 --> 00:02:00,300 Sa halip na na purple i-save ang block, namin sa halip 44 00:02:00,300 --> 00:02:02,940 ay printf, na kung saan ay ang function na ito sa C na 45 00:02:02,940 --> 00:02:05,890 daan sa iyo upang i-print ang isang bagay at format na ito sa screen. 46 00:02:05,890 --> 00:02:07,950 ipinakilala namin ang CS50 Library, kung saan mo 47 00:02:07,950 --> 00:02:11,420 kung ngayon sa iyong pagtatapon get_char, at get_int, at get_string, 48 00:02:11,420 --> 00:02:14,610 at ng ilang mga iba pang mga function bilang well, sa pamamagitan ng na maaari kang makakuha ng input 49 00:02:14,610 --> 00:02:16,260 mula sa sariling keyboard ng gumagamit. 50 00:02:16,260 --> 00:02:20,640 At ating sinakop ang din ng isang pagtingin sa mga bagay-bagay tulad these- bool, at pansamantalang trabaho, 51 00:02:20,640 --> 00:02:22,490 at i-double, float, int, long_long string. 52 00:02:22,490 --> 00:02:25,170 At mayroong kahit iba pang mga uri ng data sa C. 53 00:02:25,170 --> 00:02:28,560 >> Sa ibang salita, kapag ipinapahayag mo isang variable sa tindahan ng ilang mga halaga, 54 00:02:28,560 --> 00:02:32,600 o kapag ikaw ipatupad ang isang function na nagbabalik ilang mga halaga, 55 00:02:32,600 --> 00:02:35,290 maaari mong tukuyin kung ano ang uri ng halaga na ay. 56 00:02:35,290 --> 00:02:37,310 Ito ba ay isang string, tulad ng isang pagkakasunod-sunod ng mga character? 57 00:02:37,310 --> 00:02:39,490 Ito ba ay isang numero, tulad ng isang integer? 58 00:02:39,490 --> 00:02:41,390 Ito ba ay isang lumulutang na tuldok halaga, o ang gusto? 59 00:02:41,390 --> 00:02:46,180 Kaya sa C, hindi katulad Scratch, talaga naming nagsimula upang tukuyin kung anong uri ng data 60 00:02:46,180 --> 00:02:48,330 kami ay bumabalik o paggamit. 61 00:02:48,330 --> 00:02:51,910 >> Ngunit, siyempre, din namin ang bumangga sa ilang mga pangunahing mga limitasyon ng computing. 62 00:02:51,910 --> 00:02:54,100 At sa partikular, wikang ito C, pagpapabalik 63 00:02:54,100 --> 00:02:57,070 na kinuha namin ng isang pagtingin sa integer overflow, ang katotohanan 64 00:02:57,070 --> 00:03:00,460 na kung mayroon ka lamang ng takda na halaga ng memory 65 00:03:00,460 --> 00:03:04,600 o, partikular, ang isang may hangganan bilang ng mga piraso, maaari ka lamang bilangin kaya mataas. 66 00:03:04,600 --> 00:03:08,460 At kaya kami ay tumingin sa halimbawang ito dito kung saan ang isang counter sa isang airplane,, 67 00:03:08,460 --> 00:03:13,510 actually, kung tumatakbo ang haba ng sapat na apaw at magreresulta sa isang software 68 00:03:13,510 --> 00:03:15,560 isang aktwal na pisikal potensyal error. 69 00:03:15,560 --> 00:03:18,600 >> Din namin ay tumingin sa lumulutang punto imprecision, ang katotohanan 70 00:03:18,600 --> 00:03:22,280 na may lamang ng isang hangganan bilang ng mga piraso, kung ito ay 32 o 64, 71 00:03:22,280 --> 00:03:27,330 maaari ka lamang tukuyin kaya maraming mga numero matapos ang isang decimal point, matapos na kung saan mo 72 00:03:27,330 --> 00:03:29,110 simulan upang makakuha ng imprecise. 73 00:03:29,110 --> 00:03:32,360 Kaya halimbawa, isang-katlo sa mundo dito, sa aming mundo ng tao, 74 00:03:32,360 --> 00:03:35,360 alam namin ay lamang ng isang walang-katapusang bilang ng 3s pagkatapos ng decimal point. 75 00:03:35,360 --> 00:03:38,820 Ngunit isang computer ay hindi maaaring kinakailangan kumakatawan sa isang walang-katapusang bilang ng mga numero 76 00:03:38,820 --> 00:03:42,590 kung ikaw lamang payagan ito ng ilang takda na halaga ng impormasyon. 77 00:03:42,590 --> 00:03:45,900 >> Kaya hindi lamang ay magbigay ng kasangkapan ka namin may mas higit na kapangyarihan sa mga tuntunin 78 00:03:45,900 --> 00:03:49,280 ng kung paano mo maaaring ipahayag ang iyong sarili sa isang keyboard sa mga tuntunin ng programming, 79 00:03:49,280 --> 00:03:51,430 din namin limitado ano maaari mong talagang gawin. 80 00:03:51,430 --> 00:03:55,790 At sa katunayan, mga bug at mga pagkakamali Maaari lumabas dahil sa mga uri ng mga isyu. 81 00:03:55,790 --> 00:03:59,900 At sa katunayan, kabilang sa mga paksa ngayon ay pagpunta sa maging paksa tulad ng pag-debug 82 00:03:59,900 --> 00:04:03,699 at talagang naghahanap sa ilalim ng hood sa kung paano mga bagay ay ipinakilala noong nakaraang linggo 83 00:04:03,699 --> 00:04:05,490 ay talagang ipinatupad nang sa gayon ay mas mahusay na sa iyo 84 00:04:05,490 --> 00:04:10,530 maunawaan ang parehong mga kakayahan ng at ang mga limitasyon ng isang wika tulad ng C. 85 00:04:10,530 --> 00:04:14,770 >> At sa katunayan, kami ay alisan ng balat pabalik ang mga layer sa mga pinakamadaling ng istraktura ng data, 86 00:04:14,770 --> 00:04:17,756 isang bagay na tinatawag na isang array, na kung saan Scratch ang mangyayari sa tawag ng isang "listahan." 87 00:04:17,756 --> 00:04:19,589 Ito ay isang maliit na bit naiiba sa na konteksto. 88 00:04:19,589 --> 00:04:23,340 At pagkatapos ay gagamitin din namin ipakilala ang isa sa mga una sa aming mga problema domain na tukoy sa 89 00:04:23,340 --> 00:04:26,790 sa CS50, sa mundo ng cryptography, ang sining ng scrambling 90 00:04:26,790 --> 00:04:29,650 o sa ciphering impormasyon upang na maaari mong ipadala lihim na mensahe 91 00:04:29,650 --> 00:04:34,520 at decode lihim na mensahe pagitan ng dalawang tao, A at B. 92 00:04:34,520 --> 00:04:37,490 >> Kaya bago kami transition sa bagong sanlibutang iyon, 93 00:04:37,490 --> 00:04:42,059 sabihin subukan upang magbigay ng kasangkapan sa iyo ng ilang pamamaraan na kung saan maaari mong alisin 94 00:04:42,059 --> 00:04:43,850 o bawasan hindi bababa sa ilang ng frustrations 95 00:04:43,850 --> 00:04:46,630 na marahil ikaw ay nakaranas loob ng nakaraang linggo nag-iisa. 96 00:04:46,630 --> 00:04:50,830 Sa katunayan, nangunguna sa ikaw ay such-- ilan sa iyong unang problema sa C. At logro ay, 97 00:04:50,830 --> 00:04:54,010 kung ikaw ay tulad ng sa akin, sa unang pagkakataon subukan mong i-type ang isang programa, 98 00:04:54,010 --> 00:04:57,330 kahit na sa tingin mo logically ang programa ay medyo simple, 99 00:04:57,330 --> 00:05:01,200 maaari mong napakahusay pindutin ang isang pader, at ang tagatala ay hindi pagpunta sa tumulong. 100 00:05:01,200 --> 00:05:03,940 Magsagawa o Clang ay hindi pagpunta upang aktwal na gawin ang iyong pag-bid. 101 00:05:03,940 --> 00:05:05,450 >> At kung bakit maaaring na maging? 102 00:05:05,450 --> 00:05:07,950 Well, sabihin tumagal ng isang pagtingin sa, marahil, ang isang simpleng programa. 103 00:05:07,950 --> 00:05:11,190 Ako pagpunta sa sige at i-save ito sa isang file sadyang tinatawag buggy0.c, 104 00:05:11,190 --> 00:05:13,590 dahil alam ko ito sa flawed in advance. 105 00:05:13,590 --> 00:05:17,400 Ngunit hindi ko maaaring mapagtanto na kung ito ay ang unang o ikalawang o ikatlong programa 106 00:05:17,400 --> 00:05:18,830 na talaga ako sa paggawa ng aking sarili. 107 00:05:18,830 --> 00:05:23,820 Kaya ako pagpunta sa sige at type out, int pangunahing (walang bisa). 108 00:05:23,820 --> 00:05:28,130 At pagkatapos ay sa loob ng aking kulot tirante, isang napaka-pamilyar ( "hello, world-- 109 00:05:28,130 --> 00:05:30,980 backslash, n ") - at isang semi-colon. 110 00:05:30,980 --> 00:05:32,360 >> Ko na nai-save ang file. 111 00:05:32,360 --> 00:05:34,850 Ngayon ako pagpunta sa pumunta down sa aking terminal na window 112 00:05:34,850 --> 00:05:40,340 at i-type make buggy0, dahil, muli, ang pangalan ng file ngayon ay buggy0.c. 113 00:05:40,340 --> 00:05:43,660 Kaya ko type gumawa buggy0, ang Enter. 114 00:05:43,660 --> 00:05:48,200 >> At, oh, sus, isipin ang mula sa huling oras na walang mga mensahe ng error ay isang magandang bagay. 115 00:05:48,200 --> 00:05:49,740 Kaya walang output ay isang magandang bagay. 116 00:05:49,740 --> 00:05:52,920 Ngunit dito mayroon akong malinaw ilang bilang ng mga pagkakamali. 117 00:05:52,920 --> 00:05:56,470 >> Kaya ang unang linya ng output pagkatapos mag-type gumawa buggy0, pagpapabalik, 118 00:05:56,470 --> 00:05:59,540 ay medyo masyadong masalita output ni Clang. 119 00:05:59,540 --> 00:06:02,067 Sa ilalim ng hood, CS50 IDE ay isinaayos 120 00:06:02,067 --> 00:06:04,150 ang paggamit ng isang buong grupo ng mga mga pagpipilian na may compiler na ito 121 00:06:04,150 --> 00:06:05,941 nang sa gayon ay hindi mo na kailangang mag-isip tungkol sa mga ito. 122 00:06:05,941 --> 00:06:08,840 At na ang lahat na unang linya ang ibig sabihin nito ay nagsisimula sa Clang. 123 00:06:08,840 --> 00:06:11,720 >> Nguni't nang mahayag na, ang mga problema simulan upang gawin ang kanilang hitsura. 124 00:06:11,720 --> 00:06:17,390 Buggy0.c on line 3, karakter 5, mayroong isang malaking, pulang error. 125 00:06:17,390 --> 00:06:18,380 Ano yan? 126 00:06:18,380 --> 00:06:23,562 Kataon lamang deklarasyon ng function library printf may uri int (const magpasinda *, 127 00:06:23,562 --> 00:06:26,050 ...) [Werror]. 128 00:06:26,050 --> 00:06:28,379 Ibig kong sabihin, ito masyadong mabilis nagiging sobrang arcane. 129 00:06:28,379 --> 00:06:30,170 At tiyak, sa unang tingin, hindi namin gagawin 130 00:06:30,170 --> 00:06:32,380 inaasahan mong maunawaan ang kabuuan ng mensaheng iyon. 131 00:06:32,380 --> 00:06:34,213 At kaya isa sa mga aralin para sa araw na ito ay pagpunta 132 00:06:34,213 --> 00:06:36,919 upang maging upang subukan sa paunawa pattern, o mga katulad na bagay na ito, 133 00:06:36,919 --> 00:06:38,960 sa mga error na maaaring mayroon ka nakatagpo sa nakaraan. 134 00:06:38,960 --> 00:06:41,335 Kaya sabihin manunudyo bukod lamang mga salitang iyon na tumingin pamilyar. 135 00:06:41,335 --> 00:06:44,290 Ang malaki, red error ay malinaw sinasagisag ng isang bagay sa pagiging mali. 136 00:06:44,290 --> 00:06:47,940 >> kataon lamang deklarasyon library function printf. 137 00:06:47,940 --> 00:06:51,680 Kaya kahit na hindi ko lubos na maunawaan kung ano ang kataon lamang deklarasyon ng function library 138 00:06:51,680 --> 00:06:54,900 ibig sabihin nito, ang problema ay tiyak na ay may kinalaman sa printf anumang paraan. 139 00:06:54,900 --> 00:06:59,130 At ang pinagmulan ng na isyu Mayroon itong gawin sa deklarasyon ito. 140 00:06:59,130 --> 00:07:02,440 >> Deklarasyon ng function na ay mentioning ito sa unang pagkakataon. 141 00:07:02,440 --> 00:07:06,210 At ginamit namin ang mga terminolohiya noong nakaraang linggo ng deklarasyon prototype ng isang function, ang 142 00:07:06,210 --> 00:07:11,860 alinman sa isang linya sa itaas ng iyong sariling file o sa isang tinatawag na file header. 143 00:07:11,860 --> 00:07:15,300 At sa kung ano ang file ay sinasabi namin noong nakaraang linggo na printf ay quote, 144 00:07:15,300 --> 00:07:17,080 magpanipi, ipinahayag? 145 00:07:17,080 --> 00:07:20,950 Sa anong file ay ang kanyang prototype? 146 00:07:20,950 --> 00:07:24,640 >> Kaya kung isipin ang mo, ang tunay unang bagay na ako type, halos bawat programa noong time-- 147 00:07:24,640 --> 00:07:30,790 at sinasadyang isang sandali ang nakalipas ay nagsimula pag-type myself-- ay ang isang ito here-- 148 00:07:30,790 --> 00:07:38,630 hash-- # isama 00:07:41,860 kung ako ngayong i-save ang file na ito, pupuntahan ko sige at i-clear ang aking screen, 150 00:07:41,860 --> 00:07:44,740 na maaari mong gawin sa pamamagitan ng pagtype I-clear, o maaari mong pindutin nang matagal ang Control L, 151 00:07:44,740 --> 00:07:47,680 lamang upang i-clear ang iyong terminal window lamang upang puksain ang ilan kalat. 152 00:07:47,680 --> 00:07:51,370 >> Ako pagpunta sa sige at re-type make buggy0, ang Enter. 153 00:07:51,370 --> 00:07:53,790 At voila, ako pa rin na long utos mula Clang, 154 00:07:53,790 --> 00:07:55,470 ngunit walang mensahe ng error oras na ito. 155 00:07:55,470 --> 00:07:58,800 At sa katunayan, kung gagawin ko ./buggy0, tulad ng huling oras, 156 00:07:58,800 --> 00:08:01,860 kung saan tuldok ang ibig sabihin nito direktoryo, slash lang ibig sabihin nito, 157 00:08:01,860 --> 00:08:05,040 dito ay ang pangalan ng programa at na ang pangalan ng programa ay buggy0, 158 00:08:05,040 --> 00:08:07,340 Ipasok, "hello, world." 159 00:08:07,340 --> 00:08:09,440 >> Ngayon, kung paano na maaaring mayroon ka gleaned solusyon na ito 160 00:08:09,440 --> 00:08:12,017 nang hindi kinakailangang Kinikilala ng maraming mga salita 161 00:08:12,017 --> 00:08:14,350 tulad ng ginawa ko, tiyak, pagkakaroon tapos na ito para sa maraming taon? 162 00:08:14,350 --> 00:08:18,720 Well, nauunawaan ng bawat sa mga unang problema set, ipakilala namin sa inyo na isang command 163 00:08:18,720 --> 00:08:21,175 na ang sariling staff CS50 sinulat tinatawag help50. 164 00:08:21,175 --> 00:08:24,300 At sa katunayan, C ay detalye para ang problema itakda bilang sa kung paano gamitin ito. 165 00:08:24,300 --> 00:08:27,210 >> Ngunit help50 ay mahalagang isang programa na CS50 kawani 166 00:08:27,210 --> 00:08:30,850 wrote na ay nagbibigay-daan sa iyo upang patakbuhin isang utos o magpatakbo ng isang programa, 167 00:08:30,850 --> 00:08:36,169 at kung hindi mo maintindihan nito output, upang pumasa ang kanyang output sa help50, 168 00:08:36,169 --> 00:08:38,890 at sa puntong ang software na ang mga kawani ng kurso ay nagsulat 169 00:08:38,890 --> 00:08:42,429 Titingnan output ng iyong programa sa bawat linya nito, karakter sa pamamagitan ng karakter. 170 00:08:42,429 --> 00:08:46,000 At kung namin, ang staff, kilalanin ang error na mensahe na iyong nararanasan, 171 00:08:46,000 --> 00:08:50,580 kami ay subukan upang mungkahiin sa iyo ng ilang retorika katanungan, na may ilang mga payo, 172 00:08:50,580 --> 00:08:54,890 marami tulad ng isang TF o isang CA o ang aking sarili Gusto ko nang personal sa oras ng opisina. 173 00:08:54,890 --> 00:08:58,320 >> Kaya tumingin sa help50 kung hindi mo gusto kinakailangang makilala ang isang problema. 174 00:08:58,320 --> 00:09:00,790 Ngunit huwag umaasa sa mga ito masyadong maraming bilang isang saklay. 175 00:09:00,790 --> 00:09:03,990 Ay tiyak na subukan upang maunawaan ang kanyang output at pagkatapos ay matuto mula dito 176 00:09:03,990 --> 00:09:07,571 nang sa gayon ay isang beses lamang o dalawang beses gagawin mo kailanman tumakbo help50 para sa isang partikular error 177 00:09:07,571 --> 00:09:08,070 message. 178 00:09:08,070 --> 00:09:10,660 Pagkatapos nito, dapat mong mas mahusay na kagamitan sa iyong sarili 179 00:09:10,660 --> 00:09:13,180 para malaman kung ano ito tunay ay. 180 00:09:13,180 --> 00:09:14,350 >> Tayo'y gawin ang isa sa iba pang dito. 181 00:09:14,350 --> 00:09:20,410 Hayaan akong sige, at sa ibang file kami ay tumawag ito buggy1.c. 182 00:09:20,410 --> 00:09:23,110 At sa file na ito ako pagpunta sa deliberately-- 183 00:09:23,110 --> 00:09:26,330 ngunit magpanggap na hindi ko ginagawa maunawaan kung ano ang pagkakamali na ginawa ko. 184 00:09:26,330 --> 00:09:31,420 >> Ako pagpunta sa sige at gawin this-- # isama, dahil na ako 185 00:09:31,420 --> 00:09:33,660 natutunan ang aking aralin mula sa isang sandali ang nakalipas. 186 00:09:33,660 --> 00:09:36,220 Int pangunahing (walang bisa), tulad ng dati. 187 00:09:36,220 --> 00:09:40,880 At pagkatapos ay sa dito ako pagpunta gawin string s - get_string. 188 00:09:40,880 --> 00:09:43,770 At isipin ang mula sa huling beses na paraan na ito, hey, computer, 189 00:09:43,770 --> 00:09:48,280 bigyan ako ng isang variable, tumawag ito s, at gawin ang mga uri ng na variable sa isang string 190 00:09:48,280 --> 00:09:50,150 kaya ang maaari kong mag-imbak ng isa o higit pang mga salita sa loob nito. 191 00:09:50,150 --> 00:09:52,191 >> At pagkatapos ay sa kanang-kamay bahagi ng katumbas sign 192 00:09:52,191 --> 00:09:54,980 ay get_string, na isang function sa CS50 Library 193 00:09:54,980 --> 00:09:55,980 na ginagawa eksakto na. 194 00:09:55,980 --> 00:09:59,740 Ito ay makakakuha ng isang function at pagkatapos ay kamay ito mula sa karapatan sa kaliwa. 195 00:09:59,740 --> 00:10:02,670 Kaya ito katumbas sign ay hindi nangangahulugan "Ay katumbas ng" bilang maaari naming tingin sa math. 196 00:10:02,670 --> 00:10:04,750 Ito ay nangangahulugan na assignment mula sa karapatan sa kaliwa. 197 00:10:04,750 --> 00:10:09,640 Kaya ito ay nangangahulugan, gawin ang mga string mula sa user at mag-imbak ito sa loob ng s. 198 00:10:09,640 --> 00:10:10,460 >> Ngayon sabihin gamitin ito. 199 00:10:10,460 --> 00:10:13,820 Hayaan akong magpatuloy ngayon at bilang isang pangalawang line, hayaan mo akong magpatuloy at sabihin "hello" - 200 00:10:13,820 --> 00:10:19,330 hindi "mundo," ngunit "hello,% s-- na kung saan ay ang aming placeholder, kuwit s, 201 00:10:19,330 --> 00:10:22,030 na kung saan ay ang aming variable, at pagkatapos ay isang semi-colon. 202 00:10:22,030 --> 00:10:26,070 Kaya kung ako ay hindi magtaas ng masyadong maraming dito, ito ay ganito ang hitsura tamang code. 203 00:10:26,070 --> 00:10:28,090 >> At ang aking instincts ngayon ay upang ipunin ito. 204 00:10:28,090 --> 00:10:30,400 Ang file ay tinatawag buggy1.c. 205 00:10:30,400 --> 00:10:33,770 Kaya ako pagpunta sa gawin ang make buggy1, ang Enter. 206 00:10:33,770 --> 00:10:36,377 At darn-ito, kung diyan ay hindi kahit higit pang mga error kaysa sa bago. 207 00:10:36,377 --> 00:10:38,210 Ibig kong sabihin, mayroon pa mga mensahe ng error ay ito 208 00:10:38,210 --> 00:10:40,400 mukhang kaysa sa aktwal na mga linya sa programang ito. 209 00:10:40,400 --> 00:10:42,730 >> Ngunit ang takeaway dito ay, kahit na ikaw ay bumagsak 210 00:10:42,730 --> 00:10:45,040 na may dalawa o tatlo o apat na higit pang mga mensahe ng error, 211 00:10:45,040 --> 00:10:48,340 focus ay palaging sa napaka una sa mga mensahe. 212 00:10:48,340 --> 00:10:52,220 Sa pagtingin sa mga top-pinaka-isa, scroll back up bilang kailangan maging. 213 00:10:52,220 --> 00:10:53,930 Kaya dito ako nag-type make buggy1. 214 00:10:53,930 --> 00:10:55,700 Narito na Clang output tulad ng inaasahan. 215 00:10:55,700 --> 00:10:57,290 >> At narito ang unang red error. 216 00:10:57,290 --> 00:11:02,370 Ang paggamit ng hindi nagbigay-alam identifier string, ang ibig sabihin ko karaniwang gawin? 217 00:11:02,370 --> 00:11:04,260 Kaya pamantayan sa ay talagang isang bagay sino pa ang paririto. 218 00:11:04,260 --> 00:11:06,240 Ito ay tumutukoy sa ng gumagamit keyboard, mahalagang. 219 00:11:06,240 --> 00:11:08,080 >> Ngunit hindi iyon ang ibig sabihin ko. 220 00:11:08,080 --> 00:11:11,770 sinadya ko string, at sinadya ko get_string. 221 00:11:11,770 --> 00:11:16,200 Kaya kung ano ay ito na ako nakalimutan na gawin oras na ito? 222 00:11:16,200 --> 00:11:20,230 Ano ang kulang oras na ito? 223 00:11:20,230 --> 00:11:23,600 Mayroon akong aking #include, kaya wala akong access sa printf. 224 00:11:23,600 --> 00:11:26,090 >> Ngunit ano ang gagawin ko walang access sa isa lamang? 225 00:11:26,090 --> 00:11:29,420 Well, tulad ng huling oras, Kailangan ko bang sabihin sa compiler 226 00:11:29,420 --> 00:11:31,691 Kumalatong kung ano ang mga function ay. 227 00:11:31,691 --> 00:11:33,940 Get_string ay hindi dumating sa C. At sa partikular, ito 228 00:11:33,940 --> 00:11:38,160 ay hindi dumating sa header file,. 229 00:11:38,160 --> 00:11:40,770 Ito sa halip ay dumating sa isang bagay na ang mga kawani sinulat ni, 230 00:11:40,770 --> 00:11:44,176 kung saan ay isang iba't ibang mga file pangalanan ngunit aptly pinangalanan. 231 00:11:44,176 --> 00:11:46,990 232 00:11:46,990 --> 00:11:50,861 >> Kaya sa pamamagitan lamang ng pagdaragdag na ang isang linya ng code-- pagpapabalik mula sa huling beses 233 00:11:50,861 --> 00:11:53,610 na kapag Clang ay tumatakbo, ito ay pagpunta upang tumingin sa aking code sa itaas sa ibaba, 234 00:11:53,610 --> 00:11:54,193 kaliwa papuntang kanan. 235 00:11:54,193 --> 00:11:57,200 Ito ay pagpunta sa mapansin, oh, gusto mo. 236 00:11:57,200 --> 00:11:59,900 Payaunin mo ako at makita na, kung saan man ito ay sa server, 237 00:11:59,900 --> 00:12:03,090 kopyahin at i-paste ito, mahalagang, sa itaas ng iyong sariling mga file 238 00:12:03,090 --> 00:12:06,820 kaya na sa puntong ito sa kuwento, line 1, ang ilang bahagi ng programa 239 00:12:06,820 --> 00:12:11,651 maaari, sa katunayan, gamitin ang alinman sa mga pag-andar sa ganyang bagay, kasama ng mga ito get_string. 240 00:12:11,651 --> 00:12:13,650 Kaya ako pagpunta sa huwag pansinin ang natitirang bahagi ng mga error, 241 00:12:13,650 --> 00:12:17,190 dahil ako, sa katunayan, maghinala na lamang ang unang isa talagang mattered. 242 00:12:17,190 --> 00:12:20,780 At ako pagpunta sa sige at gawin uli, pagkatapos i-save ang aking mga file gumawa buggy1. 243 00:12:20,780 --> 00:12:22,580 At voila, ito ay gumagana. 244 00:12:22,580 --> 00:12:29,200 At kung gagawin ko ./buggy1 at i-type sa, Halimbawa, Zamyla, ako ngayon ay makakakuha ng hello, 245 00:12:29,200 --> 00:12:32,000 Zamyla, sa halip ng kumusta, mundo. 246 00:12:32,000 --> 00:12:32,550 >> Lahat tama. 247 00:12:32,550 --> 00:12:35,890 Kaya ang takeaways dito pagkatapos ay sa, isa, subukan upang mamulot hanggang kaya mo 248 00:12:35,890 --> 00:12:39,140 mula sa mga mensahe ng error nag-iisa, naghahanap ang ilan sa mga makikilala salita. 249 00:12:39,140 --> 00:12:43,070 Maliban sa na, gamitin help50 per ang problema set pagtutukoy. 250 00:12:43,070 --> 00:12:46,500 Ngunit paghahadlang na, masyadong, laging tumingin sa tuktok error lamang, hindi bababa sa 251 00:12:46,500 --> 00:12:50,051 una, upang makita kung ano ang impormasyon maaaring ito ang tunay na nagbubunga. 252 00:12:50,051 --> 00:12:52,300 Ngunit ito ay lumiliko out doon ni kahit na higit pa andar na binuo 253 00:12:52,300 --> 00:12:55,030 sa CS50 Library upang matulungan kayong maaga sa sa semestre 254 00:12:55,030 --> 00:12:57,580 at sa maagang bahagi sa programming malaman kung ano ang pagpunta mali. 255 00:12:57,580 --> 00:12:59,840 Kaya sabihin gawin ang isa pang halimbawa dito. 256 00:12:59,840 --> 00:13:04,350 Ako pagpunta sa tumawag ito buggy2, kung saan, muli, ay pagpunta sa ay flawed out 257 00:13:04,350 --> 00:13:05,650 ng pintuang-bayan, sa pamamagitan ng disenyo. 258 00:13:05,650 --> 00:13:09,980 >> At ako pagpunta sa sige at gawin # include. 259 00:13:09,980 --> 00:13:12,580 At pagkatapos ay ako pagpunta sa gawin int pangunahing (walang bisa). 260 00:13:12,580 --> 00:13:14,840 At pagkatapos ay ako pagpunta sa gawin ang isang para sa loop. 261 00:13:14,840 --> 00:13:16,690 Para sa (int i _ 0. 262 00:13:16,690 --> 00:13:18,750 i ay mas mababa sa o patas sa 10. 263 00:13:18,750 --> 00:13:24,260 i ++, at pagkatapos ay sa kulot tirante, pupuntahan ko upang i-print out lamang ng isang hashtag simbolo dito 264 00:13:24,260 --> 00:13:25,920 at ng isang bagong linya ng character. 265 00:13:25,920 --> 00:13:29,220 >> Kaya ang aking mga layunin sa mga ito programa ay lubos na lamang 266 00:13:29,220 --> 00:13:33,150 upang umulit 10 beses at sa bawat pag-ulit 267 00:13:33,150 --> 00:13:35,260 ng na loop sa bawat oras sa pamamagitan ng mga cycle, 268 00:13:35,260 --> 00:13:37,660 print ng hashtag, isang hashtag, isang hashtag. 269 00:13:37,660 --> 00:13:40,480 Isa sa bawat linya dahil ako magkaroon ng bagong linya doon. 270 00:13:40,480 --> 00:13:42,787 At isipin na ang para sa loop, per huling week-- 271 00:13:42,787 --> 00:13:44,620 at makakakuha ka ng higit pang pamilyar sa syntax 272 00:13:44,620 --> 00:13:47,170 pamamagitan ng paggamit nito sa pagsasanay bago long-- ito ay nagbibigay sa akin 273 00:13:47,170 --> 00:13:49,740 isang variable na tinatawag i at nagtatakda ito sa 0. 274 00:13:49,740 --> 00:13:52,650 >> Ito palugit i on bawat pag-ulit sa pamamagitan ng 1. 275 00:13:52,650 --> 00:13:54,940 Kaya ako papunta sa 1 hanggang 2 sa 3. 276 00:13:54,940 --> 00:13:57,690 At pagkatapos ay ang kundisyong ito sa gitna sa pagitan ng semi-colons 277 00:13:57,690 --> 00:14:03,010 makakakuha naka-check sa bawat pag-ulit upang gumawa sigurado na kami ay pa rin sa loob ng range. 278 00:14:03,010 --> 00:14:06,830 Kaya gusto kong umulit 10 beses, kaya ko may uri ng napaka intuitively lamang 279 00:14:06,830 --> 00:14:09,070 ilagay ang 10 bilang aking itaas na nakatali doon. 280 00:14:09,070 --> 00:14:14,310 >> At gayon pa man, kapag tumakbo ko ito, pagkatapos ipon ito na may make buggy2-- 281 00:14:14,310 --> 00:14:15,440 at ito ay sumulat ng libro OK. 282 00:14:15,440 --> 00:14:17,980 Kaya hindi ko magkaroon ng isang syntax error oras na ito. 283 00:14:17,980 --> 00:14:20,940 Hayaan akong magpatuloy ngayon at patakbuhin buggy2, ang Enter. 284 00:14:20,940 --> 00:14:22,620 At ngayon mag-scroll up. 285 00:14:22,620 --> 00:14:24,890 At hayaan mo akong dagdagan ang laki ng window. 286 00:14:24,890 --> 00:14:33,720 >> Mukhang ako na magkaroon ng 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11. 287 00:14:33,720 --> 00:14:38,891 Kaya mayroong 11 hashtags, kahit na Ako malinaw ilagay ang 10 sa loob ng loop na ito. 288 00:14:38,891 --> 00:14:42,140 Ngayon, ang ilan sa inyo ay maaaring makita kaagad kung ano ang error ay dahil, sa katunayan, ito 289 00:14:42,140 --> 00:14:43,720 ay hindi isang tunay matigas error na gumawa. 290 00:14:43,720 --> 00:14:46,070 Ngunit ito ay napaka-karaniwang ginawa napaka maaga. 291 00:14:46,070 --> 00:14:49,820 >> Ano ang gusto kong ituro, bagaman, ay, paano maaari ko tayahin ito lumitaw? 292 00:14:49,820 --> 00:14:52,300 Well, ito ay lumiliko out na ang CS50 Library pagdating 293 00:14:52,300 --> 00:14:55,380 na may hindi lamang get_string at get_int at get_float at iba pang mga pag-andar. 294 00:14:55,380 --> 00:14:59,980 Mayroon din itong isang espesyal na function tinatawag eprintf, o, error printf. 295 00:14:59,980 --> 00:15:03,270 At ito ay umiiral lamang upang gumawa ng ito ng isang maliit na bit mas madali para sa iyo 296 00:15:03,270 --> 00:15:06,310 kapag debugging ang iyong code sa makatarungan i-print ang isang mensahe ng error sa screen 297 00:15:06,310 --> 00:15:07,850 at alam kung saan ito nanggaling. 298 00:15:07,850 --> 00:15:11,000 >> Kaya halimbawa, isang bagay maaari ko gawin dito sa function na ito ay this-- 299 00:15:11,000 --> 00:15:20,230 eprintf, at pagkatapos ay ako pagpunta sa sige at sabihin i ay% ngayong i, backslash, n. 300 00:15:20,230 --> 00:15:22,330 At ako pagpunta sa plug sa ang halaga ng i. 301 00:15:22,330 --> 00:15:25,400 At hanggang tuktok, dahil ito ay nasa CS50 Library, 302 00:15:25,400 --> 00:15:27,580 Ako pagpunta sa sige at isama 303 00:15:27,580 --> 00:15:29,169 kaya wala akong access sa function na ito. 304 00:15:29,169 --> 00:15:31,460 Ngunit sabihin isaalang-alang kung ano ang linya 9 ay dapat na maging paggawa. 305 00:15:31,460 --> 00:15:32,670 Ako pagpunta sa tanggalin ang huli. 306 00:15:32,670 --> 00:15:34,670 Ito ay walang kinalaman sa aking overarching layunin. 307 00:15:34,670 --> 00:15:39,090 Ngunit eprintf, error printf, ay lamang sinadya magbigay sa akin ang ilang diagnostic impormasyon. 308 00:15:39,090 --> 00:15:42,460 Kapag tumakbo ako ang aking mga programa, gusto kong makita ito sa screen pansamantalang 309 00:15:42,460 --> 00:15:44,550 pati na rin lamang upang maunawaan ano ang nangyayari. 310 00:15:44,550 --> 00:15:47,330 >> At, sa katunayan, sa bawat pag-ulit dito ng linya 9 311 00:15:47,330 --> 00:15:49,260 Gusto kong makita, kung ano ay ang halaga ng i? 312 00:15:49,260 --> 00:15:50,290 Ano ang halaga ng i? 313 00:15:50,290 --> 00:15:51,280 Ano ang halaga ng i? 314 00:15:51,280 --> 00:15:55,650 At, sana, ako dapat lamang na mensahe, din, 10 beses. 315 00:15:55,650 --> 00:15:57,780 >> Kaya hayaan mo akong magpatuloy at recompile ang aking programa, 316 00:15:57,780 --> 00:15:59,905 bilang kailangan kong gawin anumang oras gumawa ako ng isang pagbabago. ./buggy2. 317 00:15:59,905 --> 00:16:02,680 318 00:16:02,680 --> 00:16:03,640 At now-- OK. 319 00:16:03,640 --> 00:16:04,820 May isang pulutong ng mas maraming nangyayari. 320 00:16:04,820 --> 00:16:07,610 Kaya hayaan mo akong mag-scroll pataas sa isang mas mas malaking window. 321 00:16:07,610 --> 00:16:10,190 >> At makikita mo na ang bawat isa ang hashtags ay pa rin sa pag-print. 322 00:16:10,190 --> 00:16:15,270 Ngunit sa pagitan ng bawat isa sa kanila ay ngayon na ito diagnostic output format tulad ng sumusunod. 323 00:16:15,270 --> 00:16:17,960 Ang pangalan ng aking programa dito ay buggy2. 324 00:16:17,960 --> 00:16:20,432 Ang pangalan ng file ay buggy2.c. 325 00:16:20,432 --> 00:16:24,080 Ang linya ng numero mula sa kung saan ito ay naka-print ay linya 9. 326 00:16:24,080 --> 00:16:27,500 At pagkatapos ay sa kanan ng iyon ay ang error na mensahe na ako umaasa. 327 00:16:27,500 --> 00:16:30,701 >> At kung ano ang magaling tungkol dito ay na ngayon ay hindi ko na kailangang palaging bilangin 328 00:16:30,701 --> 00:16:32,200 sa aking ulo kung ano ang aking mga programa ay paggawa. 329 00:16:32,200 --> 00:16:34,240 Maaari ko bang makita kung papaanong sa mga unang pag-ulit i ay 0, 330 00:16:34,240 --> 00:16:39,420 pagkatapos ay 1, pagkatapos 2, pagkatapos ay 3, pagkatapos ay 4, pagkatapos ay 5, pagkatapos ay 6, at pagkatapos ay 7, pagkatapos ay 8, at pagkatapos ay 9 at pagkatapos, 331 00:16:39,420 --> 00:16:40,980 10. 332 00:16:40,980 --> 00:16:42,050 Kaya maghintay ng isang minuto. 333 00:16:42,050 --> 00:16:43,740 Anong nangyayari dito? 334 00:16:43,740 --> 00:16:48,190 Mukhang ako pa rin na pagbibilang tulad ng nilayon ng hanggang sa 10. 335 00:16:48,190 --> 00:16:50,550 >> Ngunit saan ako magsisimula? 336 00:16:50,550 --> 00:16:53,240 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 10. 337 00:16:53,240 --> 00:16:58,040 Kaya 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10-- ika-11 daliri 338 00:16:58,040 --> 00:16:59,990 ay nagpapakilala ng ang problema. 339 00:16:59,990 --> 00:17:02,850 Mukhang ako na binibilang hindi tama sa aking loop. 340 00:17:02,850 --> 00:17:06,599 Sa halip na pumunta 10 iterations, Ako simula sa 0, 341 00:17:06,599 --> 00:17:09,550 Ako nagtatapos sa at sa pamamagitan ng 10. 342 00:17:09,550 --> 00:17:12,030 Ngunit dahil, tulad ng isang computer, Ako simula ng pagbilang sa 0, 343 00:17:12,030 --> 00:17:15,250 ang dapat kong maging pagbibilang up sa, ngunit hindi sa pamamagitan ng, 10. 344 00:17:15,250 --> 00:17:18,510 >> At sa gayon ang pag-aayos, Ako sa wakas natanto dito, ay isa sa dalawang bagay. 345 00:17:18,510 --> 00:17:22,430 kaya kong napaka-simple sabihin bilang ng hanggang sa mas mababa sa 10. 346 00:17:22,430 --> 00:17:27,260 Kaya 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, na kung saan ay, sa katunayan, tama, 347 00:17:27,260 --> 00:17:28,900 kahit na ito tunog ng kaunti mali. 348 00:17:28,900 --> 00:17:35,070 O maaari kong gawin mas mababa o katumbas hanggang 9, kaya hangga't sisimulan ko sa 0. 349 00:17:35,070 --> 00:17:40,056 O kung talagang hindi gusto na, ikaw maaaring bilangin up sa pamamagitan ng 10 ngunit magsimula sa 1. 350 00:17:40,056 --> 00:17:41,680 Ngunit muli, ito lamang ay hindi na pangkaraniwan. 351 00:17:41,680 --> 00:17:43,977 Sa programming-- albeit hindi kaya magkano sa Scratch-- 352 00:17:43,977 --> 00:17:45,810 ngunit sa programming in C at iba pang mga wika, 353 00:17:45,810 --> 00:17:47,670 tulad ng JavaScript at Python at iba pa, ito ay 354 00:17:47,670 --> 00:17:49,880 lamang napaka-pangkaraniwan para aming mga talakayan ng binary 355 00:17:49,880 --> 00:17:53,450 sa makatarungan simulan ang pagbibilang sa pinakamababang bilang maaari mong, na kung saan ay 0. 356 00:17:53,450 --> 00:17:53,950 Lahat tama. 357 00:17:53,950 --> 00:17:55,160 Kaya na ang dahilan eprintf. 358 00:17:55,160 --> 00:17:58,600 At muli, ngayon na ko na may korte out ang aking problema, at ako pagpunta sa bumalik sa 0 359 00:17:58,600 --> 00:18:01,470 sa pamamagitan ng mas mababa sa 10, ako pagpunta upang pumunta sa at tanggalin eprintf. 360 00:18:01,470 --> 00:18:04,580 >> Hindi ito dapat maging doon kapag ako barko ang aking code o isusumite ang aking code 361 00:18:04,580 --> 00:18:05,800 o ipakita ito sa ibang tao. 362 00:18:05,800 --> 00:18:07,980 Ito ay talagang lamang nilalayong na gagamitin pansamantala. 363 00:18:07,980 --> 00:18:11,650 Datapuwa't sinusulatan ko naayos na ito partikular na problema pati na rin. 364 00:18:11,650 --> 00:18:16,780 >> Well, sabihin gawin ang isa pang halimbawa dito na pupuntahan ko upang gumawa ng tulad ng sumusunod. 365 00:18:16,780 --> 00:18:22,850 Ako pagpunta sa sige at # isama. $ 50 366 00:18:22,850 --> 00:18:25,580 At ako pagpunta sa sige at # include. 367 00:18:25,580 --> 00:18:29,030 >> At ako pagpunta upang i-save ang file na ito bilang buggy3.c. 368 00:18:29,030 --> 00:18:31,740 At ako pagpunta sa sige at ipinapahayag int pangunahing (walang bisa). 369 00:18:31,740 --> 00:18:34,186 At pagkatapos ay sa loob ng doon Ako pagpunta sa gawin int i _ - 370 00:18:34,186 --> 00:18:36,435 Gusto kong ipatupad ang isang programa may get_negative_int. 371 00:18:36,435 --> 00:18:39,146 372 00:18:39,146 --> 00:18:40,770 Ito ay hindi isang function na ay umiiral pa. 373 00:18:40,770 --> 00:18:42,870 Kaya kami ay pagpunta upang ipatupad ito sa loob lamang ng ilang sandali. 374 00:18:42,870 --> 00:18:45,541 Ngunit kami ay pagpunta upang makita kung bakit ito ay maraming surot sa unang pass. 375 00:18:45,541 --> 00:18:47,290 At sa sandaling nakuha ko isang int mula sa user, 376 00:18:47,290 --> 00:18:53,365 Lamang ako ng pagpunta upang i-print% i ay isang negatibong integer, backslash, n, kuwit, i. 377 00:18:53,365 --> 00:18:55,240 Sa ibang salita, ang lahat ko gusto ang program na ito upang gawin 378 00:18:55,240 --> 00:18:58,000 ay makakuha ng isang negatibong int mula gumagamit at pagkatapos i-print out 379 00:18:58,000 --> 00:18:59,980 na tulad at tulad ay isang negatibong int. 380 00:18:59,980 --> 00:19:02,080 >> Ngayon ay kailangan ko upang ipatupad ito function. 381 00:19:02,080 --> 00:19:05,740 Kaya sa ibang pagkakataon sa aking file, Pupunta ako upang pumunta magpatuloy at magpahayag ng isang function na tinatawag na 382 00:19:05,740 --> 00:19:10,670 get_negative_int (walang laman) - at kami bumalik sa kung ano ang ibig muli na linya 383 00:19:10,670 --> 00:19:18,790 sa isang moment-- int n; do-- do ang following-- printf n ay :. 384 00:19:18,790 --> 00:19:26,210 At pagkatapos ay ako pagpunta sa gawin n - get_int, at gawin ito habang n ay mas malaki kaysa sa 0. 385 00:19:26,210 --> 00:19:28,310 At pagkatapos ay bumalik n ;. 386 00:19:28,310 --> 00:19:31,730 >> Kaya mayroong maraming nagaganap sa ito ngunit wala sa kung saan kami ay hindi 387 00:19:31,730 --> 00:19:33,710 tumingin sa nakaraang linggo, hindi bababa sa madaling sabi. 388 00:19:33,710 --> 00:19:36,980 Kaya on line 10 dito na ipinahayag ko ang isang function na tinatawag na get_negative_int, 389 00:19:36,980 --> 00:19:39,620 at inilagay ko (walang laman), sa panaklong, ang dahilan sa pagiging na ito 390 00:19:39,620 --> 00:19:40,950 ay hindi kumuha ng isang input. 391 00:19:40,950 --> 00:19:42,910 hindi ako makapasa kahit ano sa ito function. 392 00:19:42,910 --> 00:19:44,690 Tingin lang ako sa pagkuha ng isang bagay pabalik mula dito. 393 00:19:44,690 --> 00:19:47,270 >> At kung ano ako umaasa na makabalik ay isang integer. 394 00:19:47,270 --> 00:19:50,040 Walang uri ng data sa C tinatawag negative_int. 395 00:19:50,040 --> 00:19:52,880 Lamang ito int, kaya ito ay pagpunta upang maging sa amin upang matiyak na 396 00:19:52,880 --> 00:19:55,340 na ang halaga na talagang bumalik ay hindi lamang isang int 397 00:19:55,340 --> 00:19:56,380 ngunit ding negatibo. 398 00:19:56,380 --> 00:20:02,150 >> On line 12 ako deklarasyon ng variable tinatawag n at ginagawa itong mga ganitong uri ng int. 399 00:20:02,150 --> 00:20:07,500 At pagkatapos ay sa linya 13 sa pamamagitan ng 18 ako paggawa ng isang bagay habang ang isang bagay ay totoo. 400 00:20:07,500 --> 00:20:11,040 Pupunta ako ng maaga at pag-print n ay, colon, at pagkatapos ng isang space, 401 00:20:11,040 --> 00:20:12,800 tulad ng isang prompt para sa user. 402 00:20:12,800 --> 00:20:16,410 >> pagkatapos ay ako pagtawag get_int at pag-iimbak nito tinaguriang halaga return 403 00:20:16,410 --> 00:20:18,130 sa na variable n. 404 00:20:18,130 --> 00:20:22,600 Ngunit ako pagpunta sa panatilihin ang paggawa ito habang n ay mas malaki kaysa sa 0. 405 00:20:22,600 --> 00:20:27,960 Sa ibang salita, kung ang gumagamit ay nagbibigay sa akin ng isang int at numero na ay mas malaki kaysa sa 0, 406 00:20:27,960 --> 00:20:31,180 ergo, positibo, ako pagpunta sa lamang panatilihin reprompting user, 407 00:20:31,180 --> 00:20:37,160 panatilihin reprompting, sa pamamagitan ng pagpilit sa kanila na makipagtulungan at bigyan ako ng isang negatibong int. 408 00:20:37,160 --> 00:20:41,640 >> At sa sandaling n ay talagang negative-- ipagpalagay ang user ay sa wakas uri -50, 409 00:20:41,640 --> 00:20:46,710 at pagkatapos na ito habang loop ay hindi na totoo dahil -50 ay hindi mas malaki kaysa sa 0. 410 00:20:46,710 --> 00:20:51,140 Kaya namin magsimula ng na loop logically at bumalik n. 411 00:20:51,140 --> 00:20:53,520 >> Ngunit mayroong isa pang bagay na kailangan kong gawin. 412 00:20:53,520 --> 00:20:56,190 At maaari ko lang gawin ito sa pamamagitan ng pagkopya at pag-paste 413 00:20:56,190 --> 00:20:58,540 isang linya ng code sa tuktok ng file. 414 00:20:58,540 --> 00:21:01,630 Kailangan ko upang magturo Clang, o pangako na kumalatong, 415 00:21:01,630 --> 00:21:04,630 explicitly na ibig ko, sa katunayan, pumunta at ipatupad 416 00:21:04,630 --> 00:21:06,020 ang function na ito get_negative_int. 417 00:21:06,020 --> 00:21:07,674 Ito ay maaari lamang maging mas mababa sa file. 418 00:21:07,674 --> 00:21:09,840 Muli, tandaan na Clang bumabasa bagay sa itaas sa ibaba, 419 00:21:09,840 --> 00:21:12,330 kaliwa papunta sa kanan, kaya hindi ka maaaring tumawag sa isang function kung Clang 420 00:21:12,330 --> 00:21:15,330 ay hindi alam kung ito ay pagpunta sa umiiral. 421 00:21:15,330 --> 00:21:18,430 >> Ngayon, sa kasamaang-palad, ang program na ito, tulad ng ilan sa iyo ay maaaring napansin, 422 00:21:18,430 --> 00:21:19,590 ay isa nang maraming surot. 423 00:21:19,590 --> 00:21:21,400 Hayaan akong sige at gumawa buggy3. 424 00:21:21,400 --> 00:21:26,904 Ito compiles, kaya ang aking mga problema ngayon ay hindi isang syntax error, tulad ng isang error tekstuwal, 425 00:21:26,904 --> 00:21:29,570 tunay na ito ay pagpunta sa maging isang lohikal na error na ko na sadyang 426 00:21:29,570 --> 00:21:32,450 ginawa bilang isang pagkakataon upang magbasa-basa sa kung ano ang nangyayari sa. 427 00:21:32,450 --> 00:21:35,540 >> Ako pagpunta sa sige ngayon at patakbuhin buggy3. 428 00:21:35,540 --> 00:21:37,490 At ako pagpunta sa pumunta maaga at hindi makikipagtulungan. 429 00:21:37,490 --> 00:21:39,494 Pupunta ako upang bigyan ito ng number 1. 430 00:21:39,494 --> 00:21:41,410 Hindi na ito ay gusto ito, kaya ito ay pagdikta sa akin muli. 431 00:21:41,410 --> 00:21:42,147 >> Paano ang tungkol sa 2? 432 00:21:42,147 --> 00:21:43,021 3? 433 00:21:43,021 --> 00:21:43,520 50? 434 00:21:43,520 --> 00:21:44,740 Wala sa mga ay nagtatrabaho. 435 00:21:44,740 --> 00:21:46,890 Paano ang tungkol sa -50? 436 00:21:46,890 --> 00:21:48,560 At ang programa tila sa trabaho. 437 00:21:48,560 --> 00:21:49,970 >> Hayaan akong subukan ito nang isang beses higit pa. 438 00:21:49,970 --> 00:21:53,400 Hayaan akong subukan -1, tila sa trabaho. 439 00:21:53,400 --> 00:21:56,380 Hayaan akong subukan -2, tila sa trabaho. 440 00:21:56,380 --> 00:21:59,640 Hayaan akong subukan 0. 441 00:21:59,640 --> 00:22:01,684 Huh, na hindi tama. 442 00:22:01,684 --> 00:22:03,350 Ngayon, kami ay pagiging isang maliit na pilosopo dito. 443 00:22:03,350 --> 00:22:07,090 Ngunit ito ay, sa katunayan, ang kaso na 0 ay hindi positibo o negatibo. 444 00:22:07,090 --> 00:22:11,150 At kaya ang katunayan na ang aking programa ay sinasabi na 0 ay isang negatibong integer, 445 00:22:11,150 --> 00:22:12,820 iyan ay hindi technically tama. 446 00:22:12,820 --> 00:22:15,180 >> Ngayon, kung bakit ito ay ginagawa ito? 447 00:22:15,180 --> 00:22:16,270 Well, maaaring ito ay kitang-kita. 448 00:22:16,270 --> 00:22:18,110 At, sa katunayan, ang programa ay sinadya upang maging medyo simple 449 00:22:18,110 --> 00:22:19,670 kaya kami ay may isang bagay upang galugarin. 450 00:22:19,670 --> 00:22:25,870 >> Ngunit sabihin ipakilala ang isang ikatlong debugging diskarteng dito na tinatawag debug50. 451 00:22:25,870 --> 00:22:27,750 Kaya ito ay isang program na lamang na nilikha namin 452 00:22:27,750 --> 00:22:30,770 sa taong ito na tinatawag debug50 na magpapahintulot sa inyo 453 00:22:30,770 --> 00:22:34,130 gamitin kung ano ang tinatawag na isang built-in graphical debugger sa CS50 IDE. 454 00:22:34,130 --> 00:22:38,400 At isang debugger ay lamang ng isang programa na sa pangkalahatan ay nagbibigay-daan patakbuhin mo ang iyong programa 455 00:22:38,400 --> 00:22:44,050 ngunit hakbang-hakbang sa pamamagitan ng hakbang, linya sa pamamagitan ng linya sa pamamagitan ng linya, pag-pause, poking 456 00:22:44,050 --> 00:22:47,626 sa paligid, ang pagtingin sa mga variable sa gayon ay ang programa ay hindi lamang pumutok nakaraan mo 457 00:22:47,626 --> 00:22:49,750 at mabilis na i-print ang isang bagay o hindi i-print ang isang bagay. 458 00:22:49,750 --> 00:22:53,250 Ito ay nagbibigay sa iyo ng pagkakataon, sa human speed, upang makipag-ugnayan sa mga ito. 459 00:22:53,250 --> 00:22:55,470 >> At upang gawin ito, ikaw lamang gawin ang mga sumusunod. 460 00:22:55,470 --> 00:22:58,479 Pagkatapos ipon ng iyong code, na kung saan ko na ginawa, buggy3, 461 00:22:58,479 --> 00:23:00,020 pumunta ka magpatuloy at patakbuhin debug50 ./buggy. 462 00:23:00,020 --> 00:23:03,460 463 00:23:03,460 --> 00:23:06,760 So magkano ang gusto help50 ay nagpapatakbo ka help50 at pagkatapos ay ang command, 464 00:23:06,760 --> 00:23:10,120 debug50 ay nagpapatakbo ka debug50 at pagkatapos ay ang pangalan ng command. 465 00:23:10,120 --> 00:23:14,440 >> Ngayon panoorin kung ano ang mangyayari sa aking screen, sa kanang gilid sa partikular na. 466 00:23:14,440 --> 00:23:19,400 Kapag ako pindutin Run, ang lahat ng mga biglaang panel na ito kanang 467 00:23:19,400 --> 00:23:20,419 bubukas up sa screen. 468 00:23:20,419 --> 00:23:22,210 At mayroong maraming nagaganap on sa unang tingin. 469 00:23:22,210 --> 00:23:25,110 Ngunit may ay hindi masyadong gaanong mag-alala tungkol sa pa. 470 00:23:25,110 --> 00:23:28,570 >> Ito ay nagpapakita ng sa akin ang lahat na nangyayari sa loob ng aking mga programa 471 00:23:28,570 --> 00:23:31,130 ngayon at sa pamamagitan ng mga buttons up tuktok ay pagkatapos 472 00:23:31,130 --> 00:23:35,910 nagpapahintulot sa akin sa hakbang sa pamamagitan ng aking code huli hakbang-hakbang sa pamamagitan ng hakbang. 473 00:23:35,910 --> 00:23:37,140 Ngunit hindi lamang pa. 474 00:23:37,140 --> 00:23:38,060 Pansinin kung ano ang mangyayari. 475 00:23:38,060 --> 00:23:40,600 Sa aking terminal na window Ako na senyasan para sa n. 476 00:23:40,600 --> 00:23:44,560 At ako pagpunta sa sige at makipagtulungan oras na ito at i-type -1. 477 00:23:44,560 --> 00:23:48,770 At kahit na isang maliit cryptically, -1 ay isang negatibong integer, tulad ng inaasahan. 478 00:23:48,770 --> 00:23:52,020 >> At pagkatapos ang sumunod pang lumabas na may status 0 GDBserver exiting. 479 00:23:52,020 --> 00:23:55,180 GDB, GNU Debugger, ay ang pangalan ng ang kalakip na software 480 00:23:55,180 --> 00:23:56,620 na nagpapatupad ito debugger. 481 00:23:56,620 --> 00:24:00,500 Ngunit lahat ng ito talaga ay nangangahulugan, ang debugger umalis dahil ang aking programa quit 482 00:24:00,500 --> 00:24:01,710 at lahat ay mabuti. 483 00:24:01,710 --> 00:24:06,020 Kung gusto kong tunay debug aking mga programa, Kailangan ko bang sabihin sa preemptively debug50, 484 00:24:06,020 --> 00:24:08,920 kung saan ang gusto ko upang simulan ang tuntong sa pamamagitan ng aking code? 485 00:24:08,920 --> 00:24:11,750 >> At marahil ang pinakamadaling paraan upang gawin iyon ay ang mga sumusunod. 486 00:24:11,750 --> 00:24:15,300 Kung ako mag-hover sa kanal ng aking editor dito, 487 00:24:15,300 --> 00:24:19,090 kaya talagang lamang sa sidebar dito, sa kaliwa ng linya na numero, 488 00:24:19,090 --> 00:24:21,870 abisuhan na kung ako i-click lamang isang beses, ko bang ilagay ang isang maliit na pulang tuldok. 489 00:24:21,870 --> 00:24:24,460 At na maliit na pulang tuldok, tulad ng isang stop sign, ibig sabihin nito, hey, 490 00:24:24,460 --> 00:24:29,430 debug50, i-pause pagpapatupad ng aking code doon kapag nagpatakbo ako ng programang ito. 491 00:24:29,430 --> 00:24:30,260 >> Kaya sabihin gawin iyon. 492 00:24:30,260 --> 00:24:37,340 Hayaan akong sige at patakbuhin ang aking programa muli gamit debug50 ./buggy3, ang Enter. 493 00:24:37,340 --> 00:24:40,110 At ngayon, pansinin, isang bagay iba't ibang ang nangyari. 494 00:24:40,110 --> 00:24:42,440 Hindi ko na senyasan pa sa aking terminal na window 495 00:24:42,440 --> 00:24:45,430 para sa anumang, sapagka't wala akong nakuha doon pa sa aking programa. 496 00:24:45,430 --> 00:24:47,950 Pansinin na sa linya 8 na ngayon ay naka-highlight, 497 00:24:47,950 --> 00:24:51,720 at mayroong isang maliit na arrow sa kaliwang sinasabi, ikaw ay naka-pause dito. 498 00:24:51,720 --> 00:24:55,030 Ang linya ng code, linya 8, ay hindi pa naisakatuparan. 499 00:24:55,030 --> 00:24:58,940 >> At kung ano ang malaman, kung tiningnan ko sa paglipas dito sa kanang gilid, 500 00:24:58,940 --> 00:25:03,530 mapapansin na i ay isang lokal na variable, mga lokal na sa kamalayan 501 00:25:03,530 --> 00:25:05,450 na ito ay sa loob ng kasalukuyang function. 502 00:25:05,450 --> 00:25:08,920 At ang halaga nito, tila sa pamamagitan ng default, at uri ng conveniently, ay 0. 503 00:25:08,920 --> 00:25:10,260 Ngunit hindi ko type 0. 504 00:25:10,260 --> 00:25:13,410 Iyon lamang ang mangyayari sa kanyang default na halaga sa sandaling ito. 505 00:25:13,410 --> 00:25:15,490 >> Kaya hayaan mo akong magpatuloy at gawin ito ngayon. 506 00:25:15,490 --> 00:25:18,680 Hayaan akong sige at sa kanang tuktok dito, ako 507 00:25:18,680 --> 00:25:20,970 pagpunta sa sige at i-click ang unang icon na 508 00:25:20,970 --> 00:25:25,360 nangangahulugan hakbang sa paglipas ng na nangangahulugan huwag laktawan ito ngunit tumawid ito linya ng code, 509 00:25:25,360 --> 00:25:27,770 Isinasagawa ito sa kahabaan ng paraan. 510 00:25:27,770 --> 00:25:30,710 >> At ngayon, mapansin, aking prompt ay may lamang ay nagbago. 511 00:25:30,710 --> 00:25:31,380 Bakit na? 512 00:25:31,380 --> 00:25:33,639 Sinabi ko debug50, patakbuhin ang linya ng code. 513 00:25:33,639 --> 00:25:34,930 Ano ang ibig ito linya ng code? 514 00:25:34,930 --> 00:25:35,960 Prompt sa akin isang int. 515 00:25:35,960 --> 00:25:36,460 OK. 516 00:25:36,460 --> 00:25:37,400 Hayaan akong makipagtulungan. 517 00:25:37,400 --> 00:25:41,340 Hayaan akong magpatuloy ngayon at i-type -1, ang Enter. 518 00:25:41,340 --> 00:25:42,920 At ngayon mapansin kung ano ang nagbago. 519 00:25:42,920 --> 00:25:46,060 Sa kanang gilid, aking mga lokal na variable i 520 00:25:46,060 --> 00:25:48,200 ay ipinahiwatig bilang -1 ngayon. 521 00:25:48,200 --> 00:25:49,810 At ito ay pa rin ng uri int. 522 00:25:49,810 --> 00:25:53,102 >> At pansinin, masyadong, ang aking mga tinatawag na tumawag stack, kung saan ay ko i-pause? 523 00:25:53,102 --> 00:25:54,810 Kami makipag-usap ang nalalaman tungkol sa ito sa hinaharap. 524 00:25:54,810 --> 00:25:58,620 Ngunit ang tawag stack lamang tumutukoy sa kung ano function ay kasalukuyang nasa paggalaw. 525 00:25:58,620 --> 00:26:00,040 Sa ngayon ito lang ang main. 526 00:26:00,040 --> 00:26:03,590 At ngayon ang tanging lokal na variable ay i may halagang 1. 527 00:26:03,590 --> 00:26:09,840 >> At kapag ako sa wakas hakbang sa ibabaw linyang ito dito, sa na parehong icon sa kanang tuktok, 528 00:26:09,840 --> 00:26:11,410 -1 Ay isang negatibong integer. 529 00:26:11,410 --> 00:26:13,580 Ngayon ito ay pag-pause sa paglipas na kulot suhay. 530 00:26:13,580 --> 00:26:14,740 ni ipaalam ito gawin nito bagay Hayaan. 531 00:26:14,740 --> 00:26:17,300 hakbang ko sa paglipas na linya, at voila. 532 00:26:17,300 --> 00:26:20,240 >> Kaya hindi lahat na masyado nakapapaliwanag pa, 533 00:26:20,240 --> 00:26:23,550 ngunit ito ay hayaan mo akong i-pause at sa tingin sa pamamagitan ng logically 534 00:26:23,550 --> 00:26:24,870 kung ano ang programa na ito ay ginagawa. 535 00:26:24,870 --> 00:26:26,890 Ngunit iyon ay hindi ang maling kaso. 536 00:26:26,890 --> 00:26:28,510 Natin gawin ito muli bilang mga sumusunod Hayaan. 537 00:26:28,510 --> 00:26:31,340 >> Ako pagpunta sa iwan na breakpoint on line 8 gamit ang pulang tuldok. 538 00:26:31,340 --> 00:26:32,830 Pupunta ako sa muling palabas ng pelikula debug50. 539 00:26:32,830 --> 00:26:34,400 ito ay awtomatikong naka-pause dito. 540 00:26:34,400 --> 00:26:37,660 Ngunit oras na ito, sa halip na stepping sa paglipas ng linya na ito, 541 00:26:37,660 --> 00:26:42,290 hayaan mo akong tunay na pumunta sa loob ng get_negative_int at malaman kung, 542 00:26:42,290 --> 00:26:45,530 kung bakit ito ay tumatanggap ng 0 bilang isang wastong sagot? 543 00:26:45,530 --> 00:26:47,990 >> Kaya sa halip ng pag-click Hakbang Over. 544 00:26:47,990 --> 00:26:50,630 Ako pagpunta sa sige at i-click Hakbang Into. 545 00:26:50,630 --> 00:26:54,030 At mapansin na ang mga linya 8 na ngayon naka-highlight ngayon biglang 546 00:26:54,030 --> 00:26:56,900 nagiging line 17. 547 00:26:56,900 --> 00:26:59,947 >> Ngayon, ito ay hindi na ang debugger ay nilaktawan linya 14 at 15 at 16. 548 00:26:59,947 --> 00:27:01,780 Lamang Ito ay may walang upang ipakita sa iyo doon. 549 00:27:01,780 --> 00:27:04,050 Yaong ay lamang deklarasyon variable, at pagkatapos ay doon ay ang salitang Gawin 550 00:27:04,050 --> 00:27:05,390 at pagkatapos ay isang bukas kulot suhay. 551 00:27:05,390 --> 00:27:09,227 Ang tanging functional linya na juicy nga bang talaga ito ng isa dito, 17. 552 00:27:09,227 --> 00:27:11,060 At na kung saan hindi namin awtomatikong naka-pause. 553 00:27:11,060 --> 00:27:13,870 >> Kaya printf ( "n.is:") ;, kaya na ay hindi pa nangyari. 554 00:27:13,870 --> 00:27:18,250 Kaya sabihin sige at i-click Tumawid. 555 00:27:18,250 --> 00:27:20,326 Ngayon ang aking prompt, sa katunayan, pinalitan sa ( "n ay:"). 556 00:27:20,326 --> 00:27:22,450 Ngayon get_int, hindi ako pagpunta sa pag-abala stepping sa, 557 00:27:22,450 --> 00:27:24,750 dahil na function ay ginawa sa pamamagitan ng CS50 sa Library. 558 00:27:24,750 --> 00:27:25,750 Ito ay siguro tama. 559 00:27:25,750 --> 00:27:28,440 >> Kaya ako pagpunta sa sige at uri ng makipagtulungan pamamagitan ng pagbibigay ito 560 00:27:28,440 --> 00:27:30,590 isang int, ngunit hindi isang negatibong int. 561 00:27:30,590 --> 00:27:32,870 Kaya hayaan mo akong sige at pindutin 0. 562 00:27:32,870 --> 00:27:39,460 At ngayon kung ano ang mangyayari dito kapag nakakuha ako pababa sa line 21? 563 00:27:39,460 --> 00:27:40,890 hindi ko na iterated muli. 564 00:27:40,890 --> 00:27:43,320 hindi ko tila na maging mapagmataas sa na loop. 565 00:27:43,320 --> 00:27:45,990 Sa ibang salita, ito dilaw bar ay hindi panatilihin ang pagpunta sa paligid, 566 00:27:45,990 --> 00:27:47,130 at sa paligid, at sa paligid. 567 00:27:47,130 --> 00:27:48,340 >> Ngayon, kung bakit ay na? 568 00:27:48,340 --> 00:27:49,920 Well, n, kung ano ang n ngayon? 569 00:27:49,920 --> 00:27:53,280 Maaari ko bang tingnan ang mga lokal na variable sa debugger. 570 00:27:53,280 --> 00:27:53,816 n ay 0. 571 00:27:53,816 --> 00:27:55,190 O sige, kung ano ang aking kondisyon? 572 00:27:55,190 --> 00:27:58,700 >> 20-- line 20 ay, well, 0 ay mas malaki kaysa sa 0. 573 00:27:58,700 --> 00:27:59,500 Hindi iyan totoo. 574 00:27:59,500 --> 00:28:01,020 0 ay hindi mas malaki kaysa sa 0. 575 00:28:01,020 --> 00:28:02,820 At kaya I Nasira out ng mga ito. 576 00:28:02,820 --> 00:28:06,370 >> At sa gayon ay ang dahilan kung bakit on line 21, kung ako talaga magpatuloy, 577 00:28:06,370 --> 00:28:10,370 Pupunta ako sa bumalik 0, kahit bagaman aking itinakuwil 0 578 00:28:10,370 --> 00:28:12,484 dahil hindi aktwal na pagiging negatibo. 579 00:28:12,484 --> 00:28:14,650 Kaya ngayon, hindi ko talaga kahit aalaga ang tungkol sa debugger. 580 00:28:14,650 --> 00:28:16,900 Got ito, hindi ko na kailangang malaman kung ano pa ang nangyayari. 581 00:28:16,900 --> 00:28:19,233 >> Kaya ako pagpunta sa sige at i-click lamang ang pindutan ng Play, 582 00:28:19,233 --> 00:28:20,240 at ito'y tapusin up. 583 00:28:20,240 --> 00:28:23,440 Ngayon, ako na natanto na ang aking bug ay tila on line 20. 584 00:28:23,440 --> 00:28:25,160 Iyan ang aking logical error. 585 00:28:25,160 --> 00:28:28,100 >> At kaya kung ano ang gusto ko gawin upang baguhin ito? 586 00:28:28,100 --> 00:28:32,500 Kung ang problema ay na hindi ako pansing 0, ito ay lamang ng isang lohikal na error. 587 00:28:32,500 --> 00:28:35,910 At maaari kong sabihin habang n ay mas malaki kaysa sa o katumbas ng 0, 588 00:28:35,910 --> 00:28:38,330 panatilihin pagdikta muli at muli sa user. 589 00:28:38,330 --> 00:28:41,050 >> Kaya, muli, simpleng pagkakamali, marahil kahit halata kapag nakita mo ako 590 00:28:41,050 --> 00:28:42,410 isulat ito lamang ng ilang minuto ang nakalipas. 591 00:28:42,410 --> 00:28:44,570 Ngunit ang takeaway dito ay na sa debug 50, 592 00:28:44,570 --> 00:28:46,850 at sa pag-debug software mas pangkalahatang paraan, 593 00:28:46,850 --> 00:28:51,370 ikaw ay may ito bagong natagpuan kapangyarihan upang maglakad sa pamamagitan ng iyong sariling code, tumingin 594 00:28:51,370 --> 00:28:55,590 sa pamamagitan ng na kanang kamay panel kung ano ang ang iyong mga variable na halaga ay. 595 00:28:55,590 --> 00:28:57,700 Kaya gawin mo hindi kinakailangang kung gamitin ang isang bagay 596 00:28:57,700 --> 00:29:00,630 tulad eprintf mong i-print ang mga halaga. 597 00:29:00,630 --> 00:29:04,430 Maaari mong aktwal na makita ang mga ito visually sa screen. 598 00:29:04,430 --> 00:29:08,920 >> Ngayon, lampas na ito, ito ay nagkakahalaga ng noting na mayroong isa pang pamamaraan na 599 00:29:08,920 --> 00:29:09,890 talagang super pangkaraniwan. 600 00:29:09,890 --> 00:29:13,120 At maaari kang magtaka kung bakit ito maliit guy here ay na-upo sa entablado. 601 00:29:13,120 --> 00:29:16,490 Kaya mayroong mga pamamaraan na ito, sa pangkalahatan kilala bilang goma pato debugging, 602 00:29:16,490 --> 00:29:18,786 na talagang ay lamang ng isang testamento sa ang katunayan 603 00:29:18,786 --> 00:29:20,660 na madalas kapag programmers isinusulat code, 604 00:29:20,660 --> 00:29:22,650 ang mga ito ay hindi kinakailangan nakikipagtulungan sa iba, 605 00:29:22,650 --> 00:29:24,030 o nagtatrabaho sa isang shared kapaligiran. 606 00:29:24,030 --> 00:29:25,050 >> Ang mga ito ay uri ng sa bahay. 607 00:29:25,050 --> 00:29:25,910 Siguro ito ay huli sa gabi. 608 00:29:25,910 --> 00:29:28,190 Sila ay sinusubukan upang figure ang ilang mga bug sa kanilang mga code. 609 00:29:28,190 --> 00:29:29,330 At sila ay lamang ay hindi makita ito. 610 00:29:29,330 --> 00:29:30,329 >> At walang kasama sa kuwarto. 611 00:29:30,329 --> 00:29:31,250 Walang tf. 612 00:29:31,250 --> 00:29:32,680 Walang CA paligid. 613 00:29:32,680 --> 00:29:36,440 Lahat ng kailangan nila sa kanilang mga shelf ay ang maliit na goma ducky. 614 00:29:36,440 --> 00:29:39,030 >> At kaya goma pato debugging ay lamang ang imbitasyong ito 615 00:29:39,030 --> 00:29:42,780 mag-isip ng isang bagay bilang uto bilang na ito bilang isang tunay na nilalang, 616 00:29:42,780 --> 00:29:46,940 at talagang maglakad sa pamamagitan ng iyong code pasalita sa ito bagay na walang buhay. 617 00:29:46,940 --> 00:29:49,230 Kaya, halimbawa, kung ito ay ang aking mga halimbawa here-- 618 00:29:49,230 --> 00:29:52,470 at isipin na mas maaga ang problema ay na ito, 619 00:29:52,470 --> 00:29:58,140 kung tatanggalin ko ito unang linya ng code, at pumunta ako magpatuloy at gumawa ng maraming surot 0 muli, 620 00:29:58,140 --> 00:30:01,220 pagpapabalik na ako ay nagkaroon ng mga mga mensahe ng error dito. 621 00:30:01,220 --> 00:30:05,997 Kaya ang ideya dito, walang katotohanan kahit na ako pakiramdam sa sandaling ito ang paggawa nito sa publiko, 622 00:30:05,997 --> 00:30:06,580 ay na error. 623 00:30:06,580 --> 00:30:10,910 >> OK, kaya ang aking problema ay na ko na kataon ipinahayag ng isang function na library. 624 00:30:10,910 --> 00:30:12,610 At na library function ay printf. 625 00:30:12,610 --> 00:30:15,290 Declare-- OK, idedeklara reminds ako ng mga modelo. 626 00:30:15,290 --> 00:30:18,930 >> Ito ay nangangahulugan na kailangan ko upang aktwal na sabihin sa compiler in advance kung ano 627 00:30:18,930 --> 00:30:19,980 ang function kamukha. 628 00:30:19,980 --> 00:30:20,930 Maghintay ng isang minuto. 629 00:30:20,930 --> 00:30:23,580 Hindi ko magkaroon ng standard io.h. 630 00:30:23,580 --> 00:30:24,530 Maraming salamat. 631 00:30:24,530 --> 00:30:27,330 >> Kaya lang ang prosesong ito of-- mo hindi na kailangan upang aktwal na magkaroon ng isang pato. 632 00:30:27,330 --> 00:30:29,819 Ngunit ang ideya na ito ng paglalakad ang iyong sarili sa pamamagitan ng iyong sariling code 633 00:30:29,819 --> 00:30:31,610 upang ikaw kahit na marinig sa iyong sarili, sa gayon ay ikaw 634 00:30:31,610 --> 00:30:35,620 mapagtanto omissions sa iyong sariling remarks, sa pangkalahatan ang mga ideya. 635 00:30:35,620 --> 00:30:38,910 >> At, marahil mas logically, hindi kaya magkano sa na ang isa ngunit ang mas kasangkot 636 00:30:38,910 --> 00:30:44,220 Halimbawa lang namin ginawa sa buggy 3.C, maaari mong maglakad ang iyong sarili sa pamamagitan ng ito 637 00:30:44,220 --> 00:30:45,310 tulad ng sumusunod. 638 00:30:45,310 --> 00:30:49,190 Kaya ang lahat ng karapatan, goma ducky, DDB, kung ikaw ay. 639 00:30:49,190 --> 00:30:52,350 Narito kami ay may sa aking mga pangunahing function, Ako ng pagtawag makakuha ng mga negatibong int. 640 00:30:52,350 --> 00:30:54,660 >> At ako ay getting ang bumalik halaga. 641 00:30:54,660 --> 00:31:00,410 Ako pag-imbak nito sa kaliwang bahagi on line 8 sa isang variable na tinatawag na i. 642 00:31:00,410 --> 00:31:02,380 OK, ngunit maghintay, kung anong ginagawa ni na makakuha na halaga? 643 00:31:02,380 --> 00:31:04,130 Hayaan akong tumingin sa ang mga function sa linya 12. 644 00:31:04,130 --> 00:31:05,760 >> Sa linya 12, mayroon kaming makakuha ng mga negatibong int. 645 00:31:05,760 --> 00:31:08,190 Hindi gumawa ng anumang inputs, ay bumalik sa isang int, OK. 646 00:31:08,190 --> 00:31:10,929 Ipinahahayag ko sa line 14 isang variable n. 647 00:31:10,929 --> 00:31:12,220 Ito ay pagpunta sa tindahan ng isang integer. 648 00:31:12,220 --> 00:31:13,760 Iyan ang gusto ko. 649 00:31:13,760 --> 00:31:18,480 >> Kaya gawin ang mga sumusunod habang n is-- ipaalam undo sa akin kung ano ang ayusin ko na ginawa. 650 00:31:18,480 --> 00:31:22,710 Kaya habang n ay mas malaki kaysa 0, i-print out n ay, OK. 651 00:31:22,710 --> 00:31:25,170 At pagkatapos ay tumawag makakuha int naka-imbak sa n. 652 00:31:25,170 --> 00:31:30,160 At pagkatapos ay i-tsek kung ang n ay 0, n ay not-- may ito ay. 653 00:31:30,160 --> 00:31:31,910 Kaya, muli, hindi mo gusto kailangan ang aktwal na pato. 654 00:31:31,910 --> 00:31:35,650 Ngunit lamang sa paglalakad iyong sarili sa pamamagitan ang iyong code bilang isang intelektuwal na ehersisyo 655 00:31:35,650 --> 00:31:37,720 ay madalas na makakatulong sa iyo mapagtanto kung ano ang nangyayari sa, 656 00:31:37,720 --> 00:31:41,170 bilang laban sa lamang paggawa ng isang bagay tulad nito, nakapako sa screen, 657 00:31:41,170 --> 00:31:43,720 at hindi pakikipag-usap sa iyong sarili sa pamamagitan ng ito, na sa totoo lang ay hindi 658 00:31:43,720 --> 00:31:46,270 halos bilang isang epektibong pamamaraan. 659 00:31:46,270 --> 00:31:48,620 Kaya doon kayo ay may ito, ang isang bilang ng mga iba't-ibang pamamaraan 660 00:31:48,620 --> 00:31:52,102 para sa aktwal na pag-debug ang iyong code at pagkakita ng kakulangan, ang lahat ay 661 00:31:52,102 --> 00:31:54,810 ay dapat na mga tool sa iyong toolkit nang sa gayon ay hindi ka huli sa gabi, 662 00:31:54,810 --> 00:31:57,660 lalo na, gusto mo ng dining halls, o sa oras ng opisina, 663 00:31:57,660 --> 00:32:00,368 banging iyong ulo laban sa mga pader, sinusubukan upang malutas ang ilang mga problema. 664 00:32:00,368 --> 00:32:02,020 Napag-alaman na may mga software tools. 665 00:32:02,020 --> 00:32:03,720 May mga goma pato tools. 666 00:32:03,720 --> 00:32:09,630 At mayroong isang buong tukod ng suportahan naghihintay na bang ipahiram sa isang kamay. 667 00:32:09,630 --> 00:32:13,120 >> Kaya ngayon, ang isang salita sa mga problema sets, at sa kung ano kami ay umaasa sa iyo 668 00:32:13,120 --> 00:32:15,620 makakuha ng out ng mga ito, at kung paano pumunta kami tungkol sa pag-evaluate. 669 00:32:15,620 --> 00:32:17,680 Per syllabus ang kurso na iyon, mga hanay ng problema ni CS50 670 00:32:17,680 --> 00:32:22,320 ay sinusuri sa apat na pangunahing axes, kaya upang speak-- saklaw, kawastuhan, disenyo, 671 00:32:22,320 --> 00:32:23,060 at estilo. 672 00:32:23,060 --> 00:32:25,910 At saklaw lamang ay tumutukoy sa kung magkano ng piraso ka makagat off? 673 00:32:25,910 --> 00:32:28,080 Gaano karami ng isang problema ikaw ay may tried? 674 00:32:28,080 --> 00:32:30,110 Ano ang antas ng pagsisikap ikaw ay may manifested? 675 00:32:30,110 --> 00:32:35,750 >> Kawastuhan ay, ang ginagawa ng programa sa trabaho bilang ito ay dapat na sa bawat CS50 specification 676 00:32:35,750 --> 00:32:38,640 kapag ibinigay mo ang ilang mga inputs o ilang mga outputs babalik? 677 00:32:38,640 --> 00:32:41,130 Design ay ang pinaka-subjective ng mga ito. 678 00:32:41,130 --> 00:32:43,360 At ito ay ang isa na ay gawin ang pinakamahabang upang malaman 679 00:32:43,360 --> 00:32:47,220 at ang pinakamahabang upang magturo, sa sa abot ng ito kahulihan babagsak ito sa, 680 00:32:47,220 --> 00:32:49,530 kung gaano kahusay ang nakasulat ay ang iyong code? 681 00:32:49,530 --> 00:32:52,920 >> Ito ay isang bagay na lamang i-print ang tamang outputs o bumalik sa tamang halaga. 682 00:32:52,920 --> 00:32:55,400 Ngunit ang iyong ginagawa ito bilang mahusay hangga't maaari? 683 00:32:55,400 --> 00:32:58,210 Ginagawa mo ito hatiin at lupigin, o binary 684 00:32:58,210 --> 00:33:01,500 search dahil kakailanganin namin sa lalong madaling panahon makita na ang ginawa namin dalawang linggo nakaraan sa phone book? 685 00:33:01,500 --> 00:33:04,670 Mayroon bang mas mahusay na paraan upang malutas ang problema kaysa kasalukuyan kang magkaroon dito? 686 00:33:04,670 --> 00:33:06,380 Iyan ay isang pagkakataon para sa mas mahusay na disenyo. 687 00:33:06,380 --> 00:33:08,530 >> At pagkatapos ay kung paano style-- pretty ay ang iyong code? 688 00:33:08,530 --> 00:33:12,370 Mapapansin mo na ako ay medyo partikular na ang tungkol indent aking code, 689 00:33:12,370 --> 00:33:15,300 at siguraduhin ang aking mga variable ay may makatuwirang pinangalanan. n, 690 00:33:15,300 --> 00:33:19,660 habang maikli, ay isang mahusay na pangalan para sa isang number, i para sa isang pagbilang integer, 691 00:33:19,660 --> 00:33:20,727 s para sa isang string. 692 00:33:20,727 --> 00:33:22,560 At maaari naming magkaroon ng mas mahabang mga pangalan ng variable estilo. 693 00:33:22,560 --> 00:33:25,500 Style ay lamang kung paano mahusay na ang hitsura ng iyong code? 694 00:33:25,500 --> 00:33:26,600 At kung paano nababasa ito? 695 00:33:26,600 --> 00:33:29,650 >> At sa paglipas ng panahon, kung ano ang iyong TAS at TFs ay gawin sa kurso 696 00:33:29,650 --> 00:33:31,870 ay magbigay sa iyo ng na uri ng ng husay feedback 697 00:33:31,870 --> 00:33:34,330 sa gayon ay makakuha ka ng mas mahusay sa mga iba't-ibang aspeto. 698 00:33:34,330 --> 00:33:37,510 At sa mga tuntunin ng kung paano namin suriin ang bawat isa sa mga axes, 699 00:33:37,510 --> 00:33:40,080 ito ay karaniwang may napakakaunting mga bucket upang ikaw, sa pangkalahatan, 700 00:33:40,080 --> 00:33:41,680 makakuha ng ideya ng kung gaano kahusay ang iyong ginagawa. 701 00:33:41,680 --> 00:33:45,680 At, sa katunayan, kung nakatanggap ka ng isang puntos sa anumang ng mga axes-- kawastuhan, disenyo 702 00:33:45,680 --> 00:33:49,659 at estilo especially-- numerong iyon ay sa pangkalahatan ay sa pagitan ng 1 at 5. 703 00:33:49,659 --> 00:33:52,450 At, literal, kung ikaw ay nakakakuha 3 ni sa simula ng semestre, 704 00:33:52,450 --> 00:33:53,977 ito ay isang napakagandang bagay. 705 00:33:53,977 --> 00:33:55,810 Ito ay nangangahulugan na mayroong pa rin kuwarto para sa pagpapabuti, 706 00:33:55,810 --> 00:33:58,490 kung saan nais mong pag-asa para sa pagkuha ng isang klase para sa unang pagkakataon. 707 00:33:58,490 --> 00:34:01,820 Mayroong sana ilang piraso ng kisame na kung saan ka na naghahangad na pag-abot. 708 00:34:01,820 --> 00:34:03,970 At kaya pagkuha sa 3 ni ang earliest piraso, 709 00:34:03,970 --> 00:34:06,550 kung hindi ilang 2 at 4, ay, sa katunayan, isang magandang bagay. 710 00:34:06,550 --> 00:34:08,880 Ito ay mahusay sa loob ng range, mahusay sa loob ng mga inaasahan. 711 00:34:08,880 --> 00:34:11,421 >> At kung ang iyong isip ay karera, maghintay isang minuto, tatlong out ng limang. 712 00:34:11,421 --> 00:34:12,620 Iyan ay talagang isang 6 out of 10. 713 00:34:12,620 --> 00:34:13,560 Iyan ay 60%. 714 00:34:13,560 --> 00:34:14,830 My God, na ang isang F. 715 00:34:14,830 --> 00:34:15,870 >> Hindi. 716 00:34:15,870 --> 00:34:17,600 Ito ay hindi, sa katunayan, iyon. 717 00:34:17,600 --> 00:34:22,710 Sa halip, ito ay isang pagkakataon upang mapabuti ang sa kabuuan ng semestre. 718 00:34:22,710 --> 00:34:25,580 At kung ikaw ay pagkuha ng ilang mga poors, ang mga ito ay isang pagkakataon 719 00:34:25,580 --> 00:34:29,199 upang samantalahin ng mga oras ng opisina, tiyak na mga seksyon at iba pang mga mapagkukunan. 720 00:34:29,199 --> 00:34:32,840 >> Best ay isang pagkakataon, talaga, upang ipagmalaki kung paano lang malayo na sa iyo 721 00:34:32,840 --> 00:34:34,520 dumating sa kabuuan ng semestre. 722 00:34:34,520 --> 00:34:38,199 Kaya huwag mapagtanto, kung wala sino pa ang paririto, tatlong ay mabuti. 723 00:34:38,199 --> 00:34:40,179 At ito ay nagpapahintulot sa kuwarto para sa paglago sa paglipas ng panahon. 724 00:34:40,179 --> 00:34:43,090 >> Tulad ng sa kung paano ang mga axes ay weighted, realistically ikaw ay 725 00:34:43,090 --> 00:34:46,745 pagpunta sa gumastos ng karamihan ng iyong oras sa pagkuha ng bagay sa trabaho, pabayaan mag-isa ng tama. 726 00:34:46,745 --> 00:34:49,120 At kaya kawastuhan ay may gawi na na may timbang ang pinaka, tulad ng may 727 00:34:49,120 --> 00:34:51,360 ito multiplicative factor ng tatlong. 728 00:34:51,360 --> 00:34:54,659 Design ay din mahalaga, ngunit isang bagay na gawin mo hindi kinakailangang 729 00:34:54,659 --> 00:34:58,220 gumastos ng lahat ng mga oras sa sinusubukan upang makakuha ng mga bagay lamang sa trabaho. 730 00:34:58,220 --> 00:35:00,019 >> At kaya ito ay may timbang ng kaunti pa gaanong. 731 00:35:00,019 --> 00:35:01,560 At pagkatapos ay estilo ay may timbang ang kahit. 732 00:35:01,560 --> 00:35:03,710 Kahit na ito ay hindi mas mababa mahalaga sa panimula, 733 00:35:03,710 --> 00:35:05,990 ito lamang ay, marahil, ang pinakamadaling bagay na gawin karapatan, 734 00:35:05,990 --> 00:35:08,440 paggaya sa halimbawa namin gawin sa lecture at seksyon, 735 00:35:08,440 --> 00:35:11,080 may mga bagay na mabuti yupi, at nagkomento, 736 00:35:11,080 --> 00:35:14,320 at iba pa ay kabilang sa mga pinakamadaling bagay na maaaring gawin at makakuha ng karapatan. 737 00:35:14,320 --> 00:35:16,960 Kaya dahil dito, napagtanto na ang mga ito ay mga punto 738 00:35:16,960 --> 00:35:19,000 na ay medyo madali upang maunawaan. 739 00:35:19,000 --> 00:35:22,360 >> At ngayon ng isang salita sa this-- academic honesty. 740 00:35:22,360 --> 00:35:25,150 Kaya bawat ang kurso syllabus, makikita mo ang 741 00:35:25,150 --> 00:35:27,630 na ang mga kurso ay may lubos ng bit ng wika sa paligid na ito. 742 00:35:27,630 --> 00:35:31,380 At ang course tumatagal ang isyu ng academic honesty lubos seriously. 743 00:35:31,380 --> 00:35:33,450 >> Mayroon kaming ang pagkakaiba, para sa mas mahusay o para sa mas masahol pa, 744 00:35:33,450 --> 00:35:36,570 ng nang maisugo na niya sa bawat taon higit pa mga mag-aaral para sa pagkilos pandisiplina 745 00:35:36,570 --> 00:35:39,670 kaysa sa karamihan ng anumang iba pang mga siyempre, na ako ng kamalayan ng. 746 00:35:39,670 --> 00:35:42,580 Ito ay hindi kinakailangan nagpapakilala ng ang katunayan 747 00:35:42,580 --> 00:35:46,340 na CS mag-aaral, o CS50 mga mag-aaral, ang mga ito anumang mas matapat kaysa sa iyong mga kaklase. 748 00:35:46,340 --> 00:35:49,090 Subalit ang katotohanan na sa ganitong mundo, sa elektronikong paraan, kami lang 749 00:35:49,090 --> 00:35:50,990 mayroon teknolohikal ay nangangahulugan ng pag-detect ito. 750 00:35:50,990 --> 00:35:53,360 >> Ito ay mahalaga sa amin para pagkamakatarungan sa buong klase 751 00:35:53,360 --> 00:35:58,550 na ginagawa namin tiktikan ito, at itataas ang isyu kapag nakita namin ang mga bagay. 752 00:35:58,550 --> 00:36:01,980 At lamang upang pintura ng isang larawan, at talagang upang matulungan ang isang bagay tulad nito lababo in, 753 00:36:01,980 --> 00:36:04,600 ito ang bilang ng mga mag-aaral sa loob ng nakaraang 10 taon 754 00:36:04,600 --> 00:36:07,610 na na-kasangkot sa ilang tulad ng mga isyu ng pang-akademikong katapatan, 755 00:36:07,610 --> 00:36:10,990 na may ilang mga 32 mga mag-aaral mula sa pagkahulog 2015, na 756 00:36:10,990 --> 00:36:13,760 ay upang sabihin na ang gagawin namin gawin ang bagay sineseryoso. 757 00:36:13,760 --> 00:36:18,380 At, sa huli, ang mga numerong ito gumawa ng sulat, pinaka-kamakailan, tungkol sa 3%, 4% o higit pa 758 00:36:18,380 --> 00:36:19,120 ng klase. 759 00:36:19,120 --> 00:36:25,220 >> Kaya para sa sobrang karamihan ng mga mag-aaral ito tila na ang mga linya ay malinaw. 760 00:36:25,220 --> 00:36:27,940 Ngunit huwag panatilihin ito sa bale, lalo na late 761 00:36:27,940 --> 00:36:32,080 sa gabi kapag struggling sa ilang solusyon sa isang hanay problema, 762 00:36:32,080 --> 00:36:34,830 na mekanismo para sa pagkuha ng iyong sarili mas mahusay 763 00:36:34,830 --> 00:36:37,870 support kaysa sa iyo maaaring mag-isip, kahit na sa oras na yaon. 764 00:36:37,870 --> 00:36:40,514 Napag-alaman na kapag natanggap namin student submissions, i-krus namin 765 00:36:40,514 --> 00:36:43,430 ihambing ang bawat submission sa taong ito laban sa bawat submission noong nakaraang taon, 766 00:36:43,430 --> 00:36:47,590 laban sa bawat submission mula sa 2007, at dahil, ang pagtingin sa, pati na rin, 767 00:36:47,590 --> 00:36:49,931 code repositoryo online, discussion forums, mga site ng trabaho. 768 00:36:49,931 --> 00:36:51,806 At banggitin namin ito, talaga, ang lahat para sa kapakanan 769 00:36:51,806 --> 00:36:56,040 ng buong pagsisiwalat, na kung ibang tao ay maaaring mahanap ito online, 770 00:36:56,040 --> 00:36:57,880 tiyak, upang maaari naming kurso. 771 00:36:57,880 --> 00:37:00,100 Ngunit, talaga, ang espiritu ng kurso kahulihan babagsak 772 00:37:00,100 --> 00:37:01,650 sa ito sugnay sa syllabus. 773 00:37:01,650 --> 00:37:03,670 Ito ay tunay na makatarungan, maging makatuwiran. 774 00:37:03,670 --> 00:37:06,680 >> At kung kami ay upang magdagdag ng mga paliwanag sa na na may lamang ng kaunti pang wika, 775 00:37:06,680 --> 00:37:09,770 mapagtanto na ang kakanyahan ng lahat trabaho na isinumite mo sa kursong ito 776 00:37:09,770 --> 00:37:10,954 dapat na ang iyong sarili. 777 00:37:10,954 --> 00:37:13,870 Subalit sa loob na, may mga tiyak na pagkakataon, at encouragement, 778 00:37:13,870 --> 00:37:17,300 at paturo halaga sa na nagiging others-- aking sarili, ang TFs, ang CAs, 779 00:37:17,300 --> 00:37:20,760 ang TAS, at iba pa sa klase, para sa suporta, pabayaan mag-isa mga kaibigan 780 00:37:20,760 --> 00:37:23,547 at roommates na nag-aral CS at programming bago. 781 00:37:23,547 --> 00:37:25,130 At kaya mayroong isang allowance para sa na. 782 00:37:25,130 --> 00:37:28,180 At ang pangkalahatang patakaran ng hinlalaki ay this-- kapag humihingi ng tulong, 783 00:37:28,180 --> 00:37:31,470 maaari mong ipakita ang iyong mga code sa iba, ngunit hindi mo maaaring tingnan ang kanila. 784 00:37:31,470 --> 00:37:34,880 Kaya kahit na ikaw ay nasa oras ng opisina, o sa D hall, o sa iba pang lugar 785 00:37:34,880 --> 00:37:37,450 nagtatrabaho sa ilang mga piraso set, nagtatrabaho sa tabi ng isang kaibigan, na kung saan 786 00:37:37,450 --> 00:37:40,160 ay ganap fine, sa pagtatapos ng araw ang iyong trabaho 787 00:37:40,160 --> 00:37:43,034 dapat sa huli nabibilang sa bawat sa inyo ayon sa pagkakabanggit, at hindi 788 00:37:43,034 --> 00:37:45,700 maging ang ilang mga collaborative pagsisikap, maliban para sa huling proyekto kung saan 789 00:37:45,700 --> 00:37:47,410 ito ay pinapayagan at hinihikayat. 790 00:37:47,410 --> 00:37:49,830 >> Napag-alaman na kung ikaw ay struggling na may isang bagay 791 00:37:49,830 --> 00:37:52,520 at ang iyong kaibigan lamang ang mangyayari upang maging mas mahusay sa ito at pagkatapos ay sa iyo, 792 00:37:52,520 --> 00:37:55,130 o mas mahusay na sa problema na kaysa sa iyo, o isang maliit na higit na malayo ahead kaysa sa iyo, 793 00:37:55,130 --> 00:37:57,330 ito ay ganap na makatwirang upang i-on sa iyong kaibigan at sabihin, hey, 794 00:37:57,330 --> 00:38:00,480 tututol ba kayo naghahanap sa aking code dito, pagtulong sa akin lugar kung ano ang aking mga isyu ay? 795 00:38:00,480 --> 00:38:03,760 At, sana, sa interes ng paturo halaga 796 00:38:03,760 --> 00:38:07,040 na kaibigan ay hindi lamang sabihin, oh, gawin ito, ngunit sa halip, 797 00:38:07,040 --> 00:38:09,917 kung ano ang ikaw nawawala on line 6, o isang bagay tulad na? 798 00:38:09,917 --> 00:38:12,000 Ngunit ang solusyon ay hindi para sa mga kaibigan sa tabi mo 799 00:38:12,000 --> 00:38:15,617 sabihin, oh, well, dito, hayaan mo akong hilahin ito up, at ipakita ang aking mga solusyon sa iyo. 800 00:38:15,617 --> 00:38:16,450 Kaya na ay ang linya. 801 00:38:16,450 --> 00:38:18,670 Ipakita mo ang iyong code sa iba, ngunit hindi mo maaaring 802 00:38:18,670 --> 00:38:22,350 tingnan kanila, napapailalim sa iba pang constraints sa syllabus ng kurso. 803 00:38:22,350 --> 00:38:24,760 >> Kaya huwag tandaan na ito tinaguriang ikinalulungkot sugnay 804 00:38:24,760 --> 00:38:27,560 sa syllabus ng kurso pati na rin, na kung gumawa ka ng ilang mga gawa na 805 00:38:27,560 --> 00:38:30,476 ay hindi makatwirang, ngunit dalhin ito sa ang pansin ng mga ulo ng kurso 806 00:38:30,476 --> 00:38:34,240 loob ng 72 oras, ang mga kurso maaaring magpataw lokal sanction na 807 00:38:34,240 --> 00:38:37,380 ay maaaring magsama ng isang hindi kasiya-siya o magbagsak sa gawaing isinumite. 808 00:38:37,380 --> 00:38:41,410 Ngunit ang kurso ay hindi sumangguni sa mahalaga para sa karagdagang aksyon pandisiplina, 809 00:38:41,410 --> 00:38:43,010 maliban sa mga kaso ng paulit-ulit na gawain. 810 00:38:43,010 --> 00:38:46,632 Sa ibang salita, kung gagawin mo gumawa ng ilang bobo, lalo late night, desisyon 811 00:38:46,632 --> 00:38:49,340 na ang susunod na umaga o dalawang araw mamaya, gisingin mo up at mapagtanto, 812 00:38:49,340 --> 00:38:50,870 kung ano ang pag-iisip ko? 813 00:38:50,870 --> 00:38:53,890 Gawin mo sa CS50 ay may isang outlet para sa pag-aayos ang problema 814 00:38:53,890 --> 00:38:57,170 at pagmamay-ari hanggang sa ito, kaya na namin nakamit mo Halfway at pakikitungo 815 00:38:57,170 --> 00:39:01,500 sa mga ito sa isang bagay na ay parehong pang-edukasyon at mahalaga para sa iyo, 816 00:39:01,500 --> 00:39:04,200 ngunit pampahirap pa rin sa ilang mga paraan. 817 00:39:04,200 --> 00:39:08,590 At ngayon, upang gawin ang mga gilid off, ito. 818 00:39:08,590 --> 00:39:10,570 >> [Video playback] 819 00:39:10,570 --> 00:39:13,540 >> [MUSIC nagpe-play] 820 00:39:13,540 --> 00:39:58,090 821 00:39:58,090 --> 00:39:58,866 >> [END-playback] 822 00:39:58,866 --> 00:40:00,490 David J. MALAN: Lahat ng karapatan, kami ay bumalik. 823 00:40:00,490 --> 00:40:03,680 At ngayon tinitingnan namin ang isa sa mga una sa aming mga domain tunay na mundo 824 00:40:03,680 --> 00:40:08,720 sa CS50, ang sining ng cryptography, ang sining ng pagpapadala at pagtanggap 825 00:40:08,720 --> 00:40:11,840 lihim na mensahe, naka-encrypt mensahe kung ikaw ay, 826 00:40:11,840 --> 00:40:17,060 na maaari lamang deciphered kung mayroon kang ilang mga pangunahing sahog na ang nagpadala ay 827 00:40:17,060 --> 00:40:18,030 din. 828 00:40:18,030 --> 00:40:22,120 Kaya upang mag-udyok ito isasaalang-alang namin isang tumingin sa ang bagay na ito dito, 829 00:40:22,120 --> 00:40:26,750 na kung saan ay isang halimbawa ng isang lihim na decoder ring na 830 00:40:26,750 --> 00:40:34,042 ay maaaring gamitin upang malaman kung kung ano ang isang lihim na mensahe ay tunay. 831 00:40:34,042 --> 00:40:35,750 Sa katunayan, bumalik sa araw sa mababang paaralan, 832 00:40:35,750 --> 00:40:38,787 kung sakaling ipinadala lihim na mensahe sa ilang mga kaibigan o ilang crush sa klase, 833 00:40:38,787 --> 00:40:40,620 maaari mong magkaroon ng isipan ikaw ay pagiging matalino 834 00:40:40,620 --> 00:40:46,530 sa pamamagitan ng sa iyong mga piraso ng papel pagbabago, tulad ng, A to B, at B sa C, at C upang D, 835 00:40:46,530 --> 00:40:47,590 at iba pa. 836 00:40:47,590 --> 00:40:50,300 Ngunit ang tunay na kayo ay pag-encrypt ang iyong impormasyon, kahit 837 00:40:50,300 --> 00:40:53,300 kung ito ay isang maliit na walang halaga, ay hindi na mahirap para sa mga guro upang mapagtanto, 838 00:40:53,300 --> 00:40:55,675 well, kung ikaw lamang baguhin B sa A at C sa B, 839 00:40:55,675 --> 00:40:57,550 aktwal mong malaman kung kung ano ang mensahe ay, 840 00:40:57,550 --> 00:40:59,700 ngunit ikaw ay sa ciphering impormasyon. 841 00:40:59,700 --> 00:41:03,420 >> lamang ang iyong ginagawa ito lamang, na halos tulad Ralphie dito 842 00:41:03,420 --> 00:41:07,934 sa isang sikat na pelikula na nagpe-play medyo marami ad nauseum bawat taglamig. 843 00:41:07,934 --> 00:41:08,600 [Video playback] 844 00:41:08,600 --> 00:41:11,180 -Maging Ito kilala sa lahat na Ralph Parker ay sa pamamagitan nito 845 00:41:11,180 --> 00:41:14,070 hihirangin ng isang miyembro ng Little Orphan Annie Secret Circle 846 00:41:14,070 --> 00:41:17,700 at karapat-dapat sa lahat ng mga honors at mga benepisyo nagaganap dito. 847 00:41:17,700 --> 00:41:24,340 >> -Signed, Little ulila Annie, counter-sign Pierre Andre, sa tinta. 848 00:41:24,340 --> 00:41:27,160 Honors at mga benepisyo, na sa edad na siyam. 849 00:41:27,160 --> 00:41:30,490 850 00:41:30,490 --> 00:41:31,825 >> [Sigaw] 851 00:41:31,825 --> 00:41:33,750 852 00:41:33,750 --> 00:41:34,250 -Halika On. 853 00:41:34,250 --> 00:41:35,210 Sabihin makakuha sa sa mga ito. 854 00:41:35,210 --> 00:41:39,530 Hindi ko kailangan ang lahat na jazz tungkol smugglers at pirates. 855 00:41:39,530 --> 00:41:41,660 >> -Makinig Bukas ng gabi para sa ang concluding pakikipagsapalaran 856 00:41:41,660 --> 00:41:43,880 ng itim na barko ng pirata. 857 00:41:43,880 --> 00:41:46,650 Ngayon, ito ay oras para sa lihim na mensahe ni Annie 858 00:41:46,650 --> 00:41:49,840 para sa iyo miyembro ng Lihim Circle. 859 00:41:49,840 --> 00:41:53,570 Tandaan, mga bata, mga kasapi lamang ng Annie Secret Circle 860 00:41:53,570 --> 00:41:56,140 maaaring mabasa lihim na mensahe ni Annie. 861 00:41:56,140 --> 00:42:00,340 >> Tandaan, Annie ay depende sa iyo. 862 00:42:00,340 --> 00:42:02,880 Itakda ang iyong mga pin sa B2. 863 00:42:02,880 --> 00:42:05,230 Narito ang mensahe. 864 00:42:05,230 --> 00:42:06,090 12, 11-- 865 00:42:06,090 --> 00:42:10,250 >> -Ako In, ang aking unang lihim na pulong. 866 00:42:10,250 --> 00:42:13,890 >> -14, 11, 18, 16. 867 00:42:13,890 --> 00:42:15,780 >> -Pierre Ay sa malakas na tinig ngayong gabi. 868 00:42:15,780 --> 00:42:19,000 kaya kong sabihin na sa gabing ito ni mensahe ay talagang mahalaga. 869 00:42:19,000 --> 00:42:22,694 >> -3, 25, na ang isang mensahe mula Annie sarili. 870 00:42:22,694 --> 00:42:23,860 Tandaan, huwag sabihin sa sinuman. 871 00:42:23,860 --> 00:42:28,760 872 00:42:28,760 --> 00:42:32,930 >> -90 Segundo mamaya, ako sa ang tanging kuwarto sa bahay kung saan ang isang batang lalaki ng siyam na 873 00:42:32,930 --> 00:42:37,040 maaaring umupo sa privacy at mabasa. 874 00:42:37,040 --> 00:42:39,730 Aha, B! 875 00:42:39,730 --> 00:42:42,360 Nagpunta ako sa susunod, E. 876 00:42:42,360 --> 00:42:44,520 >> Ang unang salita ay maaaring. 877 00:42:44,520 --> 00:42:49,032 S, ito ay darating madali na ngayon, U, 25-- 878 00:42:49,032 --> 00:42:51,733 >> -Oh, Dumating sa, Ralphie, ako gotta go! 879 00:42:51,733 --> 00:42:53,688 >> -I'll Maging karapatan down, Ma! 880 00:42:53,688 --> 00:42:54,188 Gee paghuni! 881 00:42:54,188 --> 00:42:58,116 882 00:42:58,116 --> 00:43:04,060 >> -T, Oh, siguraduhin to-- siguraduhin na kung ano? 883 00:43:04,060 --> 00:43:05,970 Ano Little Orphan Annie sinusubukan mong sabihin? 884 00:43:05,970 --> 00:43:07,264 Maging sigurado sa kung ano? 885 00:43:07,264 --> 00:43:09,634 >> -Ralphie, Andy ay nakuha na pumunta, ikaw ay mangyaring dumating out? 886 00:43:09,634 --> 00:43:10,480 >> -Ang Lahat ng mga karapatan, Ma! 887 00:43:10,480 --> 00:43:12,880 Kukunin ko maging karapatan sa labas! 888 00:43:12,880 --> 00:43:14,550 >> -Ako Ay nakakakuha ng mas malapit na ngayon. 889 00:43:14,550 --> 00:43:16,620 Ang pag-igting ay kahila-hilakbot. 890 00:43:16,620 --> 00:43:17,720 Ano ba iyon? 891 00:43:17,720 --> 00:43:20,170 Ang kapalaran ng mga planeta maaaring mag-hang sa balanse. 892 00:43:20,170 --> 00:43:20,670 >> -Ralphie! 893 00:43:20,670 --> 00:43:23,170 ni Andy gotta go! 894 00:43:23,170 --> 00:43:26,890 >> -I'll Maging karapatan sa labas, para sa umiiyak nang malakas! 895 00:43:26,890 --> 00:43:32,680 >> -Halos Doon, ang aking mga daliri nagsakay, ang aking isip ay isang bakal bitag, bawat titigan vibrated. 896 00:43:32,680 --> 00:43:37,198 Ito ay halos malinaw, yes, yes, yes. 897 00:43:37,198 --> 00:43:43,091 >> -Maging Sigurado na uminom ng iyong Ovaltine. 898 00:43:43,091 --> 00:43:43,590 Ovaltine? 899 00:43:43,590 --> 00:43:48,160 900 00:43:48,160 --> 00:43:49,430 A pangit commercial? 901 00:43:49,430 --> 00:43:53,046 902 00:43:53,046 --> 00:43:54,227 Anak ng isang asong babae. 903 00:43:54,227 --> 00:43:54,810 [END-playback] 904 00:43:54,810 --> 00:43:57,390 David J. MALAN: OK, kaya na noon ay isang napaka-haba paraan 905 00:43:57,390 --> 00:44:00,660 ng pagpapasok cryptography, at din Ovaltine. 906 00:44:00,660 --> 00:44:04,470 Sa katunayan, mula sa gulang advert dito, kung bakit ay Ovaltine kaya magandang? 907 00:44:04,470 --> 00:44:09,470 Ito ay isang puro pagkuha ng hinog barley malta, gatas purong creamy baka, 908 00:44:09,470 --> 00:44:14,360 at espesyal na inihanda cocoa, kasama may natural phosphatides at bitamina. 909 00:44:14,360 --> 00:44:18,240 Ito ay higit pang pinatibay na may karagdagang mga bitamina B at D, yum. 910 00:44:18,240 --> 00:44:21,600 At maaari mo pa ring makakuha ng mga ito, tila, sa Amazon, tulad ng ginawa namin dito. 911 00:44:21,600 --> 00:44:24,810 >> Ngunit ang pag-uudyok dito ay upang ipakilala cryptography, partikular 912 00:44:24,810 --> 00:44:28,340 isang uri ng cryptography kilala bilang sikretong key cryptography. 913 00:44:28,340 --> 00:44:34,284 At bilang ang pangalan nagmumungkahi, ang buong seguridad ng isang lihim na key crypto system, 914 00:44:34,284 --> 00:44:36,200 kung ikaw ay, isang pamamaraan para sa mga lamang scrambling 915 00:44:36,200 --> 00:44:40,960 impormasyon sa pagitan ng dalawang tao, ay na lamang sa nagpadala at lamang ang tatanggap 916 00:44:40,960 --> 00:44:46,980 malaman ng isang lihim na key-- ilang mga halaga, ang ilang mga lihim na parirala, ang ilang mga lihim na numero, na 917 00:44:46,980 --> 00:44:50,660 nagpapahintulot sa mga ito sa parehong encrypt at decrypt impormasyon. 918 00:44:50,660 --> 00:44:53,470 At cryptography, talaga, ay lamang ito mula sa linggo 0. 919 00:44:53,470 --> 00:44:56,715 >> Ito ay isang problema kung saan mayroong inputs, tulad ng mga tunay na mensahe sa Ingles 920 00:44:56,715 --> 00:44:59,340 o kahit anong wika na iyong nais na magpadala sa isang tao sa klase, 921 00:44:59,340 --> 00:45:00,580 o ibang parte ng internet. 922 00:45:00,580 --> 00:45:03,840 Mayroong ilang mga output, kung saan ay pagpunta na maging ang scrambled mensahe na kayo 923 00:45:03,840 --> 00:45:05,250 gusto ang tatanggap sa tumanggap. 924 00:45:05,250 --> 00:45:07,405 At kahit na ang isang tao sa middle natatanggap nito masyadong, 925 00:45:07,405 --> 00:45:09,780 hindi mo nais ang mga ito upang kinakailangang ma-decrypt ito, 926 00:45:09,780 --> 00:45:12,840 dahil sa loob ng mga ito itim na kahon, o algorithm, 927 00:45:12,840 --> 00:45:17,650 ay ilang mga mekanismo, ang ilang mga hakbang-hakbang tagubilin, para sa paglalaan na input 928 00:45:17,650 --> 00:45:20,710 at pag-convert ito sa output, sa sana ay isang ligtas na paraan. 929 00:45:20,710 --> 00:45:23,640 >> At, sa katunayan, may ilang bokabularyo sa mundong ito ang mga sumusunod. 930 00:45:23,640 --> 00:45:26,100 Plain text ay ang salita ng computer siyentipiko gagawin 931 00:45:26,100 --> 00:45:28,449 gamitin upang ilarawan ang input mensahe, gaya ng Inglis 932 00:45:28,449 --> 00:45:31,240 o kahit anong wika ang iyong aktwal na nais na magpadala sa ilang mga iba pang mga tao. 933 00:45:31,240 --> 00:45:35,450 At pagkatapos ay ang ciphertext ay ang pag-aagawan sa enciphered, o naka-encrypt, 934 00:45:35,450 --> 00:45:36,520 bersyon noon. 935 00:45:36,520 --> 00:45:38,750 >> Ngunit mayroong isa pang sahog dito. 936 00:45:38,750 --> 00:45:43,200 May isa iba pang input sa secret key cryptography. 937 00:45:43,200 --> 00:45:45,200 At iyon ay ang susi mismo, na kung saan ay, sa pangkalahatan, 938 00:45:45,200 --> 00:45:48,930 dahil kakailanganin namin makita, ang isang bilang, o sulat, o salita, ano man 939 00:45:48,930 --> 00:45:51,980 ang algorithm na ito ay talagang inaasahan. 940 00:45:51,980 --> 00:45:53,870 >> At paano mo i-decrypt impormasyon? 941 00:45:53,870 --> 00:45:55,110 Paano mo ipaliwanag ito? 942 00:45:55,110 --> 00:45:57,950 Well, ikaw lamang baligtarin ang outputs at ang inputs. 943 00:45:57,950 --> 00:46:00,900 >> Sa ibang salita, sa sandaling ang isang tao na natatanggap ng iyong naka-encrypt na mensahe, 944 00:46:00,900 --> 00:46:03,740 siya lamang ay may na malaman na parehong key. 945 00:46:03,740 --> 00:46:05,700 Sila ay nakatanggap ng ciphertext. 946 00:46:05,700 --> 00:46:09,530 At sa pamamagitan ng i-plug ang mga dalawang inputs sa sistema crypto, 947 00:46:09,530 --> 00:46:14,260 ang algorithm, ito itim na kahon, sa labas ay dapat na dumating sa orihinal na plaintext. 948 00:46:14,260 --> 00:46:17,830 At kaya iyon ang napakataas na antas view ng kung ano cryptography ay talagang 949 00:46:17,830 --> 00:46:18,590 ang lahat ng tungkol sa. 950 00:46:18,590 --> 00:46:20,030 >> Kaya sabihin makakuha ng doon. 951 00:46:20,030 --> 00:46:22,700 Sabihin ngayon tumingin sa ilalim ng hood ng isang bagay 952 00:46:22,700 --> 00:46:26,000 kami ay pagkuha para sa ipinagkaloob para nakaraang linggo, at para sa session na ito 953 00:46:26,000 --> 00:46:27,629 here-- string. 954 00:46:27,629 --> 00:46:30,295 Ang isang string sa dulo ng araw ay lamang ng isang pagkakasunod-sunod ng mga character. 955 00:46:30,295 --> 00:46:33,610 >> Ito ay maaaring maging hello world, o kumusta Zamyla, o ano pa man. 956 00:46:33,610 --> 00:46:37,050 Ngunit ano ang ibig sabihin nito sa maging isang pagkakasunod-sunod ng mga character? 957 00:46:37,050 --> 00:46:41,520 Sa katunayan, ang CS50 library ay nagbibigay sa sa amin ng isang uri ng data na tinatawag na string. 958 00:46:41,520 --> 00:46:45,140 >> Ngunit doon ay talagang walang ganoong bagay bilang isang string sa C. 959 00:46:45,140 --> 00:46:49,450 Ito ay tunay na lamang ng isang pagkakasunod-sunod ng character, character, character, 960 00:46:49,450 --> 00:46:52,180 character, likod, sa likod, sa likod, sa likod, upang i-back sa loob 961 00:46:52,180 --> 00:46:54,650 ng memory ng iyong computer, o RAM. 962 00:46:54,650 --> 00:46:58,940 At kami ay tumingin ng mas malalim sa na sa hinaharap kapag tinitingnan namin ang memory mismo, 963 00:46:58,940 --> 00:47:02,030 at ang paggamit, at ang banta na kasangkot. 964 00:47:02,030 --> 00:47:04,100 >> Ngunit ipaalam sa Isaalang-alang natin ang string Zamyla. 965 00:47:04,100 --> 00:47:07,480 Kaya lang ang pangalan ng ang mga tao dito, Zamyla, 966 00:47:07,480 --> 00:47:12,030 na ay isang pagkakasunod-sunod ng character, Z-A-M-Y-L-A. 967 00:47:12,030 --> 00:47:16,020 At ngayon sabihin ipagpalagay na ang pangalan ni Zamyla ay naka-imbak sa loob ng isang computer 968 00:47:16,020 --> 00:47:16,880 program. 969 00:47:16,880 --> 00:47:20,830 >> Well, ito ay sa dahilan na kami ay magagawang upang tumingin sa mga character 970 00:47:20,830 --> 00:47:21,590 paisa-isa. 971 00:47:21,590 --> 00:47:24,710 Kaya ako lamang ang pagpunta upang gumuhit ng isang maliit na kahon sa paligid ng pangalan ni Zamyla dito. 972 00:47:24,710 --> 00:47:31,580 At ito ay ang kaso sa C na kapag ikaw magkaroon ng isang string, tulad Zamyla-- at marahil 973 00:47:31,580 --> 00:47:34,940 na string bumalik na galing isang function tulad get string, 974 00:47:34,940 --> 00:47:38,540 maaari mong aktwal na manipulahin ito ng character sa pamamagitan ng character. 975 00:47:38,540 --> 00:47:42,070 >> Ngayon, ito ay dyermeyn para sa pag-uusap sa kamay, dahil 976 00:47:42,070 --> 00:47:46,420 sa cryptography kung gusto mong baguhin A to B, at B sa C, at C upang D, 977 00:47:46,420 --> 00:47:49,650 at iba pa, na kailangan mo upang ma upang tumingin sa mga indibidwal na mga character 978 00:47:49,650 --> 00:47:50,190 sa isang string. 979 00:47:50,190 --> 00:47:52,695 Kailangan mong magagawang baguhin ang Z sa ibang bagay, ang A 980 00:47:52,695 --> 00:47:55,280 sa ibang bagay, ang M sa ibang bagay, at iba pa. 981 00:47:55,280 --> 00:47:58,000 At kaya kailangan namin ng isang paraan, programming, kaya 982 00:47:58,000 --> 00:48:03,020 na magsalita, sa C upang magagawang baguhin at tumingin sa mga indibidwal na mga titik. 983 00:48:03,020 --> 00:48:05,690 At maaari naming gawin ito tulad ng sumusunod. 984 00:48:05,690 --> 00:48:08,340 >> Hayaan akong pumunta ulo pabalik sa CS50 IDE. 985 00:48:08,340 --> 00:48:11,130 At hayaan mo akong magpatuloy at lumikha ng isang bagong file 986 00:48:11,130 --> 00:48:16,134 na Tatawag ako sa pagkakataong ito string0, bilang aming unang tulad halimbawa, tuldok c. 987 00:48:16,134 --> 00:48:18,300 At ako pagpunta sa sige at pumilantik ito up tulad ng sumusunod. 988 00:48:18,300 --> 00:48:22,870 >> Kaya isama CS50.h, at pagkatapos ng pamantayang io.h, 989 00:48:22,870 --> 00:48:25,990 kung saan ako halos palaging pagpunta sa ay gumagamit ng sa aking mga programa, hindi bababa sa 990 00:48:25,990 --> 00:48:26,780 sa una. 991 00:48:26,780 --> 00:48:32,180 int pangunahing walang bisa, at pagkatapos ay sa dito ako pagpunta sa gawin string ay makakakuha makakuha string. 992 00:48:32,180 --> 00:48:35,260 At pagkatapos ay ako pagpunta sa sige, at gawin ito. 993 00:48:35,260 --> 00:48:37,460 Gusto kong pumunta ng maaga at, bilang isang katinuan check, 994 00:48:37,460 --> 00:48:43,607 lang sabihin, hello, porsiyento s, semi-colon, gumagawa string 0. 995 00:48:43,607 --> 00:48:44,690 Uh oh, ano ang gagawin ko dito? 996 00:48:44,690 --> 00:48:45,930 Oh, hindi ako nag-plug ito in. 997 00:48:45,930 --> 00:48:48,120 Kaya natutunan aralin, na ay hindi intensyonal. 998 00:48:48,120 --> 00:48:52,480 >> So error, mas porsiyento mga conversion kaysa data arguments. 999 00:48:52,480 --> 00:48:54,940 At ito ay kung saan, sa line 7-- OK, kaya Mayroon akong, 1000 00:48:54,940 --> 00:48:56,690 quote magpanipi, na ang dahilan aking string sa printf. 1001 00:48:56,690 --> 00:48:58,151 Mayroon akong isang porsyento sign. 1002 00:48:58,151 --> 00:48:59,650 Ngunit ako nawawala ang pangalawang argumento. 1003 00:48:59,650 --> 00:49:03,190 >> Ako nawawala ang kuwit s, na kung saan Ko magkaroon ng sa nakaraang mga halimbawa. 1004 00:49:03,190 --> 00:49:06,650 Kaya ang isang magandang pagkakataon upang ayusin isa pang pagkakamali, hindi sinasadya. 1005 00:49:06,650 --> 00:49:09,950 At ngayon hayaan mo akong magpatakbo ng string0, i-type Zamyla. 1006 00:49:09,950 --> 00:49:10,970 OK, hello Zamyla. 1007 00:49:10,970 --> 00:49:14,144 >> Kaya na tumakbo namin ang ganitong uri ng programa ng ilang iba't ibang oras ngayon. 1008 00:49:14,144 --> 00:49:16,310 Ngunit sabihin gawin ang isang bagay ng maliit na naiiba ngayon. 1009 00:49:16,310 --> 00:49:19,450 Sa halip na lamang ang pag-print Zamyla ni buong pangalan out sa printf, 1010 00:49:19,450 --> 00:49:21,350 sabihin gawin ito ng character sa pamamagitan ng character. 1011 00:49:21,350 --> 00:49:22,700 >> Ako pagpunta sa gumamit ng isang para sa loop. 1012 00:49:22,700 --> 00:49:26,160 At ako pagpunta sa bigyan ang aking sarili isang pagbilang variable, na tinatawag na i. 1013 00:49:26,160 --> 00:49:33,530 At ako pagpunta sa panatilihin iterating, kaya hangga't i ay mas mababa kaysa sa haba ng s. 1014 00:49:33,530 --> 00:49:35,930 >> Ito ay lumiliko out, kami ay hindi gawin ito huling oras, 1015 00:49:35,930 --> 00:49:39,100 na c lumapit kumuha ng isang function na tinatawag na Stirling. 1016 00:49:39,100 --> 00:49:42,690 Bumalik sa araw, at sa pangkalahatan pa rin kapag ang pagpapatupad pag-andar, 1017 00:49:42,690 --> 00:49:45,405 mga kawani na tao ay madalas na piliin ang tunay maikli at malinaw pangalan na uri ng tunog 1018 00:49:45,405 --> 00:49:48,280 tulad ng kung ano ang gusto mo, kahit na ito ay nawawala ng ilang mga vowels o titik. 1019 00:49:48,280 --> 00:49:50,660 Kaya Stirling ay ang pangalan ng isang function na 1020 00:49:50,660 --> 00:49:53,880 tumatagal ng isang argument sa pagitan ng panaklong na dapat ay isang string. 1021 00:49:53,880 --> 00:49:56,910 At ito lamang ay nagbabalik ng isang integer, ang haba ng na string. 1022 00:49:56,910 --> 00:50:00,580 >> Kaya ito para sa loop on line 7 ay pagpunta upang simulan ang pagbibilang sa i katumbas ng 0. 1023 00:50:00,580 --> 00:50:02,530 Ito ay pagpunta sa dagdagan i sa bawat pag-ulit 1024 00:50:02,530 --> 00:50:04,350 ng 1, bilang namin ang paggawa ng ilang beses. 1025 00:50:04,350 --> 00:50:06,780 Ngunit ito ay pagpunta sa lamang gawin ito up hanggang sa punto 1026 00:50:06,780 --> 00:50:09,660 kapag ako ay ang haba ng string mismo. 1027 00:50:09,660 --> 00:50:14,520 >> Kaya ito ay isang paraan ng, sa huli, iterating sa paglipas ng ang mga character 1028 00:50:14,520 --> 00:50:17,430 sa string bilang ay ang mga sumusunod. 1029 00:50:17,430 --> 00:50:20,670 Pupunta ako upang i-print out hindi isang buong string, ngunit porsiyento c, 1030 00:50:20,670 --> 00:50:22,860 isang solong character sinundan sa pamamagitan ng isang bagong linya. 1031 00:50:22,860 --> 00:50:24,880 At pagkatapos ay ako pagpunta sa sige, at kailangan ko 1032 00:50:24,880 --> 00:50:29,080 upang sabihin na gusto kong i-print ith character ng s. 1033 00:50:29,080 --> 00:50:33,450 >> Kaya kung ako ay ang variable na nagpapahiwatig ang index ng string, kung saan 1034 00:50:33,450 --> 00:50:37,230 ikaw ay sa loob nito, kailangan ko para ma- sabihin, bigyan ako ang ith character ng s. 1035 00:50:37,230 --> 00:50:40,390 At c ay may isang paraan ng paggawa ng sa mga square bracket. 1036 00:50:40,390 --> 00:50:43,679 Mo lang sabihin ang pangalan ng string, na sa kasong ito ay s. 1037 00:50:43,679 --> 00:50:46,970 Pagkatapos ay gamitin mo square bracket, na kung saan ay karaniwang lamang sa itaas ng iyong Return o Enter 1038 00:50:46,970 --> 00:50:48,110 key sa keyboard. 1039 00:50:48,110 --> 00:50:52,410 At pagkatapos mong ilagay ang index ng character na gusto mong i-print. 1040 00:50:52,410 --> 00:50:55,960 Kaya ang index ay pagpunta sa maging isang number-- 0, o 1, o 2, o 3, o tuldok, 1041 00:50:55,960 --> 00:50:57,590 tuldok, tuldok, ang ilang mga iba pang mga numero. 1042 00:50:57,590 --> 00:51:00,920 >> At hindi na namin matiyak na ito ay pagpunta sa maging ang tamang numero, dahil ako 1043 00:51:00,920 --> 00:51:02,360 magbilangan sa 0. 1044 00:51:02,360 --> 00:51:07,020 At sa pamamagitan ng default, ang unang character sa isang string ay sa pamamagitan ng convention 0. 1045 00:51:07,020 --> 00:51:09,230 At ang pangalawang character ay bracket 1. 1046 00:51:09,230 --> 00:51:11,120 At ang ikatlong karakter ay bracket 2. 1047 00:51:11,120 --> 00:51:13,630 At hindi mo nais na pumunta masyadong Sa ngayon, ngunit kami ay hindi dahil kami 1048 00:51:13,630 --> 00:51:17,780 pagpunta sa lamang dagdagan i hanggang sa ito ay katumbas ng haba ng string. 1049 00:51:17,780 --> 00:51:20,210 At sa puntong, ito para sa loop ay hihinto. 1050 00:51:20,210 --> 00:51:25,550 >> Kaya hayaan mo akong magpatuloy at i-save ito programa, at run gumawa string 0. 1051 00:51:25,550 --> 00:51:28,400 Ngunit ako screwed up. 1052 00:51:28,400 --> 00:51:35,390 Kataon lamang deklarasyon ng function library Stirling may uri gayo't such-- ngayon, 1053 00:51:35,390 --> 00:51:36,430 ito tunog pamilyar. 1054 00:51:36,430 --> 00:51:37,440 Ngunit ito ay hindi printf. 1055 00:51:37,440 --> 00:51:38,540 At ito ay hindi makakuha ng string. 1056 00:51:38,540 --> 00:51:40,480 >> Hindi ko magtaas in sa parehong paraan ngayon. 1057 00:51:40,480 --> 00:51:45,100 Ngunit mapansin pababa dito isang maliit na down karagdagang, isama ang header string.h, 1058 00:51:45,100 --> 00:51:47,210 explicitly ibigay ang pagpapahayag ukol sa Stirling. 1059 00:51:47,210 --> 00:51:48,820 Kaya doon ay talagang isang palatandaan sa doon. 1060 00:51:48,820 --> 00:51:51,670 >> At sa katunayan ito ay lumiliko out may isa pang header file 1061 00:51:51,670 --> 00:51:53,970 na hindi namin na nagamit sa klase pa, ngunit ito ay 1062 00:51:53,970 --> 00:51:56,480 kabilang sa mga magagamit sa iyo, na tinatawag na string.h. 1063 00:51:56,480 --> 00:52:00,930 At sa file, string.h ay Stirling ipinahayag. 1064 00:52:00,930 --> 00:52:05,220 Kaya hayaan mo akong magpatuloy at i-save ito, gumawa string 1065 00:52:05,220 --> 00:52:08,040 0-- nice, walang error na mensahe ngayon. 1066 00:52:08,040 --> 00:52:12,290 >> ./string0 Zamyla, at ako tungkol sa upang pindutin ang Enter, 1067 00:52:12,290 --> 00:52:16,710 kung saang punto getstring ay pagpunta upang ibalik ang string, ilagay ito sa s. 1068 00:52:16,710 --> 00:52:21,890 Pagkatapos na ang para sa loop ay pagpunta upang umulit sa paglipas ng S character ng isa sa isang panahon, 1069 00:52:21,890 --> 00:52:28,420 at i-print ang mga ito isa sa bawat linya, dahil Ako ay nagkaroon na backslash n sa dulo. 1070 00:52:28,420 --> 00:52:34,530 Pagayon ako ay ligtaan na backslash n, at pagkatapos lamang i-print ang lahat ng Zamyla 1071 00:52:34,530 --> 00:52:37,460 sa parehong linya, epektibong reimplementing 1072 00:52:37,460 --> 00:52:38,999 printf, na kung saan ay hindi lahat na kapaki-pakinabang. 1073 00:52:38,999 --> 00:52:40,540 Ngunit sa kasong ito, hindi ko nagawa iyon. 1074 00:52:40,540 --> 00:52:43,610 Ang tunay ko na naka-print na isa character sa isang pagkakataon, isa sa bawat linya, 1075 00:52:43,610 --> 00:52:45,400 kaya na namin talagang makita ang mga epekto. 1076 00:52:45,400 --> 00:52:46,900 >> Ngunit dapat kong tandaan ang isang bagay dito. 1077 00:52:46,900 --> 00:52:48,930 At kami ay bumalik sa ito sa isang susunod na linggo. 1078 00:52:48,930 --> 00:52:52,650 Ito ay lumiliko out na ito code ay potensyal na maraming surot. 1079 00:52:52,650 --> 00:52:56,560 >> Ito ay lumiliko out na get string at ang ilang mga iba pang mga function sa buhay 1080 00:52:56,560 --> 00:53:00,280 gawin hindi kinakailangang laging bumalik kung ano ang iyong inaasahan. 1081 00:53:00,280 --> 00:53:03,010 Alam namin mula sa klase noong nakaraang oras sa ito na makakakuha 1082 00:53:03,010 --> 00:53:04,960 string ay dapat na ibalik ang isang string. 1083 00:53:04,960 --> 00:53:09,900 Ngunit paano kung ang mga uri ng user sa labas tulad isang mahabang salita, o talata, o sanaysay 1084 00:53:09,900 --> 00:53:13,010 na lamang ay hindi sapat memory sa computer upang magkasya ito. 1085 00:53:13,010 --> 00:53:15,410 >> Like, paano kung may mangyaring hindi mali sa ilalim ng hood? 1086 00:53:15,410 --> 00:53:18,400 Maaaring hindi ito madalas mangyari, ngunit ito ay maaaring mangyari nang isang beses 1087 00:53:18,400 --> 00:53:21,520 sa isang habang, very madalang. 1088 00:53:21,520 --> 00:53:25,460 At kaya ito ay lumiliko out na get string at pag-andar tulad ng ito ay gawin hindi kinakailangang 1089 00:53:25,460 --> 00:53:26,380 palaging bumalik string. 1090 00:53:26,380 --> 00:53:30,680 Sila ay maaaring ibalik ang ilang mga error na halaga, ilang sentinel halaga kaya na magsalita, 1091 00:53:30,680 --> 00:53:32,612 na nagpapahiwatig na isang bagay ay gone mali. 1092 00:53:32,612 --> 00:53:35,320 At gusto mo lamang malaman na ito mula sa pagkakaroon ng natutunan ito sa klase ngayon, 1093 00:53:35,320 --> 00:53:37,700 o pagkakaroon ng basahin ang ilang mga karagdagang dokumentasyon. 1094 00:53:37,700 --> 00:53:43,120 Ito ay lumiliko out na get string maaaring bumalik sa isang halaga na tinatawag na null. 1095 00:53:43,120 --> 00:53:46,220 Null ay isang espesyal na halaga na kami ay bumalik sa sa isang susunod na linggo. 1096 00:53:46,220 --> 00:53:50,420 Ngunit sa ngayon, lamang malaman na kung gusto ko upang maging talagang tamang sa paglipat ng pasulong 1097 00:53:50,420 --> 00:53:52,650 gamit get string, ako ay hindi dapat lamang tumawag ito, 1098 00:53:52,650 --> 00:53:56,870 at nang walang taros gamitin ang kanyang return halaga, nagtitiwala na ito ay isang string. 1099 00:53:56,870 --> 00:53:59,420 >> dapat kong sabihin ninyo muna, hey, maghintay ng isang minuto, lamang 1100 00:53:59,420 --> 00:54:03,380 magpatuloy kung s ay hindi katumbas null, kung saan null, muli, 1101 00:54:03,380 --> 00:54:04,660 ay lamang ng ilang mga espesyal na halaga. 1102 00:54:04,660 --> 00:54:07,770 At ito ay ang tanging espesyal na halaga sa iyo kailangang mag-alala tungkol sa para sa get string. 1103 00:54:07,770 --> 00:54:10,900 Kumuha string ay alinman sa pagpunta upang bumalik sa isang string o null. 1104 00:54:10,900 --> 00:54:17,219 >> At ito exclamation point ay katumbas ng pag-sign maaari mong malaman mula sa siguro math class 1105 00:54:17,219 --> 00:54:20,510 na maaari mong gumuhit ng isang pantay-pantay na mag-sign gamit isang linya sa pamamagitan ng ito upang ipahiwatig hindi matuwid. 1106 00:54:20,510 --> 00:54:23,135 Iyan ay hindi sa pangkalahatan ay isang character maaari mong i-type sa iyong keyboard. 1107 00:54:23,135 --> 00:54:26,480 At kaya sa karamihan ng mga wika programming, kapag gusto mong sabihin hindi pantay-pantay, 1108 00:54:26,480 --> 00:54:29,160 gumamit ka ng isang exclamation point, o mas kilala bilang putok. 1109 00:54:29,160 --> 00:54:33,180 Kaya sabihin mo bang katumbas, na kung saan nangangahulugan na hindi katumbas, logically. 1110 00:54:33,180 --> 00:54:38,060 Ito ay tulad ng mayroong walang dakila kaysa, o katumbas ng, o mas mababa sa 1111 00:54:38,060 --> 00:54:41,270 o katumbas ng key sa iyong keyboard na ginagawa ang lahat ng ito sa isang simbolo. 1112 00:54:41,270 --> 00:54:44,020 Kaya na ang dahilan kung bakit, sa nakaraang mga halimbawa, ginawa mo ang isang bukas na bracket, at pagkatapos ay 1113 00:54:44,020 --> 00:54:48,670 equal sign, upang gawin mas malaki kaysa sa o, sabihin, mas mababa sa. 1114 00:54:48,670 --> 00:54:49,910 >> Kaya kung ano ang takeaway dito? 1115 00:54:49,910 --> 00:54:53,880 Ito ay lamang ng isang paraan ngayon ng pagpapasok syntax na ito, ang tampok na ito, 1116 00:54:53,880 --> 00:54:57,390 iterating sa paglipas ng mga indibidwal character sa isang string. 1117 00:54:57,390 --> 00:55:00,260 At tulad ng mga square bracket daan sa iyo upang makakuha ng sa kanila, 1118 00:55:00,260 --> 00:55:03,790 isaalang-alang ang mga square bracket bilang uri ng hinting sa ito pinagbabatayan 1119 00:55:03,790 --> 00:55:06,040 disenyo, kung saan ang bawat karakter sa loob ng isang string 1120 00:55:06,040 --> 00:55:10,180 ay uri ng boxed sa isang lugar sa ilalim ng hood sa memorya ng iyong computer. 1121 00:55:10,180 --> 00:55:12,340 >> Ngunit sabihin gumawa ng isang variant ng ito. 1122 00:55:12,340 --> 00:55:14,880 Ito ay lumiliko out na ito program ay tama. 1123 00:55:14,880 --> 00:55:18,810 Kaya bawat CS50 axes para sa pagsusuri code, ito ay tama na ngayon. 1124 00:55:18,810 --> 00:55:22,959 Lalo na ngayon na ako ng paglagay ng tsek para null, ang program na ito ay hindi kailanman dapat bumagsak. 1125 00:55:22,959 --> 00:55:24,500 At ako lamang malaman na mula sa karanasan. 1126 00:55:24,500 --> 00:55:28,040 Ngunit mayroong walang ibang tao na maaari naming talagang magkamali dito. 1127 00:55:28,040 --> 00:55:31,860 Ngunit ito ay hindi masyadong mahusay na dinisenyo, dahil sabihin bumalik sa pangunahing kaalaman. 1128 00:55:31,860 --> 00:55:34,450 >> Una, principles-- ano ang ginagawa ng isang para sa loop gawin? 1129 00:55:34,450 --> 00:55:36,290 A para sa loop ay tatlong bagay. 1130 00:55:36,290 --> 00:55:39,340 Ito initializes ilang halaga, kung hilingin mo ito sa. 1131 00:55:39,340 --> 00:55:41,770 Sumusuri isang kondisyon. 1132 00:55:41,770 --> 00:55:45,380 At pagkatapos ay pagkatapos ng bawat pag-ulit, pagkatapos ng bawat cycle, 1133 00:55:45,380 --> 00:55:49,330 ito palugit ilang halaga, o mga halaga, dito. 1134 00:55:49,330 --> 00:55:50,600 >> Kaya kung ano ang ibig sabihin nito? 1135 00:55:50,600 --> 00:55:52,940 namin initialize i sa 0. 1136 00:55:52,940 --> 00:55:58,610 Kami ay suriin at siguraduhin i Mababa sa ang haba ng s, na kung saan ay Z-A-M-Y-L-A, 1137 00:55:58,610 --> 00:55:59,900 kaya kung saan ay mas mababa sa 6. 1138 00:55:59,900 --> 00:56:02,590 At, sa katunayan, 0 bilang mas mababa sa 6. 1139 00:56:02,590 --> 00:56:05,580 >> I-print namin out Z mula sa pangalan ni Zamyla. 1140 00:56:05,580 --> 00:56:08,080 Pagkatapos namin dinagdagan i mula 0 hanggang 1. 1141 00:56:08,080 --> 00:56:11,290 pagkatapos naming suriin, ay 1 mas mababa kaysa sa haba ng s? 1142 00:56:11,290 --> 00:56:13,270 Ang haba ng s ay 6. 1143 00:56:13,270 --> 00:56:13,950 Oo, ito ay. 1144 00:56:13,950 --> 00:56:16,880 >> Kaya i-print namin ang isang in ni Zamyla pangalan, ZA. 1145 00:56:16,880 --> 00:56:20,090 dagdagan namin i mula 0, sa 1, 2. 1146 00:56:20,090 --> 00:56:23,720 pagkatapos naming suriin, ay 2 mas mababa sa ang haba ng pangalan ni Zamyla. 1147 00:56:23,720 --> 00:56:25,380 6- kaya 2 ay mas mababa sa 6. 1148 00:56:25,380 --> 00:56:30,460 Oo, sabihin i-print out na ngayon M in pangalan Zamyla, ang ikatlong karakter. 1149 00:56:30,460 --> 00:56:34,110 >> Ang susi dito ay na sa bawat pag-ulit ng mga kuwento, Lalabas na ako, 1150 00:56:34,110 --> 00:56:37,810 ay i mas mababa kaysa sa haba ng Zamyla? 1151 00:56:37,810 --> 00:56:40,350 Ngunit ang catch ay na Stirling ay hindi isang ari-arian. 1152 00:56:40,350 --> 00:56:43,100 Yaong ng iyo kung sino ay may programmed bago sa Java o iba pang mga wika 1153 00:56:43,100 --> 00:56:46,310 Nang maalaman man ang haba ng isang string ay isang ari-arian, lamang ng ilang basahin lamang halaga. 1154 00:56:46,310 --> 00:56:50,220 >> Sa C sa kasong ito, kung ito ay isang function na ay literal 1155 00:56:50,220 --> 00:56:53,520 malaman ang bilang ng character sa Zamyla tuwing 1156 00:56:53,520 --> 00:56:54,740 tinatawag naming na function. 1157 00:56:54,740 --> 00:56:58,500 Sa bawat oras na hilingin sa iyo ang computer upang gamitin Stirling, ito ay ang pagkuha ng isang pagtingin sa Zamyla, 1158 00:56:58,500 --> 00:57:01,960 at sinasabi Z-A-M-Y-L-A, 6. 1159 00:57:01,960 --> 00:57:02,962 At ito ay nagbabalik 6. 1160 00:57:02,962 --> 00:57:04,920 Ang susunod na oras na tawagan ka ito sa loob na para sa loop, 1161 00:57:04,920 --> 00:57:08,610 ito ay pagpunta upang tumingin sa Zamyla muli, sinasabi Z-A-M-Y-L-A, 6. 1162 00:57:08,610 --> 00:57:10,320 At ito ay pagpunta upang bumalik 6. 1163 00:57:10,320 --> 00:57:12,980 Kaya kung ano ang bobo tungkol sa disenyo? 1164 00:57:12,980 --> 00:57:17,700 >> Bakit ang aking code ay hindi isang 5 sa 5 para sa disenyo ngayon, kaya na magsalita? 1165 00:57:17,700 --> 00:57:20,600 Well, ako na humihingi ng tanong kung hindi kinakailangan. 1166 00:57:20,600 --> 00:57:23,030 Ako ng paggawa ng mas maraming trabaho kaysa sa kailangan kong. 1167 00:57:23,030 --> 00:57:25,370 >> Kaya kahit na ang sagot ay tama, ako 1168 00:57:25,370 --> 00:57:29,560 humihingi ng computer, kung ano ang ang haba ng Zamyla muli, 1169 00:57:29,560 --> 00:57:31,380 at muli, at muli, at muli? 1170 00:57:31,380 --> 00:57:33,980 At na sagot ay hindi kailanman pagpunta upang baguhin. 1171 00:57:33,980 --> 00:57:35,900 Palaging Ito ay pagpunta sa maging 6. 1172 00:57:35,900 --> 00:57:39,730 >> Kaya ang isang mas mahusay na solusyon kaysa sa na ito ay magiging ang susunod na bersyon. 1173 00:57:39,730 --> 00:57:43,390 Hayaan akong sige at ilagay ito sa isang hiwalay na file na tinatawag na string1.c, 1174 00:57:43,390 --> 00:57:44,990 lamang upang panatilihin ito hiwalay. 1175 00:57:44,990 --> 00:57:47,260 At ito ay lumiliko out sa isang para sa loop, maaari mong aktwal na 1176 00:57:47,260 --> 00:57:50,210 Ipinahahayag maramihang mga variable sa iisang pagkakataon. 1177 00:57:50,210 --> 00:57:53,460 >> Kaya ako pagpunta sa panatilihin i at i-set ito sa 0. 1178 00:57:53,460 --> 00:57:56,190 Kundi pati na rin ako ng pagpunta sa magdagdag ng isang kuwit, at inyong sabihin, 1179 00:57:56,190 --> 00:58:01,050 bigyan ako ng isang variable na tinatawag na n, na ang halaga ay katumbas ng string haba ng s. 1180 00:58:01,050 --> 00:58:09,410 At ngayon, mangyaring gumawa ng aking kalagayan kaya hangga't i ay mas mababa sa n. 1181 00:58:09,410 --> 00:58:14,140 >> Kaya sa ganitong paraan, ang lohika ay magkapareho sa dulo ng araw. 1182 00:58:14,140 --> 00:58:18,280 Ngunit ako ay pag-alala sa halaga 6, sa kasong ito. 1183 00:58:18,280 --> 00:58:19,780 Ano ang haba ng pangalan ni Zamyla? 1184 00:58:19,780 --> 00:58:20,860 At ako ng paglagay ito sa n. 1185 00:58:20,860 --> 00:58:23,050 >> At Lalabas na ako pa rin ang kalagayan sa bawat oras. 1186 00:58:23,050 --> 00:58:24,300 Ay 0 mas mababa sa 6? 1187 00:58:24,300 --> 00:58:25,600 Is 1 mas mababa sa 6? 1188 00:58:25,600 --> 00:58:28,600 Ay 2 mas mababa sa 6, at iba pa? 1189 00:58:28,600 --> 00:58:31,914 >> Ngunit hindi ako humihingi sa computer muli, at muli, kung ano ang 1190 00:58:31,914 --> 00:58:33,080 ang haba ng pangalan ni Zamyla? 1191 00:58:33,080 --> 00:58:34,320 Ano ang haba ng pangalan ni Zamyla? 1192 00:58:34,320 --> 00:58:35,986 Ano ang haba ng pangalan na ito Zamyla ni? 1193 00:58:35,986 --> 00:58:40,440 Ako literal pagtanda na una at lamang sagutin sa ikalawang variable n. 1194 00:58:40,440 --> 00:58:45,280 Kaya ito ngayon ay hindi lamang tama, ngunit din mahusay na dinisenyo. 1195 00:58:45,280 --> 00:58:46,670 >> Ngayon, kung ano ang tungkol style? 1196 00:58:46,670 --> 00:58:48,866 pinangalanan ko ang aking mga variable pretty mabuti, nais kong sabihin. 1197 00:58:48,866 --> 00:58:50,240 Ang mga ito ay sobrang maikli at malinaw ngayon. 1198 00:58:50,240 --> 00:58:52,090 At iyon ang lahat-lahat fine. 1199 00:58:52,090 --> 00:58:55,120 >> Kung mayroon ka lamang ng isang string sa isang programa, 1200 00:58:55,120 --> 00:58:56,860 maaari ka rin tumawag ito s para sa string. 1201 00:58:56,860 --> 00:58:59,370 Kung mayroon ka lamang ng isang variable para sa pagbibilang sa isang programa, 1202 00:58:59,370 --> 00:59:00,710 maaari ka rin tumawag ito i. 1203 00:59:00,710 --> 00:59:03,500 Kung ikaw ay may isang haba, n ay sobrang karaniwang pati na rin. 1204 00:59:03,500 --> 00:59:05,800 Ngunit hindi ko ay may komento alinman sa aking code. 1205 00:59:05,800 --> 00:59:09,200 >> hindi ko na alam ang reader-- kung na ang aking TF, o TA, 1206 00:59:09,200 --> 00:59:12,460 o lamang colleague-- kung ano ang dapat na nagaganap sa programang ito. 1207 00:59:12,460 --> 00:59:15,760 At kaya upang makakuha ng magandang estilo, ano ang Gusto ko nais na gawin 1208 00:59:15,760 --> 00:59:24,580 ay this-- bagay tulad humingi ng gumagamit para sa input. 1209 00:59:24,580 --> 00:59:26,670 At kaya kong muling isulat ito sa anumang bilang ng mga paraan. 1210 00:59:26,670 --> 00:59:35,630 >> Siguraduhin s-- siguraduhin get string nagbalik ng isang string. 1211 00:59:35,630 --> 00:59:40,280 At pagkatapos ay sa here-- at ito ay marahil ang pinaka-mahalagang comment-- umulit 1212 00:59:40,280 --> 00:59:44,450 sa ibabaw ng mga character sa s isa sa isang panahon. 1213 00:59:44,450 --> 00:59:47,060 At maaari ko bang gamitin ang anumang pagpili ng wika English 1214 00:59:47,060 --> 00:59:49,650 dito upang ilarawan ang bawat ng mga chunks ng code. 1215 00:59:49,650 --> 00:59:52,740 >> Pansinin na hindi ko ilagay ang isang magkomento sa bawat linya ng code, 1216 00:59:52,740 --> 00:59:55,690 talagang lamang sa mga kagiliw-giliw sa buhay, ang mga na 1217 00:59:55,690 --> 00:59:59,460 ay may ilang mga kahulugan na maaaring ako nais na gumawa ng sobrang malinaw sa isang tao 1218 00:59:59,460 --> 01:00:00,460 pagbabasa ng aking code. 1219 01:00:00,460 --> 01:00:02,920 At bakit ka pagtawag makakuha string humingi ng gumagamit para sa input? 1220 01:00:02,920 --> 01:00:05,450 Kahit isa na ay hindi kinakailangan lahat na naglalarawan. 1221 01:00:05,450 --> 01:00:09,340 Ngunit ito ay tumutulong nagkukwento, dahil ang pangalawang linya sa kuwento ay, siguraduhin 1222 01:00:09,340 --> 01:00:10,740 makakuha ng string nagbalik ng isang string. 1223 01:00:10,740 --> 01:00:14,260 >> At ang ikatlong linya sa kuwento ay, umulit sa ibabaw ng mga character sa s isa 1224 01:00:14,260 --> 01:00:15,380 sa isang pagkakataon. 1225 01:00:15,380 --> 01:00:17,920 At ngayon lamang para sa mabuting pamamaraan, Ako pagpunta sa sige at idagdag 1226 01:00:17,920 --> 01:00:24,560 isa pang comment na lang sabi ni print i-ika na character sa s. 1227 01:00:24,560 --> 01:00:26,520 Ngayon, ano ang ginawa ko sa pagtatapos ng araw? 1228 01:00:26,520 --> 01:00:29,190 >> Ako ay nagdagdag ng ilang Ingles salita sa anyo ng mga komento. 1229 01:00:29,190 --> 01:00:32,700 Ang slash slash symbol ibig sabihin nito, hey, computer na ito ay para sa mga tao, 1230 01:00:32,700 --> 01:00:33,820 hindi para sa iyo, ang computer. 1231 01:00:33,820 --> 01:00:35,119 Kaya sila ay hindi pinansin logically. 1232 01:00:35,119 --> 01:00:35,910 Ang mga ito ay lamang doon. 1233 01:00:35,910 --> 01:00:39,830 >> At, sa katunayan, CS50 IDE nagpapakita ito bilang kulay-abo, na rin ang pagiging kapaki-pakinabang, ngunit hindi key 1234 01:00:39,830 --> 01:00:41,000 sa programa. 1235 01:00:41,000 --> 01:00:42,570 Pansinin kung ano ang maaari mong gawin ngayon. 1236 01:00:42,570 --> 01:00:44,950 Kahit na alam mo C programming o hindi, ikaw 1237 01:00:44,950 --> 01:00:47,722 maaari lamang tumayo sa likod sa ito programa, at sagapin ang mga komento. 1238 01:00:47,722 --> 01:00:50,180 Humiling sa user para sa input, siguraduhin makakuha ng string nagbalik ng isang string, 1239 01:00:50,180 --> 01:00:53,009 umulit sa ibabaw ng mga character sa s nang paisa-isa, i-print ang character 1240 01:00:53,009 --> 01:00:55,550 i-ika na character sa s-- hindi mo gusto kahit na may upang tumingin sa ang code 1241 01:00:55,550 --> 01:00:57,270 upang maunawaan kung ano ang ginagawa ng programang ito. 1242 01:00:57,270 --> 01:01:00,280 At, mas mabuti pa, kung ikaw mismo tumingin sa programang ito sa isang linggo o dalawa, 1243 01:01:00,280 --> 01:01:02,280 o isang buwan, o isang taon, masyado kang walang 1244 01:01:02,280 --> 01:01:04,420 sa pagkakatitig sa ang code, sisikaping matandaan, 1245 01:01:04,420 --> 01:01:06,630 kung ano ang sinusubukan ko na gawin sa ang code na ito? 1246 01:01:06,630 --> 01:01:07,770 >> Mo sinabi na sa iyong sarili. 1247 01:01:07,770 --> 01:01:11,660 You inilarawan na ito para sa iyong sarili, o ilang kasamahan, o TA, o tf. 1248 01:01:11,660 --> 01:01:14,860 At kaya ito ay ngayon maging tama, at magandang disenyo, 1249 01:01:14,860 --> 01:01:18,210 at sa huli magandang estilo pati na rin. 1250 01:01:18,210 --> 01:01:19,990 Kaya gawin panatilihin na sa isip. 1251 01:01:19,990 --> 01:01:22,200 >> Kaya mayroong isang iba pang bagay na ako pagpunta sa gawin dito 1252 01:01:22,200 --> 01:01:28,240 na maaaring ipinahahayag ngayon kung ano mismo ang ay nangyayari sa ilalim ng hood. 1253 01:01:28,240 --> 01:01:30,390 Kaya mayroong ang tampok na ito sa C, at iba pang mga wika, 1254 01:01:30,390 --> 01:01:33,010 tinatawag typecasting na ang alinman kataon 1255 01:01:33,010 --> 01:01:37,250 o malinaw na nagbibigay-daan sa mong i-convert mula sa isang uri ng data sa isa pa. 1256 01:01:37,250 --> 01:01:39,800 Kami ay pagharap sa gayon malayo ngayon sa mga string. 1257 01:01:39,800 --> 01:01:41,250 >> At string ay character. 1258 01:01:41,250 --> 01:01:44,910 Ngunit isipin ang mula sa linggo 0, ano ang mga character? 1259 01:01:44,910 --> 01:01:49,334 Character ay lamang ng isang abstraction sa itaas ng numbers-- decimal na numero, 1260 01:01:49,334 --> 01:01:52,500 at decimal na numero ay talagang lamang ng isang abstraction sa itaas ng binary numero, 1261 01:01:52,500 --> 01:01:53,720 bilang namin tinukoy dito. 1262 01:01:53,720 --> 01:01:55,540 >> Kaya mga character ay mga numero. 1263 01:01:55,540 --> 01:01:58,410 At numero ay mga character, lamang depende sa konteksto. 1264 01:01:58,410 --> 01:02:01,250 At ito ay lumiliko out na sa loob ng isang computer program, 1265 01:02:01,250 --> 01:02:06,830 maaari mong tukuyin kung paano mo gustong upang tumingin sa bits sa loob ng programang iyon? 1266 01:02:06,830 --> 01:02:10,400 >> Recall linggu 0 na nagkaroon kami Ascii, na kung saan ay lamang ang code na ito 1267 01:02:10,400 --> 01:02:11,620 mapping titik sa mga numero. 1268 01:02:11,620 --> 01:02:13,660 At aming sinabi, capital A ay 65. 1269 01:02:13,660 --> 01:02:15,860 Capital B ay 66, at iba pa. 1270 01:02:15,860 --> 01:02:20,500 >> At pansinin, namin mahalagang magkaroon chars sa hanay sa itaas na dito, tulad ng C ay tumawag sa kanila, 1271 01:02:20,500 --> 01:02:23,400 mga character, at pagkatapos ay ints sa pangalawang hilera. 1272 01:02:23,400 --> 01:02:28,180 At ito ay lumiliko out maaari mong convert walang putol sa pagitan ng dalawang, karaniwang. 1273 01:02:28,180 --> 01:02:30,042 At kung gusto naming gawin ito kusa, kami 1274 01:02:30,042 --> 01:02:31,750 maaaring nais na pagharap sa isang bagay isang bagay na tulad nito. 1275 01:02:31,750 --> 01:02:33,590 >> Maaari naming nais i-convert upper case upang babaan 1276 01:02:33,590 --> 01:02:35,330 kaso, o lower case sa itaas na kaso. 1277 01:02:35,330 --> 01:02:38,000 At ito ay lumiliko out doon ni talagang isang pattern dito 1278 01:02:38,000 --> 01:02:39,900 maaari naming yakapin sa loob lamang ng ilang sandali. 1279 01:02:39,900 --> 01:02:44,120 Ngunit sabihin tumingin muna sa isang halimbawa ng paggawa na ito tahasan. 1280 01:02:44,120 --> 01:02:46,340 >> Pupunta ako sa bumalik sa CS50 IDE. 1281 01:02:46,340 --> 01:02:50,640 Pupunta ako upang lumikha ng isang file na tinatawag na Ascii 0.c. 1282 01:02:50,640 --> 01:02:55,960 At ako pagpunta sa sige at idagdag ang aking karaniwang io.h sa tuktok, int pangunahing walang bisa 1283 01:02:55,960 --> 01:02:57,370 sa tuktok ng aking function. 1284 01:02:57,370 --> 01:03:02,700 At pagkatapos lamang ako pagpunta sa gawin ang mga following-- isang para sa loop mula sa i katumbas, 1285 01:03:02,700 --> 01:03:04,610 sabihin nating, 65. 1286 01:03:04,610 --> 01:03:10,460 >> At pagkatapos ay i ay pagpunta sa maging mas mababa sa 65, plus 26 titik sa alpabeto. 1287 01:03:10,460 --> 01:03:12,640 Kaya kukunin ko na ipaalam sa computer gawin ang matematika para sa akin doon. 1288 01:03:12,640 --> 01:03:15,100 At pagkatapos ay sa loob ng loop, kung ano ako pagpunta sa i-print? 1289 01:03:15,100 --> 01:03:19,230 >> % C ay% i backslash n. 1290 01:03:19,230 --> 01:03:21,290 At ngayon gusto kong plug sa dalawang mga halaga. 1291 01:03:21,290 --> 01:03:24,530 pansamantalang Naglagay ako tanong nagmamarka doon upang mag-imbita ang tanong. 1292 01:03:24,530 --> 01:03:29,940 >> Gusto kong umulit mula sa 65 pasulong para sa 26 titik ng alpabeto, 1293 01:03:29,940 --> 01:03:35,190 pag-print out sa bawat pag-ulit na integral katumbas ng character. 1294 01:03:35,190 --> 01:03:38,299 Sa ibang salita, gusto kong umulit higit sa 26 mga numero sa pag-print 1295 01:03:38,299 --> 01:03:41,590 kung ano ang Ascii character ay, ang titik, at kung ano ang kaukulang number is-- 1296 01:03:41,590 --> 01:03:44,650 talagang lamang recreating ang tsart mula sa na slide. 1297 01:03:44,650 --> 01:03:47,010 Kaya kung ano ang dapat na ang mga tandang pananong? 1298 01:03:47,010 --> 01:03:51,760 >> Well, ito ay lumiliko out na ang ikalawang dapat isa lamang ay ang variable i. 1299 01:03:51,760 --> 01:03:53,860 Gusto kong makita na bilang isang numero. 1300 01:03:53,860 --> 01:03:58,920 At ang gitnang argument dito, maaari ko bang sabihin sa ang computer 1301 01:03:58,920 --> 01:04:03,470 sa paggamot na integer i bilang isang character, sa gayon ay 1302 01:04:03,470 --> 01:04:05,880 upang palitan ito dito para sa porsiyento C. 1303 01:04:05,880 --> 01:04:07,990 >> Sa ibang salita, kung ako, ang human programmer, alam 1304 01:04:07,990 --> 01:04:09,865 ito ay lamang numero sa pagtatapos ng araw. 1305 01:04:09,865 --> 01:04:12,500 At alam ko na 65 ay dapat map sa ilang character. 1306 01:04:12,500 --> 01:04:15,310 Sa pamamagitan ng ito tahasang cast, may parenthesis, 1307 01:04:15,310 --> 01:04:18,840 ang pangalan ng uri ng data na gusto mong convert sa, at isang closed parenthesis, 1308 01:04:18,840 --> 01:04:21,200 maaari mong sabihin sa computer, hey, computer, 1309 01:04:21,200 --> 01:04:24,130 convert ito integer sa isang pansamantalang trabaho. 1310 01:04:24,130 --> 01:04:26,250 >> Kaya kapag tumakbo ko ito programa pagkatapos ipon, 1311 01:04:26,250 --> 01:04:29,740 sabihin makita kung ano get-- ba akong gumawa ng Ascii 0. 1312 01:04:29,740 --> 01:04:33,020 Darn ito, ano ang gagawin ko mali dito? 1313 01:04:33,020 --> 01:04:35,884 Gamitin ng hindi nagbigay-alam identifier, lahat ng karapatan, hindi intensyonal, 1314 01:04:35,884 --> 01:04:37,800 ngunit sabihin makita kung hindi namin Maaari dahilan sa pamamagitan ng ito. 1315 01:04:37,800 --> 01:04:41,220 >> Kaya line five-- kaya hindi ko makuha masyadong malayo bago screwing up. 1316 01:04:41,220 --> 01:04:42,140 Iyan ay OK. 1317 01:04:42,140 --> 01:04:46,560 Kaya line 5 para i katumbas 65-- nakikita ko. 1318 01:04:46,560 --> 01:04:50,130 Kaya tandaan na sa C, hindi katulad ng ilang wika kung mayroon kang bago programming 1319 01:04:50,130 --> 01:04:52,190 karanasan, ikaw ay may upang sabihin ang computer, 1320 01:04:52,190 --> 01:04:55,040 hindi katulad Scratch, kung ano uri ng variable na ito ay. 1321 01:04:55,040 --> 01:04:56,860 >> At Nakalimutan ko ang isang key phrase dito. 1322 01:04:56,860 --> 01:04:59,200 Sa limang linya, ako ay nagsimula gamit i. 1323 01:04:59,200 --> 01:05:01,560 Ngunit hindi ko ay may sinabi sa C kung ano ang data type ito ay. 1324 01:05:01,560 --> 01:05:04,570 Kaya ako pagpunta sa pumunta ka dito at sabihin, ah, gawin itong isang integer. 1325 01:05:04,570 --> 01:05:07,050 >> Ngayon ako pagpunta sa sige at mag-recompile. 1326 01:05:07,050 --> 01:05:08,080 Na naayos na. 1327 01:05:08,080 --> 01:05:12,660 ./ascii0 Enter, na ang uri ng cool. 1328 01:05:12,660 --> 01:05:15,360 Hindi lamang ito ay napakabilis na upang hilingin sa computer na ito pinag-uusapan, 1329 01:05:15,360 --> 01:05:18,885 sa halip na naghahanap up ito sa isang slide, ito naka-print out isa sa bawat linya, A ay 65, 1330 01:05:18,885 --> 01:05:24,860 B ay 66, ang buong daa'y down-- dahil ako ginawa ito 26 times-- sa ang mga titik z, 1331 01:05:24,860 --> 01:05:25,630 na kung saan ay 90. 1332 01:05:25,630 --> 01:05:27,790 At, sa katunayan, bahagyang mas matalino gagawin 1333 01:05:27,790 --> 01:05:31,030 ay para sa akin hindi na umaasa sa computer upang magdagdag 26. 1334 01:05:31,030 --> 01:05:34,060 Ko maaaring magkaroon lamang gawin 90 pati na rin, kaya mahaba 1335 01:05:34,060 --> 01:05:37,390 dahil hindi ko gawin ang parehong pagkakamali ng dalawang beses. 1336 01:05:37,390 --> 01:05:41,880 Gusto kong pumunta up sa pamamagitan ng z, hindi lamang up sa pamamagitan y. 1337 01:05:41,880 --> 01:05:44,000 >> Kaya na ang isang tahasang cast. 1338 01:05:44,000 --> 01:05:47,860 Ito ay lumiliko out na ito ay hindi kahit na kinakailangan. 1339 01:05:47,860 --> 01:05:52,480 Hayaan akong magpatuloy at muling patakbuhin ito compiler, at gawin uli ang Ascii 0. 1340 01:05:52,480 --> 01:05:54,940 Ito ay lumiliko out na ang C ay medyo smart. 1341 01:05:54,940 --> 01:05:57,150 >> At printf, sa partikular, ay medyo smart. 1342 01:05:57,150 --> 01:06:01,260 Kung kamakailan mo lamang pumasa sa isang i dalawang beses para sa parehong mga placeholder, printf 1343 01:06:01,260 --> 01:06:04,510 ay mapagtanto, oh, well alam ko sa iyo ibinigay sa akin ng isang integer-- ilang numero, 1344 01:06:04,510 --> 01:06:06,380 tulad ng 65, o 90, o kahit anong. 1345 01:06:06,380 --> 01:06:10,170 Ngunit nakikita ko na gusto mo sa akin upang i-format na numero tulad ng isang character. 1346 01:06:10,170 --> 01:06:16,460 At kaya printf maaaring kataon cast ang int sa isang pansamantalang trabaho para sa iyo pati na rin. 1347 01:06:16,460 --> 01:06:19,360 Kaya na ay hindi isang problema sa lahat. 1348 01:06:19,360 --> 01:06:23,100 >> Ngunit mapansin, dahil sa pagkapareho ito maaari naming talagang gawin ito pati na rin. 1349 01:06:23,100 --> 01:06:26,520 Hayaan akong sige at gumawa ng isa iba pang mga bersyon ng this-- Ascii 1.c. 1350 01:06:26,520 --> 01:06:31,800 At sa halip na iterating sa paglipas ng integers, maaari talagang pumutok ang iyong isip 1351 01:06:31,800 --> 01:06:33,610 sa pamamagitan ng iterating sa paglipas ng mga character. 1352 01:06:33,610 --> 01:06:37,660 Kung ang isang char c makakakuha capital A, ako nais na sige, at gawin ito, 1353 01:06:37,660 --> 01:06:41,740 kaya hangga't C ay mas mababa kaysa sa o katumbas sa kabisera Z. At sa bawat pag-ulit 1354 01:06:41,740 --> 01:06:45,690 Gusto kong dagdagan C, maaari ko ngayon sa aking printf linya dito 1355 01:06:45,690 --> 01:06:51,320 sabihin nating, porsiyento C ay porsiyento i muli, comma C. 1356 01:06:51,320 --> 01:06:57,200 >> At ngayon, maaari ba akong pumunta sa iba pang direksyon, paghahagis ang character explicitly 1357 01:06:57,200 --> 01:06:58,500 sa isang integer. 1358 01:06:58,500 --> 01:07:00,560 Kaya, muli, kung bakit nais mong gawin ito? 1359 01:07:00,560 --> 01:07:03,830 Ito ay isang maliit na kakaiba upang ayusin ng bilangin sa mga tuntunin ng mga character. 1360 01:07:03,830 --> 01:07:07,430 >> Pero kung naiintindihan mo kung ano ang nangyayari sa ilalim ng hood, 1361 01:07:07,430 --> 01:07:08,430 may tunay na walang magic. 1362 01:07:08,430 --> 01:07:13,060 Lamang ka na nagsasabi, hey, computer bigyan ako ng isang variable na tinatawag na C ng uri ng pansamantalang trabaho. 1363 01:07:13,060 --> 01:07:16,520 Initialize ito sa capital A. At mapansin single quotes matter. 1364 01:07:16,520 --> 01:07:19,580 >> Para sa mga character sa C, isipin ang mula sa noong nakaraang linggo, gumamit ka ng single quotes. 1365 01:07:19,580 --> 01:07:23,720 Para sa mga string, para sa mga salita, parirala, gumamit ka ng double quotes. 1366 01:07:23,720 --> 01:07:27,210 OK, computer, panatilihin ang paggawa na ito, kaya hangga't ang character ay mas mababa sa 1367 01:07:27,210 --> 01:07:28,050 o katumbas ng z. 1368 01:07:28,050 --> 01:07:32,640 At alam ko mula sa aking Ascii mesa na ang lahat sa mga Ascii code ay magkadikit. 1369 01:07:32,640 --> 01:07:33,400 >> Walang gaps. 1370 01:07:33,400 --> 01:07:36,737 Kaya lamang A sa pamamagitan ng Z, na pinaghihiwalay ng isang numero sa bawat isa. 1371 01:07:36,737 --> 01:07:38,820 At pagkatapos ay maaari kong dagdagan isang pansamantalang trabaho, kung ako ay talagang gusto. 1372 01:07:38,820 --> 01:07:40,390 Sa pagtatapos ng araw, ito ay lamang ng isang numero. 1373 01:07:40,390 --> 01:07:41,030 Alam ko ito. 1374 01:07:41,030 --> 01:07:43,670 Kaya ang maaari kong lamang maglakas-loob na magdagdag ng 1 sa mga ito. 1375 01:07:43,670 --> 01:07:46,940 >> At pagkatapos ay oras na ito, i-print ko c, at pagkatapos ay ang mahalagang katumbas. 1376 01:07:46,940 --> 01:07:50,170 At hindi ko kahit na kailangan ang tahasang cast. 1377 01:07:50,170 --> 01:07:52,680 ang maaari kong ipaalam sa printf at ang computer na figure things out, 1378 01:07:52,680 --> 01:07:57,300 kaya na ngayon kung nagpatakbo ako gumawa Ascii1./ascii1, 1379 01:07:57,300 --> 01:08:01,520 nakukuha ko ang eksaktong parehong bagay pati na rin. 1380 01:08:01,520 --> 01:08:04,530 >> Useless program, though-- walang sinuman ay pagpunta sa aktwal na magsulat software 1381 01:08:04,530 --> 01:08:07,549 upang malaman kung, kung ano ay ang numero na mapa sa A, o B, o Z? 1382 01:08:07,549 --> 01:08:10,340 lamang Ikaw ay pagpunta sa Google ito, o tingnan ito online, o hanapin ito 1383 01:08:10,340 --> 01:08:11,650 sa isang slide, o mga katulad. 1384 01:08:11,650 --> 01:08:13,520 Kaya kung saan ito talagang makakuha kapaki-pakinabang? 1385 01:08:13,520 --> 01:08:15,960 >> Well, pagsasalita ng na slide, mapansin mayroong 1386 01:08:15,960 --> 01:08:20,890 isang aktwal na pattern dito sa pagitan ng uppercase at lowercase na ay hindi aksidenteng. 1387 01:08:20,890 --> 01:08:23,760 Pansinin na capital A ay 65. 1388 01:08:23,760 --> 01:08:25,830 Lowercase isang ay 97. 1389 01:08:25,830 --> 01:08:29,649 At kung paano malayo ay lower case a? 1390 01:08:29,649 --> 01:08:32,649 >> Kaya 65 ay kung gaano karaming mga hakbang ang layo mula 97? 1391 01:08:32,649 --> 01:08:36,210 Kaya 97 minus 65 ay 32. 1392 01:08:36,210 --> 01:08:37,910 Kaya capital isang ay 65. 1393 01:08:37,910 --> 01:08:39,939 Kung nagdagdag ka ng 32 sa mga iyon, kumuha ka ng lowercase ng. 1394 01:08:39,939 --> 01:08:43,729 At, equivalently, kung ibawas mo 32, makakuha ka pabalik sa kabisera A-- parehong sa B 1395 01:08:43,729 --> 01:08:46,380 sa maliit na b, big C sa maliit c. 1396 01:08:46,380 --> 01:08:50,670 >> Ang lahat ng mga gaps ay 32 apart. 1397 01:08:50,670 --> 01:08:54,450 Ngayon, ito ay tila upang payagan sa amin upang gawin ang isang bagay tulad ng Microsoft Word, 1398 01:08:54,450 --> 01:08:57,729 o Google Docs tampok, kung saan mo maaaring piliin ang lahat at iyo ngang sabihing, 1399 01:08:57,729 --> 01:09:00,520 baguhin ang lahat sa lowercase, o baguhin ang lahat ng sa itaas na kaso, 1400 01:09:00,520 --> 01:09:03,840 o baguhin lamang ang unang salita ng isang pangungusap sa itaas na kaso. 1401 01:09:03,840 --> 01:09:07,390 Maaari naming talagang gawin ang isang bagay tulad na ating sarili. 1402 01:09:07,390 --> 01:09:12,645 >> Hayaan akong sige at i-save ang isang file dito na tinatawag na sulatin sa malaking titik 0.c. 1403 01:09:12,645 --> 01:09:15,770 At sabihin sige at gumawa ng isang program na gumagana nang eksakto na ang mga sumusunod. 1404 01:09:15,770 --> 01:09:18,460 Kaya isama ang CS50 library. 1405 01:09:18,460 --> 01:09:21,430 At isama standard I / O. 1406 01:09:21,430 --> 01:09:22,787 >> At alam ko na ito ay paparating na. 1407 01:09:22,787 --> 01:09:24,870 Kaya ako pagpunta sa ilagay ito sa doon na, string.h, 1408 01:09:24,870 --> 01:09:26,960 kaya wala akong access sa mga bagay tulad ng Stirling, 1409 01:09:26,960 --> 01:09:29,620 at pagkatapos ay int pangunahing walang bisa, gaya ng dati. 1410 01:09:29,620 --> 01:09:33,420 At pagkatapos ay ako pagpunta sa sige at gawin string ay makakakuha makakuha string, 1411 01:09:33,420 --> 01:09:35,032 lamang upang makakuha ng isang string mula sa user. 1412 01:09:35,032 --> 01:09:36,740 At pagkatapos ay ako pagpunta sa gawin ang aking katinuan check. 1413 01:09:36,740 --> 01:09:40,510 Kung string ay hindi katumbas null, pagkatapos ito ay ligtas upang magpatuloy. 1414 01:09:40,510 --> 01:09:42,000 At kung ano ang gusto kong gawin? 1415 01:09:42,000 --> 01:09:48,700 Pupunta ako upang umulit mula sa i katumbas ng 0, at n hanggang sa ang string haba ng s. 1416 01:09:48,700 --> 01:09:51,899 >> At ako pagpunta sa gawin ito kaya hangga't i Mababa sa n, at i plus plus. 1417 01:09:51,899 --> 01:09:55,060 Sa ngayon, ako ay talagang lamang paghiram ng mga ideya mula sa bago. 1418 01:09:55,060 --> 01:09:57,010 At ngayon ako pagpunta sa kitang ipakilala sa isang branch. 1419 01:09:57,010 --> 01:09:59,635 >> Kaya sa tingin pabalik sa simula, kung saan kami ay nagkaroon ng mga tinidor sa kalsada, 1420 01:09:59,635 --> 01:10:05,110 at noong nakaraang linggo sa C. Ako pagpunta sa sabihin ito, kung ang i-ika na character sa s 1421 01:10:05,110 --> 01:10:09,250 ay mas malaki kaysa sa o pantay sa mas mababang kaso a, 1422 01:10:09,250 --> 01:10:13,340 at- sa scratch ng gagawin mo literal sabihin at, ngunit sa C sasabihin mo ampersand, 1423 01:10:13,340 --> 01:10:19,830 ampersand-- at ang i-ika na character sa s ay mas mababa sa o katumbas ng mas mababang kaso z, 1424 01:10:19,830 --> 01:10:21,780 sabihin gawin ang isang bagay na interesante. 1425 01:10:21,780 --> 01:10:27,020 Natin ang aktwal na-print ng karakter na walang newline 1426 01:10:27,020 --> 01:10:31,760 iyon ay ang character sa string, ang i-ika na character sa string. 1427 01:10:31,760 --> 01:10:37,420 >> Ngunit sabihin sige at ibawas 32 mula dito. 1428 01:10:37,420 --> 01:10:42,120 Iba Pa kung ang karakter sa string na kaming naghahanap 1429 01:10:42,120 --> 01:10:45,950 ay hindi sa pagitan maliit a at maliit na z, sige 1430 01:10:45,950 --> 01:10:48,610 at lamang naka-print ito out hindi nabago. 1431 01:10:48,610 --> 01:10:50,840 Kaya ipinakilala namin ang ito bracketed notation 1432 01:10:50,840 --> 01:10:53,560 para sa aming mga string upang makakuha ng sa i-ika na character sa string. 1433 01:10:53,560 --> 01:10:57,520 >> Nagdagdag ako ng ilang mga kondisyon na lohika, tulad ng Scratch sa linggo ng isa noong nakaraang linggo, kung saan 1434 01:10:57,520 --> 01:10:59,880 Tingin lang ako gamit ang aking pangunahing pag-unawa sa kung ano ang 1435 01:10:59,880 --> 01:11:01,130 nangyayari sa ilalim ng hood. 1436 01:11:01,130 --> 01:11:04,190 Ay ang i-ika na katangian ng s mas malaki kaysa sa o katumbas ng a? 1437 01:11:04,190 --> 01:11:08,290 Like, ay ito 97, o 98, o 99, at iba pa? 1438 01:11:08,290 --> 01:11:11,940 >> Ngunit ito ay din mas mababa kaysa sa o katumbas sa ang halaga ng lowercase z? 1439 01:11:11,940 --> 01:11:16,210 At kung gayon, ano ang ibig sabihin ang linyang ito? 1440 01:11:16,210 --> 01:11:20,250 14, ito ay isang uri ng mikrobyo ng ang buong ideya, 1441 01:11:20,250 --> 01:11:23,840 mapakinabangan ang sulat sa pamamagitan ng lamang subtracting 32 mula dito, 1442 01:11:23,840 --> 01:11:29,370 sa kasong ito, dahil alam ko, sa bawat na chart, kung paano ang aking mga numero ay kinakatawan. 1443 01:11:29,370 --> 01:11:33,925 Kaya sabihin sige at patakbuhin ito, pagkatapos ipon mapakinabangan 0.c, 1444 01:11:33,925 --> 01:11:36,210 at tumakbo mapakinabangan 0. 1445 01:11:36,210 --> 01:11:40,300 >> Sabihin i-type sa isang bagay tulad ng Zamyla sa lahat ng maliit ipasok. 1446 01:11:40,300 --> 01:11:42,780 At ngayon kami ay may Zamyla sa lahat ng malalaki. 1447 01:11:42,780 --> 01:11:45,050 ni-type sa Rob sa lahat ng maliit Hayaan. 1448 01:11:45,050 --> 01:11:46,674 Tayo'y subukan Jason sa lahat ng maliit Hayaan. 1449 01:11:46,674 --> 01:11:48,590 At panatilihin namin ang pagkuha ng sapilitang capitalization. 1450 01:11:48,590 --> 01:11:50,960 May isang menor de edad bug na ako uri ng hindi inaasahan. 1451 01:11:50,960 --> 01:11:54,050 Pansinin ang aking bagong prompt ay nagtatapos up sa parehong linya bilang kanilang mga pangalan, 1452 01:11:54,050 --> 01:11:55,520 na nararamdaman ng isang maliit na makalat. 1453 01:11:55,520 --> 01:11:59,170 >> Kaya ako pagpunta sa pumunta dito, at talagang sa dulo ng programang ito 1454 01:11:59,170 --> 01:12:02,110 print out ang isang newline character. 1455 01:12:02,110 --> 01:12:03,160 Iyon lang. 1456 01:12:03,160 --> 01:12:06,120 Sa printf, hindi mo na kailangang pumasa sa mga variable o format code. 1457 01:12:06,120 --> 01:12:08,460 Maaari mong literal i-print lamang bagay tulad ng isang newline. 1458 01:12:08,460 --> 01:12:13,529 >> Kaya sabihin sige at gumawa magsamantala 0 muli, muling palabas ng pelikula ito, Zamyla. 1459 01:12:13,529 --> 01:12:14,820 At ngayon ito ay isang maliit prettier. 1460 01:12:14,820 --> 01:12:17,274 Ngayon, ang aking prompt ay sa sarili nitong bagong linya. 1461 01:12:17,274 --> 01:12:18,440 Kaya na ang lahat ng fine at mabuti. 1462 01:12:18,440 --> 01:12:19,910 Kaya na ang isang magandang halimbawa. 1463 01:12:19,910 --> 01:12:22,700 Ngunit hindi ko kahit na kinakailangan kailangang hard code mga 32. 1464 01:12:22,700 --> 01:12:23,350 Alam mo ba? 1465 01:12:23,350 --> 01:12:26,350 kaya kong say-- hindi ko kailanman matandaan kung ano ang pagkakaiba ay. 1466 01:12:26,350 --> 01:12:29,330 >> Ngunit alam ko na kung ako magkaroon ng isang maliit na titik sulat, 1467 01:12:29,330 --> 01:12:34,430 Ko talaga nais na ibawas off anuman ang distansya ay sa pagitan ng maliit na 1468 01:12:34,430 --> 01:12:39,160 isang at big A, dahil kung akala ko na lahat ng iba pang mga titik ay ang parehong, 1469 01:12:39,160 --> 01:12:41,045 na dapat makakuha ng trabaho tapos na. 1470 01:12:41,045 --> 01:12:42,670 Ngunit sa halip na gawin iyon, alam mo kung ano? 1471 01:12:42,670 --> 01:12:44,240 May isa pang paraan pa rin. 1472 01:12:44,240 --> 01:12:48,090 >> Kung na sulatin sa malaking titik 1.c-- kung ako ay upang ilagay na sa isang hiwalay na file. 1473 01:12:48,090 --> 01:12:51,030 sabihin na sulatin sa malaking titik 2.c ang mga sumusunod. 1474 01:12:51,030 --> 01:12:53,060 Ako pagpunta sa talagang linisin ito up dito. 1475 01:12:53,060 --> 01:12:57,420 At sa halip na kahit pagkakaroon upang alam o pag-aalaga ang tungkol sa mga mababang antas 1476 01:12:57,420 --> 01:13:01,090 pagpapatupad ng mga detalye, ako sa halip lamang ng pagpunta sa i-print ang isang character, 1477 01:13:01,090 --> 01:13:04,610 quote magpanipi, porsiyento C, at pagkatapos ay tumawag ng isa pang function na 1478 01:13:04,610 --> 01:13:09,950 umiiral na tumatagal ng isang argument, kung saan ay isang character, tulad nito. 1479 01:13:09,950 --> 01:13:12,630 >> Ito ay lumiliko out sa C, may isa pang function call 1480 01:13:12,630 --> 01:13:15,550 sa itaas na, na bilang ang pangalan nito nagmumungkahi ay tumatagal ng isang karakter 1481 01:13:15,550 --> 01:13:19,350 at gumagawa ng ito sa kanyang mga malaking titik katumbas, at pagkatapos ay bumalik ito 1482 01:13:19,350 --> 01:13:21,410 kaya na printf ay maaaring plug ito sa doon. 1483 01:13:21,410 --> 01:13:25,484 At kaya upang gawin ito, bagaman, ako kailangan upang ipakilala isa pang file. 1484 01:13:25,484 --> 01:13:28,400 Ito ay lumiliko out mayroong isa pang file na nais mong lamang malaman mula sa klase, 1485 01:13:28,400 --> 01:13:33,020 o isang aklat-aralin, o isang online na reference, na tinatawag na C type.h. 1486 01:13:33,020 --> 01:13:38,570 >> Kaya kung idagdag ko na sa aking mga header file, at ngayon muling sumulat ng libro sa programang ito, 1487 01:13:38,570 --> 01:13:43,040 capitalize2, ./capitalize2 Enter. 1488 01:13:43,040 --> 01:13:46,690 ni-type sa Zamyla sa lahat Hayaan lowercase, gumagana pa rin ang parehong. 1489 01:13:46,690 --> 01:13:48,040 Pero alam mo kung ano? 1490 01:13:48,040 --> 01:13:55,590 Ito ay lumiliko out na sa itaas na ay may ilang mga iba pang mga pag-andar. 1491 01:13:55,590 --> 01:13:58,410 >> At hayaan mo akong ipakilala ito Command dito, uri ng awkwardly 1492 01:13:58,410 --> 01:14:00,250 pinangalanan, ngunit ang tao para sa manu-manong. 1493 01:14:00,250 --> 01:14:03,960 Ito ay lumiliko out na ang karamihan sa Linux computer, bilang kami ay gumagamit here-- Linux operating 1494 01:14:03,960 --> 01:14:06,270 system-- magkaroon ng isang utos tinatawag na tao, na nagsasabing, 1495 01:14:06,270 --> 01:14:08,530 hey, computer, ninyo ako ang computer mano-manong. 1496 01:14:08,530 --> 01:14:10,680 Ano ang gagawin mo nais na maghanap sa manual na? 1497 01:14:10,680 --> 01:14:13,840 >> Gusto kong tumingin up ang pag-andar tinawag upang itaas, ang Enter. 1498 01:14:13,840 --> 01:14:16,070 At ito ay isang maliit na misteriyoso basahin kung minsan. 1499 01:14:16,070 --> 01:14:18,780 Ngunit mapansin kami sa Linux programmer ni manu-manong. 1500 01:14:18,780 --> 01:14:19,530 At ito ay ang lahat ng teksto. 1501 01:14:19,530 --> 01:14:21,905 At mapansin na mayroong mga pangalan ng pag-andar up dito. 1502 01:14:21,905 --> 01:14:25,030 Ito ay lumiliko out na ito ay may isang pinsan na tinatawag na sa mas mababang, na kung saan ay ang kabaligtaran. 1503 01:14:25,030 --> 01:14:29,710 At pansinin ilalim buod, upang magamit ang gumana ang tao na pahina, kaya na magsalita, 1504 01:14:29,710 --> 01:14:32,220 ay nagsasabi sa akin na ako kailangang isama c type.h. 1505 01:14:32,220 --> 01:14:33,630 At nalalaman ko na mula sa pagsasanay. 1506 01:14:33,630 --> 01:14:36,210 >> Narito, ito ay nagpapakita sa akin ang dalawang modelo para sa pag-andar, 1507 01:14:36,210 --> 01:14:39,070 kaya na kung ako kailanman nais na gamitin ang Alam ko kung ano sila ay kumuha ng bilang input, 1508 01:14:39,070 --> 01:14:40,652 at kung ano ang kanilang bumalik bilang output. 1509 01:14:40,652 --> 01:14:42,360 At pagkatapos ay kung ako basahin ang paglalarawan, nakikita ko 1510 01:14:42,360 --> 01:14:44,820 nang mas detalyado kung ano ang function. 1511 01:14:44,820 --> 01:14:48,100 Ngunit mas mahalaga, kung tumingin ako sa ilalim return halaga, 1512 01:14:48,100 --> 01:14:51,710 ito says ang halaga ay bumalik ay na ng ang na-convert sulat, 1513 01:14:51,710 --> 01:14:57,880 o C, ang orihinal na input, kung ang conversion ay hindi posible. 1514 01:14:57,880 --> 01:15:01,992 >> Sa ibang salita, sa itaas na ay susubukan upang i-convert ng isang sulat sa itaas na kaso. 1515 01:15:01,992 --> 01:15:03,450 At kung gayon, ito ay pagpunta sa ibalik ito. 1516 01:15:03,450 --> 01:15:07,010 Ngunit kung ito ay hindi maaaring para sa ilang mga reason-- marahil ito ay na itaas na kaso, 1517 01:15:07,010 --> 01:15:09,550 marahil ito ay isang exclamation point o ilang iba pang punctuation-- 1518 01:15:09,550 --> 01:15:12,200 lamang ito ay pagpunta sa ibalik ang orihinal na C, 1519 01:15:12,200 --> 01:15:17,340 na nangangahulugan na maaari ko mapapalitaw ang aking code mas mahusay na dinisenyo tulad ng sumusunod. 1520 01:15:17,340 --> 01:15:20,580 >> Hindi ko kailangan ang lahat ng mga darn linya ng code. 1521 01:15:20,580 --> 01:15:22,610 Ang lahat ng mga linya na ako lamang naka-highlight Maaari 1522 01:15:22,610 --> 01:15:28,700 gumuho sa lamang ng isang simpleng line, na kung saan ay this-- printf porsiyento 1523 01:15:28,700 --> 01:15:33,510 c sa itaas S bracket i. 1524 01:15:33,510 --> 01:15:36,090 At ito ay magiging isang halimbawa ng mas mahusay na disenyo. 1525 01:15:36,090 --> 01:15:40,040 >> Bakit ipatupad sa 7 o 8 mga linya ng code, kahit ano ito ay ko na lang 1526 01:15:40,040 --> 01:15:44,960 tinanggal, kapag maaari mong sa halip tiklupin lahat ng na logic at desisyon paggawa 1527 01:15:44,960 --> 01:15:49,620 sa isang solong linya, 13 ngayon, na umaasa sa isang library function-- 1528 01:15:49,620 --> 01:15:53,430 isang function na ito ay may C, ngunit na gumagana nang eksakto kung ano ang nais mo ito upang gawin. 1529 01:15:53,430 --> 01:15:55,295 At, lantaran, kahit na hindi na ito ay dumating na may C, 1530 01:15:55,295 --> 01:15:58,880 maaari mong ipatupad ito sa iyong sarili, tulad ng nasaksihan namin, na may makakuha ng mga negatibong int 1531 01:15:58,880 --> 01:16:01,700 at makakuha ng positibong int noong nakaraang linggo pati na rin. 1532 01:16:01,700 --> 01:16:03,470 >> Ang code na ito ngayon ay mas nababasa. 1533 01:16:03,470 --> 01:16:06,670 At, sa katunayan, kung mag-scroll namin up, tingnan mo kung ano mas compact 1534 01:16:06,670 --> 01:16:08,360 ang bersyon na ito ng aking mga programa ay. 1535 01:16:08,360 --> 01:16:11,230 Ito ay isang maliit top mabigat ngayon, sa lahat ng mga Kasama. 1536 01:16:11,230 --> 01:16:14,380 Ngunit iyon lamang ang OK, dahil ngayon ako nakatayo sa mga balikat ng mga programmers 1537 01:16:14,380 --> 01:16:15,300 bago ako. 1538 01:16:15,300 --> 01:16:18,440 At kahit sino ito ay na ipinatupad sa itaas na talagang 1539 01:16:18,440 --> 01:16:21,470 ginawan ako ng isang pabor, marami tulad ng kung sinuman ipinatupad Stirling talagang 1540 01:16:21,470 --> 01:16:24,790 ginawan ako ng isang pabor ang ilang mga oras ang nakalipas. 1541 01:16:24,790 --> 01:16:26,970 At kaya ngayon kami ay may isang mas mahusay na disenyo ng programa 1542 01:16:26,970 --> 01:16:31,680 na nagpapatupad ng eksaktong parehong logic. 1543 01:16:31,680 --> 01:16:35,580 >> Eto na ng stirling, sabihin mo akong magpatuloy at gawin ito. 1544 01:16:35,580 --> 01:16:38,320 Hayaan akong sige at i-save ang file na ito bilang stirling.c. 1545 01:16:38,320 --> 01:16:43,255 At ito ay lumiliko out, maaari naming Peel pabalik isa pang layer pretty lang ngayon. 1546 01:16:43,255 --> 01:16:45,630 Ako pagpunta sa sige at mamalo up ng isa pang programa sa pangunahing 1547 01:16:45,630 --> 01:16:49,759 dito na lamang muling nagpapatupad string haba tulad ng sumusunod. 1548 01:16:49,759 --> 01:16:52,300 Kaya narito ang isang linya ng code na makakakuha ako ng isang string mula sa user. 1549 01:16:52,300 --> 01:16:53,910 Panatilihin namin ang paggamit na ito muli at muli. 1550 01:16:53,910 --> 01:16:58,900 Hayaan akong magbigay sa aking sarili ng isang variable na tinatawag na n uri ng int na nag-iimbak ng isang numero. 1551 01:16:58,900 --> 01:17:02,490 >> At hayaan mo akong sige at gawin ang mga sumusunod na lohika. 1552 01:17:02,490 --> 01:17:15,610 Habang ang mga n-th character sa s ginagawa hindi katumbas backslash 0, sige 1553 01:17:15,610 --> 01:17:17,930 at paglakas n. 1554 01:17:17,930 --> 01:17:23,506 At pagkatapos ay i-print out printf porsiyento i n. 1555 01:17:23,506 --> 01:17:29,200 inaangkin ko na ang program na ito dito, walang pagtawag string haba, 1556 01:17:29,200 --> 01:17:31,150 figure out ang haba ng isang string. 1557 01:17:31,150 --> 01:17:34,600 >> At ang magic ay ganap na encapsulated sa linya 8 1558 01:17:34,600 --> 01:17:39,830 dito sa kung ano ang hitsura tulad ng mga bagong syntax, ito backslash 0 in single quotes. 1559 01:17:39,830 --> 01:17:41,360 Ngunit kung bakit ay na? 1560 01:17:41,360 --> 01:17:44,100 Well, isaalang-alang kung ano ang nangyaring pagpunta sa lahat ng oras na ito. 1561 01:17:44,100 --> 01:17:47,990 >> At bilang isang bukod bago ko kalimutan, napagtanto masyadong, na sa karagdagan sa mga pahina ng tao 1562 01:17:47,990 --> 01:17:50,920 na nanggaling sa isang tipikal na Linux system tulad ng CS50 IDE, 1563 01:17:50,920 --> 01:17:53,770 mapagtanto na namin, ang staff ni course, mayroon ding 1564 01:17:53,770 --> 01:17:56,030 ginawa ng isang website bersiyon ng parehong ideya na tinatawag na 1565 01:17:56,030 --> 01:17:59,940 reference.cs50.net, na may ang lahat ng mga parehong pahina ng tao, 1566 01:17:59,940 --> 01:18:02,020 lahat ng na parehong dokumentasyon, pati na rin 1567 01:18:02,020 --> 01:18:05,730 isang maliit na kahon sa tuktok na nagbibigay-daan mong i-convert ang lahat ng mga medyo 1568 01:18:05,730 --> 01:18:09,025 arcane wika sa mas kumportable mode, kung saan kami, ang pagtuturo kawani, 1569 01:18:09,025 --> 01:18:12,150 may nawala sa pamamagitan at sinubukan upang gawing simple ang ilan sa mga wika upang panatilihin ang mga bagay 1570 01:18:12,150 --> 01:18:14,830 na nakatutok sa mga ideya, at hindi ang ilan sa mga kanipisan. 1571 01:18:14,830 --> 01:18:20,070 Kaya tandaan, reference.cs50.net bilang isa pang mapagkukunan pati na rin. 1572 01:18:20,070 --> 01:18:23,800 >> Nguni't bakit nalulugod string haba ng trabaho sa ang paraan na iminungkahi ko ang isang sandali ang nakalipas? 1573 01:18:23,800 --> 01:18:25,160 Narito ang pangalan ni Zamyla muli. 1574 01:18:25,160 --> 01:18:27,690 At narito ang pangalan ni Zamyla boxed in, bilang panatilihin ko ang paggawa, 1575 01:18:27,690 --> 01:18:31,360 pintura ng isang larawan ng mga ito na, talagang, lamang ng isang pagkakasunod-sunod ng mga character. 1576 01:18:31,360 --> 01:18:34,260 Ngunit Zamyla ay hindi umiiral sa paghihiwalay sa isang programa. 1577 01:18:34,260 --> 01:18:37,420 >> Kapag kayo magsulat at magpatakbo ng isang programa, ginagamit mo ang iyong Mac o iyong PC 1578 01:18:37,420 --> 01:18:40,010 ng memory, o RAM kaya na magsalita. 1579 01:18:40,010 --> 01:18:42,620 At maaari mong isipin ang iyong computer bilang pagkakaroon 1580 01:18:42,620 --> 01:18:44,730 maraming mga gigabytes ng memory mga araw na ito. 1581 01:18:44,730 --> 01:18:47,700 At isang kalesa ay nangangahulugan bilyun-bilyong, kaya bilyong bytes. 1582 01:18:47,700 --> 01:18:48,910 >> Ngunit sabihin rewind sa oras. 1583 01:18:48,910 --> 01:18:51,530 At ipagpalagay na aming ginagamit isang tunay na lumang computer na 1584 01:18:51,530 --> 01:18:55,150 lamang ay may 32 bytes ng memorya. 1585 01:18:55,150 --> 01:18:59,310 kaya kong, sa aking computer screen, lamang gumuhit ito out tulad ng sumusunod. 1586 01:18:59,310 --> 01:19:05,240 >> maaari ko lang sabihin na ang aking computer ay may ang lahat ng ito memory. 1587 01:19:05,240 --> 01:19:08,830 At ito ay tulad ng isang stick ng memorya, kung isipin mo ang ating larawan mula sa huling panahon. 1588 01:19:08,830 --> 01:19:11,670 At kung ako lang hatiin ito sa sapat na beses, 1589 01:19:11,670 --> 01:19:15,040 inaangkin ko na ako ay may 32 bytes ng memorya sa screen. 1590 01:19:15,040 --> 01:19:18,239 >> Ngayon, sa katotohanan, maaari ko lamang gumuhit sa ngayon sa screen na ito dito. 1591 01:19:18,239 --> 01:19:20,280 Kaya ako pagpunta sa sige, at sa pamamagitan lamang ng convention, 1592 01:19:20,280 --> 01:19:24,050 gumuhit memorya ng aking computer bilang grid, hindi lamang bilang isang tuwid na linya. 1593 01:19:24,050 --> 01:19:28,190 Sa partikular, i-claim ko na ngayon na ang grid na ito, ito 8 sa pamamagitan ng 4 grid, 1594 01:19:28,190 --> 01:19:31,800 lamang ay kumakatawan sa lahat 32 bytes ng memorya na magagamit sa aking Mac, 1595 01:19:31,800 --> 01:19:33,030 o magagamit sa aking PC. 1596 01:19:33,030 --> 01:19:34,780 At sila ay pambalot sa sa dalawang linya, lamang 1597 01:19:34,780 --> 01:19:38,030 dahil ito akma pa sa screen. 1598 01:19:38,030 --> 01:19:40,800 Ngunit ito ay ang unang byte. 1599 01:19:40,800 --> 01:19:41,990 Ito ang ikalawang byte. 1600 01:19:41,990 --> 01:19:43,300 Ito ang pangatlong byte. 1601 01:19:43,300 --> 01:19:45,310 >> At ito ang ika-32 byte. 1602 01:19:45,310 --> 01:19:52,910 O kaya naman, kung sa tingin namin tulad ng isang computer siyentipiko, ito ay byte 0, 1, 2, 3, 31. 1603 01:19:52,910 --> 01:19:55,950 Kaya mo ay may 0 hanggang 31, kung simulan mo pagbibilang sa 0. 1604 01:19:55,950 --> 01:19:59,830 >> Kaya kung ginagamit namin ang isang programa na mga tawag makakuha string, 1605 01:19:59,830 --> 01:20:05,280 at kami makakuha ng isang string mula sa mga tao tulad ko na tinatawag na Zamyla, Z-A-M-Y-L-A, 1606 01:20:05,280 --> 01:20:09,430 kung paano sa mundo ay ang computer na subaybayan ng kung saan byte, 1607 01:20:09,430 --> 01:20:12,230 na tipak ng memory, aari na kung saan string? 1608 01:20:12,230 --> 01:20:16,270 Sa ibang salita, kung tayo ay magpatuloy sa type ng isa pang pangalan sa mga computer, 1609 01:20:16,270 --> 01:20:19,890 tulad nito Andi, pagtawag makakuha ng string sa ikalawa'y pakikita na 1610 01:20:19,890 --> 01:20:23,030 A-N-D-I ay upang tapusin up sa memory ng computer pati na rin. 1611 01:20:23,030 --> 01:20:23,850 Pero paano? 1612 01:20:23,850 --> 01:20:29,700 >> Well, ito ay lumiliko out na sa ilalim ng hood, kung ano ang C ay kapag pag-iimbak ng mga string 1613 01:20:29,700 --> 01:20:35,080 na ang mga tao uri sa, o na dumating mula sa ibang mga pinagmulan, ay ito 1614 01:20:35,080 --> 01:20:39,190 delineates dulo ng mga ito sa isang espesyal na character-- backslash 1615 01:20:39,190 --> 01:20:44,750 0, na kung saan ay lamang ng isang espesyal na paraan na sabihing 80 bits sa isang hilera. 1616 01:20:44,750 --> 01:20:47,950 >> Kaya A-- ito ang bilang 97 pagpapabalik. 1617 01:20:47,950 --> 01:20:51,770 Kaya ang ilang mga pattern ng 8 bits kumakatawan decimal na numero 97. 1618 01:20:51,770 --> 01:20:58,070 backslash ito 0 ay literal ang bilang 0, a.k.a. nul, N-U-L, hindi katulad ng mas maaga, 1619 01:20:58,070 --> 01:20:59,630 N-U-L-L, na usapan natin ang tungkol. 1620 01:20:59,630 --> 01:21:05,700 Ngunit sa ngayon, lamang malaman na ito backslash 0 ay lamang 80 bits sa isang hilera. 1621 01:21:05,700 --> 01:21:09,810 >> At ito ay lamang ang linyang ito sa buhangin na ay magsabi ng anoman sa kaliwa 1622 01:21:09,810 --> 01:21:12,610 kabilang sa isa string, o isang uri ng data. 1623 01:21:12,610 --> 01:21:15,480 At anumang bagay sa kanan ay kabilang sa iba pang dahilan. 1624 01:21:15,480 --> 01:21:17,440 ang pangalan Andi, samantala, na lamang visually 1625 01:21:17,440 --> 01:21:21,310 ang mangyayari sa wrapper sa sa iba pang mga linya, ngunit ito lamang ay isang Aesthetic detalye, 1626 01:21:21,310 --> 01:21:23,990 parehas ay nul tinapos. 1627 01:21:23,990 --> 01:21:29,290 >> Ito ay isang string ng isang A-N-D-I character, plus ang ikalimang lihim na character, 1628 01:21:29,290 --> 01:21:33,560 ang lahat ng 0 bits, na lamang demarcates sa dulo ng pangalan ni Andi pati na rin. 1629 01:21:33,560 --> 01:21:37,120 At kung ang tawag namin makakuha ng string sa pangatlong beses sa computer upang makakuha ng isang string tulad ng 1630 01:21:37,120 --> 01:21:44,210 Maria, M-A-R-I-A, katulad ay Maria pangalan nul tinapos sa backslash 0. 1631 01:21:44,210 --> 01:21:47,170 >> Ito ay sa panimula naiiba mula sa kung paano ang isang computer ng gagawin ay karaniwang 1632 01:21:47,170 --> 01:21:51,850 mag-imbak ng isang integer, o isang Float, o iba pang uri ng data pa rin, dahil pagpapabalik, 1633 01:21:51,850 --> 01:21:57,420 isang integer ay karaniwang 32 bits, o 4 bytes, o marahil kahit na 64 bits, 1634 01:21:57,420 --> 01:21:59,100 o walong bytes. 1635 01:21:59,100 --> 01:22:02,620 Ngunit maraming mga primitives sa isang computer sa isang programming language 1636 01:22:02,620 --> 01:22:05,550 magkaroon ng isang nakapirming numero ng bytes sa ilalim ng hood-- 1637 01:22:05,550 --> 01:22:08,100 siguro 1, siguro 2, siguro 4, siguro 8. 1638 01:22:08,100 --> 01:22:13,250 >> Ngunit mga string, sa pamamagitan ng disenyo, ay may isang dynamic na bilang ng mga character. 1639 01:22:13,250 --> 01:22:16,980 Hindi mo alam nang maaga, hanggang sa ang mga tao na uri sa Z-A-M-Y-L-A, 1640 01:22:16,980 --> 01:22:21,400 o M-A-R-I-A, o A-N-D-I. Hindi mo alam kung kung gaano karaming beses ang user ay pagpunta sa hit 1641 01:22:21,400 --> 01:22:22,070 ang keyboard. 1642 01:22:22,070 --> 01:22:26,490 Samakatuwid, hindi mo alam kung paano maraming mga character in advance 1643 01:22:26,490 --> 01:22:27,540 ikaw ay pagpunta sa kailangan. 1644 01:22:27,540 --> 01:22:31,840 >> At kaya C lamang ang uri ng dahon tulad ng isang lihim breadcrumb sa ilalim ng hood 1645 01:22:31,840 --> 01:22:32,960 sa dulo ng string. 1646 01:22:32,960 --> 01:22:39,280 Pagkatapos pag-iimbak ng Z-A-M-Y-L-A sa memorya, ito rin ay lamang inilalagay ang katumbas 1647 01:22:39,280 --> 01:22:40,210 ng isang panahon. 1648 01:22:40,210 --> 01:22:45,060 Sa katapusan ng isang pangungusap, pero ilalagay 80 bits, sa gayon ay 1649 01:22:45,060 --> 01:22:49,120 tandaan kung saan Zamyla ay nagsisimula at nagtatapos. 1650 01:22:49,120 --> 01:22:51,490 >> Kaya kung ano ang koneksyon, pagkatapos, sa programang ito? 1651 01:22:51,490 --> 01:22:55,190 Ang program na ito dito, Stirling, ay lamang ng isang mekanismo 1652 01:22:55,190 --> 01:22:57,970 para sa pagkuha ng isang string mula sa gumagamit, line 6. 1653 01:22:57,970 --> 01:23:01,160 Line 7, ako'y nagpapahayag ng isang variable tinatawag n at itakda ito katumbas ng 0. 1654 01:23:01,160 --> 01:23:08,680 >> At pagkatapos ay sa linya 8, simpleng Tinanong ko ang tanong, habang ang n-ika-character ay 1655 01:23:08,680 --> 01:23:12,120 hindi katumbas ang lahat ng 0 bits-- sa ibang salita, ay hindi 1656 01:23:12,120 --> 01:23:14,500 pantay na ang espesyal na character, backslash 0, na 1657 01:23:14,500 --> 01:23:18,470 ay isa lamang sa mga espesyal na nul character-- sige at lamang dagdagan n. 1658 01:23:18,470 --> 01:23:21,460 >> At panatilihin ang paggawa nito, at sundin mo ginagawa ito, at panatilihin ang paggawa nito. 1659 01:23:21,460 --> 01:23:23,430 At kaya kahit na sa nakaraan ginamit namin i, 1660 01:23:23,430 --> 01:23:25,181 ito ay ganap na ganap pagmultahin semantically gamitin n, 1661 01:23:25,181 --> 01:23:27,430 kung ikaw ay lamang sinusubukan mong bilangin ang oras na ito kusa, 1662 01:23:27,430 --> 01:23:28,720 at nais lamang upang tumawag ito n. 1663 01:23:28,720 --> 01:23:34,720 Kaya ito lamang mapigil ang humihingi ng tanong, ay ang n-ika-character ng s lahat 0s? 1664 01:23:34,720 --> 01:23:38,470 Kung hindi, tumingin sa susunod na hitsura, Tumingin sa susunod, tumingin sa susunod na, 1665 01:23:38,470 --> 01:23:39,460 Tumingin sa susunod. 1666 01:23:39,460 --> 01:23:45,540 >> Ngunit sa lalong madaling nakikita mo backslash 0, ito loop-- line 9 hanggang 11-- tumitigil. 1667 01:23:45,540 --> 01:23:49,640 break mo sa labas ng habang loop, umaalis sa loob ng na variable n 1668 01:23:49,640 --> 01:23:54,530 ng isang kabuuang bilang ng lahat ng character sa string na nakita mo, 1669 01:23:54,530 --> 01:23:55,660 at dahil doon pag-print ito out. 1670 01:23:55,660 --> 01:23:56,760 Kaya sabihin subukan ito. 1671 01:23:56,760 --> 01:23:59,500 >> Hayaan akong sige at, nang walang gamit ang stirling function, 1672 01:23:59,500 --> 01:24:04,240 ngunit lamang gamit ang aking sariling homegrown bersiyon dito na tinatawag stirling, hayaan mo akong magpatuloy 1673 01:24:04,240 --> 01:24:07,700 at tumakbo stirling, i-type ng isang bagay tulad Zamyla, na alam ko in advance 1674 01:24:07,700 --> 01:24:08,670 ay anim na mga character. 1675 01:24:08,670 --> 01:24:10,080 Tayo'y makita kung ito gumagana. 1676 01:24:10,080 --> 01:24:10,920 Sa katunayan, ito ay anim. 1677 01:24:10,920 --> 01:24:15,257 Tayo'y subukan sa Rob Hayaan, tatlong character, tatlong mga character pati na rin, at iba pa. 1678 01:24:15,257 --> 01:24:17,340 Kaya na ang lahat na nangyayari sa ilalim ng hood. 1679 01:24:17,340 --> 01:24:19,548 At mapansin ang koneksyon, pagkatapos, na may unang linggo 1680 01:24:19,548 --> 01:24:22,370 ng klase, kung saan usapan natin ang tungkol isang bagay tulad ng abstraction, 1681 01:24:22,370 --> 01:24:26,960 kung saan ay lamang na ito layering ng mga ideya, o kumplikado, sa tuktok ng pangunahing mga prinsipyo. 1682 01:24:26,960 --> 01:24:30,710 Narito, uri ng kami ay naghahanap sa ilalim ng hood ng stirling, 1683 01:24:30,710 --> 01:24:33,510 kaya na magsalita, upang malaman kung, kung paano ito ay ipinatupad? 1684 01:24:33,510 --> 01:24:35,232 >> At hindi na namin maaaring muling ipatupad ito sa ating sarili. 1685 01:24:35,232 --> 01:24:37,440 Ngunit kami ay hindi na muling pagpunta upang muling ipatupad stirling. 1686 01:24:37,440 --> 01:24:39,780 Lamang kami ng pagpunta sa gamitin stirling upang 1687 01:24:39,780 --> 01:24:42,100 upang aktwal na makakuha ng ilang mga string haba. 1688 01:24:42,100 --> 01:24:44,200 >> Ngunit walang magic ilalim ng hood. 1689 01:24:44,200 --> 01:24:46,716 Kung alam mo na sa ilalim ng hood, ang isang string 1690 01:24:46,716 --> 01:24:48,090 ay lamang ng isang pagkakasunod-sunod ng mga character. 1691 01:24:48,090 --> 01:24:51,090 At na pagkakasunod-sunod ng mga character lahat ay maaaring ayon sa bilang direksiyon 1692 01:24:51,090 --> 01:24:53,330 sa bracket 0, bracket 1, bracket 2, at ikaw 1693 01:24:53,330 --> 01:24:57,420 alam na sa dulo ng isang string ay isang espesyal na karakter, maaari mong malaman kung 1694 01:24:57,420 --> 01:25:01,710 kung paano gawin ang karamihan ng anumang bagay sa isang programa, dahil ang lahat ng ito boils down sa 1695 01:25:01,710 --> 01:25:03,400 ay pagbabasa at pagsusulat memory. 1696 01:25:03,400 --> 01:25:06,130 Iyon ay, ang pagbabago at naghahanap sa memorya, o paglipat ng mga bagay 1697 01:25:06,130 --> 01:25:10,940 sa paligid sa memory, pag-print ng mga bagay sa screen, at iba pa. 1698 01:25:10,940 --> 01:25:14,800 >> Kaya sabihin na ngayong gamitin ang newfound unawa sa kung ano ang tunay na string 1699 01:25:14,800 --> 01:25:17,910 Isasama sa ilalim ng hood, at alisan ng balat pabalik sa isang iba pang layer 1700 01:25:17,910 --> 01:25:20,080 na hanggang ngayon hindi namin ay hindi papansin kabuuan. 1701 01:25:20,080 --> 01:25:22,650 Sa partikular, anumang oras na ipinatupad namin ang isang programa, 1702 01:25:22,650 --> 01:25:25,930 mayroon kaming ito linya ng code malapit sa tuktok deklarasyon main. 1703 01:25:25,930 --> 01:25:27,810 At kami tinukoy na int pangunahing walang bisa. 1704 01:25:27,810 --> 01:25:31,240 >> At na walang bisa sa loob ng panaklong ay sinasabi ang lahat ng oras na ito na ang pangunahing 1705 01:25:31,240 --> 01:25:33,440 mismo ay hindi gumawa ng anumang mga argumento. 1706 01:25:33,440 --> 01:25:36,210 Anumang input na pangunahing ay pagpunta upang makakuha ng mula sa mga gumagamit 1707 01:25:36,210 --> 01:25:39,020 ay na dumating mula sa ilang mga iba pang mga mekanismo, tulad ng get int, 1708 01:25:39,020 --> 01:25:42,040 o makakuha ng float, o makakuha ng string, o ilang iba pang function. 1709 01:25:42,040 --> 01:25:44,710 Ngunit ito ay lumiliko out na kapag sumulat ka ng isang programa, 1710 01:25:44,710 --> 01:25:47,690 maaari mong aktwal na tukuyin ang programang ito ay dapat 1711 01:25:47,690 --> 01:25:51,730 tumagal inputs mula sa mga tao sa command line mismo. 1712 01:25:51,730 --> 01:25:56,310 >> Sa ibang salita, kahit na namin kaya sa ngayon kung tumatakbo lamang ./hello kumusta 1713 01:25:56,310 --> 01:26:00,312 o katulad na mga programa, ang lahat ng mga iba pang mga programa na kami ay ginagamit, 1714 01:26:00,312 --> 01:26:02,770 na hindi namin ating sarili ay sumulat, kung na-pagkuha, tila, 1715 01:26:02,770 --> 01:26:05,210 command line arguments-- mga bagay tulad ng gumawa. 1716 01:26:05,210 --> 01:26:07,450 sabihin mo ng isang bagay tulad ng gumawa, at pagkatapos ng pangalawang salita. 1717 01:26:07,450 --> 01:26:10,950 O kalatungin, ikaw sabihin kumalatong, at pagkatapos ay isang pangalawang salita, ang pangalan ng isang file. 1718 01:26:10,950 --> 01:26:14,410 >> O kahit RM o CP, bilang maaari mong tumingin sa o ginagamit na 1719 01:26:14,410 --> 01:26:15,880 upang tanggalin o kopyahin ang mga file. 1720 01:26:15,880 --> 01:26:18,920 Ang lahat ng mga kumuha ng tinatawag na command line arguments-- 1721 01:26:18,920 --> 01:26:21,130 karagdagang mga salita sa terminal prompt. 1722 01:26:21,130 --> 01:26:23,260 Ngunit hanggang ngayon, kami ating sarili ay hindi nagkaroon 1723 01:26:23,260 --> 01:26:27,080 ang luxury ng pagkuha ng input mula sa user kapag siya ang tunay na nagpapatakbo 1724 01:26:27,080 --> 01:26:29,120 mismong programa sa command line. 1725 01:26:29,120 --> 01:26:33,710 >> Ngunit maaari naming gawin iyon sa pamamagitan ng muling deklarasyon pangunahing paglipat ng pasulong, hindi tulad ng pagkakaroon ng 1726 01:26:33,710 --> 01:26:36,750 magpawalang-bisa sa panaklong, ngunit ang mga ito ng dalawang argumento 1727 01:26:36,750 --> 01:26:40,600 instead-- kang isang integer, at ang ikalawang bagay 1728 01:26:40,600 --> 01:26:44,170 bago, isang bagay na kami ay pagpunta sa tumawag isang array, isang bagay na katulad sa espiritu 1729 01:26:44,170 --> 01:26:49,220 sa kung ano ang nakita natin sa Scratch bilang isang listahan, ngunit isang array ng mga string, dahil kakailanganin namin sa lalong madaling panahon makita. 1730 01:26:49,220 --> 01:26:51,790 Ngunit sabihin makita ito sa pamamagitan ng Bilang halimbawa, bago namin 1731 01:26:51,790 --> 01:26:53,690 makilala kung ano mismo ang ibig sabihin nito. 1732 01:26:53,690 --> 01:26:56,520 >> Kaya kung pumunta ako sa CS50 IDE dito, ako ay wala nang mas maaga 1733 01:26:56,520 --> 01:27:01,840 at ipinahayag sa isang file na tinatawag na argv0.c ang mga sumusunod na template. 1734 01:27:01,840 --> 01:27:04,120 At mapansin ang tanging bagay na iba sa ngayon 1735 01:27:04,120 --> 01:27:08,570 ay na ko na nagbago void sa int argc string argv bukas bracket, malapit 1736 01:27:08,570 --> 01:27:09,070 bracket. 1737 01:27:09,070 --> 01:27:11,730 At mapansin para sa ngayon, may wala sa loob ng mga bracket. 1738 01:27:11,730 --> 01:27:12,620 >> Walang number. 1739 01:27:12,620 --> 01:27:15,070 At walang i, o n, o anumang iba pang sulat. 1740 01:27:15,070 --> 01:27:17,010 Tingin lang ako gamit ang square bracket para sa ngayon, 1741 01:27:17,010 --> 01:27:19,510 para sa mga kadahilanang kami ay dumating pabalik sa loob lamang ng ilang sandali. 1742 01:27:19,510 --> 01:27:21,330 >> At ngayon kung ano ako ng pagpunta sa gawin ay na ito. 1743 01:27:21,330 --> 01:27:26,680 Kung argc ay katumbas ay katumbas 2-- at isipin na katumbas equals 1744 01:27:26,680 --> 01:27:30,040 ay ang pagkakapantay-pantay operator paghahambing ang kaliwa at kanang para pagkakapantay-pantay. 1745 01:27:30,040 --> 01:27:31,790 Ito ay hindi ang assignment operator, na kung saan ay 1746 01:27:31,790 --> 01:27:36,510 ang nag-iisang katumbas sign, na nangangahulugan na kopya mula sa kanan sa kaliwa ilang mga halaga. 1747 01:27:36,510 --> 01:27:42,840 >> Kung argc ay katumbas ay katumbas ng 2, gusto kong sabihin nating, printf, hello, percents, bagong linya, 1748 01:27:42,840 --> 01:27:47,340 at pagkatapos ay plug in-- at narito ang mga bagong trick-- argv bracket 1, para sa mga dahilan 1749 01:27:47,340 --> 01:27:48,840 na kami ay bumalik sa sa isang sandali. 1750 01:27:48,840 --> 01:27:52,110 Iba Pa kung argc ay hindi katumbas 2, alam mo kung ano? 1751 01:27:52,110 --> 01:27:57,400 Sabihin pumunta lamang magpatuloy at, gaya ng dati, i-print out hello world na walang pagpapalit. 1752 01:27:57,400 --> 01:28:02,710 >> Kaya ito ay tila na kung argc, na kung saan nakatayo para sa argumento count, ay katumbas ng 2, 1753 01:28:02,710 --> 01:28:04,740 Pupunta ako upang i-print out kumusta bagay o iba pang. 1754 01:28:04,740 --> 01:28:07,560 Kung hindi man, sa pamamagitan ng default, ako upang i-print kumusta mundo. 1755 01:28:07,560 --> 01:28:08,770 Kaya kung ano ang ibig sabihin nito? 1756 01:28:08,770 --> 01:28:15,550 >> Well, hayaan mo akong magpatuloy at i-save ang file na ito, at pagkatapos ay gawin ang make argv0, 1757 01:28:15,550 --> 01:28:18,940 at pagkatapos ay ./argv0, ang Enter. 1758 01:28:18,940 --> 01:28:20,300 At sinasabi nito kumusta mundo. 1759 01:28:20,300 --> 01:28:21,260 Ngayon, kung bakit ay na? 1760 01:28:21,260 --> 01:28:24,730 >> Well, ito ay lumiliko out anumang oras mo magpatakbo ng isang programa sa command line, 1761 01:28:24,730 --> 01:28:29,570 ikaw ay pagpuno sa kung ano kami ay pangkalahatan tumawag ng argument vector. 1762 01:28:29,570 --> 01:28:33,100 Sa ibang salita, awtomatikong ang computer, ang operating system, 1763 01:28:33,100 --> 01:28:38,340 ay pagpunta sa ipasa sa iyong programa kanyang sarili ng isang listahan ng lahat ng mga salita 1764 01:28:38,340 --> 01:28:40,850 na ang mga tao na nag-type sa ang prompt, kung sakaling ikaw 1765 01:28:40,850 --> 01:28:43,790 ang programmer nais na gawin isang bagay na may impormasyon na iyon. 1766 01:28:43,790 --> 01:28:48,540 At sa kasong ito, ang tanging salita Ko na nai-type sa prompt ay ./argv0. 1767 01:28:48,540 --> 01:28:55,420 >> At kaya ang bilang ng mga argumento na na dumaan sa aking programa ay isa lamang. 1768 01:28:55,420 --> 01:28:58,880 Sa ibang salita, ang argument count, kung hindi man kilala bilang argc 1769 01:28:58,880 --> 01:29:00,970 dito bilang isang integer, ay isa lamang. 1770 01:29:00,970 --> 01:29:03,000 One, siyempre, ay hindi katumbas dalawa. 1771 01:29:03,000 --> 01:29:05,980 At kaya ito ay kung ano ang mga kopya, kumusta mundo. 1772 01:29:05,980 --> 01:29:08,170 >> Ngunit ipaalam sa akin tumagal ito sa isang lugar. 1773 01:29:08,170 --> 01:29:09,930 Hayaan sabihin sa akin, argv0. 1774 01:29:09,930 --> 01:29:12,740 At pagkatapos ay kung paano tungkol sa Maria? 1775 01:29:12,740 --> 01:29:14,990 At pagkatapos ay pindutin ang Enter. 1776 01:29:14,990 --> 01:29:18,020 >> At pansinin kung ano magically ang mangyayari dito. 1777 01:29:18,020 --> 01:29:22,640 Ngayon, sa halip ng hello world, mayroon akong nagbago ang pag-uugali ng programang ito 1778 01:29:22,640 --> 01:29:26,310 sa pamamagitan ng pagkuha ng input hindi mula get string o ilang iba pang function, 1779 01:29:26,310 --> 01:29:30,570 ngunit mula sa, tila, ang aking utos mismo, kung ano ang aking orihinal na nai-type in. 1780 01:29:30,570 --> 01:29:35,720 At maaari kong i-play ang laro na ito muli sa pamamagitan ng pagbabago nito sa Stelios, halimbawa. 1781 01:29:35,720 --> 01:29:38,400 >> At ngayon ako makita ang isa pang pangalan pa rin. 1782 01:29:38,400 --> 01:29:40,540 At dito, maaari kong sabihin Andi. 1783 01:29:40,540 --> 01:29:42,137 At maaari kong sabihin Zamyla. 1784 01:29:42,137 --> 01:29:45,220 At maaari naming i-play ang laro na ito sa lahat ng araw ang haba, lamang i-plug sa iba't ibang mga halaga, 1785 01:29:45,220 --> 01:29:49,550 habang ako'y magbigay ng eksakto dalawang salita sa prompt, 1786 01:29:49,550 --> 01:29:52,260 tulad na argc, ang aking argument bilangin, ay 2. 1787 01:29:52,260 --> 01:29:57,240 >> Huwag kong makita na pangalan plugged sa printf, per ang kundisyong ito dito? 1788 01:29:57,240 --> 01:30:00,550 Kaya tila namin na magkaroon ngayon ang nagpapahayag kakayahan 1789 01:30:00,550 --> 01:30:04,410 ng pagkuha input mula sa iba pang mekanismo, mula sa tinaguriang command line, 1790 01:30:04,410 --> 01:30:07,000 sa halip ng pagkakaroon na maghintay hanggang sa ang user ay tumatakbo ang programa, 1791 01:30:07,000 --> 01:30:10,220 at pagkatapos ay i-prompt sa kanya paggamit ng isang bagay tulad ng get string. 1792 01:30:10,220 --> 01:30:11,230 >> Kaya kung ano ay ito? 1793 01:30:11,230 --> 01:30:15,010 Argc, muli, ay lamang ng isang integer, ang bilang ng mga words-- arguments-- 1794 01:30:15,010 --> 01:30:18,540 na ang mga user na ibinigay sa prompt, sa window terminal, 1795 01:30:18,540 --> 01:30:20,110 kabilang ang pangalan ng program. 1796 01:30:20,110 --> 01:30:23,340 Kaya aming ./argv0 ay, mabisa, pangalan ng program, 1797 01:30:23,340 --> 01:30:24,520 o kung paano ko patakbuhin ang program. 1798 01:30:24,520 --> 01:30:25,810 >> Na binibilang bilang isang salita. 1799 01:30:25,810 --> 01:30:27,080 Kaya argc ay 1. 1800 01:30:27,080 --> 01:30:29,750 Ngunit kapag ako magsulat ng Stelios, o Andi, o Zamyla, o Maria, 1801 01:30:29,750 --> 01:30:31,660 na nangangahulugan na ang argument count ay dalawa. 1802 01:30:31,660 --> 01:30:33,910 At kaya ngayon ay may dalawang salita lumipas in. 1803 01:30:33,910 --> 01:30:36,070 >> At pansinin, maaari naming patuloy na ito logic. 1804 01:30:36,070 --> 01:30:39,050 Kung ako talagang sabihin isang bagay tulad ng Zamyla Chan, 1805 01:30:39,050 --> 01:30:42,200 isang buong pangalan, at dahil doon pagpasa tatlong argumento sa kabuuan, 1806 01:30:42,200 --> 01:30:47,410 ngayon ito sabi ng default muli, dahil, siyempre, 3 ay hindi katumbas 2. 1807 01:30:47,410 --> 01:30:54,080 >> At kaya sa paraang ito, ang mayroon ako access sa pamamagitan ng argv ang bagong argument 1808 01:30:54,080 --> 01:30:56,080 na maaari naming technically tumawag kahit ano ang gusto namin. 1809 01:30:56,080 --> 01:30:58,940 Ngunit sa pamamagitan ng convention, ito ay argv at argc, buong galang. 1810 01:30:58,940 --> 01:31:04,470 Argv, argument vector, ay uri ng isang salitang kasingkahulugan para sa isang programming 1811 01:31:04,470 --> 01:31:07,140 tampok sa C na tinatawag na isang array. 1812 01:31:07,140 --> 01:31:14,410 >> Isang array ay isang listahan ng mga katulad na mga halaga likod, sa likod, sa likod, sa likod. 1813 01:31:14,410 --> 01:31:17,810 Sa ibang salita, kung ang isa ay dito mismo sa RAM, ang susunod na ang isa ay tama sa tabi nito, 1814 01:31:17,810 --> 01:31:18,800 at kanang tabi nito. 1815 01:31:18,800 --> 01:31:20,101 Ang mga ito ay hindi lahat ng dako ng lugar. 1816 01:31:20,101 --> 01:31:23,100 At na huli sitwasyon, kung saan bagay ay ang lahat sa ibabaw ng lugar sa memorya, 1817 01:31:23,100 --> 01:31:25,082 maaaring aktwal na maging isang malakas na tampok. 1818 01:31:25,082 --> 01:31:28,040 Ngunit kami ay bumalik sa na kapag kami makipag-usap tungkol fancier istruktura ng data. 1819 01:31:28,040 --> 01:31:32,260 Para sa ngayon, ang isang array ay lamang ng isang tipak ng magkadikit memory, 1820 01:31:32,260 --> 01:31:36,520 bawat isa sa kung saan ang mga elemento ay likod, sa likod, sa likod, sa likod, 1821 01:31:36,520 --> 01:31:38,050 at sa pangkalahatan ay ng parehong uri. 1822 01:31:38,050 --> 01:31:42,630 >> Kaya kung sa tingin mo tungkol sa, mula sa isang sandali ang nakalipas, kung ano ang isang string? 1823 01:31:42,630 --> 01:31:50,460 Well, ang isang string, tulad ng Zamyla, Z-A-M-Y-L-A, ay, technically, 1824 01:31:50,460 --> 01:31:51,400 lamang ng isang array. 1825 01:31:51,400 --> 01:31:53,700 Ito ay isang array ng mga character. 1826 01:31:53,700 --> 01:31:59,250 >> At kaya kung namin talagang gumuhit ito, bilang ako ginawa mas maaga, bilang isang tipak ng memory, 1827 01:31:59,250 --> 01:32:04,510 ito ay lumiliko out na ang bawat isa sa mga letra tumatagal ng hanggang isang byte. 1828 01:32:04,510 --> 01:32:07,630 At pagkatapos ay may mga espesyal na sentinel karakter, ang backslash 0, 1829 01:32:07,630 --> 01:32:12,360 o ang lahat ng walong 0 bits, na demarcates katapusan niyaong string. 1830 01:32:12,360 --> 01:32:15,090 Kaya ang isang string, ito ay lumiliko out, quote magpanipi string, 1831 01:32:15,090 --> 01:32:20,580 ay lamang ng isang array ng mga chara-- char pagiging isang tunay na uri ng data. 1832 01:32:20,580 --> 01:32:24,560 >> At ngayon argv, meanwhile-- sabihin bumalik sa programa. 1833 01:32:24,560 --> 01:32:29,582 Argv, kahit na nakikita natin ang salita string dito, ay hindi isang string mismo. 1834 01:32:29,582 --> 01:32:33,640 Argv, argument vector, ay isang array ng mga string. 1835 01:32:33,640 --> 01:32:37,620 >> Kaya tulad ng maaari kang magkaroon ng isang hanay ng mga character, maaari kang magkaroon ng mas mataas na antas, 1836 01:32:37,620 --> 01:32:46,279 isang array ng strings-- kaya, halimbawa, kapag ako nag-type ng isang sandali ago ./argv0 1837 01:32:46,279 --> 01:33:00,150 argv0, space Z-A-M-Y-L-A, inaangkin ko na argv ay nagkaroon ng dalawang mga string sa it-- ./argv0, 1838 01:33:00,150 --> 01:33:03,185 at Z-A-M-Y-L-A. Sa ibang salita, argc ay 2. 1839 01:33:03,185 --> 01:33:03,980 Bakit na? 1840 01:33:03,980 --> 01:33:08,370 >> Well, mabisa, kung ano ang nangyayari sa ay na ang bawat isa sa mga string 1841 01:33:08,370 --> 01:33:13,990 ay, siyempre, isang array ng mga character tulad ng dati, ang bawat isa na kung saan ang mga letra 1842 01:33:13,990 --> 01:33:15,670 tumatagal ng hanggang isang byte. 1843 01:33:15,670 --> 01:33:19,720 At huwag lituhin ang aktwal 0 sa pangalan ng program na may 0, 1844 01:33:19,720 --> 01:33:22,040 na nangangahulugan ang lahat ng 80 bits. 1845 01:33:22,040 --> 01:33:27,140 At Zamyla, samantala, ay pa rin din ng isang array ng mga character. 1846 01:33:27,140 --> 01:33:31,450 >> Kaya sa katapusan ng araw, ito tunay ganito ang hitsura nito sa ilalim ng hood. 1847 01:33:31,450 --> 01:33:38,800 Ngunit argv, sa pamamagitan ng likas na katangian ng kung paano main gawa, ay nagbibigay-daan sa akin upang wrap ang lahat ng mga ito 1848 01:33:38,800 --> 01:33:44,810 up sa, kung ikaw ay, isang mas malaking array na, kung kami ay bahagyang higit gawing simple 1849 01:33:44,810 --> 01:33:48,180 kung ano ang larawan ay ganito ang hitsura at di ninyo ginagawa medyo babatakin sa scale up doon, 1850 01:33:48,180 --> 01:33:56,720 array na ito ay lamang ng laki 2, ang unang elemento ng na naglalaman ng isang string, 1851 01:33:56,720 --> 01:33:59,230 ang pangalawang elemento ng na naglalaman ng isang string. 1852 01:33:59,230 --> 01:34:01,687 At ang kapalit, kung ikaw uri ng mag-zoom in sa bawat 1853 01:34:01,687 --> 01:34:03,770 sa mga string, kung ano ang iyong makita sa ilalim ng hood 1854 01:34:03,770 --> 01:34:07,190 ay na ang bawat string ay lamang isang array ng mga character. 1855 01:34:07,190 --> 01:34:11,680 >> Ngayon, tulad ng sa mga string, nagawa naming upang makakuha ng access 1856 01:34:11,680 --> 01:34:15,260 sa i-ika na character sa isang string gamit na square bracket pagtatanda. 1857 01:34:15,260 --> 01:34:17,320 Katulad nito, sa arrays sa pangkalahatan, maaari naming 1858 01:34:17,320 --> 01:34:22,700 gamitin square bracket pagtatanda upang makakuha ng sa anumang bilang ng mga string sa isang array? 1859 01:34:22,700 --> 01:34:25,100 Halimbawa, hayaan mo akong sige, at gawin ito. 1860 01:34:25,100 --> 01:34:32,420 >> Hayaan akong magpatuloy at lumikha argv1.c, na kung saan ay isang maliit na naiiba ngayon. 1861 01:34:32,420 --> 01:34:35,635 Sa halip ng paglagay ng tsek para argc2, Pupunta ako sa halip na gawin ito. 1862 01:34:35,635 --> 01:34:41,270 Para int nakukuha ko 0, ako ay mas mababa kaysa argc, ako plus plus, 1863 01:34:41,270 --> 01:34:47,920 at pagkatapos ay i-print out sa loob ng mga ito, porsiyento s, bagong linya, at pagkatapos ay 1864 01:34:47,920 --> 01:34:50,740 argv bracket i. 1865 01:34:50,740 --> 01:34:55,220 >> Kaya sa ibang salita, hindi ako pagharap sa indibidwal na mga character sa sandaling ito. 1866 01:34:55,220 --> 01:35:00,190 Argv, pati na ipinahiwatig sa pamamagitan ng mga walang laman na parisukat tirante sa kanan ng pangalan argv, 1867 01:35:00,190 --> 01:35:03,320 nangangahulugan argv ay isang array ng mga string. 1868 01:35:03,320 --> 01:35:04,870 At argc ay lamang ng isang int. 1869 01:35:04,870 --> 01:35:08,800 >> Ang linya dito, 6, ay sinasabi set i kasing-halaga sa 0. 1870 01:35:08,800 --> 01:35:11,980 Bilangin ang lahat ng paraan hanggang sa, ngunit hindi kabilang ang, argc. 1871 01:35:11,980 --> 01:35:14,010 At pagkatapos ay sa bawat pag-ulit, i-print ang isang string. 1872 01:35:14,010 --> 01:35:14,800 Ano string? 1873 01:35:14,800 --> 01:35:17,270 >> Ang i-th string sa argv. 1874 01:35:17,270 --> 01:35:19,530 Kaya samantalang bago ako ay gamit ang square bracket 1875 01:35:19,530 --> 01:35:22,180 notation upang makakuha ng sa ith character sa isang string, ngayon 1876 01:35:22,180 --> 01:35:27,240 Ako gamit ang square bracket pagtatanda upang makakuha ng sa ith string sa isang array. 1877 01:35:27,240 --> 01:35:30,310 Kaya ito ay uri ng isang layer itaas, conceptually. 1878 01:35:30,310 --> 01:35:35,390 >> At kaya kung ano ang malinis at maayos na tungkol sa mga ito program ngayon, kung ako sumulat ng libro argv1, 1879 01:35:35,390 --> 01:35:42,067 at pagkatapos ay gawin ./argv1, at pagkatapos i-type sa isang bagay tulad foo bar baz, 1880 01:35:42,067 --> 01:35:45,400 na kung saan ay ang tatlong default salita na ang isang computer siyentipiko umabot para sa anumang oras 1881 01:35:45,400 --> 01:35:51,010 siya pangangailangan ng ilang placeholder salita, at pindutin ang Enter, ang bawat isa sa mga salitang ito, 1882 01:35:51,010 --> 01:35:54,980 kabilang ang pangalan ng programa, na kung saan ay sa argv sa unang lokasyon, 1883 01:35:54,980 --> 01:35:58,320 nagtatapos up na naka-print nang paisa-isa. 1884 01:35:58,320 --> 01:36:05,290 At kung babaguhin ko ito, at sinasabi ko isang bagay tulad ng argv1 Zamyla Chan, 1885 01:36:05,290 --> 01:36:08,800 makuha namin ang lahat ng tatlong ng mga salita, na kung saan ay argv0, 1886 01:36:08,800 --> 01:36:14,400 argv1, argv2, dahil sa ito kaso argc, ang count, ay 3. 1887 01:36:14,400 --> 01:36:20,020 >> Ngunit kung ano ang malinis at maayos ay kung naiintindihan mo na argv ay isang array ng mga string, 1888 01:36:20,020 --> 01:36:24,910 at sa iyo na maunawaan na ang isang string ay isang array ng mga character, 1889 01:36:24,910 --> 01:36:29,470 maaari naming tunay na uri ng gamitin ang square bracket pagtatanda maraming beses 1890 01:36:29,470 --> 01:36:33,320 upang pumili ng isang string, at pagkatapos ay piliin isang character sa loob ng string, 1891 01:36:33,320 --> 01:36:35,730 diving sa mas malalim ang mga sumusunod. 1892 01:36:35,730 --> 01:36:40,100 Sa halimbawang ito, hayaan mo akong pumunta magpatuloy at itawag sa argv2.c. 1893 01:36:40,100 --> 01:36:43,920 1894 01:36:43,920 --> 01:36:50,180 At sa halimbawang ito, hayaan mo akong magpatuloy at gawin ang mga following-- para sa int i makakuha ng 0, 1895 01:36:50,180 --> 01:36:53,286 i Mababa sa argc, i plus plus, tulad ng dati. 1896 01:36:53,286 --> 01:36:55,910 Kaya sa ibang words-- at ngayon ito ay nakakakuha ng asawa sapat. 1897 01:36:55,910 --> 01:36:59,940 Pagkatapos ay ako pagpunta sa sabihin umulit sa mga string sa argv, 1898 01:36:59,940 --> 01:37:01,294 bilang isang puna sa aking sarili. 1899 01:37:01,294 --> 01:37:03,960 At pagkatapos ay ako pagpunta sa magkaroon ng isang nakapugad para sa loop, kung saan mo marahil 1900 01:37:03,960 --> 01:37:06,290 ginawa, o itinuturing na paggawa, sa simula, kung saan 1901 01:37:06,290 --> 01:37:08,600 Pupunta ako sa sabihin int ako hindi pagpunta sa gumamit i muli, 1902 01:37:08,600 --> 01:37:12,590 dahil hindi ko nais na anino, o uri ng patungan ang umiiral na i. 1903 01:37:12,590 --> 01:37:15,780 >> Ako pagpunta sa, sa halip, sabihin j, dahil na ang aking go sa variable pagkatapos i, 1904 01:37:15,780 --> 01:37:18,590 kapag ako makatarungan trying sa bilangin simple numero. 1905 01:37:18,590 --> 01:37:28,850 Para j nakakakuha 0-- at din, n, ay pagpunta sa makuha ang istrikto haba ng argv bracket i, 1906 01:37:28,850 --> 01:37:36,030 kaya hangga't j ay mas mababa sa m, j plus plus, gawin ang sumusunod. 1907 01:37:36,030 --> 01:37:37,500 At narito ang mga kagiliw-giliw na bahagi. 1908 01:37:37,500 --> 01:37:46,330 >> I-print out ng isang character at isang bagong linya, plugging sa argv bracket i, bracket j. 1909 01:37:46,330 --> 01:37:47,940 OK, kaya hayaan mo akong magdagdag ng ilang mga komento dito. 1910 01:37:47,940 --> 01:37:54,820 Umulit sa letra sa kasalukuyang string, 1911 01:37:54,820 --> 01:38:02,290 print j-ika na character sa i-ika string. 1912 01:38:02,290 --> 01:38:04,630 Kaya ngayon, sabihin isaalang-alang ano ang mga komentong ito ibig sabihin. 1913 01:38:04,630 --> 01:38:06,750 >> Umulit sa ibabaw ng mga string in argv-- kung gaano karaming 1914 01:38:06,750 --> 01:38:09,300 string ay sa argv, na kung saan ay isang array? 1915 01:38:09,300 --> 01:38:13,420 Argc marami, kaya ako iterating mula sa i katumbas 0 hanggang sa argc. 1916 01:38:13,420 --> 01:38:20,020 Samantala, kung gaano karaming karakter ay sa i-ika string sa argv? 1917 01:38:20,020 --> 01:38:22,880 >> Well, upang makakuha ng sagot na yaon, Ko na lang tawag string haba 1918 01:38:22,880 --> 01:38:26,810 sa pag-aalaga kasalukuyang string ko tungkol sa, na kung saan ay argv bracket i. 1919 01:38:26,810 --> 01:38:30,090 At ako pagpunta upang pansamantalang mag-imbak na halaga sa n, para lamang sa mga layuning pang-cache, 1920 01:38:30,090 --> 01:38:31,590 tandaan ito para sa kahusayan. 1921 01:38:31,590 --> 01:38:36,330 At pagkatapos ay ako pagpunta magpasimula j sa 0, panatilihin ang pagpunta hanggang j ay mas mababa sa n, 1922 01:38:36,330 --> 01:38:38,430 at sa bawat pag-ulit increment j. 1923 01:38:38,430 --> 01:38:41,030 >> At pagkatapos ay sa dito, per ang aking mga puna sa linya 12, 1924 01:38:41,030 --> 01:38:43,390 i-print ang isang character, sinundan sa pamamagitan ng isang bagong linya, 1925 01:38:43,390 --> 01:38:48,140 partikular argv bracket i ay nagbibigay sa akin ang i-ika string 1926 01:38:48,140 --> 01:38:51,690 in argv-- kaya ang unang salita, ang pangalawang salita, ang ikatlong salita, kahit na ano. 1927 01:38:51,690 --> 01:38:57,370 At pagkatapos j dives sa mas malalim, at nakakakuha sa akin ang j-ika-character ng salitang iyon. 1928 01:38:57,370 --> 01:39:02,200 At kaya, sa epekto, maaari mong ituring ang argv bilang isang multi-dimensional, 1929 01:39:02,200 --> 01:39:06,050 bilang isang dalawang-dimensional, array, kung saan ang bawat salita uri ng hitsura 1930 01:39:06,050 --> 01:39:08,580 tulad nito sa iyong isip mata, at bawat karakter 1931 01:39:08,580 --> 01:39:10,930 ay uri ng binubuo sa isang haligi, kung na tumutulong. 1932 01:39:10,930 --> 01:39:13,260 >> Sa katotohanan, nang kami ay mang-ulol ito bukod sa hinaharap na linggo, 1933 01:39:13,260 --> 01:39:15,580 ito ay pagpunta sa maging isang maliit na mas sopistikadong kaysa sa na. 1934 01:39:15,580 --> 01:39:17,800 Ngunit maaari mo talagang isipin na, sa ngayon, 1935 01:39:17,800 --> 01:39:22,110 bilang lamang ito ng dalawang-dimensional array, kung saan ang isang antas ng ito 1936 01:39:22,110 --> 01:39:23,260 ay ang lahat ng mga string. 1937 01:39:23,260 --> 01:39:26,760 At pagkatapos ay kung ka sumisid sa mas malalim, ikaw ay maaaring makakuha ng sa indibidwal na mga character 1938 01:39:26,760 --> 01:39:29,600 pawang sa pamamagitan ng paggamit notation na ito dito. 1939 01:39:29,600 --> 01:39:31,620 >> Kaya kung ano ang net effect? 1940 01:39:31,620 --> 01:39:34,970 Hayaan akong sige at gumawa argv2-- darn ito. 1941 01:39:34,970 --> 01:39:36,210 Nagkamali ako dito. 1942 01:39:36,210 --> 01:39:40,160 Kataon lamang deklarasyon ang library function stirling. 1943 01:39:40,160 --> 01:39:42,190 Kaya lahat ng oras na ito, ito ay marahil naaangkop 1944 01:39:42,190 --> 01:39:45,130 na kami ay uri ng pagtatapos eksakto kung saan kami nagsimula. 1945 01:39:45,130 --> 01:39:48,160 >> I screwed up, nang kataon lamang deklarasyon library function stirling. 1946 01:39:48,160 --> 01:39:48,987 OK, maghintay ng isang minuto. 1947 01:39:48,987 --> 01:39:51,070 Natatandaan ko na, lalo na dahil ito ay karapatan dito. 1948 01:39:51,070 --> 01:39:54,490 kailangan kong isama string.h in ang bersyon na ito ng programa. 1949 01:39:54,490 --> 01:40:00,050 >> Hayaan akong sige at isama string.h, liban sa, sige 1950 01:40:00,050 --> 01:40:04,460 at mag-recompile argv2. 1951 01:40:04,460 --> 01:40:08,390 At ngayon, dito kami pumunta, gumawa argv2, ang Enter. 1952 01:40:08,390 --> 01:40:10,590 At bagaman ito ay isang maliit misteriyoso sa unang tingin, 1953 01:40:10,590 --> 01:40:15,690 mapapansin na, sa katunayan, kung ano ay naka-print ay dot argv2. 1954 01:40:15,690 --> 01:40:19,970 >> Ngunit kung ako type ng ilang mga salita pagkatapos ng prompt, tulad argv2 Zamyla Chan, 1955 01:40:19,970 --> 01:40:22,560 Ipasok, din ng isang maliit misteriyoso sa unang tingin. 1956 01:40:22,560 --> 01:40:30,540 Ngunit kung mag-scroll namin back up, ./argv2 Z-A-M-Y-L-A C-H-A-N. 1957 01:40:30,540 --> 01:40:32,190 Kaya na iterated namin sa paglipas ng bawat salita. 1958 01:40:32,190 --> 01:40:37,770 At, sa turn, na iterated kami ay may higit bawat karakter sa loob ng isang salita. 1959 01:40:37,770 --> 01:40:40,040 >> Ngayon, pagkatapos ng lahat ng ito, mapagtanto na mayroong 1960 01:40:40,040 --> 01:40:43,120 isa sa iba pang detalye nakaya naming uri ng hindi papansin ito buong oras. 1961 01:40:43,120 --> 01:40:46,180 lamang teased namin bukod sa kung ano ni main inputs ay maaaring maging? 1962 01:40:46,180 --> 01:40:47,780 Paano ang tungkol sa output ni main? 1963 01:40:47,780 --> 01:40:50,540 >> Lahat ng oras na ito, kami ay lamang na kopyahin at i-dikit 1964 01:40:50,540 --> 01:40:53,870 ang salita int sa harap ng main, bagaman maaari mong makita sa online, 1965 01:40:53,870 --> 01:40:58,340 minsan hindi tama sa mga mas lumang mga bersyon ng C at compilers, na sinasabi nila na walang bunga, 1966 01:40:58,340 --> 01:40:59,410 o wala sa lahat. 1967 01:40:59,410 --> 01:41:01,580 Ngunit, sa katunayan, para sa mga bersyon ng C na aming ginagamit, 1968 01:41:01,580 --> 01:41:06,180 C 11, o 2011, napagtanto na ito ay dapat na int. 1969 01:41:06,180 --> 01:41:09,300 At ito ay dapat maging alinman sa walang bisa o argc at argv dito. 1970 01:41:09,300 --> 01:41:10,790 >> Ngunit bakit int main? 1971 01:41:10,790 --> 01:41:12,480 Ano ito talaga bumabalik? 1972 01:41:12,480 --> 01:41:16,280 Well, ito ay lumiliko out ang lahat ng oras na ito, anumang oras na ikaw na nakasulat sa isang programa main 1973 01:41:16,280 --> 01:41:18,440 ay laging bumabalik isang bagay. 1974 01:41:18,440 --> 01:41:19,960 Ngunit ito ay nai-paggawa nito lihim. 1975 01:41:19,960 --> 01:41:23,350 >> isang bagay na ay isang int, bilang line 5 nagmumungkahi. 1976 01:41:23,350 --> 01:41:24,225 Ngunit ano int? 1977 01:41:24,225 --> 01:41:26,100 Well, mayroong ito convention sa programming, 1978 01:41:26,100 --> 01:41:29,790 kung saan kung wala ay gone mali at lahat ay mabuti, 1979 01:41:29,790 --> 01:41:34,250 mga programa at mga function sa pangkalahatan return-- medyo counterintuitively-- 1980 01:41:34,250 --> 01:41:35,230 0. 1981 01:41:35,230 --> 01:41:38,070 0 sa pangkalahatan ay nagpahayag ng lahat ay mabuti. 1982 01:41:38,070 --> 01:41:40,610 Kaya kahit na sa tingin mo ng ito bilang huwad na sa maraming mga konteksto, 1983 01:41:40,610 --> 01:41:42,930 ito ang tunay na sa pangkalahatan ay nangangahulugan ng isang magandang bagay 1984 01:41:42,930 --> 01:41:49,560 >> Samantala, kung ang isang programa ay nagbabalik 1, o negatibong 1, o 5, o negatibong 42, 1985 01:41:49,560 --> 01:41:52,941 o anumang di-0 halaga, na sa pangkalahatan ay nagpahayag 1986 01:41:52,941 --> 01:41:54,190 na ang isang bagay ay nawala maling. 1987 01:41:54,190 --> 01:41:56,700 Sa katunayan, sa iyong sariling Mac o PC, maaari kang magkaroon ng tunay na makikita 1988 01:41:56,700 --> 01:42:01,050 isang mensahe ng error, kung saan ito sabi ng isang bagay o iba pang, error 1989 01:42:01,050 --> 01:42:04,940 code negatibong 42, o error code 23, o isang bagay tulad na. 1990 01:42:04,940 --> 01:42:08,980 Numerong iyon ay karaniwang lamang ng isang pahiwatig sa programmer, o ng kumpanya 1991 01:42:08,980 --> 01:42:11,174 na ginawa ang software, ano ang nangyaring mali at kung bakit, 1992 01:42:11,174 --> 01:42:13,590 upang maaari silang tumingin sa pamamagitan ng kanilang mga babasahin o code, 1993 01:42:13,590 --> 01:42:15,465 at malaman kung ano ang error tunay na ibig sabihin. 1994 01:42:15,465 --> 01:42:18,400 Ito ay karaniwang hindi kapaki-pakinabang sa amin end user. 1995 01:42:18,400 --> 01:42:20,550 >> Ngunit kapag main returns 0, ang lahat ay mabuti. 1996 01:42:20,550 --> 01:42:23,770 At kung hindi mo tukuyin ano main dapat bumalik, 1997 01:42:23,770 --> 01:42:26,950 ay ito lamang ang awtomatikong bumalik 0 para sa iyo. 1998 01:42:26,950 --> 01:42:30,870 Ngunit bumabalik bagay sino pa ang paririto ay talagang kapaki-pakinabang. 1999 01:42:30,870 --> 01:42:34,660 >> Sa ganitong pangwakas na programa, hayaan mo akong sige at tawagan ito exit.c, 2000 01:42:34,660 --> 01:42:38,630 at ipakilala ang huling ng araw na ito mga paksa, na kilala bilang isang error code. 2001 01:42:38,630 --> 01:42:42,930 Hayaan akong sige at isama ang aming pamilyar file up tuktok, gawin int pangunahing. 2002 01:42:42,930 --> 01:42:49,500 At oras na ito, sabihin gawin int argc, string argv, at sa aking mga bracket 2003 01:42:49,500 --> 01:42:50,836 upang magpahiwatig na ito ay sa array. 2004 01:42:50,836 --> 01:42:52,460 At pagkatapos ay hayaan mo akong lamang gawin ng isang katinuan check. 2005 01:42:52,460 --> 01:42:56,640 Oras na ito, kung argc ay hindi katumbas 2, pagkatapos ay alam mo kung ano? 2006 01:42:56,640 --> 01:42:57,520 Kalimutan na ninyo. 2007 01:42:57,520 --> 01:43:03,170 I am pagpunta sa sabihin na, hey, user, ikaw ay nawawala command line argument 2008 01:43:03,170 --> 01:43:04,210 backslash n. 2009 01:43:04,210 --> 01:43:05,230 >> At pagkatapos na ang lahat. 2010 01:43:05,230 --> 01:43:06,130 Gusto kong lumabas. 2011 01:43:06,130 --> 01:43:11,030 I am pagpunta sa preemptively, at prematurely talaga, return 2012 01:43:11,030 --> 01:43:12,810 isang bagay na iba kaysa sa bilang 1. 2013 01:43:12,810 --> 01:43:15,360 Ang pumunta sa halaga para sa unang error na maaaring mangyari ay 1. 2014 01:43:15,360 --> 01:43:17,860 Kung ikaw ay may ilang mga iba pang maling sitwasyon na maaaring mangyari, 2015 01:43:17,860 --> 01:43:21,390 kumbaga return 2 o bumalik 3, o marahil kahit na mga negatibong 1 o negatibong 2. 2016 01:43:21,390 --> 01:43:23,750 >> Ito ay lamang exit code na, sa pangkalahatan, 2017 01:43:23,750 --> 01:43:27,770 lamang kapaki-pakinabang sa programista, o ang kumpanya na pagpapadala ng software. 2018 01:43:27,770 --> 01:43:30,500 Ngunit ang katotohanan na ito ay hindi 0 ay kung ano ang mahalaga. 2019 01:43:30,500 --> 01:43:34,310 Kaya kung sa programang ito, gusto kong garantiya na ang program na ito lamang 2020 01:43:34,310 --> 01:43:38,190 gumagana kapag ang gumagamit ay nagbibigay sa akin may isang argument count ng dalawa, 2021 01:43:38,190 --> 01:43:42,880 ang pangalan ng programa, at ilang iba pang salita, ang maaari kong ipatupad ng mas maraming bilang mga sumusunod, 2022 01:43:42,880 --> 01:43:46,110 sumigaw sa mga user na may printf sinasabi, nawawala command line argument, 2023 01:43:46,110 --> 01:43:46,970 bumalik 1. 2024 01:43:46,970 --> 01:43:49,940 Iyon ay lamang kaagad umalis sa programa. 2025 01:43:49,940 --> 01:43:55,840 >> Lamang kung argc ay katumbas ng 2 kami makakuha ng pababa dito, kung saang punto ako pagpunta sa sabihin, 2026 01:43:55,840 --> 01:44:00,410 kumusta porsiyento s, backslash n, argv1. 2027 01:44:00,410 --> 01:44:03,827 Sa ibang salita, ako hindi pagsunod argv 0, 2028 01:44:03,827 --> 01:44:05,410 na kung saan ay lamang ang pangalan ng programa. 2029 01:44:05,410 --> 01:44:09,450 gusto kong i-print out hello, kuwit, ang pangalawang salita na ang mga tao na-type. 2030 01:44:09,450 --> 01:44:12,580 At sa kasong ito sa line 13, lahat ay mabuti. 2031 01:44:12,580 --> 01:44:15,920 >> Alam ko na argc ay 2 logically mula sa programang ito. 2032 01:44:15,920 --> 01:44:17,770 Ako pagpunta sa sige at bumalik 0. 2033 01:44:17,770 --> 01:44:21,230 Bilang isang tabi, panatilihin sa isip na ito ay totoo sa Scratch pati na rin. 2034 01:44:21,230 --> 01:44:24,760 >> Logically, maaari kong gawin ito at encapsulate ang mga linyang ito 2035 01:44:24,760 --> 01:44:27,020 ng code sa ibang tao sugnay dito. 2036 01:44:27,020 --> 01:44:29,420 Ngunit iyon lamang ang uri ng mga hindi kinakailangan indent aking code. 2037 01:44:29,420 --> 01:44:31,800 At gusto kong gumawa ng super malinaw na kahit na ano, 2038 01:44:31,800 --> 01:44:34,670 sa pamamagitan ng default, hello isang bagay ay makakakuha ng naka-print, 2039 01:44:34,670 --> 01:44:36,050 kaya hangga't ang user ay cooperates. 2040 01:44:36,050 --> 01:44:39,360 >> Kaya ito ay napaka-pangkaraniwan na gamitin isang kondisyon, lamang ng isang kung, 2041 01:44:39,360 --> 01:44:41,870 upang mahuli ang ilang maling sitwasyon, at pagkatapos ay lalabas. 2042 01:44:41,870 --> 01:44:45,690 At pagkatapos, kaya mahaba ang lahat ay well, at gumawa na ng ibang tao, 2043 01:44:45,690 --> 01:44:48,060 ngunit na lang ay ang code sa labas na kung, dahil sa ito ay 2044 01:44:48,060 --> 01:44:51,060 katumbas sa ito partikular na kaso, logically. 2045 01:44:51,060 --> 01:44:54,480 Kaya ako bumabalik 0, lamang upang explicitly maging tanda lahat ay mabuti. 2046 01:44:54,480 --> 01:44:58,480 >> Kung tinanggal ko ang pagbabalik 0, gagawin ito awtomatikong ipinapalagay para sa akin. 2047 01:44:58,480 --> 01:45:00,890 Ngunit ngayon na ako bumabalik isa sa hindi bababa sa kasong ito, 2048 01:45:00,890 --> 01:45:04,940 Ako pagpunta sa, para sa mabuting panukala at kaliwanagan, bumalik 0 sa kasong ito. 2049 01:45:04,940 --> 01:45:09,690 Kaya ngayon hayaan mo akong magpatuloy at gumawa exit, na kung saan ay isang perpektong segue sa makatarungan iwan. 2050 01:45:09,690 --> 01:45:14,401 >> Ngunit gumawa exit, at papagpaalamin mo ako magpatuloy at gawin ./exit, ang Enter. 2051 01:45:14,401 --> 01:45:16,900 At ang program yelled sa akin, nawawala command line argument. 2052 01:45:16,900 --> 01:45:18,120 OK, hayaan mo akong makipagtulungan. 2053 01:45:18,120 --> 01:45:23,810 >> Hayaan akong sa halip na gawin ./exit, David, ang Enter. 2054 01:45:23,810 --> 01:45:25,190 At ngayon sinasabi nito, hello David. 2055 01:45:25,190 --> 01:45:27,300 At hindi na karaniwan mong nais makita ito. 2056 01:45:27,300 --> 01:45:30,650 >> Ngunit ito ay lumiliko out na mayroong isang espesyal na paraan sa Linux upang aktwal na makita 2057 01:45:30,650 --> 01:45:34,470 sa kung ano ang exit code ng isang programa lumabas. 2058 01:45:34,470 --> 01:45:37,184 Minsan sa isang graphical mundo tulad ng Mac OS o Windows, 2059 01:45:37,184 --> 01:45:40,100 mo lamang makita ang mga numerong ito kapag ang isang error na mensahe pops up sa screen 2060 01:45:40,100 --> 01:45:41,940 at ang programmer Ipinapakita sa iyo ng numerong iyon. 2061 01:45:41,940 --> 01:45:44,773 Ngunit kung gusto naming upang makita kung ano ang mga error message ay, maaari naming gawin ito here-- 2062 01:45:44,773 --> 01:45:48,100 kaya ./exit, Ipasok, print nawawala command line argument. 2063 01:45:48,100 --> 01:45:54,590 >> Kung ako ngayon gawin echo $ ?, na kung saan ay ridiculously cryptic naghahanap. 2064 01:45:54,590 --> 01:45:56,590 Ngunit $? 2065 01:45:56,590 --> 01:45:59,220 ay ang mahiwagang bulong na nagsasabing, hey, computer, 2066 01:45:59,220 --> 01:46:01,900 sabihin sa akin kung ano ang nakaraang exit code programa ay. 2067 01:46:01,900 --> 01:46:03,410 At pindutin ko ang Enter. 2068 01:46:03,410 --> 01:46:07,520 nakikita ko 1, dahil na kung ano ako sinabi sa aking pangunahing pag-andar upang bumalik. 2069 01:46:07,520 --> 01:46:12,310 >> Samantala, kung gagawin ko ./exit David, at pindutin ang Enter, nakikita ko, hello David. 2070 01:46:12,310 --> 01:46:16,800 At kung ako ngayon gawin echo $ ?, nakikita ko kumusta 0. 2071 01:46:16,800 --> 01:46:19,080 At kaya ito ay talagang maging mahalagang impormasyon 2072 01:46:19,080 --> 01:46:23,420 sa konteksto ng debugger, hindi kaya magkano na ikaw ay, ang tao, ang inaalintana. 2073 01:46:23,420 --> 01:46:26,060 Ngunit ang debugger at iba pang mga programa gagamitin namin ito semestre 2074 01:46:26,060 --> 01:46:29,420 ay madalas na tumingin sa numerong iyon, kahit na ito ay isang uri ng nakatago ang layo 2075 01:46:29,420 --> 01:46:32,780 maliban kung titingnan mo para sa mga ito, upang matukoy kung o hindi ang isang programa 2076 01:46:32,780 --> 01:46:37,050 pagpapatupad ay tama o mali. 2077 01:46:37,050 --> 01:46:40,450 >> At sa gayon ay nagdudulot sa amin sa ito, sa dulo ng araw. 2078 01:46:40,450 --> 01:46:43,917 Sinimulan namin ngayon sa pamamagitan ng pagtingin sa debugging, at siya namang sa kurso 2079 01:46:43,917 --> 01:46:46,750 mismo, at pagkatapos ay mas kawili-wili, technically sa ilalim ng hood 2080 01:46:46,750 --> 01:46:49,490 sa kung ano ang string ay, na huling week lang namin kinuha para sa ipinagkaloob, 2081 01:46:49,490 --> 01:46:51,900 at tiyak na kinuha ang mga ito para sa ipinagkaloob sa scratch. 2082 01:46:51,900 --> 01:46:56,040 >> Pagkatapos namin tumingin sa kung paano namin maaaring ma-access indibidwal na mga character sa isang string, 2083 01:46:56,040 --> 01:47:00,310 at pagkatapos ay muli kinuha ng isang mas mataas na antas tumingin sa mga bagay, ang pagtingin sa kung paano well-- 2084 01:47:00,310 --> 01:47:04,226 kung nais namin upang makakuha ng sa mga indibidwal na mga elemento sa isang listahan tulad ng istraktura, 2085 01:47:04,226 --> 01:47:05,850 ay hindi maaaring gawin namin na may maramihang mga string? 2086 01:47:05,850 --> 01:47:08,050 At maaari namin sa command line argumento. 2087 01:47:08,050 --> 01:47:12,800 Ngunit this picture dito na lamang kahon ay demonstrative ng pangkalahatang ideya 2088 01:47:12,800 --> 01:47:14,451 ng isang array, o ng isang listahan, o isang vector. 2089 01:47:14,451 --> 01:47:16,450 At depende sa konteksto, ang lahat ng mga salitang ito 2090 01:47:16,450 --> 01:47:17,880 ibig sabihin bahagyang magkaibang mga bagay. 2091 01:47:17,880 --> 01:47:20,060 Kaya sa C, lamang kami ay pagpunta upang makipag-usap tungkol sa isang array. 2092 01:47:20,060 --> 01:47:23,840 At isang array ay isang tipak ng memorya, bawat isa sa kanino ay 2093 01:47:23,840 --> 01:47:27,720 elemento ay magkadikit, likod, sa likod, sa likod, sa likod. 2094 01:47:27,720 --> 01:47:31,970 >> At yaong mga sangkap na ito ay, sa pangkalahatan, ng parehong uri ng data, character, 2095 01:47:31,970 --> 01:47:35,966 karakter, karakter, karakter, o string, string, string, string, o int, 2096 01:47:35,966 --> 01:47:38,600 int, int, kahit ano ito ay sinusubukan naming store. 2097 01:47:38,600 --> 01:47:42,540 Ngunit sa pagtatapos ng araw, ito ay kung ano ang mukhang conceptually. 2098 01:47:42,540 --> 01:47:44,530 Ikaw ay pagkuha ng iyong memory ng computer o RAM. 2099 01:47:44,530 --> 01:47:48,590 At ikaw ay larawang inukit ito sa identically sized box, ang lahat ng na 2100 01:47:48,590 --> 01:47:50,920 ay bumalik, upang i-back, upang likod, upang i-back sa ganitong paraan. 2101 01:47:50,920 --> 01:47:53,200 >> At kung ano ang maganda tungkol ideya na ito, at ang katotohanan 2102 01:47:53,200 --> 01:47:58,580 na maaari naming ipahayag ang mga halaga sa ganitong paraan sa unang ng aming mga istraktura ng data 2103 01:47:58,580 --> 01:48:02,520 sa klase, ay nangangahulugan na maaari naming simulan ang upang malutas ang problema sa code 2104 01:48:02,520 --> 01:48:04,079 na dumating kaya intuitively sa linggo 0. 2105 01:48:04,079 --> 01:48:05,870 Ikaw pagpapabalik ang telepono book halimbawa, kung saan 2106 01:48:05,870 --> 01:48:09,110 ginamit namin ang isang hatiin at lupigin, o isang binary search algorithm, 2107 01:48:09,110 --> 01:48:13,220 sa suriing mabuti sa pamamagitan ng isang buong grupo ng mga pangalan at mga numero. 2108 01:48:13,220 --> 01:48:18,220 Ngunit kami ipinapalagay, pagpapabalik, na na phone book ay na pinagsunod-sunod, 2109 01:48:18,220 --> 01:48:21,630 na ang isang tao sino pa ang paririto ay na korte out-- bibigyan ng isang listahan ng mga pangalan 2110 01:48:21,630 --> 01:48:24,430 at numbers-- kung paano sa abakada ang mga ito. 2111 01:48:24,430 --> 01:48:26,950 At ngayon na sa C namin, masyadong, ay may kakayahan 2112 01:48:26,950 --> 01:48:30,290 upang mag-ipon ng mga bagay out, hindi pisikal sa isang phone book 2113 01:48:30,290 --> 01:48:34,220 ngunit halos sa isang computer memory, magagawa naming sa susunod na linggo 2114 01:48:34,220 --> 01:48:38,470 upang ipakilala muli this-- unang ng aming mga istruktura ng data sa isang array 2115 01:48:38,470 --> 01:48:43,530 ngunit mas mahalaga, aktwal na computer agham algorithm ipinatupad 2116 01:48:43,530 --> 01:48:47,720 sa code, na kung saan maaari kaming mag-imbak data sa istruktura tulad nito, 2117 01:48:47,720 --> 01:48:50,730 at pagkatapos ay simulan upang manipulahin ito, at upang aktwal na malutas ang mga problema sa mga ito, 2118 01:48:50,730 --> 01:48:53,570 at upang bumuo ng sa itaas ng na, sa huli, mga programa sa C, 2119 01:48:53,570 --> 01:48:56,730 sa sawa, sa JavaScript, querying database sa SQL? 2120 01:48:56,730 --> 01:48:59,980 >> At kami na ang lahat ng mga iba't ibang mga ideya interlock. 2121 01:48:59,980 --> 01:49:04,100 Ngunit sa ngayon, isipin na ang domain na namin ipinakilala sa araw na 2122 01:49:04,100 --> 01:49:06,920 ay ang bagay na ito dito, at sa mundo ng cryptography. 2123 01:49:06,920 --> 01:49:11,200 At kabilang sa mga susunod na mga problema mo ang iyong sarili ay malutas ay ang sining ng cryptography, 2124 01:49:11,200 --> 01:49:13,630 scrambling at de-scrambling impormasyon, at ciphering 2125 01:49:13,630 --> 01:49:15,930 at deciphering teksto, at sa pag-aakala sa huli 2126 01:49:15,930 --> 01:49:18,970 na ikaw ngayon alam kung ano ay sa ilalim ng hood 2127 01:49:18,970 --> 01:49:21,860 kaya na kapag nakita mo o tumanggap isang mensahe tulad nito, ikaw 2128 01:49:21,860 --> 01:49:24,060 maaaring ang iyong sarili maintindihan ito. 2129 01:49:24,060 --> 01:49:26,740 Ang lahat ng ito, at higit pa sa susunod na pagkakataon. 2130 01:49:26,740 --> 01:49:29,890 2131 01:49:29,890 --> 01:49:30,790 >> [Video playback] 2132 01:49:30,790 --> 01:49:32,970 >> -Mover Kadarating pa lamang. 2133 01:49:32,970 --> 01:49:35,146 Pupunta ako upang pumunta pagbisita kanyang kolehiyo propesor. 2134 01:49:35,146 --> 01:49:37,611 Yep. 2135 01:49:37,611 --> 01:49:40,080 Hi. 2136 01:49:40,080 --> 01:49:40,660 Ikaw. 2137 01:49:40,660 --> 01:49:44,125 2138 01:49:44,125 --> 01:49:45,110 Maghintay! 2139 01:49:45,110 --> 01:49:45,610 David. 2140 01:49:45,610 --> 01:49:53,936 2141 01:49:53,936 --> 01:49:56,060 Tingin lang ako sinusubukan upang malaman kung ano ang nangyari sa iyo. 2142 01:49:56,060 --> 01:49:58,130 Please, kahit ano ay maaaring makatulong. 2143 01:49:58,130 --> 01:50:05,020 2144 01:50:05,020 --> 01:50:08,354 Kayo ang kanyang college kasama sa kuwarto, ay hindi mo? 2145 01:50:08,354 --> 01:50:10,770 Ikaw ay doon sa kanya kapag siya tapos na ang CS50 proyekto? 2146 01:50:10,770 --> 01:50:13,770 2147 01:50:13,770 --> 01:50:15,765 >> [MUSIC nagpe-play] 2148 01:50:15,765 --> 01:50:32,110 2149 01:50:32,110 --> 01:50:33,150 >> -Na Ay CS50. 2150 01:50:33,150 --> 01:50:42,690 2151 01:50:42,690 --> 01:50:44,770 >> Gustung-gusto ko ang lugar na ito. 2152 01:50:44,770 --> 01:50:45,854 >> -Kumain Ka. 2153 01:50:45,854 --> 01:50:47,020 Kami ay pagpunta sa labas ng negosyo. 2154 01:50:47,020 --> 01:50:52,120 2155 01:50:52,120 --> 01:50:53,970 >> [END-playback]