1 00:00:00,000 --> 00:00:10,920 >> [Музички] 2 00:00:10,920 --> 00:00:14,680 >> David J MALAN: Сите во право, добредојде назад кон CS50. 3 00:00:14,680 --> 00:00:16,500 Ова е почеток на недела две. 4 00:00:16,500 --> 00:00:18,940 Еден збор од еден од нашите пријатели на кампусот - 5 00:00:18,940 --> 00:00:22,620 ако сте заинтересирани, веројатно, било сега или во некое идно терминот 6 00:00:22,620 --> 00:00:25,670 дури, еднаш поудобно, настава средно училиште студентите малку 7 00:00:25,670 --> 00:00:27,680 нешто во врска со компјутерски науки, направи главата кон оваа адреса. 8 00:00:27,680 --> 00:00:32,360 Тие се во посебна потреба во моментов на наставници, особено ако имате 9 00:00:32,360 --> 00:00:34,700 имаше некои изложеност на компјутерските науки. 10 00:00:34,700 --> 00:00:38,060 >> Па се потсетиме дека минатиот пат, воведовме неколку типови на податоци во C, и 11 00:00:38,060 --> 00:00:40,590 може да почнаа да ја добиете вашата раце валкани со овие досега 12 00:00:40,590 --> 00:00:41,940 во проблемот се постави еден. 13 00:00:41,940 --> 00:00:43,230 И имавме знак. 14 00:00:43,230 --> 00:00:49,100 Па во малку технички термини, што е знак како што го знаеме денес? 15 00:00:49,100 --> 00:00:51,050 >> Па тоа е карактер, но, ајде да бидеме попрецизни сега. 16 00:00:51,050 --> 00:00:53,735 Што мислиме со карактер или поединец знак? 17 00:00:53,735 --> 00:00:56,700 18 00:00:56,700 --> 00:00:59,500 А не-нумеричка карактер - 19 00:00:59,500 --> 00:01:00,670 па не мора да значи. 20 00:01:00,670 --> 00:01:04,580 Излезе дека дури и броеви, па дури и интерпункциски знаци и букви се 21 00:01:04,580 --> 00:01:06,980 претставен со овие податоци тип познат како знак. 22 00:01:06,980 --> 00:01:09,440 Па тоа не е нужно азбучен. 23 00:01:09,440 --> 00:01:11,100 Да? 24 00:01:11,100 --> 00:01:12,275 >> Па ова е ASCII карактер. 25 00:01:12,275 --> 00:01:15,510 Значи, ако мислите назад кон недела нула, кога имавме бајт на волонтери 26 00:01:15,510 --> 00:01:19,150 излезе и или ги држат нивните раце или не и сите, тие претставуваат бита. 27 00:01:19,150 --> 00:01:22,450 Но колективно како група од осум, тие претставуваат еден бајт. 28 00:01:22,450 --> 00:01:26,030 И ние го воведе поимот на ASCII во тоа предавање, која едноставно е 29 00:01:26,030 --> 00:01:28,170 мапирање помеѓу броеви и букви. 30 00:01:28,170 --> 00:01:32,010 И ASCII намени, како оние на луѓето имплицираната, осум битови 31 00:01:32,010 --> 00:01:33,660 да претставува лик. 32 00:01:33,660 --> 00:01:36,890 >> Па соодветно на тоа, ако осум битови може да секој ги преземе за една од двете вредности - 33 00:01:36,890 --> 00:01:38,010 нула или еден - 34 00:01:38,010 --> 00:01:40,280 тоа значи дека има две можности за ова лице - 35 00:01:40,280 --> 00:01:41,230 нула или еден - 36 00:01:41,230 --> 00:01:44,070 две за ова лице, две за ова лице, две за оваа. 37 00:01:44,070 --> 00:01:47,450 Така вкупно два пати два пати два пати два пати два - 38 00:01:47,450 --> 00:01:49,700 па две осмиот во вкупно. 39 00:01:49,700 --> 00:01:54,320 Па постои вкупниот број на карактери 256 можно дека можете да 40 00:01:54,320 --> 00:01:55,750 претставуваат со осум бита. 41 00:01:55,750 --> 00:01:59,210 >> Сега, оние од вас кои зборуваат Азија јазици би можеле да знаат дека има повеќе 42 00:01:59,210 --> 00:02:02,620 ликови во светот отколку само Како и B и акредитиви и Д. 43 00:02:02,620 --> 00:02:06,130 И навистина, ASCII не се доволни за многу јазици на светот. 44 00:02:06,130 --> 00:02:07,760 Но повеќе за тоа друг пат. 45 00:02:07,760 --> 00:02:11,240 За сега, знам дека во C ако сакате да ги претставуваат писмо, едно парче од 46 00:02:11,240 --> 00:02:15,780 интерпункциски знаци, или само нешто карактер во природата, ние ги користиме знак. 47 00:02:15,780 --> 00:02:18,240 И тоа е еден бајт или осум бита. 48 00:02:18,240 --> 00:02:19,690 >> Како за int? 49 00:02:19,690 --> 00:02:20,780 Па, со int е цел број. 50 00:02:20,780 --> 00:02:23,175 Колку битови, ако се сеќавате, беше цел број обично? 51 00:02:23,175 --> 00:02:25,930 52 00:02:25,930 --> 00:02:27,512 Секој потсетиме? 53 00:02:27,512 --> 00:02:29,600 Па тоа е обично 32. 54 00:02:29,600 --> 00:02:32,120 Тоа всушност зависи од компјутер дека сте користење. 55 00:02:32,120 --> 00:02:35,770 Но во апаратот, и во многу компјутери, тоа е 32 бита или четири 56 00:02:35,770 --> 00:02:37,140 бајти - осум пати четири. 57 00:02:37,140 --> 00:02:39,790 И ints се користат само за складирање броеви, или негативна, 58 00:02:39,790 --> 00:02:41,610 позитивен или нула. 59 00:02:41,610 --> 00:02:45,250 >> И ако имаш 32 бита и ти само грижат за позитивни броеви, може да 60 00:02:45,250 --> 00:02:48,960 секој груба проценка колку е можно цели броеви компјутер може да претставува од 61 00:02:48,960 --> 00:02:51,820 нула на до? 62 00:02:51,820 --> 00:02:56,130 Па тоа ќе биде од два до 32, кои е околу четири милијарди долари. 63 00:02:56,130 --> 00:02:59,720 Па овие сили на двете ќе бидат Повторувачки теми во компјутерски науки. 64 00:02:59,720 --> 00:03:03,930 Како што ќе видиме, тие се доста удобен да се работи со дури и ако тоа не е сосема 65 00:03:03,930 --> 00:03:05,790 лесно да го направите математика во главата. 66 00:03:05,790 --> 00:03:07,000 >> Па ние ќе се каже околу четири милијарди долари. 67 00:03:07,000 --> 00:03:08,620 Сега, долго долго - 68 00:03:08,620 --> 00:03:09,770 можете да вид на се погоди. 69 00:03:09,770 --> 00:03:10,480 Тоа е повеќе отколку Инт. 70 00:03:10,480 --> 00:03:12,440 Колку битови? 71 00:03:12,440 --> 00:03:14,250 Па 64 бита или осум бајти. 72 00:03:14,250 --> 00:03:17,480 Ова само значи дека може да претставува дури и поголеми броеви, поголем позитивен или 73 00:03:17,480 --> 00:03:19,160 поголеми негативни броеви. 74 00:03:19,160 --> 00:03:20,060 >> И како за плови? 75 00:03:20,060 --> 00:03:22,260 Тоа е подвижна запирка вредност од 32 бита. 76 00:03:22,260 --> 00:03:25,180 Ова е само еден вистински број, нешто со децимална точка. 77 00:03:25,180 --> 00:03:30,100 Но ако наместо треба повеќе места по децималната точка или сакате да 78 00:03:30,100 --> 00:03:33,720 претставуваат поголем број со некои фракција по него, можете да го користите 79 00:03:33,720 --> 00:03:36,260 двојно, што е 64 бита. 80 00:03:36,260 --> 00:03:38,240 >> Но, има една интересна готова брза тука. 81 00:03:38,240 --> 00:03:42,890 Па ако ints се ограничени од 32 бита и дури и долго време копнее се ограничени од 64 82 00:03:42,890 --> 00:03:46,180 битови, тој вид на моли на прашањето: што ако навистина сакаш да се избројат 83 00:03:46,180 --> 00:03:48,790 повисока од 4 милијарди за int? 84 00:03:48,790 --> 00:03:50,330 Па, ти само го користите долго долго. 85 00:03:50,330 --> 00:03:54,200 Но што ако сакате да се избројат повисоко од два до 64, се дава или зема? 86 00:03:54,200 --> 00:03:55,810 >> Сега, тоа е огромен број. 87 00:03:55,810 --> 00:03:59,250 Но на крајот, можеби, всушност, се грижи за овие видови на вредности, 88 00:03:59,250 --> 00:04:03,070 особено ако сте со користење на база на податоци и почнуваат да се соберат многу, многу 89 00:04:03,070 --> 00:04:06,190 и многу податоци и доделување на единствена броеви на секое парче на тие податоци. 90 00:04:06,190 --> 00:04:07,430 Па ние вид на имаат проблем. 91 00:04:07,430 --> 00:04:10,700 И слично, со подвижна запирка вредности - лебди или двојки - 92 00:04:10,700 --> 00:04:14,290 ако сте само добив конечен број на битови, колку вкупниот број може да ви 93 00:04:14,290 --> 00:04:16,980 можеби претставуваат? 94 00:04:16,980 --> 00:04:19,540 >> Па, тоа е помалку јасно кога ќе вклучуваат децимална точка. 95 00:04:19,540 --> 00:04:20,899 Но, тоа е сигурно конечни. 96 00:04:20,899 --> 00:04:24,390 Ако имате ограничен број на битови, конечен број на луѓето, конечен 97 00:04:24,390 --> 00:04:27,350 број на светилки, сигурно може да само што претставуваат конечен број на 98 00:04:27,350 --> 00:04:28,510 подвижна запирка вредности. 99 00:04:28,510 --> 00:04:33,170 Но колку реални броеви се нивните во светот? 100 00:04:33,170 --> 00:04:33,680 Таму е бесконечна. 101 00:04:33,680 --> 00:04:37,280 Па тоа е вид на проблем, бидејќи ние немаат бесконечна сума на 102 00:04:37,280 --> 00:04:39,970 меморија или RAM меморија во внатрешноста на нашите компјутери. 103 00:04:39,970 --> 00:04:41,780 Па некои предизвикувачки работи може да се случи. 104 00:04:41,780 --> 00:04:43,900 >> Па ајде повелете и обидете се да го изразат овој овде. 105 00:04:43,900 --> 00:04:46,240 Дозволете ми да оди напред и да се отвори gedit. 106 00:04:46,240 --> 00:04:50,360 Одам да се оди напред и да ја зачувате датотеката наречен "floats0.c" само за да бидат 107 00:04:50,360 --> 00:04:54,630 во согласност со пример што е достапни на интернет, ако би сакал. 108 00:04:54,630 --> 00:04:58,080 И јас одам да се оди напред и да дефинира како што следи - 109 00:04:58,080 --> 00:05:01,540 Одам да се оди напред и да се каже, int Главната празнина, како што често се направи. 110 00:05:01,540 --> 00:05:07,190 >> А потоа во оваа програма, ќе одам да се се декларирам плови, па 32-битна 111 00:05:07,190 --> 00:05:09,700 променлива наречена ѓ, произволно. 112 00:05:09,700 --> 00:05:13,910 А потоа јас ќе одам да ја запази во него Не знам, една десетина, па 0.1. 113 00:05:13,910 --> 00:05:16,590 Па ќе одам да се изрази дека како еден поделено со 10, што е совршено 114 00:05:16,590 --> 00:05:17,790 легитимни во C. 115 00:05:17,790 --> 00:05:20,460 >> А потоа на втората линија, јас едноставно сакате да испечатите таа вредност. 116 00:05:20,460 --> 00:05:22,950 Па се потсетиме дека можеме да го користиме познатите printf. 117 00:05:22,950 --> 00:05:25,420 Ние не сакаме да го користите% i за Инт. 118 00:05:25,420 --> 00:05:28,360 Ние сакаме да го користите% f за плови. 119 00:05:28,360 --> 00:05:33,080 А потоа јас ќе одам да направите обратна коса црта n, Затвори цитат, запирка, f, точка-запирка. 120 00:05:33,080 --> 00:05:34,400 >> Па овде е мојата програма. 121 00:05:34,400 --> 00:05:35,820 Има веќе еден бубачка. 122 00:05:35,820 --> 00:05:38,640 Дали некој за кого ова кликна веќе сакаат да го посочат барем 123 00:05:38,640 --> 00:05:40,220 една бубачка што сум направил? 124 00:05:40,220 --> 00:05:42,470 Да? 125 00:05:42,470 --> 00:05:42,800 Да. 126 00:05:42,800 --> 00:05:47,860 Го заборавив "# вклучуваат" на врвот, тие симптом на кој, ако јас се обидувам да 127 00:05:47,860 --> 00:05:50,490 собере тие се случува да биде дека компајлерот се случува да се развикам на мене, 128 00:05:50,490 --> 00:05:52,770 велејќи недефиниран симбол или нешто за таа цел. 129 00:05:52,770 --> 00:05:55,360 Тоа не разбирам нешто како printf. 130 00:05:55,360 --> 00:05:59,380 >> Па јас ќе одам да направите "# вклучуваат ", Ја зачувам датотеката. 131 00:05:59,380 --> 00:06:00,400 И сега е во подобра форма. 132 00:06:00,400 --> 00:06:02,690 Но јас сум исто така, ќе се укаже од еден нов детал денес. 133 00:06:02,690 --> 00:06:08,620 Во прилог на специфицирање место носители како% f% i% s, можете да 134 00:06:08,620 --> 00:06:12,320 понекогаш се влијае на однесувањето на кои случаеви. 135 00:06:12,320 --> 00:06:15,540 На пример, во случај на подвижна точка вредност, ако јас само сакам 136 00:06:15,540 --> 00:06:22,200 за да се прикаже едно децимално место по период, јас всушност може да направи 0.1f. 137 00:06:22,200 --> 00:06:26,830 Значи со други зборови, јас се разделиме f и на знакот за процент со 0.1, само 138 00:06:26,830 --> 00:06:30,200 кажува printf, може да имаат цела куп на броеви по децималната 139 00:06:30,200 --> 00:06:30,930 точка за мене. 140 00:06:30,930 --> 00:06:32,870 Но јас само сакам да видам еден од нив. 141 00:06:32,870 --> 00:06:36,280 >> Па ќе одам да се оди напред сега и заштедете оваа програма, одам во мојата терминал 142 00:06:36,280 --> 00:06:41,870 прозорецот, и јас одам да се оди напред и видот направи плови 0, внесете. 143 00:06:41,870 --> 00:06:44,930 Гледам дека малку криптичната линија која ќе почнат да се направи повеќе смисла како што ние 144 00:06:44,930 --> 00:06:46,900 душманке тоа, освен оваа недела и следната. 145 00:06:46,900 --> 00:06:50,480 Сега ќе одам да се оди напред и да ја стартувате плови нула. 146 00:06:50,480 --> 00:06:52,020 И, по ѓаволите. 147 00:06:52,020 --> 00:06:54,880 >> Значи има уште еден баг тука поради некоја причина. 148 00:06:54,880 --> 00:07:02,490 Јас сум прилично сигурен дека една десетина, или еден поделено со 10, не е 0,0. 149 00:07:02,490 --> 00:07:04,590 Можеби и јас не сум само барате на доволно цифри. 150 00:07:04,590 --> 00:07:08,580 Па зошто да не можам да кажам две 0,2 за да ја видите две децимални места, наместо на само еден. 151 00:07:08,580 --> 00:07:11,810 Дозволете ми да се вратам на моето терминален прозорец тука и хит до неколку пати да 152 00:07:11,810 --> 00:07:12,840 види мојата историја. 153 00:07:12,840 --> 00:07:15,910 Го прават плови нула повторно, а потоа повторно. 154 00:07:15,910 --> 00:07:17,730 А сега влезе. 155 00:07:17,730 --> 00:07:20,000 >> И сега јас сум прилично сигурен дека ова е погрешно. 156 00:07:20,000 --> 00:07:23,030 И јас не можеше да стори три и четири, и јас сум веројатно нема да ги гледате нули. 157 00:07:23,030 --> 00:07:24,880 Значи каде е грешка? 158 00:07:24,880 --> 00:07:27,910 Еден поделено со 10 треба да биде 0,1. 159 00:07:27,910 --> 00:07:30,310 Некој сака да земе прободе во она што основното прашање е? 160 00:07:30,310 --> 00:07:32,400 Да? 161 00:07:32,400 --> 00:07:33,420 Тие се двете цели броеви. 162 00:07:33,420 --> 00:07:33,920 Па што? 163 00:07:33,920 --> 00:07:37,820 Така да со еден поделено со 10, тоа е она што го правам во самата аритметика. 164 00:07:37,820 --> 00:07:41,185 И јас се добие 0.1. 165 00:07:41,185 --> 00:07:41,660 >> Да. 166 00:07:41,660 --> 00:07:43,240 И така тоа е навистина тоа прашање. 167 00:07:43,240 --> 00:07:46,700 Кога ќе се земе цел број во компјутер и ќе го подели со друг број, 168 00:07:46,700 --> 00:07:50,430 на компјутерот од страна стандардно се случува да се Претпоставуваме дека сакате цел број. 169 00:07:50,430 --> 00:07:54,620 Проблемот иако, се разбира, е дека 0,1 не е цел број. 170 00:07:54,620 --> 00:07:55,680 Тоа е вистински број. 171 00:07:55,680 --> 00:07:59,610 И така што компјутерот го прави од страна на Стандардно е тоа само фрла 172 00:07:59,610 --> 00:08:01,070 сè по децимална точка. 173 00:08:01,070 --> 00:08:03,380 Тоа не коло надолу или нагоре по себе. 174 00:08:03,380 --> 00:08:06,480 Тоа само фрла сè што по децималната точка. 175 00:08:06,480 --> 00:08:07,430 И сега тоа има смисла. 176 00:08:07,430 --> 00:08:09,740 Бидејќи сега сме јасно замина со нула. 177 00:08:09,740 --> 00:08:10,250 >> Но, чекајте. 178 00:08:10,250 --> 00:08:11,840 Јас не гледам на int нула. 179 00:08:11,840 --> 00:08:14,910 Јас сум всушност гледаат 0.00. 180 00:08:14,910 --> 00:08:16,340 Па како можам да се помират ова сега? 181 00:08:16,340 --> 00:08:22,850 Ако еден поделено со 10 е нула, но јас сум види 0,00, каде што е тоа добивање 182 00:08:22,850 --> 00:08:24,250 конвертира назад на вистинскиот број? 183 00:08:24,250 --> 00:08:25,500 Да. 184 00:08:25,500 --> 00:08:29,850 185 00:08:29,850 --> 00:08:30,630 Токму така. 186 00:08:30,630 --> 00:08:35,600 >> Значи до тука во пет линија, кога јас всушност продавница, во којашто 0,1, што е тогаш 187 00:08:35,600 --> 00:08:39,549 скратена на нула, во внатрешноста на плови, тоа е ефикасно еквивалентно на 188 00:08:39,549 --> 00:08:42,100 чување не е тоа како int, но, навистина, како рационален. 189 00:08:42,100 --> 00:08:46,540 Згора на тоа, јас сум потоа со помош printf да експлицитно се печати тој број до две 190 00:08:46,540 --> 00:08:49,740 децимални места иако има може да не е всушност да биде било. 191 00:08:49,740 --> 00:08:51,020 >> Така овој вид на смрди, нели? 192 00:08:51,020 --> 00:08:53,640 Очигледно не можете да направите математика, барем на ова ниво на 193 00:08:53,640 --> 00:08:55,600 прецизност, во компјутер. 194 00:08:55,600 --> 00:08:56,930 Но сигурно има решение. 195 00:08:56,930 --> 00:09:00,410 Што е наједноставниот фикс би можеле да можеби стори, дури и само интуитивно тука за да 196 00:09:00,410 --> 00:09:01,130 реши ова? 197 00:09:01,130 --> 00:09:02,380 Да? 198 00:09:02,380 --> 00:09:04,700 199 00:09:04,700 --> 00:09:06,574 Завртете го копчето за цели броеви во - 200 00:09:06,574 --> 00:09:06,976 је. 201 00:09:06,976 --> 00:09:10,420 Дури и ако јас не сум сосема сигурен што е навистина се случува овде, ако тоа 202 00:09:10,420 --> 00:09:13,440 фундаментално треба да се прави со овие двете се ints, добро, зошто да не можам 203 00:09:13,440 --> 00:09:18,230 направи таа 10,0, правејќи го овој 1.0, resave на датотеката. 204 00:09:18,230 --> 00:09:20,990 Дозволете ми да се врати долу на дното и прекомпајлирате. 205 00:09:20,990 --> 00:09:23,030 А сега допуштете ми повторување. 206 00:09:23,030 --> 00:09:23,420 И таму - 207 00:09:23,420 --> 00:09:27,690 сега, имам мојата една десетина претставен како 0,10. 208 00:09:27,690 --> 00:09:28,420 >> Сите во право. 209 00:09:28,420 --> 00:09:29,220 Па тоа не е лошо. 210 00:09:29,220 --> 00:09:31,730 И дозволете ми да истакнам еден друг начин ние би можеле да се реши ова. 211 00:09:31,730 --> 00:09:35,580 Дозволете ми да всушност се тркалаат назад во времето кога имавме ова како еден 212 00:09:35,580 --> 00:09:36,680 десетина пред еден миг. 213 00:09:36,680 --> 00:09:40,800 И дозволете ми да оди напред и да resave оваа датотека како друго име на датотека, само за да 214 00:09:40,800 --> 00:09:41,750 имаат малку пункт. 215 00:09:41,750 --> 00:09:43,450 Така што беше верзија еден. 216 00:09:43,450 --> 00:09:45,520 И сега дозволете ми да оди напред и да направи уште една верзија. 217 00:09:45,520 --> 00:09:48,540 Ние ќе го наречеме оваа верзија два нула индексирани. 218 00:09:48,540 --> 00:09:51,280 >> И јас одам да наместо да прават ова - знаеш што? 219 00:09:51,280 --> 00:09:54,400 Додавање точка нула работи во овој случај. 220 00:09:54,400 --> 00:09:56,060 Но, да претпоставиме некој требаше променлива. 221 00:09:56,060 --> 00:09:57,680 Би требало 10 беа променлива. 222 00:09:57,680 --> 00:10:00,680 Со други зборови, да претпоставиме дека не можев само тешко-код 0,0 на крајот 223 00:10:00,680 --> 00:10:02,340 на овој аритметички израз. 224 00:10:02,340 --> 00:10:05,820 Па, јас всушност може да направи нешто во загради се нарекува кастинг. 225 00:10:05,820 --> 00:10:11,920 Јас може да фрли дека цел број 10 до број со подвижна запирка, и јас може да фрли дека цел број еден на 226 00:10:11,920 --> 00:10:12,800 плови, како и. 227 00:10:12,800 --> 00:10:17,190 Тогаш математика што се случува да се направи е ефикасно 1,0 поделено со 10,0, 228 00:10:17,190 --> 00:10:19,250 резултат на што оди во ѓ како порано. 229 00:10:19,250 --> 00:10:26,130 Значи, ако јас го прекомпајлирате ова како да лебди 2, и сега плови 2, јас го добиете истиот 230 00:10:26,130 --> 00:10:27,020 одговори, како и. 231 00:10:27,020 --> 00:10:29,640 >> Значи ова е прилично измислена пример, за решавање на овој проблем 232 00:10:29,640 --> 00:10:31,400 со воведување на кастинг. 233 00:10:31,400 --> 00:10:34,410 Но, во принцип, леење ќе биде моќна работа, особено за 234 00:10:34,410 --> 00:10:38,180 Проблемот постави две во време една недела, кога сакате да го конвертирате еден тип на податоци да 235 00:10:38,180 --> 00:10:41,800 друго, кое на крајот од денот се претставени во ист начин. 236 00:10:41,800 --> 00:10:44,970 На крајот на денот, секој нешто ние разговаравме за досега е 237 00:10:44,970 --> 00:10:46,710 само ints под хауба. 238 00:10:46,710 --> 00:10:48,950 Или ако тоа е премногу ниско ниво за вас, тие се само бројки 239 00:10:48,950 --> 00:10:49,750 под хауба. 240 00:10:49,750 --> 00:10:52,850 Дури и ликови, повторно, да се потсетиме од недела нула, се броеви 241 00:10:52,850 --> 00:10:53,990 под хауба. 242 00:10:53,990 --> 00:10:57,240 >> Што да се каже, ние може да конвертирате помеѓу различни типови на броеви ако 243 00:10:57,240 --> 00:10:58,060 тие се само делови. 244 00:10:58,060 --> 00:11:01,020 Ние може да конвертирате помеѓу броеви и писма, ако тие се само 245 00:11:01,020 --> 00:11:02,580 битови, и обратно. 246 00:11:02,580 --> 00:11:07,170 И леење на овој начин е механизам во програмирањето, кој ви овозможува насилно 247 00:11:07,170 --> 00:11:10,970 промена на еден тип на податоци на друг. 248 00:11:10,970 --> 00:11:14,570 За жал, ова не е толку јасна како би можел да се допадна. 249 00:11:14,570 --> 00:11:19,220 >> Одам да се врати во лебди 1, кој беше поедноставно, повеќе 250 00:11:19,220 --> 00:11:22,830 јасна еден со 0,0 додадени на едни. 251 00:11:22,830 --> 00:11:25,260 И само како брз бакшиш, дозволете ми да оди напред и да го прекомпајлирате 252 00:11:25,260 --> 00:11:27,670 ова, бидете плови 2 - 253 00:11:27,670 --> 00:11:30,300 Жал ми е, ова е да се направи плови 1. 254 00:11:30,300 --> 00:11:32,050 И сега нека се кандидира плови 1. 255 00:11:32,050 --> 00:11:34,810 И во долниот дел, забележите дека јас навистина се добие 0.1. 256 00:11:34,810 --> 00:11:36,165 Значи, проблемот решен. 257 00:11:36,165 --> 00:11:37,280 >> Но сеуште не е. 258 00:11:37,280 --> 00:11:40,000 Јас сум сега се случува да се добие малку љубопитни, и јас одам да се вратам во мојата 259 00:11:40,000 --> 00:11:41,620 printf изјава и да речеме, знаеш што? 260 00:11:41,620 --> 00:11:44,090 Би сакал да се потврди дека овој е навистина една десетина. 261 00:11:44,090 --> 00:11:47,890 И јас ќе одам да сакате да го видите ова да речеме, пет децимални места. 262 00:11:47,890 --> 00:11:48,570 Тоа не е некој проблем. 263 00:11:48,570 --> 00:11:52,020 Јас го промените две до пет, Јас го прекомпајлирате со направи. 264 00:11:52,020 --> 00:11:53,770 Јас повторување како лебди 1. 265 00:11:53,770 --> 00:11:54,990 Овде сум прилично добар. 266 00:11:54,990 --> 00:11:58,570 Мојата разумност проверки може да заврши таму, но Јас сум добивање малку повеќе авантуристички. 267 00:11:58,570 --> 00:12:00,330 Одам да се промени 0,5-0,10. 268 00:12:00,330 --> 00:12:03,440 Сакам да ја видам 10 цифри, по децимално место. 269 00:12:03,440 --> 00:12:09,060 >> И јас одам да се оди напред и да го прекомпајлирате ова и повторување плови 1. 270 00:12:09,060 --> 00:12:13,060 Јас вид на жалење ја тестираат оваа понатаму, бидејќи мојата математика не е толку 271 00:12:13,060 --> 00:12:14,320 поправи веќе, се чини. 272 00:12:14,320 --> 00:12:15,630 Но, чекајте, можеби тоа е само среќа. 273 00:12:15,630 --> 00:12:17,810 Можеби компјутерот ви е глума малку чудно. 274 00:12:17,810 --> 00:12:21,810 Дозволете ми да оди напред и да се направи 20 децимална поени и јас ги убеди дека јас знам 275 00:12:21,810 --> 00:12:22,540 како да направите математика. 276 00:12:22,540 --> 00:12:23,460 Знам како да програма. 277 00:12:23,460 --> 00:12:26,960 Направи плови 1, повторно компајлирајте и ѓаволите. 278 00:12:26,960 --> 00:12:31,110 Тоа е навистина, навистина станува далеку од вистината. 279 00:12:31,110 --> 00:12:32,490 >> Значи она што се случува тука? 280 00:12:32,490 --> 00:12:36,050 Интуитивно, врз основа на нашите претпоставки претходно за големината на типови на податоци, 281 00:12:36,050 --> 00:12:38,040 она што мора да се случува овде под хаубата? 282 00:12:38,040 --> 00:12:39,290 Да? 283 00:12:39,290 --> 00:12:43,000 284 00:12:43,000 --> 00:12:43,590 Токму така. 285 00:12:43,590 --> 00:12:46,480 Ако сакате ова многу прецизност, и тоа е подлец на многу прецизност - 286 00:12:46,480 --> 00:12:48,770 20 броеви по децималната точка. 287 00:12:48,770 --> 00:12:51,990 Вие не може да претставуваат произволен број освен ако не сте 288 00:12:51,990 --> 00:12:52,930 произволен број на битови. 289 00:12:52,930 --> 00:12:54,190 Но, ние не правиме. 290 00:12:54,190 --> 00:12:57,200 За плови, имаме само 32 бита. 291 00:12:57,200 --> 00:13:02,260 >> Па ако 32 бита само може да се permuted во начин - исто како и нашите луѓе на, сцената 292 00:13:02,260 --> 00:13:05,780 рацете нагоре или надолу - во ограничен број на начини, има само ограничен број 293 00:13:05,780 --> 00:13:08,640 од реални броеви може да претставуваат со оние бита. 294 00:13:08,640 --> 00:13:10,500 И така на компјутер на крајот се случува да мора да 295 00:13:10,500 --> 00:13:11,730 проектот за сечење агли. 296 00:13:11,730 --> 00:13:15,500 На компјутерот може да се скрие оние детали од нас за малку време. 297 00:13:15,500 --> 00:13:18,880 Но ако почнеме ѕиркаа на броеви и да гледа подалеку и подалеку на 298 00:13:18,880 --> 00:13:23,220 заостанува броеви во целиот број, тогаш ние почнуваме да видите дека тоа е 299 00:13:23,220 --> 00:13:26,480 всушност приближување на Идејата за една десетина. 300 00:13:26,480 --> 00:13:29,860 >> И така што се испоставува, трагично, има бесконечен број на броеви 301 00:13:29,860 --> 00:13:35,060 ние не може да претставува токму во компјутер, барем со конечни 302 00:13:35,060 --> 00:13:38,030 број на битови, конечен износот на RAM меморија. 303 00:13:38,030 --> 00:13:41,210 Сега за жал, тоа понекогаш има реални последици. 304 00:13:41,210 --> 00:13:45,980 Ако луѓето не сосема ценат тоа или вид на земаме здраво за готово фактот 305 00:13:45,980 --> 00:13:48,310 дека нивниот компјутер само ќе го направи она што тие го каже да го стори и не 306 00:13:48,310 --> 00:13:51,430 се разбере овие основни застапеност детали - 307 00:13:51,430 --> 00:13:55,290 која, искрено, во некои јазици се скриен од корисникот, за разлика во C - 308 00:13:55,290 --> 00:13:56,500 некои лоши работи може да се случи. 309 00:13:56,500 --> 00:13:58,650 >> И она што мислев дека би го сторила е да направиме чекор назад. 310 00:13:58,650 --> 00:14:00,420 И ова е за еден осум-минутно видео. 311 00:14:00,420 --> 00:14:04,200 Тоа се емитуваше пред неколку години, и тоа му дава увид во всушност она што може да оди 312 00:14:04,200 --> 00:14:09,290 не е во ред, кога ќе под-ценат овие видови на детали во самиот сите премногу 313 00:14:09,290 --> 00:14:10,080 реалниот свет. 314 00:14:10,080 --> 00:14:12,965 Ако можеме да ја придуши го светла за неколку минути. 315 00:14:12,965 --> 00:14:14,360 >> ЗВУЧНИК 1: Ние сега се врати на инженеринг 316 00:14:14,360 --> 00:14:17,160 катастрофи на Современ чуда. 317 00:14:17,160 --> 00:14:18,680 >> Компјутери - 318 00:14:18,680 --> 00:14:21,340 сме сите доаѓаат да го прифати честопати фрустрирачки проблеми 319 00:14:21,340 --> 00:14:23,170 кои одат со нив. 320 00:14:23,170 --> 00:14:27,570 Грешки, вируси, и софтвер баговите се мали цени да плати за 321 00:14:27,570 --> 00:14:28,960 погодност. 322 00:14:28,960 --> 00:14:32,040 Но во high-tech и со голема брзина воена и вселенска програма 323 00:14:32,040 --> 00:14:38,650 апликации, најмалиот проблем може да се зголемува во катастрофа. 324 00:14:38,650 --> 00:14:44,480 >> На 4 јуни 1996 година, научниците подготвени да започне беспилотни Ariane 5 ракета. 325 00:14:44,480 --> 00:14:48,700 Тоа беше спроведувањето научни сателити со цел да се воспостави точно како 326 00:14:48,700 --> 00:14:53,250 Магнетното поле на Земјата се поврзува со соларни ветрови. 327 00:14:53,250 --> 00:14:57,540 На ракетата била изградена за Европската Вселенска агенција и крена надвор од своите 328 00:14:57,540 --> 00:14:59,906 објект на брегот на Француска Гвајана. 329 00:14:59,906 --> 00:15:03,660 >> ЖАК GANSSLE: На околу 37 секунди во на летот, тие прво забележале 330 00:15:03,660 --> 00:15:04,910 нешто се случува не е во ред. 331 00:15:04,910 --> 00:15:08,130 На прскалките се врти во начин тие навистина не треба. 332 00:15:08,130 --> 00:15:12,380 Околу 40 секунди во лет, јасно на возилото беше во неволја. 333 00:15:12,380 --> 00:15:14,400 И тоа е моментот кога тие го направија Одлуката да го уништат. 334 00:15:14,400 --> 00:15:18,520 Опсегот безбедност офицер, со огромна храброст, притиснав на копчето, 335 00:15:18,520 --> 00:15:23,900 разнесе ракета, пред да се стане опасност за јавната безбедност. 336 00:15:23,900 --> 00:15:27,810 >> ЗВУЧНИК 1: Ова беше прво патување на Ariane 5, а неговото уништување 337 00:15:27,810 --> 00:15:32,020 се одржа поради недостаток вградени во софтверот на ракетата. 338 00:15:32,020 --> 00:15:33,980 >> ЖАК GANSSLE: Проблемот на Ariane беше тоа што таму беше број 339 00:15:33,980 --> 00:15:36,390 дека потребните 64 битови да го искажам. 340 00:15:36,390 --> 00:15:39,420 И тие сакаа да го конвертирате на 16-битен број. 341 00:15:39,420 --> 00:15:43,130 Тие претпоставуваат дека бројот никогаш не беше ќе биде многу голема, дека повеќето од 342 00:15:43,130 --> 00:15:46,810 тие цифри во 64-битна број беа нули. 343 00:15:46,810 --> 00:15:48,270 Тие беа во право. 344 00:15:48,270 --> 00:15:51,380 >> ЗВУЧНИК 1: Неспособноста на еден софтвер програма за прифаќање на каков вид на 345 00:15:51,380 --> 00:15:55,350 број генерирани од страна на друга беше во коренот на неуспех. 346 00:15:55,350 --> 00:15:59,970 Развој на софтвер стана многу скапи дел од новата технологија. 347 00:15:59,970 --> 00:16:03,980 На Ariane 4 ракета беше многу успешна, па голем дел од софтверот 348 00:16:03,980 --> 00:16:07,480 создадени за тоа беше, исто така, се користат во Ariane 5. 349 00:16:07,480 --> 00:16:11,980 >> Филип COYLE: основниот проблем беше дека Ariane 5 беше побрз, 350 00:16:11,980 --> 00:16:13,720 забрза побрзо. 351 00:16:13,720 --> 00:16:17,250 И софтверот не сте имале отпаѓаа за тоа. 352 00:16:17,250 --> 00:16:20,770 >> ЗВУЧНИК 1: Уништувањето на ракета Беше тоа една огромна финансиска катастрофа, 353 00:16:20,770 --> 00:16:24,200 сите се должи на една минута софтверска грешка. 354 00:16:24,200 --> 00:16:27,820 Но, ова не е првпат податоци конверзија проблеми го мачеа модерна 355 00:16:27,820 --> 00:16:30,620 ракета технологија. 356 00:16:30,620 --> 00:16:34,480 >> ЖАК GANSSLE: Во 1991 година, со почеток на Првата заливска војна, Патриот 357 00:16:34,480 --> 00:16:38,610 ракетен помина низ сличен вид на голем број конверзија проблем. 358 00:16:38,610 --> 00:16:44,910 Како резултат на тоа, 28 американски војници беа убиени и околу 100 ранети 359 00:16:44,910 --> 00:16:48,600 кога Патриот, кој требаше да се заштити од влезните Scuds, 360 00:16:48,600 --> 00:16:51,630 не успеа да оган проектил. 361 00:16:51,630 --> 00:16:55,110 >> ЗВУЧНИК 1: Кога Ирак го нападна Кувајт и Америка започна Пустинска бура во 362 00:16:55,110 --> 00:17:00,570 почетокот на 1991 година, Патриот проектили батерии беа распоредени за заштита на Саудиска Арабија 363 00:17:00,570 --> 00:17:04,760 и Израел од ирачките Скад ракетни напади. 364 00:17:04,760 --> 00:17:09,720 Патриот е американска среден опсег земја-воздух систем произведени од страна на 365 00:17:09,720 --> 00:17:11,569 на компанијата Raytheon. 366 00:17:11,569 --> 00:17:16,410 >> THEODORE Постол: Големината на Патриот пресретнувачи сам по себе е приближно 367 00:17:16,410 --> 00:17:17,710 20-метри долга. 368 00:17:17,710 --> 00:17:20,800 И тежи околу £ 2000. 369 00:17:20,800 --> 00:17:22,940 И таа носи боева глава од околу - 370 00:17:22,940 --> 00:17:24,905 Мислам дека тоа е околу 150 фунти. 371 00:17:24,905 --> 00:17:31,030 И боева глава сам по себе е висок експлозив кој има 372 00:17:31,030 --> 00:17:33,270 фрагменти околу неа. 373 00:17:33,270 --> 00:17:37,490 На обвивка на боева глава е дизајниран да се однесуваме како buckshot. 374 00:17:37,490 --> 00:17:40,720 >> ЗВУЧНИК 1: Проектилите се вршат четири по контејнер и се транспортираат 375 00:17:40,720 --> 00:17:43,050 од полу приколка. 376 00:17:43,050 --> 00:17:47,490 >> Филип COYLE: На Патриот анти-ракетен системот се навраќа на 377 00:17:47,490 --> 00:17:50,710 најмалку 20 години. 378 00:17:50,710 --> 00:17:54,350 Првобитно таа беше наменета како на одбраната воздух проектили да 379 00:17:54,350 --> 00:17:56,190 соборат непријател авиони. 380 00:17:56,190 --> 00:18:02,490 Во првата Заливска војна, кога таа војна дојдоа заедно, Армијата сакаше да ја користите 381 00:18:02,490 --> 00:18:05,535 да ги соборат Scuds не, авиони. 382 00:18:05,535 --> 00:18:09,310 На ирачката воздухопловните сили не беше па голем дел од проблемот. 383 00:18:09,310 --> 00:18:12,450 Но на Армијата е загрижен за Scuds. 384 00:18:12,450 --> 00:18:15,950 И така тие се обиделе да се надополни Патриотскиот. 385 00:18:15,950 --> 00:18:18,750 >> ЗВУЧНИК 1: зграпчување на непријателот проектили патуваат на Мах пет беше 386 00:18:18,750 --> 00:18:20,890 ќе треба да се предизвик доволно. 387 00:18:20,890 --> 00:18:25,590 Но кога Патриот бил пренесен во услуга, Армијата не бил свесен на 388 00:18:25,590 --> 00:18:31,710 Ирачкиот модификација што го направија нивните Scuds речиси невозможно да се погоди. 389 00:18:31,710 --> 00:18:35,240 >> THEODORE Постол: Што се случи е Scuds кои беа 390 00:18:35,240 --> 00:18:36,570 доаѓаат во се нестабилни. 391 00:18:36,570 --> 00:18:37,532 Тие се ниша. 392 00:18:37,532 --> 00:18:43,220 Причината за ова беше Ирачани, во цел да се добие 600 километри надвор од 393 00:18:43,220 --> 00:18:47,530 300 километри дострел, зеде тежина од пред боева глава. 394 00:18:47,530 --> 00:18:49,290 Тие го направија боева глава полесни. 395 00:18:49,290 --> 00:18:53,110 Па сега на Патриотскиот се обидува да дојде на Скад. 396 00:18:53,110 --> 00:18:56,470 И поголемиот дел од времето, големо Поголемиот дел од времето, тоа би само 397 00:18:56,470 --> 00:18:58,730 летаат од Скад. 398 00:18:58,730 --> 00:19:01,760 >> ЗВУЧНИК 1: Откако Патриотскиот систем оператори реализира Патриот пропуштени 399 00:19:01,760 --> 00:19:06,690 нејзината цел, тие детонираше на патриоти боева глава да се избегнат можните 400 00:19:06,690 --> 00:19:10,300 жртви, ако тоа е дозволено да падне на земјата. 401 00:19:10,300 --> 00:19:14,540 >> THEODORE Постол: Тоа беше она што најмногу луѓето видоа како голема fireballs во небото 402 00:19:14,540 --> 00:19:20,350 и неразбран како оската на Скад боеви глави. 403 00:19:20,350 --> 00:19:23,320 >> ЗВУЧНИК 1: Иако во текот на ноќта небо Патриоти се појави да биде успешно 404 00:19:23,320 --> 00:19:27,530 уништувајќи Scuds, во Дахран таму може да има грешка во врска со нејзините 405 00:19:27,530 --> 00:19:29,140 перформанси. 406 00:19:29,140 --> 00:19:34,180 Таму, радарски систем Патриот е изгубена ги пратите на дојдовен Скад и никогаш не 407 00:19:34,180 --> 00:19:36,380 започна се должи на софтвер пукнатина. 408 00:19:36,380 --> 00:19:39,890 409 00:19:39,890 --> 00:19:42,700 >> Тоа беше Израелци кои за првпат се откриени дека колку подолго системот 410 00:19:42,700 --> 00:19:48,020 беше, толку е поголема временска неусогласеност стана се должи на часовникот 411 00:19:48,020 --> 00:19:50,470 вградени во компјутерот на системот. 412 00:19:50,470 --> 00:19:54,640 >> ЖАК GANSSLE: За две недели пред Трагедијата во Дахран, Израелците 413 00:19:54,640 --> 00:19:58,440 пријавен во Министерството за одбрана дека системот е губење на време. 414 00:19:58,440 --> 00:20:01,280 По околу осум часа од трчање, тие забележале дека системот е 415 00:20:01,280 --> 00:20:03,530 станува значително помалку точни. 416 00:20:03,530 --> 00:20:07,710 Министерството за одбрана одговорија со кажува на сите Патриот батерии 417 00:20:07,710 --> 00:20:10,500 да не остави на системите на долго време. 418 00:20:10,500 --> 00:20:12,430 Тие никогаш не рече она што долго време беше. 419 00:20:12,430 --> 00:20:13,330 Осум часа? 420 00:20:13,330 --> 00:20:13,810 10 часа? 421 00:20:13,810 --> 00:20:14,990 1000 часа? 422 00:20:14,990 --> 00:20:17,150 Никој не знаеше. 423 00:20:17,150 --> 00:20:20,220 >> ЗВУЧНИК 1: Патриот батерија стационирани во касарната на Дахран 424 00:20:20,220 --> 00:20:24,660 и нејзините недостатоци внатрешниот часовник беше на повеќе од 100 часа во ноќта на 425 00:20:24,660 --> 00:20:27,470 25 февруари. 426 00:20:27,470 --> 00:20:31,770 >> ЖАК GANSSLE: Тоа следи пат на точност од околу една десетина од секунда. 427 00:20:31,770 --> 00:20:34,480 Сега, една десетина од секунда е интересни број, бидејќи не може да биде 428 00:20:34,480 --> 00:20:39,940 изразени во бинарен точно, што значи тоа не може да се изрази токму во 429 00:20:39,940 --> 00:20:42,500 секој модерен дигитален компјутер. 430 00:20:42,500 --> 00:20:46,920 Тоа е тешко да се поверува, но го користите ова како пример. 431 00:20:46,920 --> 00:20:49,000 Да го земеме на број една третина. 432 00:20:49,000 --> 00:20:53,150 Една третина не може да се изрази во децимална точно. 433 00:20:53,150 --> 00:20:57,500 Една третина е 0,333 случува на за бесконечност. 434 00:20:57,500 --> 00:21:02,270 Не постои начин да го направите тоа со апсолутна точност во децимални. 435 00:21:02,270 --> 00:21:05,370 Тоа е токму на ист вид на проблем што се случи во Патриот. 436 00:21:05,370 --> 00:21:09,880 Колку подолго системот трчаше, на Најлошото време грешка стана. 437 00:21:09,880 --> 00:21:13,840 >> ЗВУЧНИК 1: По 100 часа на операција, грешката во тоа време беше само 438 00:21:13,840 --> 00:21:16,140 околу една третина од секунда. 439 00:21:16,140 --> 00:21:20,800 Но во однос на таргетирање на проектили патуваат на Мах пет, тоа резултираше во 440 00:21:20,800 --> 00:21:24,410 СЛЕДЕЊЕ грешка од над 600 метри. 441 00:21:24,410 --> 00:21:27,670 Тоа ќе биде фатална грешка за војниците на Дахран. 442 00:21:27,670 --> 00:21:33,450 >> THEODORE Постол: Што се случи е Скад лансирање беше откриен од страна на почетокот 443 00:21:33,450 --> 00:21:34,280 предупредување сателити. 444 00:21:34,280 --> 00:21:38,550 И тие знаеја дека Скад доаѓаше во нивната општа насока. 445 00:21:38,550 --> 00:21:41,000 Тие не знаат каде доаѓа. 446 00:21:41,000 --> 00:21:43,900 >> ЗВУЧНИК 1: Тоа беше сега до радар компонента на Патриотскиот систем 447 00:21:43,900 --> 00:21:48,910 одбрана на Дахран да се лоцираат и да ја задржите ги пратите на влезните непријател проектили. 448 00:21:48,910 --> 00:21:50,580 >> ЖАК GANSSLE: На радар беше многу паметни. 449 00:21:50,580 --> 00:21:53,770 Тоа всушност ќе следи позицијата на на Скад и потоа се предвиди каде што 450 00:21:53,770 --> 00:21:57,160 најверојатно, ќе биде следниот пат на радарот испрати пулсот надвор. 451 00:21:57,160 --> 00:21:58,870 Тоа беше наречен спектар портата. 452 00:21:58,870 --> 00:22:04,020 >> THEODORE Постол: Потоа еднаш на Патриотскиот одлучува доволно време помина да се оди 453 00:22:04,020 --> 00:22:09,420 врати и да го провери следната локација за оваа откриен објект, тоа оди назад. 454 00:22:09,420 --> 00:22:14,450 Па кога таа отиде назад во погрешно место, тогаш не гледа објект. 455 00:22:14,450 --> 00:22:18,200 И тој одлучува дека не постои објект, тоа беше лажна откривање и 456 00:22:18,200 --> 00:22:19,680 капки на патеката. 457 00:22:19,680 --> 00:22:22,970 >> ЗВУЧНИК 1: На дојдовен Скад исчезна од радарскиот екран, и 458 00:22:22,970 --> 00:22:26,050 секунди подоцна го тресна во касарната. 459 00:22:26,050 --> 00:22:31,950 На Скад убиени 28 и беше последен отпуштен за време на Првата заливска војна. 460 00:22:31,950 --> 00:22:37,700 Трагично, ажурирани софтвер пристигна на Дахран наредниот ден. 461 00:22:37,700 --> 00:22:41,800 На софтвер пропустот бил фиксен, затворање на едно поглавје во проблематичниот 462 00:22:41,800 --> 00:22:43,690 историјата на Патриот проектили. 463 00:22:43,690 --> 00:22:46,780 464 00:22:46,780 --> 00:22:50,710 >> Патриот е, всушност, акроним за Фазен Низа Следење 465 00:22:50,710 --> 00:22:51,960 Пресретнат на целните. 466 00:22:51,960 --> 00:22:54,650 467 00:22:54,650 --> 00:23:00,840 >> David J MALAN: Сите во право, па отрезнувачки пример, за да бидете сигурни. 468 00:23:00,840 --> 00:23:03,430 И за среќа, овие пониско ниво грешки не се нешто што ние ќе 469 00:23:03,430 --> 00:23:06,220 обично имаат да се цениме, секако, не со некои од нашите 470 00:23:06,220 --> 00:23:07,360 најрано на програми. 471 00:23:07,360 --> 00:23:10,450 Наместо тоа, повеќето од бубачки да ќе средба ќе биде логички во природата, 472 00:23:10,450 --> 00:23:12,900 синтаксички во природата при што кодот едноставно не работи во право. 473 00:23:12,900 --> 00:23:14,140 И знаеш дека прилично брзо. 474 00:23:14,140 --> 00:23:16,850 >> Но особено кога ќе дојде до крајот на семестарот, тоа се случува да 475 00:23:16,850 --> 00:23:20,620 стана се повеќе и повеќе на можноста за навистина мислам тешко за дизајн 476 00:23:20,620 --> 00:23:22,960 од вашите програми и основните застапеност 477 00:23:22,960 --> 00:23:24,520 таму, исто така, на податоците. 478 00:23:24,520 --> 00:23:28,010 На пример, ние ќе се воведе MySQL, која е популарна база на податоци моторот 479 00:23:28,010 --> 00:23:30,850 дека можете да го користите со веб-сајтови да се складирање на податоци на задниот крај. 480 00:23:30,850 --> 00:23:34,630 И ќе мора да почне да одлучува во На крајот на семестарот, не само што 481 00:23:34,630 --> 00:23:38,790 типови на податоци, заедно овие линии да се користи но точно колку битови за користење, 482 00:23:38,790 --> 00:23:42,740 дали или не сакате да го зачувате датуми како датуми и времиња што пати, и, исто така, 483 00:23:42,740 --> 00:23:46,890 работи како колку е голема сакаш уникатен ИД да биде за, да речеме, на корисниците 484 00:23:46,890 --> 00:23:47,680 во вашата база на податоци. 485 00:23:47,680 --> 00:23:51,210 >> Всушност, ако некои од вас имале Фејсбук сметките за сосема извесно време, 486 00:23:51,210 --> 00:23:53,680 и знаеш како да се добие пристап на вашиот кориснички ID - 487 00:23:53,680 --> 00:23:57,930 што понекогаш се појавува во вашата профилот на URL на освен ако не сте ја одбрале 488 00:23:57,930 --> 00:24:02,070 прекар за URL, или ако сте користи Фејсбук График API, 489 00:24:02,070 --> 00:24:05,510 јавно достапни API, со кој можете може да побара Фејсбук за необработените податоци - 490 00:24:05,510 --> 00:24:07,580 може да се види она што вашите нумерички проект е. 491 00:24:07,580 --> 00:24:10,880 И пред неколку години, Фејсбук суштина мораше да ја промени од користење на 492 00:24:10,880 --> 00:24:15,980 еквивалент на ints за користење на долго долго, бидејќи со текот на времето како корисниците се 493 00:24:15,980 --> 00:24:19,780 и да си одат и да се создаде многу сметки и лажни сметки, па дури и тие многу лесно 494 00:24:19,780 --> 00:24:24,630 беа во можност да ги исцрпиме нешто како 4 милијарди можна вредност како int. 495 00:24:24,630 --> 00:24:28,340 >> Толку повеќе на овие видови на прашања по патот, како и. 496 00:24:28,340 --> 00:24:30,750 Добро, така што беше кастинг. 497 00:24:30,750 --> 00:24:31,670 Тоа беше непрецизност. 498 00:24:31,670 --> 00:24:32,730 А неколку брзи пораки. 499 00:24:32,730 --> 00:24:35,710 Значи делови формално започне оваа доаѓаат Недела, понеделник, вторник. 500 00:24:35,710 --> 00:24:39,080 Ќе слушнете преку е-маил подоцна оваа недела како да се вашиот дел задача. 501 00:24:39,080 --> 00:24:42,570 И ќе исто така, тука во тој момент како да го промените вашиот дел ако вашиот 502 00:24:42,570 --> 00:24:45,660 распоред сега е изменета или вашиот удобност ниво сега е изменета. 503 00:24:45,660 --> 00:24:49,380 Во меѓувреме P-сет еден и хакерски еден се поради овој четврток, со опција да 504 00:24:49,380 --> 00:24:52,450 го продолжи тој рок е опишано во спецификации за петок 505 00:24:52,450 --> 00:24:53,830 во типичен начин. 506 00:24:53,830 --> 00:24:57,500 >> Сфатат дека се вклучени со проблемот сет спецификации се инструкции за 507 00:24:57,500 --> 00:25:02,770 како да се користи CS50 апаратот, да, како и некои CS50 специфични алатки 508 00:25:02,770 --> 00:25:06,540 како 50 стил, кој може да ви обезбеди со повратни информации динамички на 509 00:25:06,540 --> 00:25:10,230 квалитетот на вашиот код стил и, исто така, провери 50, кои може да ви обезбеди со 510 00:25:10,230 --> 00:25:13,160 динамичен повратни информации за вашиот кодот е коректност. 511 00:25:13,160 --> 00:25:16,850 Прости, дека ние сме сеуште пеглање од неколку kinks со чек 50. 512 00:25:16,850 --> 00:25:21,490 Неколку од своите соученици кои ја почне околу 04:00 во петокот вечерта кога 513 00:25:21,490 --> 00:25:25,130 на спец отиде да се забележи, бидејќи тогаш неколку грешки кои ние работиме 514 00:25:25,130 --> 00:25:29,010 преку, како и извинување за секој кој има доживеано непотребно фрустрации. 515 00:25:29,010 --> 00:25:30,340 Грешката е моја. 516 00:25:30,340 --> 00:25:34,080 Но ние ќе се надоврзе на CS50 разговараат кога тоа е решено. 517 00:25:34,080 --> 00:25:35,700 >> Па еден збор на резултати себе. 518 00:25:35,700 --> 00:25:38,990 Па тоа ќе биде една недела или две пред да почне да се добијат повратни информации за проблемот сетови 519 00:25:38,990 --> 00:25:40,640 затоа што сеуште не ги имаат настава колеги. 520 00:25:40,640 --> 00:25:44,510 Па дури и тогаш, ние ќе започнеме да се оцени проблемот Ц поставува пред ние 521 00:25:44,510 --> 00:25:46,970 врати се назад и оцени нула, па дека можете да добиете повеќе релевантни 522 00:25:46,970 --> 00:25:48,150 повратни информации побрзо. 523 00:25:48,150 --> 00:25:51,870 Но, во принцип на наставната програма, CS50 проблем поставува се оценува по должината на 524 00:25:51,870 --> 00:25:53,580 по четири оски - 525 00:25:53,580 --> 00:25:55,760 обемот, точноста, дизајн и стил. 526 00:25:55,760 --> 00:25:59,210 >> Опфатот се случува да биде број обично помеѓу нула и пет кои 527 00:25:59,210 --> 00:26:01,830 доловува колку од парче што сте малку надвор. 528 00:26:01,830 --> 00:26:03,750 Обично, сакаш тоа да биде пет. 529 00:26:03,750 --> 00:26:05,300 Ти барем се обидел сè. 530 00:26:05,300 --> 00:26:09,330 И ќе забележите дека тоа е помножителен фактор така што прави само дел од 531 00:26:09,330 --> 00:26:12,520 проблем во собата не е најдобрата стратегија. 532 00:26:12,520 --> 00:26:15,610 >> Во меѓувреме, повеќе од очигледна е важноста на точноста - 533 00:26:15,610 --> 00:26:18,620 само е вашата програма правилно со однос на спецификација? 534 00:26:18,620 --> 00:26:21,510 Ова е бројат намерно повеќе во голема мера од другите две оски со 535 00:26:21,510 --> 00:26:24,450 фактор на три, бидејќи ние ја признаваме кои обично си оди за да поминат 536 00:26:24,450 --> 00:26:28,600 многу повеќе време си поигруваше со одредување на некои грешки, добивање на вашиот код да работат, тогаш 537 00:26:28,600 --> 00:26:31,540 се тоа вовлекување и изборот соодветни променлива имиња и 538 00:26:31,540 --> 00:26:33,800 допаѓа, кој е на другиот крај од спектарот на стил. 539 00:26:33,800 --> 00:26:36,160 >> Тоа не е да се каже стил не е важно, и ние ќе го проповеда над 540 00:26:36,160 --> 00:26:37,920 време и во предавања и во делови. 541 00:26:37,920 --> 00:26:40,520 Стил се однесува на естетиката на вашиот код. 542 00:26:40,520 --> 00:26:43,980 Дали сте го одбрале добро име променливи кои се кратки, но малку 543 00:26:43,980 --> 00:26:44,680 описни? 544 00:26:44,680 --> 00:26:47,840 Е вашиот код вовлечен како што сум го видел во предавање и на начин во согласност 545 00:26:47,840 --> 00:26:49,070 со стил 50? 546 00:26:49,070 --> 00:26:51,220 >> И на крај е правото на дизајн таму во средината. 547 00:26:51,220 --> 00:26:54,090 Дизајн е потешко еден да се стави прст на, бидејќи тоа е многу повеќе 548 00:26:54,090 --> 00:26:55,000 субјективни. 549 00:26:55,000 --> 00:26:58,610 Но тоа е можеби најважниот од три оски во однос на педагошки 550 00:26:58,610 --> 00:27:02,050 вредност со текот на времето и дека ова ќе биде наставата колеги е можност да се 551 00:27:02,050 --> 00:27:04,110 ви обезбеди со квалитативни повратни информации. 552 00:27:04,110 --> 00:27:08,100 Навистина, во CS50 иако ние немаме овие формули и резултати, на крајот 553 00:27:08,100 --> 00:27:11,350 на ден овие се многу намерно многу мали кофи - точка вредности 554 00:27:11,350 --> 00:27:13,460 меѓу нула и три и нула и пет. 555 00:27:13,460 --> 00:27:17,800 Ние не се обидуваме да се подготви многу груб линии помеѓу проблемот поставува или помеѓу 556 00:27:17,800 --> 00:27:21,490 студентите, туку се фокусира колку што е можеме на квалитативна, longhand 557 00:27:21,490 --> 00:27:25,490 повратни информации, или внесе или вербална од вашиот особено настава колеги, 558 00:27:25,490 --> 00:27:27,050 ќе добиете да се знае доста добро. 559 00:27:27,050 --> 00:27:32,340 >> Но, во принцип, оние кои се на тегови дека различните оски ќе ги имаат. 560 00:27:32,340 --> 00:27:35,480 Во меѓувреме, исто така, тоа е вреди да се зачува во ум дека не треба да се претпостави дека 561 00:27:35,480 --> 00:27:38,870 три од пет е 60% и Затоа грубо неуспешна. 562 00:27:38,870 --> 00:27:41,410 Три е намерно замислена да биде вид на средината на патот добро. 563 00:27:41,410 --> 00:27:43,480 Ако сте добивање тројца на почетокот на семестарот, тоа е 564 00:27:43,480 --> 00:27:46,340 навистина значи да се биде добар место да се започне. 565 00:27:46,340 --> 00:27:50,510 Ако сте добивање twos, саеми, има дефинитивно некои работи да плати малку 566 00:27:50,510 --> 00:27:53,250 повеќе внимание, да ги искористат предностите на секции и канцеларија часа. 567 00:27:53,250 --> 00:27:54,590 >> Ако сте добивање на четири нозе и петки, одлично. 568 00:27:54,590 --> 00:27:57,430 Но, навистина, ние се надеваме да видите траектории меѓу учениците - многу 569 00:27:57,430 --> 00:28:00,575 индивидуализирана по студент, но почнувајќи на семестарот овде во вид на 570 00:28:00,575 --> 00:28:04,100 двете на трите спектар, но завршува до тука во 04:56 опсег. 571 00:28:04,100 --> 00:28:05,440 Тоа е она што ние сме навистина барате. 572 00:28:05,440 --> 00:28:09,590 И ние се задржи во умот на делтата дека ви покажуваат помеѓу недела нула и недела 573 00:28:09,590 --> 00:28:12,170 12 кога јас го правам оценки. 574 00:28:12,170 --> 00:28:16,380 Тоа не е важно за нас е апсолутно како сте фер на почетокот ако вашиот 575 00:28:16,380 --> 00:28:19,330 траекторија е навистина нагоре и силна. 576 00:28:19,330 --> 00:28:24,000 >> Академска чесност - така нека ме стави на мојот повеќе сериозен глас за само еден миг. 577 00:28:24,000 --> 00:28:28,510 Така овој курс има разлика испраќање на повеќе студенти од било кој друг 578 00:28:28,510 --> 00:28:30,950 во историјата за реклама одбор, верувам. 579 00:28:30,950 --> 00:28:34,220 Имаме вид на изгубени брои во овој точка на тоа колку често се случува ова. 580 00:28:34,220 --> 00:28:37,090 И тоа не е затоа што студентите во 50 се повеќе нечесни од нивните 581 00:28:37,090 --> 00:28:38,690 соучениците на друго место. 582 00:28:38,690 --> 00:28:42,800 Но сфати, исто така, дека ние сме многу добри во откривањето на овој вид на работа. 583 00:28:42,800 --> 00:28:45,920 >> А тоа е предност што компјутерски науки класа има со тоа што ние 584 00:28:45,920 --> 00:28:49,110 може да и ние се споредуваат сите ученици Проблемот поставува пар-мудар против секоја 585 00:28:49,110 --> 00:28:51,470 други, не само оваа година но сите претходни години. 586 00:28:51,470 --> 00:28:55,080 Ние имаме способност, како и учениците во класата, на Google и да се најде код 587 00:28:55,080 --> 00:28:57,440 на сајтови како github и форуми за дискусија. 588 00:28:57,440 --> 00:29:00,840 Постојат апсолутно решенија за CS50 е P-поставува лебдат околу таму. 589 00:29:00,840 --> 00:29:02,710 Но ако може да ги најдете, ние може да ги најдете. 590 00:29:02,710 --> 00:29:07,130 И сето ова е многу автоматизиран и лесно и тажен за нас да се најде. 591 00:29:07,130 --> 00:29:10,990 >> Но сакам да нагласам, исто така, дека академски курс е искреност политика е 592 00:29:10,990 --> 00:29:13,960 многу замислена да биде многу спротивно на тој дух. 593 00:29:13,960 --> 00:29:17,506 Навистина, оваа година ние сме преформулира работи во наставната програма да биде оваа, точка 594 00:29:17,506 --> 00:29:19,790 точка точка, со повеќе детали во наставната програма. 595 00:29:19,790 --> 00:29:22,860 Но Главната тема во текот навистина е да се биде разумен. 596 00:29:22,860 --> 00:29:26,160 Ние признаваме дека постои значителна износот на педагошките 597 00:29:26,160 --> 00:29:30,550 вредност за соработка, до одреден степен, со соучениците, при што ќе ги 598 00:29:30,550 --> 00:29:33,700 две или три или повеќе се стои на бела табла 599 00:29:33,700 --> 00:29:35,670 таблата, така да зборувам, вашиот идеи - 600 00:29:35,670 --> 00:29:39,480 пишување надвор pseudocode во слики, diagramming она Марио треба да биде ако 601 00:29:39,480 --> 00:29:41,350 сте биле за да го напише првиот во pseudocode. 602 00:29:41,350 --> 00:29:43,240 Што треба алчен алгоритам - 603 00:29:43,240 --> 00:29:46,100 како треба да се однесуваме на Проблемот поставува еден? 604 00:29:46,100 --> 00:29:50,440 >> И така сфаќаат дека однесувањето дека ние ги охрабруваме е многу 605 00:29:50,440 --> 00:29:51,470 многу заедно оние линии. 606 00:29:51,470 --> 00:29:53,890 И во наставната програма, ќе видите целиот куп на куршуми под 607 00:29:53,890 --> 00:29:57,740 разумна категорија и не е разумно категорија која ни помага да помогне 608 00:29:57,740 --> 00:30:00,740 ќе заврши вашиот ум околу каде ние ги тргаме таа линија. 609 00:30:00,740 --> 00:30:04,340 И општо земено, пристоен правило на палецот е дека ако се обидуваат да се реши 610 00:30:04,340 --> 00:30:07,990 некои бубачки и вашиот пријател или соученик седи до тебе, тоа е 611 00:30:07,990 --> 00:30:11,530 разумно за вас да му покаже или нејзината вашиот код и да каже, еј, може да помогне 612 00:30:11,530 --> 00:30:13,700 мене дознаам што се случува во ред овде? 613 00:30:13,700 --> 00:30:17,110 >> Ние обично не ја прегрне спротивната страна. 614 00:30:17,110 --> 00:30:20,730 Тоа не е точниот одговор за вашите пријател или соученик тука да кажам, ох, 615 00:30:20,730 --> 00:30:22,510 само погледнете во рудникот и фигура тоа надвор од тоа. 616 00:30:22,510 --> 00:30:24,400 Тоа е вид на неразумно. 617 00:30:24,400 --> 00:30:27,750 Но има некој друг, друг на мозокот, уште еден пар на очи гледам 618 00:30:27,750 --> 00:30:31,620 екранот или погледнете во вашиот код и да каже, дали сте сигурни дека сакате 619 00:30:31,620 --> 00:30:32,760 да има јамка тука? 620 00:30:32,760 --> 00:30:34,800 Или сте сигурни дека сакате дека запирка тука? 621 00:30:34,800 --> 00:30:37,090 Или ох, тоа порака за грешка значи ова. 622 00:30:37,090 --> 00:30:39,580 Тие се многу разумни и поттикнуваат однесување. 623 00:30:39,580 --> 00:30:44,010 >> Случаите на која што и беше алудирајќи на порано се сведуваат на кога студентите се 624 00:30:44,010 --> 00:30:47,350 доцна во ноќта правејќи сиромашните пресуда одлуки и испраќање на нивните кодот на 625 00:30:47,350 --> 00:30:50,130 некој друг или само велејќи, тука, тоа е во Dropbox или 626 00:30:50,130 --> 00:30:51,610 Googling доцна во ноќта. 627 00:30:51,610 --> 00:30:54,880 И така јас ќе ги охрабри и моли од вас, ако имате оние неизбежна 628 00:30:54,880 --> 00:30:58,450 моменти на стрес, ти си испреплетуваат против рок, немате доцна 629 00:30:58,450 --> 00:31:01,490 ден, бидејќи тоа е веќе петок во тоа точка, е-мејл глави на курсот или 630 00:31:01,490 --> 00:31:02,330 мене директно. 631 00:31:02,330 --> 00:31:04,790 Велат, слушаат, јас сум во мојата кршење точка тука. 632 00:31:04,790 --> 00:31:06,660 Ајде да разговарате и го дознаам. 633 00:31:06,660 --> 00:31:10,400 Прибегнување кон интернет или некои други не разумно однесување никогаш не е 634 00:31:10,400 --> 00:31:13,070 решение, и премногу од вашето соучениците се веќе тука на 635 00:31:13,070 --> 00:31:15,150 кампусот, бидејќи на таа слаба процена. 636 00:31:15,150 --> 00:31:17,840 Но тоа е многу лесно да здолниште таа линија. 637 00:31:17,840 --> 00:31:22,950 >> И тука е малку сликата за да ја расположи те од Reddit, така што сега 638 00:31:22,950 --> 00:31:25,720 сè ќе биде во ред. 639 00:31:25,720 --> 00:31:30,210 >> Толку брз повториме, тогаш, од каде што застанавте. 640 00:31:30,210 --> 00:31:33,690 Па минатата недела, се потсетиме дека ние се воведе услови, не во Скреч 641 00:31:33,690 --> 00:31:34,880 но во C тоа време. 642 00:31:34,880 --> 00:31:38,300 И имаше некои нови синтаксата, но навистина нема нови идеи сама за себе. 643 00:31:38,300 --> 00:31:42,630 Имавме Булова изрази кои би можеле да или заедно со две вертикални 644 00:31:42,630 --> 00:31:46,490 барови или и заедно со две ampersands, велејќи дека и двете на левата 645 00:31:46,490 --> 00:31:49,990 и правото мора да биде вистина за ова да се изврши. 646 00:31:49,990 --> 00:31:53,150 Тогаш имавме прекинувачи, која баравме на кратко, но јас предложи се навистина 647 00:31:53,150 --> 00:31:56,830 само различни синтакса за постигнување на ист вид на цел ако знаете во 648 00:31:56,830 --> 00:31:59,270 однапред што вашиот случаи се случува да биде. 649 00:31:59,270 --> 00:32:00,160 >> Ги свртевме погледите кон петелки. 650 00:32:00,160 --> 00:32:03,340 А за телефонска линија е можеби најчестиот, или барем онаа која луѓето 651 00:32:03,340 --> 00:32:05,330 обично достигне за инстиктивно. 652 00:32:05,330 --> 00:32:08,240 Иако тоа изгледа малку криптичната, ќе видите многу, многу примери за ова 653 00:32:08,240 --> 00:32:11,590 пред долго, како што имате веќе кон крајот на минатата недела. 654 00:32:11,590 --> 00:32:14,280 Додека петелки може слично постигне истото. 655 00:32:14,280 --> 00:32:17,550 Но, ако сакате да направите било incrementation или ажурирање на 656 00:32:17,550 --> 00:32:20,230 вредности променлива, мора да го прават тоа повеќе рачно од 657 00:32:20,230 --> 00:32:22,440 за телефонска линија пред дозволува. 658 00:32:22,440 --> 00:32:25,310 И потоа, тука е не-додека јамка, која ни овозможува да се направи нешто на 659 00:32:25,310 --> 00:32:28,460 најмалку еднаш додека нешто друго е точно. 660 00:32:28,460 --> 00:32:31,550 И ова е особено добро за програми или за игри каде што сакате 661 00:32:31,550 --> 00:32:33,810 да го извести корисникот за нешто барем еднаш. 662 00:32:33,810 --> 00:32:37,110 А потоа, ако тој или таа не соработува, можеби ќе сакате да го направи тоа 663 00:32:37,110 --> 00:32:38,420 повторно и повторно. 664 00:32:38,420 --> 00:32:41,270 >> Со променливи, пак, имавме линии на код, како таков, кој би можел 665 00:32:41,270 --> 00:32:41,950 биде две линии. 666 00:32:41,950 --> 00:32:44,830 Вие би можеле да се изјаснат за int наречен шанкот, точка-запирка. 667 00:32:44,830 --> 00:32:47,660 Или едноставно можете да ги пријават и на дефинира, така да се каже. 668 00:32:47,660 --> 00:32:49,950 Го даде вредност во исто време. 669 00:32:49,950 --> 00:32:51,890 >> А потоа на крај, ние разговаравме за функции. 670 00:32:51,890 --> 00:32:54,270 И тоа беше еден убав пример во смисла дека тоа го илустрира 671 00:32:54,270 --> 00:32:55,840 два типа на функциите. 672 00:32:55,840 --> 00:32:59,030 Една од нив е GetString (), кој, пак, добива низа од корисникот. 673 00:32:59,030 --> 00:33:02,040 Но GetString () е вид на интересни, дотаму што ние сме го користи, 674 00:33:02,040 --> 00:33:05,620 затоа што ние секогаш го користи со нешто на левата страна на 675 00:33:05,620 --> 00:33:06,600 знак за еднаквост. 676 00:33:06,600 --> 00:33:09,830 Тоа е да се каже дека GetString () враќа вредност. 677 00:33:09,830 --> 00:33:11,970 Тој се враќа, се разбира, низа. 678 00:33:11,970 --> 00:33:15,130 А потоа на левата страна, ние сме едноставно заштеда на стрингот внатрешноста на 679 00:33:15,130 --> 00:33:16,580 променлива наречена име. 680 00:33:16,580 --> 00:33:21,100 >> Ова е различно, во некоја смисла, од printf бидејќи printf, барем во нашата 681 00:33:21,100 --> 00:33:23,540 употреба тука, не враќа ништо. 682 00:33:23,540 --> 00:33:24,960 Како настрана, тоа не се врати нешто. 683 00:33:24,960 --> 00:33:26,380 Ние едноставно не се грижат што е тоа. 684 00:33:26,380 --> 00:33:29,090 Но тоа не мора она што е нарекува ефект. 685 00:33:29,090 --> 00:33:31,840 И што е тоа пропратен ефект во секој случај ние сме виделе досега? 686 00:33:31,840 --> 00:33:34,720 Што значи printf направам? 687 00:33:34,720 --> 00:33:37,780 Тоа отпечатоци нешто на екранот, прикажува текст или броеви или нешто 688 00:33:37,780 --> 00:33:38,380 на екранот. 689 00:33:38,380 --> 00:33:41,170 И тоа е само смета пропратен ефект затоа што тоа не е навистина предавање 690 00:33:41,170 --> 00:33:41,900 се врати за мене. 691 00:33:41,900 --> 00:33:44,770 Тоа не е одговор внатрешноста на црна кутија што можам да потоа 692 00:33:44,770 --> 00:33:46,130 достигне во и го имате. 693 00:33:46,130 --> 00:33:49,160 Тоа е само тоа го прават на свој, многу како Колтон беше вклучен во овој 694 00:33:49,160 --> 00:33:52,560 црна кутија минатата недела, а тој некако магично е цртеж на табла 695 00:33:52,560 --> 00:33:54,500 без мене, всушност, се вклучени. 696 00:33:54,500 --> 00:33:55,560 Тоа ќе биде пропратен ефект. 697 00:33:55,560 --> 00:33:59,100 Но, ако јас всушност мораше да достигне назад во тука и да кажам, ох, тука е стринг 698 00:33:59,100 --> 00:34:02,040 од корисникот, кои би биде враќање вредност. 699 00:34:02,040 --> 00:34:05,650 >> И досега ние сме само користените функции дека другите луѓе го имаат напишано. 700 00:34:05,650 --> 00:34:09,219 Но ние всушност може да направи овие видови на нештата нас самите. 701 00:34:09,219 --> 00:34:12,730 Па ќе одам да одат во CS50 апаратот повторно. 702 00:34:12,730 --> 00:34:16,020 Дозволете ми да го затворите табот дека ние го отвори пред еден миг. 703 00:34:16,020 --> 00:34:18,530 И дозволете ми да оди напред и да се создаде новата датотека. 704 00:34:18,530 --> 00:34:22,400 И јас одам да се оди напред и да ова го нарекуваат еден positive.c. 705 00:34:22,400 --> 00:34:24,770 Па сакам да направам нешто со позитивни броеви тука. 706 00:34:24,770 --> 00:34:27,219 Па ќе одам да се оди напред и да прават int - 707 00:34:27,219 --> 00:34:28,000 жал - 708 00:34:28,000 --> 00:34:31,840 # Вклучат. 709 00:34:31,840 --> 00:34:34,280 Ајде да не се направи истата грешка како порано. 710 00:34:34,280 --> 00:34:40,020 Int главната (празно), отворен кадрава заграда, затворена кадрава голема заграда. 711 00:34:40,020 --> 00:34:41,639 >> И сега сакам да го направите следново. 712 00:34:41,639 --> 00:34:44,600 Сакам да се напише програма која инсистира на тоа дека на корисникот му дава 713 00:34:44,600 --> 00:34:46,770 мене позитивен цел број. 714 00:34:46,770 --> 00:34:50,969 Значи не постои GetPositiveInt функција во CS50 библиотека. 715 00:34:50,969 --> 00:34:52,610 Има само GetInt (). 716 00:34:52,610 --> 00:34:55,790 Но тоа е во ред затоа што имам конструкции со која можам да наметне 717 00:34:55,790 --> 00:34:59,360 малку повеќе пречка за таа вредност. 718 00:34:59,360 --> 00:35:00,990 Можев да сторам нешто како ова. 719 00:35:00,990 --> 00:35:02,780 >> Па int n - 720 00:35:02,780 --> 00:35:04,920 и ако сте пишување заедно, само сфатат Одам да се вратиш назад и 721 00:35:04,920 --> 00:35:06,430 промени некои работи во еден момент - 722 00:35:06,430 --> 00:35:09,960 па int n еднаква на GetInt (). 723 00:35:09,960 --> 00:35:11,780 И дека се случува да се стави на int внатрешноста на n. 724 00:35:11,780 --> 00:35:13,830 И дозволете ми да биде повеќе описни. 725 00:35:13,830 --> 00:35:23,270 Дозволете ми да кажам нешто како Барам ти ми даде позитивен цел број. 726 00:35:23,270 --> 00:35:23,550 >> Сите во право. 727 00:35:23,550 --> 00:35:25,250 Па само малку инструкции. 728 00:35:25,250 --> 00:35:26,270 И сега што можам да направам? 729 00:35:26,270 --> 00:35:29,840 Па, јас веќе знам од мојот едноставен услови или гранки, исто како и јас 730 00:35:29,840 --> 00:35:36,100 имаше во Скреч, би можел да каже нешто како ако n е помала или еднаква на 731 00:35:36,100 --> 00:35:44,460 нула, тогаш сакам да направам нешто допаѓа, што не е позитивен. 732 00:35:44,460 --> 00:35:45,560 И тогаш би можел да го направи - 733 00:35:45,560 --> 00:35:47,310 Добро, но јас навистина сакате да се добие дека Инт. 734 00:35:47,310 --> 00:35:52,020 Па можев да одам до тука и можев вид на копија ова и алинеја ова. 735 00:35:52,020 --> 00:35:52,570 А потоа, во ред. 736 00:35:52,570 --> 00:35:56,990 Значи, ако n е помала или еднакви на нула го направите тоа. 737 00:35:56,990 --> 00:35:58,900 >> Сега, што ако на корисникот не соработува? 738 00:35:58,900 --> 00:36:01,560 Добро, тогаш јас ќе одам да позајми овој овде. 739 00:36:01,560 --> 00:36:03,130 А потоа одам во тука и тука и тука. 740 00:36:03,130 --> 00:36:06,420 Значи ова не е јасно решение, нели? 741 00:36:06,420 --> 00:36:07,810 Бидејќи нема крај во очите. 742 00:36:07,810 --> 00:36:13,100 Ако сакам да бара од корисникот дава мене позитивен цел број, можам да 743 00:36:13,100 --> 00:36:14,150 всушност добиете Инт. 744 00:36:14,150 --> 00:36:15,620 Јас тогаш може да се провери за што Инт. 745 00:36:15,620 --> 00:36:18,570 Но, тогаш сакам да го проверете уште еднаш и провери тоа повторно и да го провери тоа повторно. 746 00:36:18,570 --> 00:36:21,680 Па очигледно, она што е подобро изградба да се користат тука? 747 00:36:21,680 --> 00:36:22,840 Сите во право, па некој вид на јамка. 748 00:36:22,840 --> 00:36:25,430 >> Па ќе одам да се ослободи од речиси сето ова. 749 00:36:25,430 --> 00:36:27,320 И јас сакам да го добивате ова int барем еднаш. 750 00:36:27,320 --> 00:36:28,890 Па ќе одам да се каже направи - 751 00:36:28,890 --> 00:36:32,110 и јас ќе се врати на додека во само еден миг - 752 00:36:32,110 --> 00:36:33,050 сега, го направи она што? 753 00:36:33,050 --> 00:36:35,860 Јас ќе одам да направите int n добива GetInt (). 754 00:36:35,860 --> 00:36:36,080 OK. 755 00:36:36,080 --> 00:36:37,250 Па тоа е прилично добар. 756 00:36:37,250 --> 00:36:39,750 И сега колку често Сакам да го направите ова? 757 00:36:39,750 --> 00:36:45,770 >> Дозволете ми да го стави на printf внатрешноста на јамка па јас може да бара повторно и повторно, 758 00:36:45,770 --> 00:36:46,740 ако тоа биде потребно. 759 00:36:46,740 --> 00:36:49,720 И она што го сакам ова додека услов да направам? 760 00:36:49,720 --> 00:36:53,870 Сакам да го задржи тоа додека она што е случај? 761 00:36:53,870 --> 00:36:54,125 Да. 762 00:36:54,125 --> 00:36:55,390 N е помала или еднаква на нула. 763 00:36:55,390 --> 00:36:58,180 Тоа веќе, ние сме значително исчистени овој код нагоре. 764 00:36:58,180 --> 00:37:00,700 Ние сме позајмени многу едноставен изградба - не се прави додека јамка. 765 00:37:00,700 --> 00:37:04,690 Сум украдени само важни линии на кодот кој почнав копирање и 766 00:37:04,690 --> 00:37:05,960 вметнување, што не беше мудар. 767 00:37:05,960 --> 00:37:09,790 Па сега јас ќе одам да всушност ставете тоа во овде и само го прават тоа еднаш. 768 00:37:09,790 --> 00:37:12,990 >> И сега што сакам да направите во На самиот крај на оваа програма? 769 00:37:12,990 --> 00:37:16,810 Јас само ќе кажам нешто едноставно допаѓа, благодарение на - и 770 00:37:16,810 --> 00:37:18,980 Јас ќе сторам% i за int - 771 00:37:18,980 --> 00:37:23,270 обратна коса црта n, запирка, а потоа приклучок во N, точка-запирка. 772 00:37:23,270 --> 00:37:23,910 >> Сите во право. 773 00:37:23,910 --> 00:37:27,290 Да видиме што се случува сега кога ќе ја извршите оваа програма. 774 00:37:27,290 --> 00:37:30,600 Одам да се оди напред и да го прават позитивни. 775 00:37:30,600 --> 00:37:30,880 Гајле. 776 00:37:30,880 --> 00:37:31,600 Пред неколку грешки. 777 00:37:31,600 --> 00:37:32,960 Па да ми дојдете назад до првото. 778 00:37:32,960 --> 00:37:34,020 Не работат преку нив наназад. 779 00:37:34,020 --> 00:37:37,000 Работа преку нив од врвот надолу да не каскада и само 780 00:37:37,000 --> 00:37:38,630 една работа да биде погрешно. 781 00:37:38,630 --> 00:37:42,532 Имплицитна изјава на функција GetInt (). 782 00:37:42,532 --> 00:37:43,020 Да. 783 00:37:43,020 --> 00:37:44,420 Па тоа не беше доволно. 784 00:37:44,420 --> 00:37:46,760 Јас вид на прави истата грешка, но малку различен тоа време. 785 00:37:46,760 --> 00:37:51,940 Јас треба не само да вклучуваат stdio.h но исто така cs50.h, која ги вклучува 786 00:37:51,940 --> 00:37:56,770 т.н. декларации на се int, која учат на апаратот, или учи 787 00:37:56,770 --> 00:37:58,760 Ц она GetInt () е. 788 00:37:58,760 --> 00:37:59,550 >> Па да ми resave. 789 00:37:59,550 --> 00:38:02,040 Одам да се игнорира и други грешки затоа што ќе одам да се надеваме дека тие се 790 00:38:02,040 --> 00:38:05,210 некако поврзани со грешка Јас веќе поправени. 791 00:38:05,210 --> 00:38:08,710 Па дозволете ми да оди напред и да го прекомпајлирате со направи позитивни, Enter. 792 00:38:08,710 --> 00:38:09,020 Гајле. 793 00:38:09,020 --> 00:38:09,985 Три грешки, сепак. 794 00:38:09,985 --> 00:38:12,650 Дозволете ми да дојдете до првото. 795 00:38:12,650 --> 00:38:14,320 Неискористени променливата Н. 796 00:38:14,320 --> 00:38:15,850 Ние не го видел тоа порано. 797 00:38:15,850 --> 00:38:17,200 И ова, исто така, е малку криптичната. 798 00:38:17,200 --> 00:38:18,850 Ова е излезот на компајлерот. 799 00:38:18,850 --> 00:38:23,610 И она што нагласи линија таму - positive.c :9:13 - 800 00:38:23,610 --> 00:38:28,960 е велејќи дека, тоа е велејќи on-line девет од positive.c, на 13-тиот карактер, 801 00:38:28,960 --> 00:38:31,510 13-ти колона, сте направиле оваа грешка. 802 00:38:31,510 --> 00:38:34,230 >> А особено, тоа е ти го кажувам мене неискористени променливата Н. 803 00:38:34,230 --> 00:38:35,790 Да видиме - 804 00:38:35,790 --> 00:38:37,150 линија девет. 805 00:38:37,150 --> 00:38:40,430 Јас сум користење на N, во смисла дека Јас сум тоа даваат вредност. 806 00:38:40,430 --> 00:38:44,200 Но, она што на компајлерот не му се допаѓа е дека јас не сум навидум го користите. 807 00:38:44,200 --> 00:38:45,560 Но, чекајте, јас сум го користите. 808 00:38:45,560 --> 00:38:48,170 Во линија 11, јас сум го користите овде. 809 00:38:48,170 --> 00:38:52,430 Но, ако јас движете надолу понатаму на positive.c :11 - 810 00:38:52,430 --> 00:38:56,230 па на линијата 11, карактер 12, компајлерот се ми кажуваше, употреба на 811 00:38:56,230 --> 00:38:58,670 непријавена идентификатор n. 812 00:38:58,670 --> 00:39:02,760 >> Така непријавени средства имам не е одредено тоа како 813 00:39:02,760 --> 00:39:04,970 променлива со тип на податок. 814 00:39:04,970 --> 00:39:05,500 Но, чекајте. 815 00:39:05,500 --> 00:39:09,150 Го направив точно дека во согласност девет. 816 00:39:09,150 --> 00:39:11,100 Па некој е навистина збунет тука. 817 00:39:11,100 --> 00:39:14,900 Тоа е или мене или на компајлерот, бидејќи во согласност девет, повторно, јас сум прогласување на 818 00:39:14,900 --> 00:39:18,650 int n, и јас сум доделување неа се врати вредноста на GetInt (). 819 00:39:18,650 --> 00:39:22,930 Тогаш јас сум со користење дека променливата n во линија 11 и проверка, ако неговата вредност е помалку 820 00:39:22,930 --> 00:39:24,050 од или еднакво на нула. 821 00:39:24,050 --> 00:39:27,430 Но, ова очигледно е лоши и скршени зошто? 822 00:39:27,430 --> 00:39:30,630 823 00:39:30,630 --> 00:39:32,490 Велат дека тоа повторно? 824 00:39:32,490 --> 00:39:35,690 >> Ах, јас мора да се декларираат N пред влегуваат во јамка. 825 00:39:35,690 --> 00:39:36,370 Но зошто? 826 00:39:36,370 --> 00:39:39,830 Мислам, ние само предложени малку пред тоа тоа е во ред да се декларираат променливи 827 00:39:39,830 --> 00:39:43,600 сите на една линија, а потоа им доделите некои вредност. 828 00:39:43,600 --> 00:39:46,790 А глобалната променлива - да се врати на таа идеја во само еден миг. 829 00:39:46,790 --> 00:39:48,690 Зошто сакаш да се стави тоа надвор од јамка? 830 00:39:48,690 --> 00:40:03,170 831 00:40:03,170 --> 00:40:03,830 Тоа е. 832 00:40:03,830 --> 00:40:06,780 Токму така. 833 00:40:06,780 --> 00:40:09,610 >> Значи, иако, нешто контра, дозволете ми да резимираме. 834 00:40:09,610 --> 00:40:13,510 Кога ќе прогласат N внатре на го блокира таму - 835 00:40:13,510 --> 00:40:16,320 конкретно во внатрешноста на оние големите загради - 836 00:40:16,320 --> 00:40:19,210 таа променлива n го има она што е нарекува опсегот - 837 00:40:19,210 --> 00:40:23,210 поврзани со нашата постигнувајќи систем во се разбира - но има обем кој е 838 00:40:23,210 --> 00:40:25,190 ограничени на оние големите загради. 839 00:40:25,190 --> 00:40:28,460 Со други зборови, обично ако прогласат променлива внатре во собата на 840 00:40:28,460 --> 00:40:33,370 кадрави загради, таа променлива постои само во внатрешноста од оние големите загради. 841 00:40:33,370 --> 00:40:37,320 Значи со таа логика сам, иако Сум прогласи n во линија девет, тоа 842 00:40:37,320 --> 00:40:41,910 суштина исчезнува од опсегот, исчезнува од меморија, така да се каже, 843 00:40:41,910 --> 00:40:43,370 од времето кога хит линија 11. 844 00:40:43,370 --> 00:40:47,370 Бидејќи линија 11, за жал, е надвор од оние големите загради. 845 00:40:47,370 --> 00:40:51,540 >> Па јас за жал не може да се поправи ова со да се вратам на она што јас го направив тоа порано. 846 00:40:51,540 --> 00:40:53,370 Можете на прв би можеле да го направите тоа. 847 00:40:53,370 --> 00:40:56,370 Но, она што се не сега прави циклично? 848 00:40:56,370 --> 00:40:58,260 Ти си очигледно не е добивање на на int циклично. 849 00:40:58,260 --> 00:41:01,320 За да можеме да ја напушти GetInt (), и ние треба да ја напушти GetInt () во внатрешноста на 850 00:41:01,320 --> 00:41:04,420 јамка, бидејќи тоа е она што ние сакаме да отегчавам на корисникот за повторно и повторно. 851 00:41:04,420 --> 00:41:08,660 Но тоа не се доволни за да одат до линија, да речеме, шест. 852 00:41:08,660 --> 00:41:10,150 Int n, точка-запирка. 853 00:41:10,150 --> 00:41:12,990 Не го даде вредност бидејќи допрва не треба да се само уште. 854 00:41:12,990 --> 00:41:16,220 >> Но сега тука долу, најава - ова ќе биде многу лесно грешка. 855 00:41:16,220 --> 00:41:19,440 Не сакам да сенка моите претходни декларацијата на n. 856 00:41:19,440 --> 00:41:22,830 Сакам да го користат n дека всушност постои. 857 00:41:22,830 --> 00:41:25,780 И така сега во линија 10, Јас му ја додели n вредност. 858 00:41:25,780 --> 00:41:28,580 Но, во линија шест, изјавувам n. 859 00:41:28,580 --> 00:41:32,940 И така можам или не можам користат во линија 12 сега? 860 00:41:32,940 --> 00:41:37,120 Можам бидејќи меѓу кои кадрава загради е n прогласена сега? 861 00:41:37,120 --> 00:41:38,770 Од една до тука on-line пет. 862 00:41:38,770 --> 00:41:40,330 На еден тука on-line 14. 863 00:41:40,330 --> 00:41:49,770 Значи, ако јас сега одзумирате, освен оваа датотека, одете назад во и да ја стартувате направи позитивен, 864 00:41:49,770 --> 00:41:50,820 Составувач тоа време. 865 00:41:50,820 --> 00:41:51,940 Па тоа е веќе напредок. 866 00:41:51,940 --> 00:41:53,640 Коса црта. . / Позитивен, Enter. 867 00:41:53,640 --> 00:41:56,060 >> Барам ви даде мене позитивен цел број. 868 00:41:56,060 --> 00:41:57,750 Негативни 1. 869 00:41:57,750 --> 00:41:59,020 Негативни 2. 870 00:41:59,020 --> 00:42:00,680 Негативните 3. 871 00:42:00,680 --> 00:42:01,760 Нула. 872 00:42:01,760 --> 00:42:03,000 Еден. 873 00:42:03,000 --> 00:42:05,130 И благодарност за еден е она што е сега печатени. 874 00:42:05,130 --> 00:42:07,400 >> Дозволете ми да се обиде нешто друго, од љубопитност. 875 00:42:07,400 --> 00:42:09,600 Јас сум да им се кажува да го внесете цел број. 876 00:42:09,600 --> 00:42:12,870 Но, што ако јас наместо да напишеш во јагне? 877 00:42:12,870 --> 00:42:14,460 Значи сега ќе видите еден поинаков брза - 878 00:42:14,460 --> 00:42:15,350 обидете се повторно. 879 00:42:15,350 --> 00:42:17,670 Но, никаде во мојот код никако не можев да пишувам обидете се повторно. 880 00:42:17,670 --> 00:42:22,320 Значи, каде што, веројатно, е ова се обидете повторно брза доаѓаат од, дали би рекле? 881 00:42:22,320 --> 00:42:23,540 Да, од GetInt () сама по себе. 882 00:42:23,540 --> 00:42:26,650 Значи една од работите персонал CS50 е не за вас, барем во овие првите неколку 883 00:42:26,650 --> 00:42:30,400 недели, се имаме напишано некои износ на грешка проверка за да се осигура дека ако 884 00:42:30,400 --> 00:42:34,260 ти се јавам GetInt (), можете барем ќе се вратам на int од корисникот. 885 00:42:34,260 --> 00:42:35,460 Нема да добиете низа. 886 00:42:35,460 --> 00:42:36,440 Вие нема да добие знак. 887 00:42:36,440 --> 00:42:39,660 Нема да добиете нешто друг друго. 888 00:42:39,660 --> 00:42:40,510 Ќе добиете Инт. 889 00:42:40,510 --> 00:42:41,890 >> Сега, тоа не може да биде позитивен. 890 00:42:41,890 --> 00:42:42,770 Тоа не може да биде негативен. 891 00:42:42,770 --> 00:42:44,550 Ние не правиме никакви гаранции околу тоа. 892 00:42:44,550 --> 00:42:48,960 Но, ние ќе отегчавам на корисникот да се обидете повторно, обидете повторно, обидете се повторно додека тој или таа, всушност, 893 00:42:48,960 --> 00:42:49,810 соработува. 894 00:42:49,810 --> 00:42:53,085 Слично на тоа, ако го направам 1,23, тоа не е int. 895 00:42:53,085 --> 00:42:58,400 Но, ако јас го напишеш во, да речеме, 50, кој ми дава вредност што сакав. 896 00:42:58,400 --> 00:42:59,050 >> Сите во право. 897 00:42:59,050 --> 00:43:01,380 Па не е лошо. 898 00:43:01,380 --> 00:43:04,780 Било какви прашања за тоа што ние сме само се направи? 899 00:43:04,780 --> 00:43:07,930 Клучот готова брза да се биде, да не бидат јасни, толку јамка, која што сум го видел 900 00:43:07,930 --> 00:43:10,880 пред иако имаме навистина не користи тоа, но прашањето на обемот, каде 901 00:43:10,880 --> 00:43:17,045 променливи може да биде само може да се користи само во некои одреден опсег. 902 00:43:17,045 --> 00:43:19,830 >> Сите во право, дозволете ми да се обрати на предлог сте го направиле порано, дека на 903 00:43:19,830 --> 00:43:20,860 глобалната променлива. 904 00:43:20,860 --> 00:43:24,880 Како настрана, излегува дека некој друг Решението за овој проблем, но 905 00:43:24,880 --> 00:43:28,880 обично погрешен решение или лошо дизајниран решение, е да се 906 00:43:28,880 --> 00:43:31,670 декларираат вашата променлива како што е нарекува глобална променлива. 907 00:43:31,670 --> 00:43:34,610 Сега јас сум вид на кршење на мојата дефиниција на опсегот, бидејќи постојат 908 00:43:34,610 --> 00:43:37,680 без големите загради во самиот врв и на самото дно на датотеката. 909 00:43:37,680 --> 00:43:40,190 Но импликација на кои е дека сега во согласност четири, 910 00:43:40,190 --> 00:43:41,710 n е глобална променлива. 911 00:43:41,710 --> 00:43:44,460 И како што името значи, тоа е само достапни насекаде. 912 00:43:44,460 --> 00:43:45,790 >> Нула всушност има овие. 913 00:43:45,790 --> 00:43:48,650 Ако сте користеле променлива, може да се сети ти мораше да изберете, ако тоа е за 914 00:43:48,650 --> 00:43:50,780 овој спрајт или за сите sprites. 915 00:43:50,780 --> 00:43:54,270 Па, сите sprites е само појасна начин да се каже глобалното. 916 00:43:54,270 --> 00:43:55,520 Да? 917 00:43:55,520 --> 00:44:09,690 918 00:44:09,690 --> 00:44:10,990 Ах, навистина добро прашање. 919 00:44:10,990 --> 00:44:14,310 >> Па се потсетиме дека во првиот верзија на мојот код, кога јас погрешно 920 00:44:14,310 --> 00:44:17,700 прогласена и што е дефинирано n во линија девет - 921 00:44:17,700 --> 00:44:19,980 Јас го прогласи како променлива и јас ја даде вредност со 922 00:44:19,980 --> 00:44:21,160 операторот за доделување на - 923 00:44:21,160 --> 00:44:22,520 ова ми даде две грешки. 924 00:44:22,520 --> 00:44:26,560 Еден, фактот дека n не беше искористена, и две, дека во линија 11 925 00:44:26,560 --> 00:44:27,770 тоа едноставно не беше прогласена. 926 00:44:27,770 --> 00:44:31,120 Па првиот јас не адреса во тоа време. 927 00:44:31,120 --> 00:44:35,130 Тоа не е строго грешка да се прогласи променлива, но не го користам. 928 00:44:35,130 --> 00:44:38,540 Но, една од работите што го направив во на CS50 апаратот, намерно, 929 00:44:38,540 --> 00:44:43,340 педагогичен, е ние сме извит до очекувањата на компајлерот да се направи 930 00:44:43,340 --> 00:44:46,970 сигурни дека сте вршење на работите не е само правилно, но навистина правилно. 931 00:44:46,970 --> 00:44:51,520 >> Бидејќи ако сте за прогласување на променлива како n и никогаш не го користите, или да го употребувате 932 00:44:51,520 --> 00:44:53,700 правилно, тогаш што е тоа го правам таму? 933 00:44:53,700 --> 00:44:55,650 Тоа навистина служи нема цел. 934 00:44:55,650 --> 00:44:58,980 И тоа е многу лесно со текот на времето, ако не го конфигурирате вашиот сопствен компјутер во 935 00:44:58,980 --> 00:45:01,960 на овој начин, само да имаат код кој има малку остатоци тука, остатоците таму. 936 00:45:01,960 --> 00:45:04,390 А потоа месеци подоцна ќе се погледне назад и сте како, зошто е оваа линија на 937 00:45:04,390 --> 00:45:05,060 кодот таму? 938 00:45:05,060 --> 00:45:07,940 И ако нема добра причина, тоа не имаат корист вие или вашите колеги 939 00:45:07,940 --> 00:45:10,650 по патот да мора да сопнуваат врз неа тогаш. 940 00:45:10,650 --> 00:45:12,540 >> Како настрана, каде што е кои доаѓаат од? 941 00:45:12,540 --> 00:45:16,410 Па, да се потсетиме дека секој пат кога ние ги собере Програмата, сите на овој материјал е 942 00:45:16,410 --> 00:45:17,380 се испечатени. 943 00:45:17,380 --> 00:45:18,350 Па ние ќе се вратам на тоа. 944 00:45:18,350 --> 00:45:22,230 Но, повторно, осигурајте е алатка која автоматизира процесот на составување на 945 00:45:22,230 --> 00:45:24,830 водење на вистински компајлерот наречен ѕвекот. 946 00:45:24,830 --> 00:45:27,650 Оваа работа, ние на крајот ќе се види, има да го стори со дебагирање со посебен 947 00:45:27,650 --> 00:45:29,060 програма наречена дебагерот. 948 00:45:29,060 --> 00:45:32,150 Ова има врска со оптимизирање на код - повеќе за тоа во иднина. 949 00:45:32,150 --> 00:45:33,620 Std = C99 - 950 00:45:33,620 --> 00:45:37,870 ова само значи користење на 1999 верзија на В Ц е се околу дури и подолго од 951 00:45:37,870 --> 00:45:40,830 тоа, но тие го направија некои убави промени 10 плус години. 952 00:45:40,830 --> 00:45:42,690 >> И тука е се релевантни. 953 00:45:42,690 --> 00:45:45,880 Ние сме велејќи направи нешто што претходно би биле предупредување 954 00:45:45,880 --> 00:45:48,560 грешка спречување на студентот од составувањето. 955 00:45:48,560 --> 00:45:51,400 И ѕидни средства го стори тоа за бројни нешта не 956 00:45:51,400 --> 00:45:53,060 само во врска со променливи. 957 00:45:53,060 --> 00:45:54,700 И тогаш дозволете ми да дојдете до крајот на оваа линија. 958 00:45:54,700 --> 00:45:56,430 И ова, исто така, ние ќе на крајот се врати. 959 00:45:56,430 --> 00:45:59,040 Ова е очигледно име на на датотеката јас сум составувањето. 960 00:45:59,040 --> 00:46:02,160 Ова потсетува на името на датотеката Јас сум Ставање како име 961 00:46:02,160 --> 00:46:04,070 на мојот Runnable програма. 962 00:46:04,070 --> 00:46:08,970 Ова-lcs50 само значи користење на CS50 библиотека, како и сите оние кои и нули, кои 963 00:46:08,970 --> 00:46:12,390 на персоналот напиша и собрани порано оваа година, да се интегрира 964 00:46:12,390 --> 00:46:13,490 нив во мојата програма. 965 00:46:13,490 --> 00:46:16,130 >> И некој знае што-филмот е? 966 00:46:16,130 --> 00:46:18,150 Тоа е математика библиотека, која е само таму дури и ако сте 967 00:46:18,150 --> 00:46:19,320 не прават какви било математика. 968 00:46:19,320 --> 00:46:22,620 Тоа е само автоматски се обезбедуваат за нас од страна направи. 969 00:46:22,620 --> 00:46:26,540 >> Па, дозволете ми направи еден друг пример тука од отворањето на новата датотека. 970 00:46:26,540 --> 00:46:30,560 И нека ме спаси оваа како string.c. 971 00:46:30,560 --> 00:46:37,980 Излегува дека како што се зборува податоци типови денес, има дури и повеќе 972 00:46:37,980 --> 00:46:40,630 случува под хауба од што сум го видел досега. 973 00:46:40,630 --> 00:46:42,290 Па дозволете ми да брзо го направите брзо програма. 974 00:46:42,290 --> 00:46:44,510 Вклучуваат stdio.h. 975 00:46:44,510 --> 00:46:45,730 И јас ќе спаси. 976 00:46:45,730 --> 00:46:48,110 И знаете, дозволете ми да не се направи истата грешка повторно и повторно. 977 00:46:48,110 --> 00:46:50,540 Вклучуваат cs50.h. 978 00:46:50,540 --> 00:46:54,870 И дозволете ми да оди напред сега и направи int главната (празно). 979 00:46:54,870 --> 00:46:58,790 >> И сега јас едноставно сакате да се направи програма која го прави ова - изјави низа 980 00:46:58,790 --> 00:47:03,610 нарекува S и да добијат низа од корисникот. 981 00:47:03,610 --> 00:47:05,820 И дозволете ми да се направи малку инструкции тука - 982 00:47:05,820 --> 00:47:09,960 Те молам дај ми низа - па корисникот не знае што да прави. 983 00:47:09,960 --> 00:47:13,190 А потоа тука долу под оваа, Сакам да го направите следново - 984 00:47:13,190 --> 00:47:16,060 за int i добива нула. 985 00:47:16,060 --> 00:47:18,580 Повторно, компјутерски научници обично почне пребројување на нула, но ние би можеле да 986 00:47:18,580 --> 00:47:20,340 направи таа една, ако ние навистина сакаше. 987 00:47:20,340 --> 00:47:27,240 Сега јас ќе одам да направите i е помалку од стринг должина на С. 988 00:47:27,240 --> 00:47:28,430 Па strlen - 989 00:47:28,430 --> 00:47:29,510 С-Т-Р-Л-Е-Н - 990 00:47:29,510 --> 00:47:31,650 повторно, тоа е концизен, бидејќи тоа е полесно да напишеш, иако тоа е 991 00:47:31,650 --> 00:47:32,590 малку криптичната. 992 00:47:32,590 --> 00:47:35,290 >> Тоа е функција што не сум користел пред, но буквално го прави тоа - 993 00:47:35,290 --> 00:47:37,810 се врати за мене е број што должината на стрингот 994 00:47:37,810 --> 00:47:38,690 дека корисникот ја внеле. 995 00:47:38,690 --> 00:47:41,740 Ако тие ја внеле во здраво, тоа ќе се врати пет затоа што има пет 996 00:47:41,740 --> 00:47:42,890 букви во здраво. 997 00:47:42,890 --> 00:47:45,390 Потоа, на секој повторување на овој циклус, јас плус плус. 998 00:47:45,390 --> 00:47:49,170 Значи, повторно, стандарден изградба дури и ако вие не сте сосема премногу удобно или 999 00:47:49,170 --> 00:47:50,420 запознаени со тоа уште. 1000 00:47:50,420 --> 00:47:53,220 >> Но сега на секој повторување на овој циклус, забележи она што јас ќе одам да направите. 1001 00:47:53,220 --> 00:47:56,690 Сакам да одам напред и печати надвор еден лик - 1002 00:47:56,690 --> 00:47:59,940 па% c обратна коса црта n на нова линија. 1003 00:47:59,940 --> 00:48:00,990 И тогаш, знаеш што сакам да направам? 1004 00:48:00,990 --> 00:48:05,090 Без оглед на зборот е дека корисникот типови во, како здраво, сакам да се печати 1005 00:48:05,090 --> 00:48:09,530 H-Е-Л-Л-О, по еден знак на линија. 1006 00:48:09,530 --> 00:48:13,080 Со други зборови, сакам да се стигне до индивидуални карактери во стринг, 1007 00:48:13,080 --> 00:48:16,770 при што до сега низа има само е низа од карактери. 1008 00:48:16,770 --> 00:48:21,690 >> И испоставува можам да направам с, заградата, Јас, блиску заграда, затворете 1009 00:48:21,690 --> 00:48:23,580 загради, точка-запирка. 1010 00:48:23,580 --> 00:48:25,640 И јас треба да се направи уште една работа. 1011 00:48:25,640 --> 00:48:30,570 Тоа е во датотека наречена string.h дека strlen е декларирана. 1012 00:48:30,570 --> 00:48:33,190 Значи, ако јас сакам да ја користат таа функција, Јас треба да кажам на компајлерот, 1013 00:48:33,190 --> 00:48:34,450 се очекува да го користам. 1014 00:48:34,450 --> 00:48:37,040 Сега дозволете ми да оди напред и да на програма наречена стринг. 1015 00:48:37,040 --> 00:48:39,150 Дот, коса црта, стринг. 1016 00:48:39,150 --> 00:48:40,130 >> Те молам дај ми стринг. 1017 00:48:40,130 --> 00:48:40,900 Јас ќе одам напред и ја внесете. 1018 00:48:40,900 --> 00:48:43,040 Здраво, во сите капи, Enter. 1019 00:48:43,040 --> 00:48:47,390 И сега забележиш јас сум печатени тоа еден карактер по друг. 1020 00:48:47,390 --> 00:48:51,450 Значи новиот детали тука е дека низа, на крајот на денот, може да биде 1021 00:48:51,450 --> 00:48:54,810 пристапи по пат на своите индивидуални ликови со воведување на плоштадот 1022 00:48:54,810 --> 00:48:55,840 заградата нотација. 1023 00:48:55,840 --> 00:48:59,090 А тоа е затоа низа под хаубата е навистина низа од 1024 00:48:59,090 --> 00:48:59,810 карактери. 1025 00:48:59,810 --> 00:49:02,010 Но она што е уредни за нив е во RAM меморија на вашиот компјутер - 1026 00:49:02,010 --> 00:49:05,300 Mac, PC, што и да е - тие се буквално да се врати назад за да ги поддржат - 1027 00:49:05,300 --> 00:49:06,225 H-Е-Л-Л-О - 1028 00:49:06,225 --> 00:49:09,920 на индивидуално, во непосредна близина бајти меморија. 1029 00:49:09,920 --> 00:49:13,210 >> Значи, ако сакате да добиете на осмиот како бајт, кој во овој циклус ќе биде 1030 00:49:13,210 --> 00:49:16,900 заградата нула, држач еден, заградата две, заградата три, држач четири - 1031 00:49:16,900 --> 00:49:18,890 тоа е нула индексирани до пет - 1032 00:49:18,890 --> 00:49:23,330 кои ќе испечатите H-Е-Л-Л-О по сопствена линија. 1033 00:49:23,330 --> 00:49:26,320 >> Сега, како закачка, дозволете ми да ви покажеме на видови на нештата на крајот ќе биде 1034 00:49:26,320 --> 00:49:31,950 можност да се разбере, барем со некои блиски барате. 1035 00:49:31,950 --> 00:49:35,610 За едно, она што се вклучени во денешниот примери, ако сакате, е, всушност, 1036 00:49:35,610 --> 00:49:38,300 една од првите jailbreaks за iPhone. 1037 00:49:38,300 --> 00:49:40,800 Jailbreaking значи напукнување на телефонот па всушност можете да ја користите за 1038 00:49:40,800 --> 00:49:43,380 различен превозник или инсталирање свој софтвер. 1039 00:49:43,380 --> 00:49:45,660 И ќе забележите ова изгледа сосема криптичната, најверојатно. 1040 00:49:45,660 --> 00:49:46,520 Но погледнете ова. 1041 00:49:46,520 --> 00:49:50,420 На iPhone е очигледно испукани со А за јамка, една ако состојба, на друго место 1042 00:49:50,420 --> 00:49:52,580 состојба, еден куп функции ние не сме виделе. 1043 00:49:52,580 --> 00:49:54,230 >> И повторно, ќе не на прв поглед веројатно 1044 00:49:54,230 --> 00:49:55,620 се разбере како тоа функционира. 1045 00:49:55,620 --> 00:49:58,940 Но сето она што ние вид на се здраво за готово во нашата модерна живот 1046 00:49:58,940 --> 00:50:02,040 всушност има тенденција да се намали дури и до одреден на овие основи, ние сме биле 1047 00:50:02,040 --> 00:50:02,820 гледа. 1048 00:50:02,820 --> 00:50:06,680 Дозволете ми да оди напред и да се отвори една друга програма, holloway.c. 1049 00:50:06,680 --> 00:50:08,970 Па ова, исто така, е нешто што не треба навистина да знаат. 1050 00:50:08,970 --> 00:50:12,440 Дури и никој од персоналот или можев веројатно дознаам ова од страна гледајќи во 1051 00:50:12,440 --> 00:50:15,450 тоа, бидејќи тоа е код нечија кој беше доставен до она што е 1052 00:50:15,450 --> 00:50:19,630 историски познат како криење C натпревар, каде што се напише програма 1053 00:50:19,630 --> 00:50:24,670 кој ги собира и работи, но е толку проклето криптичната никој не може да се разбере она што 1054 00:50:24,670 --> 00:50:27,530 тоа се случува да се направи додека тие всушност се работи. 1055 00:50:27,530 --> 00:50:29,940 >> Значи, навистина, ако се погледне на овој код, гледам еден гајтан. 1056 00:50:29,940 --> 00:50:30,870 Гледам главната. 1057 00:50:30,870 --> 00:50:33,800 Гледам овие квадратни загради имплицирајќи некој вид на низа. 1058 00:50:33,800 --> 00:50:35,970 Сака ли некој да се погоди она што оваа програма, всушност, 1059 00:50:35,970 --> 00:50:37,220 прави ако јас се кандидира Холовеј? 1060 00:50:37,220 --> 00:50:39,940 1061 00:50:39,940 --> 00:50:40,750 Да. 1062 00:50:40,750 --> 00:50:43,050 OK. 1063 00:50:43,050 --> 00:50:44,690 Добро направено. 1064 00:50:44,690 --> 00:50:48,090 Па само на вработените и не можам да дознаам од она што овие нешта го прават. 1065 00:50:48,090 --> 00:50:51,670 >> И сега на крај, дозволете ми да оди напред и се отвори една друга програма. 1066 00:50:51,670 --> 00:50:53,440 Тоа едно - 1067 00:50:53,440 --> 00:50:55,550 повторно, ќе сториме изворниот код достапни на интернет - ова е само 1068 00:50:55,550 --> 00:50:57,480 вид на прилично да се погледне. 1069 00:50:57,480 --> 00:50:59,750 Сите тие го направија е хит на простор бар доста. 1070 00:50:59,750 --> 00:51:01,320 Но, ова е вистинска код. 1071 00:51:01,320 --> 00:51:04,790 Значи, ако мислите дека тоа е убаво, ако ние всушност ја извршите оваа во конзолата, 1072 00:51:04,790 --> 00:51:08,970 на крајот ќе се види како ние може да се прават работите вака. 1073 00:51:08,970 --> 00:51:14,008 >> Па ние ќе те оставам за тоа белешка и ќе видите во средата. 1074 00:51:14,008 --> 00:51:18,440 >> [Музички] 1075 00:51:18,440 --> 00:51:23,380 >> ЗВУЧНИК 2: На следниот CS50, на TFS организира бунт. 1076 00:51:23,380 --> 00:51:24,112 >> ЗВУЧНИК 3: Ене го. 1077 00:51:24,112 --> 00:51:25,362 Тргни го! 1078 00:51:25,362 --> 00:51:29,912 1079 00:51:29,912 --> 00:51:32,074 >> [Музички]