1 00:00:00,000 --> 00:00:00,000 2 00:00:00,000 --> 00:00:00,000 [Музички] 3 00:00:00,000 --> 00:00:13,950 4 00:00:13,950 --> 00:00:16,240 >> Дејвид Џ MALAN: Добро, ова е CS50. 5 00:00:16,240 --> 00:00:18,010 И ова е една недела. 6 00:00:18,010 --> 00:00:22,050 Значи се потсетиме дека последен пат во нула недела, ние се фокусиравме на компјутерската размислување. 7 00:00:22,050 --> 00:00:25,440 И ние се трансформира од тоа да се Нула, графички програмирање 8 00:00:25,440 --> 00:00:27,360 јазик од нашите пријатели на Media Lab на МИТ. 9 00:00:27,360 --> 00:00:31,730 >> И со нула, не се разгледуваат идеи како функции, како и условите, 10 00:00:31,730 --> 00:00:35,210 и петелки, и променливи, па дури и настани и теми, и многу повеќе. 11 00:00:35,210 --> 00:00:37,880 И денес, ние се случува да се продолжите со користење на тие идеи, 12 00:00:37,880 --> 00:00:40,630 и навистина земајќи ги за готово, но ги преведе 13 00:00:40,630 --> 00:00:44,220 на друг јазик познат како C. Сега, C е потрадиционален јазик. 14 00:00:44,220 --> 00:00:46,020 Тоа е на пониско ниво јазик, ако сакате. 15 00:00:46,020 --> 00:00:47,300 >> Тоа е чисто текстуални. 16 00:00:47,300 --> 00:00:49,910 И така на прв поглед, тоа е сите ќе се погледне, а криптичната 17 00:00:49,910 --> 00:00:51,430 ако никогаш не сум програмиран порано. 18 00:00:51,430 --> 00:00:53,530 Ние се случува да треба полу-запирки, и загради, 19 00:00:53,530 --> 00:00:55,150 и големи загради, и многу повеќе. 20 00:00:55,150 --> 00:00:57,240 Но сфати дека дури и иако синтаксата е 21 00:00:57,240 --> 00:01:00,600 за да се погледне малку непознат на повеќето од вас, да се види минатото тоа. 22 00:01:00,600 --> 00:01:03,220 И да се обиде да го видиш идеи кои се, всушност, познати, 23 00:01:03,220 --> 00:01:06,750 бидејќи тука во една недела што ќе започне да се направи е да се споредуваат, 24 00:01:06,750 --> 00:01:08,980 на почетокот, нула наспроти В. 25 00:01:08,980 --> 00:01:12,350 >> Така, на пример, да се потсетиме дека кога ќе се го спроведе првиот од нашите програми 26 00:01:12,350 --> 00:01:16,220 Последниот пат, имавме блок кој изгледаше малку нешто како this-- кога 27 00:01:16,220 --> 00:01:19,990 зелено знаме кликнато, а потоа моравме едно или повеќе парчиња под него загатка, 28 00:01:19,990 --> 00:01:22,150 во овој случај, да се каже, Здраво светот. 29 00:01:22,150 --> 00:01:24,870 Значи, навистина, во нула, кога ќе кликнете на тоа зелено знаме 30 00:01:24,870 --> 00:01:27,390 да се води програмата, што значи да се каже, тие се 31 00:01:27,390 --> 00:01:29,520 блокови кои се извршени или за да ја стартувате. 32 00:01:29,520 --> 00:01:32,230 И, посебно, на гребење рече: Здраво, свет. 33 00:01:32,230 --> 00:01:35,377 >> Сега, јас би можеле да имаат одреден со други зборови тука. 34 00:01:35,377 --> 00:01:37,960 Но, ќе видиме дека, навистина, многу на овие blocks-- и навистина, 35 00:01:37,960 --> 00:01:41,880 во C може да биде многу functions-- parametrized или кориснички 36 00:01:41,880 --> 00:01:43,150 да направите различни нешта. 37 00:01:43,150 --> 00:01:45,520 Всушност, во C ако ние сакате да го конвертирате, сега, 38 00:01:45,520 --> 00:01:47,567 оваа нула програма на овој друг јазик, 39 00:01:47,567 --> 00:01:49,650 ние ќе треба да се напише малку нешто како ова. 40 00:01:49,650 --> 00:01:52,540 >> Се разбира, има некои непознати синтакса таму најверојатно, цел број, 41 00:01:52,540 --> 00:01:54,380 и загради, и неважечки. 42 00:01:54,380 --> 00:01:57,740 Printf-- Но, и покрај тоа што би дека тоа само ќе биде за печатење. 43 00:01:57,740 --> 00:02:00,120 Но печатење значи печатење форматирана, како што наскоро ќе видиме. 44 00:02:00,120 --> 00:02:02,140 Ова буквално ќе печати на екранот што 45 00:02:02,140 --> 00:02:05,990 е во внатрешноста на овие загради, кои се разбира, во овој случај, Здраво светот. 46 00:02:05,990 --> 00:02:09,290 >> Но, ќе забележите дека некои други синтакса, некои двојни наводници, 47 00:02:09,290 --> 00:02:11,890 дека заграда на крајот, точка-запирка и слично. 48 00:02:11,890 --> 00:02:15,027 Па таму е малку над глава, така да се каже, и когнитивно 49 00:02:15,027 --> 00:02:17,860 и синтаксички, дека ние ќе мора да се сеќавам пред долго. 50 00:02:17,860 --> 00:02:20,720 Но сфати дека со практиката, ова ќе почне да скокаат на тебе. 51 00:02:20,720 --> 00:02:24,920 >> Всушност, да се фокусира на тоа еден функција specifically-- во овој случај, 52 00:02:24,920 --> 00:02:26,290 велат Здраво светот. 53 00:02:26,290 --> 00:02:27,560 Така велат дека е во функција. 54 00:02:27,560 --> 00:02:31,320 Здраво светот е параметар, или аргумент, неговата прилагодување. 55 00:02:31,320 --> 00:02:34,320 >> И еквивалентност во C е само ќе биде ова една линија тука, 56 00:02:34,320 --> 00:02:38,710 каде printf е еквивалентно на, да речеме, двојното цитиран стринг, здраво 57 00:02:38,710 --> 00:02:41,470 светот е еквивалентно, се разбира, на она што е во белата кутија таму. 58 00:02:41,470 --> 00:02:45,680 И обратна коса црта n, иако малку чудно и отсутен од нула, 59 00:02:45,680 --> 00:02:49,380 едноставно се случува да имаат ефект ние ќе види во компјутер, како и мојот Mac или PC, 60 00:02:49,380 --> 00:02:51,660 на само поместување на курсорот на следната линија. 61 00:02:51,660 --> 00:02:53,970 Тоа е како притискање Enter на вашата тастатура. 62 00:02:53,970 --> 00:02:55,580 >> Па ќе видиме што повторно пред долго. 63 00:02:55,580 --> 00:02:58,640 Но, прво, ајде да ги разгледаме во овој друг пример во случај на јамки. 64 00:02:58,640 --> 00:03:02,830 Имавме оваа засекогаш јамка за последен пат, кој беше серија на мозаик парчиња 65 00:03:02,830 --> 00:03:05,490 дека направиле нешто буквално forever-- во овој случај, 66 00:03:05,490 --> 00:03:08,360 каже, Здраво, Здраво светот, Здраво, Здраво светот. 67 00:03:08,360 --> 00:03:10,350 Така, тоа е бесконечна јамка страна на дизајнот. 68 00:03:10,350 --> 00:03:14,580 >> Во C, ако сакаме да се спроведе оваа истата идеја, ние едноставно може да го направите тоа. 69 00:03:14,580 --> 00:03:19,570 Иако е точно, printf здраво world-- сега додека, исто семантички, вид на 70 00:03:19,570 --> 00:03:23,090 conjures до идејата за правење нешто повторно, и повторно, и повторно, 71 00:03:23,090 --> 00:03:23,980 и за колку време? 72 00:03:23,980 --> 00:03:27,990 Па, true-- потсетиме дека вистина е само на или еден. 73 00:03:27,990 --> 00:03:30,660 >> И точно е, се разбира, секогаш точно. 74 00:03:30,660 --> 00:03:33,060 Така, тоа е вид на бесмислени изјава само да се каже точно. 75 00:03:33,060 --> 00:03:36,890 Но, навистина, ова е намерно, затоа што ако вистина е само секогаш точно, 76 00:03:36,890 --> 00:03:40,850 отколку додека вистинските само имплицира, ако малку индиректно, 77 00:03:40,850 --> 00:03:44,070 дека следниве линии на код помеѓу оние големите загради 78 00:03:44,070 --> 00:03:48,320 само треба да се изврши повторно, и повторно, и повторно, и никогаш не запре. 79 00:03:48,320 --> 00:03:50,230 >> Но, ако сакате вашиот јамка за да се спречи, како што 80 00:03:50,230 --> 00:03:54,500 направи последен пат со нешто како ова, го повтори по 50 пати, 81 00:03:54,500 --> 00:03:57,700 во C можеме да го стори истото со што е наречен за loop-- клучниот збор 82 00:03:57,700 --> 00:03:59,330 не се време, но за. 83 00:03:59,330 --> 00:04:03,290 И тогаш имаме некои нови синтакса тука, со int i е еднаква на 0, јас помалку од 50, 84 00:04:03,290 --> 00:04:03,880 i ++. 85 00:04:03,880 --> 00:04:05,430 И ние ќе се вратам на тоа. 86 00:04:05,430 --> 00:04:09,660 Но, ова е само како би преведе на сет на гребење блокови 87 00:04:09,660 --> 00:04:13,079 на сет од С линии на код. 88 00:04:13,079 --> 00:04:14,450 >> Во меѓувреме, сметаат променливи. 89 00:04:14,450 --> 00:04:16,540 И, всушност, само Видов еден момент пред. 90 00:04:16,540 --> 00:04:21,220 И во случај на нула, ако се сакаше да декларирате променлива наречен i 91 00:04:21,220 --> 00:04:24,590 за што се број, само еден број, и ние сакаме да го поставите на некои вредност, 92 00:04:24,590 --> 00:04:28,410 ние ќе го користи овој портокал блокира here-- постави i 0. 93 00:04:28,410 --> 00:04:30,800 >> И ќе видиме денес и надвор од неа, исто како и минатата недела, 94 00:04:30,800 --> 00:04:33,850 програмери се речиси секогаш почнат да бројат од нула, навистина 95 00:04:33,850 --> 00:04:34,950 од Конвенцијата. 96 00:04:34,950 --> 00:04:37,250 Но, исто така, бидејќи се потсетиме од нашата дискусија на бинарни, 97 00:04:37,250 --> 00:04:39,990 најмал број може да се претставуваат со било кој број на битови 98 00:04:39,990 --> 00:04:41,640 е само ќе биде 0 себе. 99 00:04:41,640 --> 00:04:45,190 И така ќе генерално започне иницијализацијата дури и нашите променливи на 0. 100 00:04:45,190 --> 00:04:47,710 >> И во C за да го стори истото, ние се случува да се каже int 101 00:04:47,710 --> 00:04:50,110 за цел број, јас само од страна на конвенцијата. 102 00:04:50,110 --> 00:04:53,390 Јас би можеле да се јави на оваа променлива што сакам, исто како и во Scratch. 103 00:04:53,390 --> 00:04:57,770 А потоа е еднакво на 0 само дознаки вредноста 0 од десно 104 00:04:57,770 --> 00:05:01,319 и го става во променлива, или сад за чување таму, на левата страна. 105 00:05:01,319 --> 00:05:04,360 И точка-запирка како што ќе see-- и видовме неколку од овие already-- 106 00:05:04,360 --> 00:05:06,530 само значи крај на мислата. 107 00:05:06,530 --> 00:05:09,430 Продолжи да се направи нешто друго на редовите што следуваат. 108 00:05:09,430 --> 00:05:11,330 >> Сега, она што за Булова изрази? 109 00:05:11,330 --> 00:05:14,320 Потсетиме дека во нула, тие беа изрази 110 00:05:14,320 --> 00:05:16,740 кои се или вистинити или false-- прашања, 111 00:05:16,740 --> 00:05:18,910 навистина, кои се или вистинити или лажни. 112 00:05:18,910 --> 00:05:21,960 Така што во случај на нула, би можеле да поставам едноставно прашање како ова, 113 00:05:21,960 --> 00:05:24,586 i е помала од 50? 114 00:05:24,586 --> 00:05:25,710 Па јас, пак, е цел број. 115 00:05:25,710 --> 00:05:27,210 Можеби и ние го користите во програмата на гребење 116 00:05:27,210 --> 00:05:29,310 да ги пратите на резултат или нешто слично. 117 00:05:29,310 --> 00:05:33,810 Значи оваа синтакса тука во Скреч само значи, е јас помалку од 50? 118 00:05:33,810 --> 00:05:37,330 Па, за среќа, нешто не е во едноставно во C. И да се преведе, 119 00:05:37,330 --> 00:05:41,780 ова едноставно ќе кажам дека помалку од 50, со користење на познати клуч 120 00:05:41,780 --> 00:05:42,850 на тастатурата. 121 00:05:42,850 --> 00:05:45,141 >> Во меѓувреме, ако си сакал да да се каже нешто повеќе општи, 122 00:05:45,141 --> 00:05:49,890 како, добро, е помалку од x y каде што секој на x и y се променливи се? 123 00:05:49,890 --> 00:05:52,280 Ние можеме да го прават истото во C, се додека ние сме 124 00:05:52,280 --> 00:05:53,942 ги создаде овие променливи веќе. 125 00:05:53,942 --> 00:05:55,650 И ние ќе видиме како да се го направи тоа пред долго. 126 00:05:55,650 --> 00:05:58,590 Ние едноставно би рекол x помалку од y. 127 00:05:58,590 --> 00:06:00,530 >> Значи сте почнуваат да се види некои сличности. 128 00:06:00,530 --> 00:06:03,490 И оние луѓе кои се направени Нула беа, секако, 129 00:06:03,490 --> 00:06:05,250 инспириран од некои од овие основни идеи. 130 00:06:05,250 --> 00:06:10,350 И ќе видите дека овој вид на синтаксата во многу languages-- 131 00:06:10,350 --> 00:06:12,160 не само почеток, не само Ц, но Пајтон, 132 00:06:12,160 --> 00:06:14,790 и JavaScript, и други јазици уште. 133 00:06:14,790 --> 00:06:18,270 >> Ајде да се разгледа уште еден конструкт од C, поимот на состојба, 134 00:06:18,270 --> 00:06:20,370 прави нешто условно. 135 00:06:20,370 --> 00:06:22,720 Ако нешто е точно, го направите тоа. 136 00:06:22,720 --> 00:06:24,457 Ако нешто е точно, го направи тоа. 137 00:06:24,457 --> 00:06:27,040 Тоа е еден вид на програмирање еквивалент на вилушка во патот. 138 00:06:27,040 --> 00:06:29,730 Можеби тоа е двонасочна вилушка, три начин вилушка, или повеќе. 139 00:06:29,730 --> 00:06:32,800 И во нула, ние би можеле да имаат види нешто како ова. 140 00:06:32,800 --> 00:06:34,010 >> Така што ова е една голема. 141 00:06:34,010 --> 00:06:36,750 Но, сметаат дека релативната Едноставноста на логика. 142 00:06:36,750 --> 00:06:44,010 Ако X е помалку од y, па кажете x е помала од y, друго, ако X е поголем од y, 143 00:06:44,010 --> 00:06:46,230 тогаш велат дека x е поголема од y. 144 00:06:46,230 --> 00:06:48,300 И тогаш, логично, ако ќе се сетам на гребење 145 00:06:48,300 --> 00:06:52,610 или само вашите сопствени човечки интуиција, и, ако X не е поголема од y и x 146 00:06:52,610 --> 00:06:57,000 не е помалку од y, тогаш се разбира, X ќе биде еднаква на y. 147 00:06:57,000 --> 00:06:59,690 Значи во овој случај, од страна на гнездење оние гребење блокови, 148 00:06:59,690 --> 00:07:02,580 можеме да се постигне три начин вилушка во патот? 149 00:07:02,580 --> 00:07:04,980 >> Во меѓувреме, ако сакаме да го направи тоа во C, веројатно 150 00:07:04,980 --> 00:07:08,420 изгледа малку simpler-- најмалку откако ќе се запознаат со синтакса. 151 00:07:08,420 --> 00:07:12,050 Ако X е помалку од y, printf x е помалку од y. 152 00:07:12,050 --> 00:07:16,140 Друго, ако X е поголем од y, printf x е поголема од y. 153 00:07:16,140 --> 00:07:21,210 Друго printf x е еднаква на y-- и, повторно, со оние обратна коса црта завршува само 154 00:07:21,210 --> 00:07:24,160 за оние кои се нови линии, така што ако всушност трчаше овој вид на програма 155 00:07:24,160 --> 00:07:25,940 тоа само ќе се движат курсорот на крајот 156 00:07:25,940 --> 00:07:28,100 до следната линија на екранот. 157 00:07:28,100 --> 00:07:31,270 >> Сега, пак гребење имаше други повеќе софистицирани карактеристики, само 158 00:07:31,270 --> 00:07:34,320 од кои ние ќе треба да првично се движат во текот на светот на В. 159 00:07:34,320 --> 00:07:37,010 А еден од нив беше наречен листа во Scratch. 160 00:07:37,010 --> 00:07:39,100 И ова е посебен тип на променлива која 161 00:07:39,100 --> 00:07:42,840 е дозволено да се сместат повеќе работи во него назад, да се врати, да се врати, да се врати. 162 00:07:42,840 --> 00:07:45,540 >> Во C, тоа не мора листи, сама по себе, но нешто 163 00:07:45,540 --> 00:07:48,090 кои се поопшто наречен низи, иако ние ќе 164 00:07:48,090 --> 00:07:50,590 се врати подоцна овој семестар да се гледа во нешто 165 00:07:50,590 --> 00:07:52,780 наречен листа, или навистина листа поврзани. 166 00:07:52,780 --> 00:07:55,510 Но, за сега, најблиску еквивалент во C за нас 167 00:07:55,510 --> 00:07:57,345 ќе биде нешто наречен низа. 168 00:07:57,345 --> 00:07:59,740 И низа е едноставно специјален тип на променлива 169 00:07:59,740 --> 00:08:03,160 кој ви овозможува да се сместат податоци назад, да се врати, да се врати, да се врати. 170 00:08:03,160 --> 00:08:05,840 >> И, навистина, во нула, ако сакаме да пристапите 171 00:08:05,840 --> 00:08:09,030 на првиот елемент на низа или на list-- и јас одам да го наречеме, 172 00:08:09,030 --> 00:08:13,600 по конвенција, argv, аргументот вектор, но повеќе за тоа пред долго. 173 00:08:13,600 --> 00:08:17,090 Ако сакам да се стигне до првиот елемент на argv, во светот на гребење 174 00:08:17,090 --> 00:08:20,930 што навистина знаете обично почнете сметано од 1. 175 00:08:20,930 --> 00:08:22,850 >> И така би можел да добие точката 1 од argv. 176 00:08:22,850 --> 00:08:26,310 Тоа е само како спроведува МИТ поимот на листи. 177 00:08:26,310 --> 00:08:29,860 Но, во C, јас ќе одам да едноставно само да се каже, argv, 178 00:08:29,860 --> 00:08:32,758 што повторно е името на мојата list-- или да бидат јасни, низа. 179 00:08:32,758 --> 00:08:34,549 И ако сакам првиот елементи, јас ќе одам 180 00:08:34,549 --> 00:08:37,890 да го користите квадратни загради, кои ќе често може да не се користи во рамките на тастатурата. 181 00:08:37,890 --> 00:08:40,150 >> Но 0 само значи, ме првиот. 182 00:08:40,150 --> 00:08:42,160 Па понекогаш и како Со текот на времето, ние ќе 183 00:08:42,160 --> 00:08:44,570 да почнат да ги види овие дихотомии меѓу гребење и Ц, 184 00:08:44,570 --> 00:08:46,070 при гребење користи. 185 00:08:46,070 --> 00:08:47,670 Ние во C користат 0 овде. 186 00:08:47,670 --> 00:08:49,420 Но, вие брзо ќе се види откако ќе се разбере 187 00:08:49,420 --> 00:08:52,920 основите на секој јазик, кои овие работи почнуваат да се сè повеќе и повеќе 188 00:08:52,920 --> 00:08:56,860 запознаени преку пракса и пракса. 189 00:08:56,860 --> 00:08:59,700 >> Па ајде да всушност изгледаат сега на програмата. 190 00:08:59,700 --> 00:09:04,031 Тука ќе биде прв од нашите C изворниот код за целосна програми. 191 00:09:04,031 --> 00:09:06,280 И програмата ние ќе да им понуди на разгледување 192 00:09:06,280 --> 00:09:09,340 е оној што е еквивалентно за кои претходно гребење парче. 193 00:09:09,340 --> 00:09:13,210 >> Значи тука, имаме што е веројатно најпростиот програмата C 194 00:09:13,210 --> 00:09:15,410 можете да напишете дека всушност прави нешто. 195 00:09:15,410 --> 00:09:18,250 Сега, ние ќе се погледне минатото, за сега, се вклучуваат, 196 00:09:18,250 --> 00:09:21,190 стандард io.h, и овие агол загради, и int, и неважечки, 197 00:09:21,190 --> 00:09:22,840 и големи загради, и слично. 198 00:09:22,840 --> 00:09:25,390 >> И ајде да се фокусира на што, барем интуитивно, 199 00:09:25,390 --> 00:09:26,860 може да скокаат на тебе веќе. 200 00:09:26,860 --> 00:09:30,300 Всушност, главната, јас не мора да знаете што е ова, 201 00:09:30,300 --> 00:09:34,580 но слично како гребење беше дека кога зелено знаме кликнато загатка парче, 202 00:09:34,580 --> 00:09:39,070 така и C како програмски јазик имаат главниот дел од кодот кој 203 00:09:39,070 --> 00:09:43,380 добива извршена од стандардните. И, навистина, тоа е буквално случува да се нарече главниот. 204 00:09:43,380 --> 00:09:44,720 >> Значи главната е во функција. 205 00:09:44,720 --> 00:09:48,720 И тоа е посебна функција која постои во C дека кога ќе ја стартувате програмата, 206 00:09:48,720 --> 00:09:52,720 тоа е главната која добива се кандидира од страна на стандардните. Во светот на нула, 207 00:09:52,720 --> 00:09:56,970 тоа беше обично кога зелено знаме кликна кои добија работи од стандардните. 208 00:09:56,970 --> 00:10:01,130 >> Во меѓувреме, ние го видел ова пред, printf или печатените формат, тоа е 209 00:10:01,130 --> 00:10:05,620 ќе биде во функција која доаѓа со Ц, заедно со еден куп други, 210 00:10:05,620 --> 00:10:10,140 дека ќе од време и време Повторно, со цел да се направи токму 211 00:10:10,140 --> 00:10:12,450 како што сугерира името, печати нешто. 212 00:10:12,450 --> 00:10:13,500 Што сакаме да ги испечатите? 213 00:10:13,500 --> 00:10:15,770 Па, ние ќе се види дека со приложување на карактери 214 00:10:15,770 --> 00:10:18,680 како these-- свет здраво, обратна коса црта n во двојни наводници, 215 00:10:18,680 --> 00:10:23,040 може да се каже точно printf она што за печатење на екран. 216 00:10:23,040 --> 00:10:26,430 >> Но, со цел да се направи тоа, за жал, 217 00:10:26,430 --> 00:10:30,010 треба да се нешто што е веќе криптичната за нас луѓето, 218 00:10:30,010 --> 00:10:34,510 но барем тоа е малку readable-- остри вклучуваат, стандард io.h, цел број, 219 00:10:34,510 --> 00:10:39,340 Главните, поништена printf, сите на магичен баењата ние само видов на екранот. 220 00:10:39,340 --> 00:10:42,470 Но, ние всушност треба да се повеќе arcane уште. 221 00:10:42,470 --> 00:10:47,140 Ние прво треба да се преведе на код дека ние пишуваме во машински код. 222 00:10:47,140 --> 00:10:51,370 И се сети од минатата недела дека машини, барем оние што знаат тука, 223 00:10:51,370 --> 00:10:54,450 на крајот на денот само разбере нули и единици. 224 00:10:54,450 --> 00:10:58,100 >> И мојот Бог, ако моравме да пишувам овие нули и единици за да всушност програмата, 225 00:10:58,100 --> 00:11:01,260 тоа би многу, многу брзо се на забава надвор од ништо. 226 00:11:01,260 --> 00:11:05,150 Но, се покажа, на минатата недела, дека овие модели на нули и единици 227 00:11:05,150 --> 00:11:06,400 само имаат посебно значење. 228 00:11:06,400 --> 00:11:08,500 Во одредени контексти, би можеле да значат бројките. 229 00:11:08,500 --> 00:11:11,840 >> Во некои контексти, би можеле да значат букви, или бои, или било кој број 230 00:11:11,840 --> 00:11:14,710 на други апстракции има врз. 231 00:11:14,710 --> 00:11:18,450 Но, како што вашиот компјутер има процесорот, централната единица за обработка, 232 00:11:18,450 --> 00:11:20,390 или мозокот во внатрешноста на вашиот компјутер. 233 00:11:20,390 --> 00:11:22,240 Тоа е обично Интел внатре, затоа што тоа е 234 00:11:22,240 --> 00:11:24,900 една од најголемите компании што го прави процесори за компјутери. 235 00:11:24,900 --> 00:11:28,910 >> Па, Intel процесори и други едноставно се одлучиле однапред 236 00:11:28,910 --> 00:11:33,970 дека одредени модели на нули и единици оние што се подразбира специфични нешта. 237 00:11:33,970 --> 00:11:37,040 Одредени модели на нули и единици ќе значи, печати ја оваа на екранот, 238 00:11:37,040 --> 00:11:39,710 или да додадете овие два броја, или одземе овие два броја, 239 00:11:39,710 --> 00:11:43,310 или да се движат на ова парче на податоците од меморија на компјутерот ми е тука, 240 00:11:43,310 --> 00:11:47,870 или било кој број на други многу ниско ниво, но во крајна линија е корисно, операции. 241 00:11:47,870 --> 00:11:53,022 Но, за среќа, ние, луѓето не се случува да треба да знаете ова ниво на детали. 242 00:11:53,022 --> 00:11:56,230 Всушност, исто како и минатиот пат, каде што црпи повторно, и повторно, и повторно, 243 00:11:56,230 --> 00:11:58,930 зграда од многу ниско ниво примитивците како нули и единици 244 00:11:58,930 --> 00:12:01,160 на концепти повисоко ниво како броеви и букви, 245 00:12:01,160 --> 00:12:04,330 и бои, и повеќе, Значи ние можеме како програмери 246 00:12:04,330 --> 00:12:07,080 стои на рамениците на други кои доаѓаат пред нас 247 00:12:07,080 --> 00:12:11,260 и користење на софтвер кој друг луѓе го имаат напишано пред us-- 248 00:12:11,260 --> 00:12:14,340 имено програми наречени компајлери. 249 00:12:14,340 --> 00:12:17,770 >> С е јазик кој обично се составени, 250 00:12:17,770 --> 00:12:22,130 што значи да се конвертира од изворниот код на машински код. 251 00:12:22,130 --> 00:12:25,230 Особено, што значи тоа е дека ако имате вашиот извор 252 00:12:25,230 --> 00:12:29,530 код кој се пишува, како што наскоро ќе во само еден миг на екранот, 253 00:12:29,530 --> 00:12:33,140 и ако сакате да го конвертирате на крајот на машина code-- 254 00:12:33,140 --> 00:12:37,100 оние нули и оние кои само вашиот Mac или вашиот компјутер 255 00:12:37,100 --> 00:12:41,230 understands-- имаш прв се хранат дека изворниот код во што 256 00:12:41,230 --> 00:12:46,340 внесување на посебни програма наречена компајлер, 257 00:12:46,340 --> 00:12:48,974 на излез од кои ние ќе го видите е машина код. 258 00:12:48,974 --> 00:12:51,890 И, навистина, последен пат зборувавме за, навистина, на крајот на денот, 259 00:12:51,890 --> 00:12:52,610 решавање на проблем. 260 00:12:52,610 --> 00:12:53,360 Имаш влезови. 261 00:12:53,360 --> 00:12:54,318 И имаш излези. 262 00:12:54,318 --> 00:12:56,560 И имаш некој вид алгоритам во средината. 263 00:12:56,560 --> 00:12:59,830 >> Алгоритми сигурно може да биде имплементирани во софтвер, 264 00:12:59,830 --> 00:13:02,900 како што видовме со pseudocode минатата недела и како што ќе видиме со реалните код 265 00:13:02,900 --> 00:13:03,490 оваа недела. 266 00:13:03,490 --> 00:13:06,430 И така на компајлерот навистина само има множество на алгоритми во 267 00:13:06,430 --> 00:13:10,060 од него, кој знае како да се претворање на специјални клучни зборови, 268 00:13:10,060 --> 00:13:12,180 како главни и printf, и други кои ние едноставно 269 00:13:12,180 --> 00:13:17,620 видов во моделите на нули и единици оние кои Интел внатре и други процесори 270 00:13:17,620 --> 00:13:20,020 всушност го разбира. 271 00:13:20,020 --> 00:13:22,460 Па, како да го направите ова? 272 00:13:22,460 --> 00:13:24,470 Каде да се добие компајлер? 273 00:13:24,470 --> 00:13:26,400 >> Повеќето од нас тука имаат Mac или PC. 274 00:13:26,400 --> 00:13:29,152 И вие ќе бидете трчање Mac OS, или Windows или Linux, или Соларис, 275 00:13:29,152 --> 00:13:30,860 или било кој број на други оперативни системи. 276 00:13:30,860 --> 00:13:32,568 И, навистина, би можеле да излезе со излез на интернет 277 00:13:32,568 --> 00:13:35,710 и преземање на компајлерот за вашиот Mac или вашиот компјутер 278 00:13:35,710 --> 00:13:37,360 за вашиот особено оперативен систем. 279 00:13:37,360 --> 00:13:39,617 Но, ние сите ќе бидат на различни страни, така да се каже. 280 00:13:39,617 --> 00:13:41,450 Ние ќе треба малку различни конфигурации. 281 00:13:41,450 --> 00:13:43,210 И работите не ќе работат сите исти. 282 00:13:43,210 --> 00:13:45,280 И, навистина, овие денови многу од нас не ги користат 283 00:13:45,280 --> 00:13:47,516 софтвер кој работи само на нашите лаптопи. 284 00:13:47,516 --> 00:13:49,390 Наместо тоа, ние се користи нешто како интернет пребарувач, кој 285 00:13:49,390 --> 00:13:52,930 ни овозможува пристап до веб-базирани апликации во облак. 286 00:13:52,930 --> 00:13:55,630 А на крајот на семестарот, ние ќе го стори токму тоа. 287 00:13:55,630 --> 00:13:59,660 Ние ќе ја пишува апликации или софтвер со користење на code-- не C, 288 00:13:59,660 --> 00:14:02,860 но и други јазици како Пајтон и JavaScript-- кои работат во облакот. 289 00:14:02,860 --> 00:14:05,860 >> И да го направите тоа, ние самите во текот на семестарот 290 00:14:05,860 --> 00:14:11,890 всушност, ќе го користат облак-базирани животната средина, познат како CS50 ИРО. 291 00:14:11,890 --> 00:14:16,030 Ова е веб-базирани програмирање животната средина или интегриран развој 292 00:14:16,030 --> 00:14:20,610 животната средина, ИРО, кој е изграден на врвот на некои софтвер со отворен код се нарекува Облак 9. 293 00:14:20,610 --> 00:14:22,966 И направивме некои педагошки поедноставувања да го 294 00:14:22,966 --> 00:14:25,840 така што за да се скрие одредени функции во првите недели дека ние не треба, 295 00:14:25,840 --> 00:14:27,770 по што ќе може да ги открие и да се направи поголемиот дел 296 00:14:27,770 --> 00:14:29,400 нешто што сакате со животната средина. 297 00:14:29,400 --> 00:14:32,470 >> И тоа ни овозможува, исто така, да инсталираат одредени софтвер. 298 00:14:32,470 --> 00:14:35,330 Работи како т.н. CS50 библиотека, која наскоро ќе се види 299 00:14:35,330 --> 00:14:39,210 ни дава во C со некои дополнителна функционалност. 300 00:14:39,210 --> 00:14:44,392 Значи, ако се оди, во крајна линија, CS50.io, ќе биде побарано да се најавите, 301 00:14:44,392 --> 00:14:46,350 и штом еднаш ќе се направи и да се создаде сметка за бесплатно, 302 00:14:46,350 --> 00:14:52,150 ќе бидете во можност да пристапите до средина која изгледа доста се допаѓа ова. 303 00:14:52,150 --> 00:14:53,760 >> Сега, ова е во стандарден режим. 304 00:14:53,760 --> 00:14:55,650 Се што е убаво и светло на екранот. 305 00:14:55,650 --> 00:14:57,941 Многу од нас имаат навика работи на CS50 парче што е 306 00:14:57,941 --> 00:14:59,150 прилично доцна во ноќта. 307 00:14:59,150 --> 00:15:02,400 И така некои од вас може да претпочитаат да ја претвори во ноќен режим, така да се каже. 308 00:15:02,400 --> 00:15:05,550 >> Но, на крајот, она што си ќе го видите во CS50 IDE 309 00:15:05,550 --> 00:15:08,340 е три различни areas-- со површина од левата страна, каде што 310 00:15:08,340 --> 00:15:12,604 Вашите датотеки се случува да бидат во облак, површина на горниот десен агол 311 00:15:12,604 --> 00:15:14,270 каде што вашиот код се случува да се уредува. 312 00:15:14,270 --> 00:15:16,650 Вие ќе бидете во можност да се отвори индивидуални јазичиња за секоја програма 313 00:15:16,650 --> 00:15:19,670 дека ти пишувам овој семестар во на кои во горниот десен агол на екранот. 314 00:15:19,670 --> 00:15:23,070 И тогаш повеќето arcanely, а сепак моќно, 315 00:15:23,070 --> 00:15:26,610 ќе биде тоа во дното познат како терминален прозорец. 316 00:15:26,610 --> 00:15:29,450 >> Ова е една стара училиште Командната линија интерфејс, 317 00:15:29,450 --> 00:15:32,240 или CLI, која им овозможува на да се изврши команди 318 00:15:32,240 --> 00:15:35,260 на computer-- во овој случај, компјутер во cloud-- 319 00:15:35,260 --> 00:15:39,090 да ги правите нештата како компајлирате вашиот код од изворен код за машина код, 320 00:15:39,090 --> 00:15:43,600 да се кандидира на вашиот програми, или да ја стартувате вашиот веб сервер, или пристап до вашата база на податоци, 321 00:15:43,600 --> 00:15:47,454 и било кој број на други техники дека ќе почне да се користи пред долго. 322 00:15:47,454 --> 00:15:49,370 Но, за да одам таму, ние сме ќе всушност имаат 323 00:15:49,370 --> 00:15:51,240 да одат на интернет и започнете ја репродукцијата. 324 00:15:51,240 --> 00:15:54,399 И да го направат тоа, ајде прво започне tinkering со главниот, 325 00:15:54,399 --> 00:15:55,940 и да пишувам на главниот дел на програмата. 326 00:15:55,940 --> 00:15:59,170 И ајде да ја користат таа функција printf, кој се користи претходно, 327 00:15:59,170 --> 00:16:01,050 едноставно да се каже нешто. 328 00:16:01,050 --> 00:16:04,910 >> Па еве јас сум веќе во внатрешноста на CS50 ИРО. 329 00:16:04,910 --> 00:16:05,930 Сум најавени однапред. 330 00:16:05,930 --> 00:16:07,360 И јас целосно прикажан прозорецот. 331 00:16:07,360 --> 00:16:09,670 И така, во крајна линија, ќе исто така и во наредниот проблеми 332 00:16:09,670 --> 00:16:12,960 ќе го следат слични чекори кои ќе обезбеди документација. 333 00:16:12,960 --> 00:16:16,360 Значи, вие не треба да се грижите апсорпција на секој малку технички чекор 334 00:16:16,360 --> 00:16:17,730 што го правам тука и денес. 335 00:16:17,730 --> 00:16:19,222 >> Но ќе добиете на екранот се допаѓа ова. 336 00:16:19,222 --> 00:16:20,430 Јас се случи да биде во ноќта на владата. 337 00:16:20,430 --> 00:16:22,944 И можете да заличи сето од страна на оневозможување на ноќта на владата. 338 00:16:22,944 --> 00:16:24,860 И на крајот на ден, си оди за да ја видите 339 00:16:24,860 --> 00:16:30,090 овие три главни areas-- датотеката прелистувач на левата страна, код јазичиња до врвот, 340 00:16:30,090 --> 00:16:32,430 и на прозорецот на терминалот на дното. 341 00:16:32,430 --> 00:16:34,890 >> Дозволете ми да оди напред и да пишувам мојата прва програма. 342 00:16:34,890 --> 00:16:42,300 Одам да превентивно одете на датотеката, Спаси, и ја спаси мојата датотека како hello.c. 343 00:16:42,300 --> 00:16:46,850 Всушност, по конвенција, секоја програма ние Пишува дека е напишан на јазикот на C 344 00:16:46,850 --> 00:16:49,739 треба да биде именуван нешто точка в од Конвенцијата. 345 00:16:49,739 --> 00:16:53,030 Па јас ќе одам да го именува hello.c, бидејќи Јас само сакам да кажам здраво на светот. 346 00:16:53,030 --> 00:16:54,820 Сега ќе одам да зумирате надвор и кликнете на Save. 347 00:16:54,820 --> 00:16:58,180 И сè што имаме сега и тука е јазиче во која ќе можам да почнам да пишувам код. 348 00:16:58,180 --> 00:16:59,490 >> Ова не се случува да ги собере. 349 00:16:59,490 --> 00:17:00,300 Ова не значи ништо. 350 00:17:00,300 --> 00:17:02,750 И така, дури и ако се преобратив тоа да се нули и единици, 351 00:17:02,750 --> 00:17:05,390 процесорот ќе немаат идеја што се случува наоколу. 352 00:17:05,390 --> 00:17:14,170 Но, ако јас пишувам линии кои се совпаѓаат со conventions-- C суштество Ц, 353 00:17:14,170 --> 00:17:20,150 Повторно, ова Language-- со синтаксата како ова, printf здраво world-- и јас сум 354 00:17:20,150 --> 00:17:22,210 добивано и удобно со го прават тоа со текот на времето. 355 00:17:22,210 --> 00:17:24,510 Па јас не мислам дека сум направил сите печатни грешки. 356 00:17:24,510 --> 00:17:27,910 >> Но, секогаш, првиот пат кога ќе го направите ова, ќе. 357 00:17:27,910 --> 00:17:31,090 И она што јас сум за да се направи многу на сила и не работат за вас прв пат. 358 00:17:31,090 --> 00:17:33,610 И тоа е совршено во ред, затоа што во моментов може 359 00:17:33,610 --> 00:17:37,662 само може да се види во целина многу свежина, но со текот на времето откако ќе се запознаат 360 00:17:37,662 --> 00:17:39,870 со оваа средина, и овој јазик, и други, 361 00:17:39,870 --> 00:17:42,370 ќе започне да ги види работите кои се или точно или неточно. 362 00:17:42,370 --> 00:17:44,369 >> И тоа е она што наставата соработници и се разбира 363 00:17:44,369 --> 00:17:48,780 асистенти се толку добри во текот на времето, се Анѓелковиќ грешки или грешки во вашиот код. 364 00:17:48,780 --> 00:17:52,110 Но тврдам дека има Нема грешки во кодот. 365 00:17:52,110 --> 00:17:53,990 Па јас сега сакате да ја извршите оваа програма. 366 00:17:53,990 --> 00:17:57,440 >> Сега на мојот Mac или PC, јас сум во навика на двојно кликнување икони 367 00:17:57,440 --> 00:17:59,350 кога сакам да се кандидира на некои програма. 368 00:17:59,350 --> 00:18:01,080 Но, тоа не е модел тука. 369 00:18:01,080 --> 00:18:04,570 Во оваа средина, која е CS50 ИРО. 370 00:18:04,570 --> 00:18:07,192 Ние сме со користење на оперативниот систем наречен Линукс. 371 00:18:07,192 --> 00:18:09,900 Linux е потсетува на уште еден оперативниот систем, во јавноста познат 372 00:18:09,900 --> 00:18:10,850 како Unix. 373 00:18:10,850 --> 00:18:16,340 И Linux е особено познат по има командната линија на животната средина, CLI. 374 00:18:16,340 --> 00:18:20,070 Сега, ние сме со користење на специфични вкус на Линукс наречена Ubuntu. 375 00:18:20,070 --> 00:18:22,770 И Ubuntu е едноставно одредена верзија на Линукс. 376 00:18:22,770 --> 00:18:27,900 >> Но, овие Линукс овие денови се всушност доаѓаат со графички кориснички интерфејс. 377 00:18:27,900 --> 00:18:30,360 И оној што се случи да се користи тука е веб-базирана. 378 00:18:30,360 --> 00:18:32,735 Така што ова може да изгледа дури и малку различен од нешто 379 00:18:32,735 --> 00:18:35,310 ќе се може да има види или да работи во минатото. 380 00:18:35,310 --> 00:18:37,910 >> Па јас ќе одам да се оди напред сега и да го направите следново. 381 00:18:37,910 --> 00:18:40,950 Сум ја спаси оваа датотека како hello.c. 382 00:18:40,950 --> 00:18:47,350 Одам да се оди напред и да тип clanghello.c Значи ѕвекот 383 00:18:47,350 --> 00:18:49,850 за јазик C е компајлерот. 384 00:18:49,850 --> 00:18:51,952 Тоа е пре-инсталиран во CS50 ИРО. 385 00:18:51,952 --> 00:18:54,910 И сте апсолутно може да го симнете и се инсталира тоа на свој Mac или PC. 386 00:18:54,910 --> 00:18:57,910 >> Но, повторно, не треба да ги имаат сите на пред конфигурација направено за вас. 387 00:18:57,910 --> 00:19:00,940 Значи сега за сега, јас сум само ќе се кандидира clanghello.c. 388 00:19:00,940 --> 00:19:03,240 И сега се забележи оваа синтакса тука ќе крајот 389 00:19:03,240 --> 00:19:06,930 се реализира само значи дека јас сум во папка или директориум наречен работен простор. 390 00:19:06,930 --> 00:19:11,030 Ова е само знак за долар конвенција по значење, напишете ја вашата команди. 391 00:19:11,030 --> 00:19:14,560 >> Тоа е она што се нарекува брза, само од Конвенцијата е знак за долар. 392 00:19:14,560 --> 00:19:19,130 И ако ми да оди напред сега и кликнете Внесете, ништо не чини да се случи. 393 00:19:19,130 --> 00:19:20,930 Но, тоа е всушност добра работа. 394 00:19:20,930 --> 00:19:23,650 Колку помалку што се случува на вашиот екран, толку е поголема веројатноста 395 00:19:23,650 --> 00:19:26,710 вашиот код е да биде точна, најмалку синтаксички. 396 00:19:26,710 --> 00:19:29,120 >> Значи, ако сакам да ја извршите оваа програма, она што можам да направам? 397 00:19:29,120 --> 00:19:33,770 Па, излегува дека Стандардно име од страна на конвенцијата 398 00:19:33,770 --> 00:19:38,854 за програми кога не се определи име за вашата програма е само a.out. 399 00:19:38,854 --> 00:19:41,270 И оваа синтакса исто така, ќе се запознаат со пред долго. 400 00:19:41,270 --> 00:19:47,500 >> Dot црта само значи дека, еј, CS50 IDE, работи на програма наречена a.out 401 00:19:47,500 --> 00:19:49,400 тоа е во рамките на сегашните мојот именик. 402 00:19:49,400 --> 00:19:51,520 Тоа значи точка на тековниот директориум. 403 00:19:51,520 --> 00:19:55,040 И ние ќе се види она што другите такви низи на карактери значи пред долго. 404 00:19:55,040 --> 00:19:58,430 >> Тука ќе одиме, Enter, Здраво светот. 405 00:19:58,430 --> 00:20:00,080 И ќе забележите дека она што се случи? 406 00:20:00,080 --> 00:20:01,580 Не само што се печати Здраво светот. 407 00:20:01,580 --> 00:20:05,990 Таа, исто така се пресели на курсорот на следната линија. 408 00:20:05,990 --> 00:20:07,160 >> И зошто е тоа? 409 00:20:07,160 --> 00:20:12,400 Она што беше на кодот кој пишувавме пред кој гарантира дека курсорот ќе 410 00:20:12,400 --> 00:20:14,882 одат во следната линија? 411 00:20:14,882 --> 00:20:16,840 Смешно нешто во врска со компјутер е тоа е само ќе 412 00:20:16,840 --> 00:20:18,570 да се направи буквално она што ќе го каже да го стори. 413 00:20:18,570 --> 00:20:26,050 >> Значи, ако го кажам printf здраво, запирка, простор, светот, во близина понуда, 414 00:20:26,050 --> 00:20:29,090 тоа е буквално само ќе да се печати овие карактери. 415 00:20:29,090 --> 00:20:31,980 Но, морав овој специјален карактер на крајот, да се потсетиме, обратна коса црта n. 416 00:20:31,980 --> 00:20:34,230 И тоа е она што обезбедува дека карактерот отиде 417 00:20:34,230 --> 00:20:36,570 до следната линија на екранот. 418 00:20:36,570 --> 00:20:38,097 >> Всушност, дозволете ми да одат и да го направите тоа. 419 00:20:38,097 --> 00:20:39,430 Дозволете ми да оди напред и да го избришете ова. 420 00:20:39,430 --> 00:20:41,180 Сега, да се забележи дека врвот на мојот екран има 421 00:20:41,180 --> 00:20:42,890 малку црвено светло во табот укажува, 422 00:20:42,890 --> 00:20:45,047 Еј, вие не сте ги зачувале вашата датотека. 423 00:20:45,047 --> 00:20:47,880 Па јас ќе одам да се оди напред со контрола S или команда S, да ја зачувам датотеката. 424 00:20:47,880 --> 00:20:51,130 Сега goes-- отиде на moment-- зелена. 425 00:20:51,130 --> 00:20:53,760 И сега тоа е назад кон само да се биде блиску икона. 426 00:20:53,760 --> 00:21:01,860 >> Ако јас сега повторно се кандидира clanghello.c, Внесете, точка коса црта, a.out, Enter, 427 00:21:01,860 --> 00:21:04,110 ќе видите дека се 'уште работел. 428 00:21:04,110 --> 00:21:06,020 Но, тоа е веројатно малку кабриолет. 429 00:21:06,020 --> 00:21:08,714 Токму сега, мојата prompt-- простор, а потоа дека знакот за долар, 430 00:21:08,714 --> 00:21:10,880 а потоа мојот вистински prompt-- е на иста линија. 431 00:21:10,880 --> 00:21:14,540 Па тоа сигурно естетски грешки, дури и ако тоа не е навистина логички грешки. 432 00:21:14,540 --> 00:21:16,250 >> Па јас ќе одам да го вратите она што го направија. 433 00:21:16,250 --> 00:21:18,560 Одам да повторување a.out. 434 00:21:18,560 --> 00:21:22,710 Забележи Јас додадов на линија карактер назад. 435 00:21:22,710 --> 00:21:24,280 Сум зачувани во датотеката. 436 00:21:24,280 --> 00:21:31,630 >> Па јас ќе одам да се повторување a.out, and-- мајката, грешка, грешка значи грешка. 437 00:21:31,630 --> 00:21:35,020 Така бубачка е тоа што иако Јас додадов на обратна коса црта n таму, 438 00:21:35,020 --> 00:21:41,180 повторно се спаси, повторно истрча на програмата, однесување беше ист. 439 00:21:41,180 --> 00:21:42,640 Затоа што ќе биде? 440 00:21:42,640 --> 00:21:43,910 >> Јас сум недостасува чекор, нели? 441 00:21:43,910 --> 00:21:47,620 Тоа клучен чекор претходно беше дека имате to-- кога ќе се смени вашиот изворен код, 442 00:21:47,620 --> 00:21:49,610 излегува исто така, работи тоа преку компајлерот 443 00:21:49,610 --> 00:21:51,102 повторно, па ќе го добиете нова машина код. 444 00:21:51,102 --> 00:21:52,810 И кодот на машината, на нули и единици, 445 00:21:52,810 --> 00:21:56,260 се случува да биде речиси идентични, но не совршено, затоа ни се потребни, 446 00:21:56,260 --> 00:21:57,510 се разбира, дека нова линија. 447 00:21:57,510 --> 00:22:02,640 >> Значи да го надминете овој, јас ќе одам да треба за повторување clanghello.c, внесете, точка 448 00:22:02,640 --> 00:22:03,800 Slash, a.out. 449 00:22:03,800 --> 00:22:08,402 И сега, Здраво светот се враќа од каде што се очекува тоа да биде. 450 00:22:08,402 --> 00:22:09,610 Значи ова е во ред и добро. 451 00:22:09,610 --> 00:22:13,150 Но a.out е прилично глупаво име за програма, иако тоа се случува да биде, 452 00:22:13,150 --> 00:22:16,530 од историски причини, default-- значи собранието излези. 453 00:22:16,530 --> 00:22:20,780 >> Но, дозволете ми да оди напред тука и го правиме ова поинаку. 454 00:22:20,780 --> 00:22:24,760 Сакам моите Здраво светот програма да можат да се вика здраво. 455 00:22:24,760 --> 00:22:28,320 Значи, ако тоа беше икона на мојот десктоп, тоа нема да се a.out. 456 00:22:28,320 --> 00:22:29,730 Тоа ќе се вика здраво. 457 00:22:29,730 --> 00:22:33,660 >> Значи да го направите ова, излегува дека ѕвекот, како и многу други програми, 458 00:22:33,660 --> 00:22:37,980 поддржува аргументи на командната линија, или знамиња, или прекинувачи, 459 00:22:37,980 --> 00:22:39,600 кои едноставно влијае врз своето однесување. 460 00:22:39,600 --> 00:22:45,160 Поточно, ѕвекот поддржува цртичка o знаме, што потоа се втор збор. 461 00:22:45,160 --> 00:22:48,190 Во овој случај, ќе се произволно, но разумно, го нарекуваат здраво. 462 00:22:48,190 --> 00:22:50,710 Но, јас може да се нарече нешто Сакам, освен a.out, која 463 00:22:50,710 --> 00:22:52,390 ќе биде прилично покрај точка. 464 00:22:52,390 --> 00:22:55,640 >> А потоа само да го зададете името на датотеката, јас сакам да се состави. 465 00:22:55,640 --> 00:22:59,190 Па сега, иако на почетокот на командата јас се уште имаат ѕвекот, 466 00:22:59,190 --> 00:23:01,410 на крајот на команда Јас се уште имаат името на датотеката, 467 00:23:01,410 --> 00:23:05,520 Јас сега имаат овие командната линија аргументи, овие знамиња што се вели, 468 00:23:05,520 --> 00:23:11,180 ох, патем, на излез-о, датотека наречена здраво, не a.out стандардно. 469 00:23:11,180 --> 00:23:13,810 >> Значи, ако јас притиснете Enter сега, ништо не чини да се случи. 470 00:23:13,810 --> 00:23:17,900 И, сепак, јас сега може да се направи точка коса црта здраво. 471 00:23:17,900 --> 00:23:19,089 Така, тоа е истата програма. 472 00:23:19,089 --> 00:23:21,380 На нули и единици се идентична на крајот на денот. 473 00:23:21,380 --> 00:23:24,210 >> Но, тие се во две различни files-- a.out, 474 00:23:24,210 --> 00:23:26,490 која е првата верзија и само глупаво име, 475 00:23:26,490 --> 00:23:30,250 и сега hello, што е многу повеќе привлечни име за програмата. 476 00:23:30,250 --> 00:23:33,195 Но, искрено, јас никогаш не сум нема да се сеќава на ова, повторно, 477 00:23:33,195 --> 00:23:34,070 и повторно, и повторно. 478 00:23:34,070 --> 00:23:36,411 И, всушност, како што пишува повеќе сложени програми, 479 00:23:36,411 --> 00:23:38,160 командите кои Вие ќе бидете ќе треба да се напише 480 00:23:38,160 --> 00:23:40,920 се случува да се добие дури и покомплицирано уште. 481 00:23:40,920 --> 00:23:41,940 >> И така да не се грижи. 482 00:23:41,940 --> 00:23:46,220 Излегува дека луѓето пред нас сфатија премногу 483 00:23:46,220 --> 00:23:47,530 имаше ова точно истиот проблем. 484 00:23:47,530 --> 00:23:50,900 Тие, исто така не уживаат да се напишете прилично долго, arcane команди, 485 00:23:50,900 --> 00:23:52,200 а камоли да се сеќаваат на нив. 486 00:23:52,200 --> 00:23:56,070 И така луѓето пред нас го направиле други програми кои го прават тоа полесно 487 00:23:56,070 --> 00:23:57,670 да ги собере вашиот софтвер. 488 00:23:57,670 --> 00:24:01,609 >> И, навистина, еден таков програма се нарекува направи. 489 00:24:01,609 --> 00:24:03,150 Па јас ќе одам да се оди напред и да го направите тоа. 490 00:24:03,150 --> 00:24:05,691 Одам да го вратите сè што само не на следниов начин. 491 00:24:05,691 --> 00:24:07,690 Дозволете ми да напишете ЛС. 492 00:24:07,690 --> 00:24:10,980 И ќе забележите три things-- a.out, и ѕвезда, здраво 493 00:24:10,980 --> 00:24:12,810 и ѕвезда, и hello.c. 494 00:24:12,810 --> 00:24:14,730 Се надеваме, ова треба да биде малку интуитивен, 495 00:24:14,730 --> 00:24:18,220 доколку порано имаше ништо во овој простор. 496 00:24:18,220 --> 00:24:21,240 Немаше ништо што морав создадени се додека не почна класа. 497 00:24:21,240 --> 00:24:22,840 >> И направив hello.c. 498 00:24:22,840 --> 00:24:24,544 тогаш јас го состави, и го нарече a.out. 499 00:24:24,544 --> 00:24:27,460 А потоа го состави повторно малку поинаку и го нарече здраво. 500 00:24:27,460 --> 00:24:32,830 Значи имам три датотеки во овој директориум, во оваа папка наречена работен простор. 501 00:24:32,830 --> 00:24:35,005 Сега, јас може да се види дека, како и ако јас одзумирате всушност. 502 00:24:35,005 --> 00:24:37,530 >> Ако јас одзумирате тука и гледам во тоа горниот десен 503 00:24:37,530 --> 00:24:39,940 агол, како што вети од лево страна од вашиот екран 504 00:24:39,940 --> 00:24:42,990 секогаш се случува да ви покаже што е во вашиот профил, што е 505 00:24:42,990 --> 00:24:44,790 внатрешноста на CS50 ИРО. 506 00:24:44,790 --> 00:24:46,680 И таму е три датотеки таму. 507 00:24:46,680 --> 00:24:49,070 >> Па сакам да се ослободи од a.out и здраво. 508 00:24:49,070 --> 00:24:51,275 И како што може да замисли интуитивно, ќе 509 00:24:51,275 --> 00:24:53,400 може да се најде решение за контрола на клик или со десен клик на овој. 510 00:24:53,400 --> 00:24:54,590 И ова малку мени се појавува. 511 00:24:54,590 --> 00:24:57,170 Може да го симнете датотека, работи тоа, преглед на тоа, освежување, преименување, 512 00:24:57,170 --> 00:24:57,700 или она што не. 513 00:24:57,700 --> 00:25:00,260 >> И јас само може да го избришете, и дека ќе оди далеку. 514 00:25:00,260 --> 00:25:05,260 Но, ајде да се прават работите со командата линија за сега, па како да се чувствуваме удобно 515 00:25:05,260 --> 00:25:07,010 со ова, и го направите следново. 516 00:25:07,010 --> 00:25:12,345 Одам да се оди напред и извадете a.out со пишување буквално rma.out. 517 00:25:12,345 --> 00:25:14,890 Излезе, командата за отстранување или бришење на нешто, 518 00:25:14,890 --> 00:25:16,280 не ги избришат или избришете. 519 00:25:16,280 --> 00:25:21,260 >> Тоа е повеќе посочно РМ, само за да се спаси вас некои тастатурата, и притиснете ентер. 520 00:25:21,260 --> 00:25:24,707 Сега ние се случува да биде малку cryptically отстрани обична датотека a.out. 521 00:25:24,707 --> 00:25:27,040 Јас навистина не знаат што е тоа неправилни датотека би бил уште. 522 00:25:27,040 --> 00:25:28,660 Но, јас сакам да го отстраните. 523 00:25:28,660 --> 00:25:30,150 >> Па јас ќе одам да се Y тип за да. 524 00:25:30,150 --> 00:25:31,940 Или би можел да ја напишете надвор, и притиснете Enter. 525 00:25:31,940 --> 00:25:33,440 И, повторно, ништо не чини да се случи. 526 00:25:33,440 --> 00:25:35,840 Но, тоа е, генерално, е добра работа. 527 00:25:35,840 --> 00:25:40,490 >> Ако овој пат сум тип ЛС, што треба да се види? 528 00:25:40,490 --> 00:25:44,930 Се надеваме дека, само здраво и hello.c. 529 00:25:44,930 --> 00:25:47,286 Сега, како настрана, ќе забележите оваа ѕвезда, ѕвезда, 530 00:25:47,286 --> 00:25:48,660 кој е на крајот на мојот програми. 531 00:25:48,660 --> 00:25:50,201 И тие исто така се појавува во зелена боја. 532 00:25:50,201 --> 00:25:53,970 Тоа е само начин CS50 ИРО од вас cluing во фактот 533 00:25:53,970 --> 00:25:55,280 дека тоа не е изворен код. 534 00:25:55,280 --> 00:25:58,880 Тоа е извршна, на Runnable програма со која всушност може да се кандидира 535 00:25:58,880 --> 00:26:01,020 со правење на точка коса црта, и тогаш тоа е името. 536 00:26:01,020 --> 00:26:05,860 >> Сега, дозволете ми да оди напред и да ги отстрани ова, rm здраво, Внесете, отстранете редовно 537 00:26:05,860 --> 00:26:08,010 поднесе здраво, да. 538 00:26:08,010 --> 00:26:11,180 И сега ако сум тип ЛС, ние сме назад hello.c. 539 00:26:11,180 --> 00:26:13,917 Не се обидуваат да ја избришете вашата Крај на изворниот код. 540 00:26:13,917 --> 00:26:16,250 Иако постојат можности вградени во CS50 IDE каде 541 00:26:16,250 --> 00:26:19,870 можете да одите преку историјата на ревизија и назад во времето ако случајно 542 00:26:19,870 --> 00:26:23,660 избришете нешто, да се сетат како на овие инструкциите, да или не, 543 00:26:23,660 --> 00:26:25,381 на она што всушност сакате да го направите. 544 00:26:25,381 --> 00:26:27,380 И кога ќе отидам до врвот лев агол стои тука, 545 00:26:27,380 --> 00:26:30,696 сите што останува е hello.c. 546 00:26:30,696 --> 00:26:32,570 Па таму е гроздовете на други команди кои вие 547 00:26:32,570 --> 00:26:37,550 може да се изврши во светот на Линукс, од кои една е, пак, се направи. 548 00:26:37,550 --> 00:26:40,180 И ние си оди за да се направи мојата програма сега како што следи. 549 00:26:40,180 --> 00:26:43,270 >> Наместо да го ѕвекот, наместо да го прават ѕвекот-о, 550 00:26:43,270 --> 00:26:45,860 Одам да се едноставно буквално тип, направи здраво. 551 00:26:45,860 --> 00:26:49,630 И сега се забележи, јас сум не пишување направи hello.c. 552 00:26:49,630 --> 00:26:50,910 Јас сум пишување направи здраво. 553 00:26:50,910 --> 00:26:54,840 >> И оваа програма Направете дека доаѓа со CS50 IDE, и повеќе 554 00:26:54,840 --> 00:26:57,090 обично со Linux, е програма која е 555 00:26:57,090 --> 00:26:59,120 ќе се направи програма наречена Здраво. 556 00:26:59,120 --> 00:27:03,680 И тоа се случува да се претпостави, по конвенција, дека ако може да се направи оваа програма, 557 00:27:03,680 --> 00:27:09,030 тоа се случува да се направи од извор кодот датотека завршува во dot c, hello.c. 558 00:27:09,030 --> 00:27:12,210 >> Значи, ако јас притиснете Enter сега, забележи дека командата која добива се извршува 559 00:27:12,210 --> 00:27:14,340 е, всушност, дури и подолго пред отколку порано. 560 00:27:14,340 --> 00:27:16,670 И тоа е затоа што ние сме конфигурирани CS50 ИРО да имаат 561 00:27:16,670 --> 00:27:19,878 некои дополнителни карактеристики вградени во тој ние едноставно не се потребни, но наскоро ќе. 562 00:27:19,878 --> 00:27:23,470 Но клучот нешто да се реализира сега имам програма Здраво. 563 00:27:23,470 --> 00:27:27,080 >> Ако јас повторно да ја внесете ЛС, јас има програма здраво. 564 00:27:27,080 --> 00:27:32,070 И можам да го стартувате со точка црта a.out, не, 565 00:27:32,070 --> 00:27:35,590 бидејќи целата поента на овој Вежбата беше точка коса црта здраво. 566 00:27:35,590 --> 00:27:38,089 И сега имам здраво светот програма. 567 00:27:38,089 --> 00:27:39,880 Така одат напред, ние сме речиси секогаш само 568 00:27:39,880 --> 00:27:42,088 ќе ги собере нашите програми со користење на командата направи. 569 00:27:42,088 --> 00:27:45,300 И тогаш ние ќе треба да ги извршувате со точка коса црта, и името на програмата. 570 00:27:45,300 --> 00:27:49,610 Но сфати она што се направи е тоа за вас, не е тоа само по себе е компајлерот. 571 00:27:49,610 --> 00:27:53,310 Тоа е само една програма погодност кој знае како да предизвика компајлерот 572 00:27:53,310 --> 00:27:56,470 да се кандидира, така што можете сами да го користите. 573 00:27:56,470 --> 00:28:00,220 >> Што постојат и други команди Linux, и за возврат на CS50 IDE? 574 00:28:00,220 --> 00:28:03,107 Наскоро ќе видите дека тоа е CD команда, Промена на директориум. 575 00:28:03,107 --> 00:28:05,190 Ова ви овозможува во рамките на вашиот командната линија интерфејс 576 00:28:05,190 --> 00:28:07,610 да се движи напред и назад, и да се отвори различни папки 577 00:28:07,610 --> 00:28:08,860 без помош на глувчето. 578 00:28:08,860 --> 00:28:12,470 >> LS видовме, која се залага за листата датотеки во тековниот директориум. 579 00:28:12,470 --> 00:28:14,650 Направете Дир, можете да најверојатно почнат да заклучиме 580 00:28:14,650 --> 00:28:18,150 што значат овие now-- направи директориум, ако сакате да креирате папка. 581 00:28:18,150 --> 00:28:21,270 РМ за отстранат, РМ Dir за отстрани directory-- и тие, 582 00:28:21,270 --> 00:28:24,160 повторно, се командната линија еквиваленти на она што 583 00:28:24,160 --> 00:28:26,945 може да се направи во CS50 IDE со вашиот глушец. 584 00:28:26,945 --> 00:28:28,820 Но наскоро ќе се најде дека понекогаш тоа е само 585 00:28:28,820 --> 00:28:30,610 многу побрзо да се направи работи со тастатура, 586 00:28:30,610 --> 00:28:33,690 и на крајот многу помоќна. 587 00:28:33,690 --> 00:28:36,440 >> Но, тешко е да се тврди дека нешто што сте го правеле досега 588 00:28:36,440 --> 00:28:39,990 е сето она што моќна, кога сите ние сме биле велејќи дека е, Здраво светот. 589 00:28:39,990 --> 00:28:43,740 И, всушност, јас Hardcoded на зборовите Здраво светот во мојата програма. 590 00:28:43,740 --> 00:28:45,530 Не постои динамика уште. 591 00:28:45,530 --> 00:28:49,320 Нула беше редот на големина поинтересна од минатата недела. 592 00:28:49,320 --> 00:28:51,220 >> И така, да одам таму. 593 00:28:51,220 --> 00:28:55,310 Ајде да направиме еден чекор кон таа страна начин на некои од овие функции. 594 00:28:55,310 --> 00:28:59,470 Затоа, не само што C доаѓаат со printf, и гроздовете на други функции 595 00:28:59,470 --> 00:29:01,850 од кои некои ќе видиме со текот на времето, тоа не се случи 596 00:29:01,850 --> 00:29:05,760 го прават тоа сите така лесно право надвор на портата во добивање на корисник влез. 597 00:29:05,760 --> 00:29:08,140 >> Всушност, една од слабостите на јазици како C, 598 00:29:08,140 --> 00:29:10,140 па дури и Java и уште другите, е тоа што тој не го прави тоа 599 00:29:10,140 --> 00:29:15,860 го прават тоа лесно да се само да работи како броеви од корисниците, или жици, зборови, 600 00:29:15,860 --> 00:29:19,970 и фрази, а камоли да работи како подвижна запирка вредности, или реални броеви 601 00:29:19,970 --> 00:29:23,240 со децимален поени, и навистина долго броеви, како што наскоро ќе видиме. 602 00:29:23,240 --> 00:29:27,000 Значи оваа листа на функции тука, овие се како другите парчиња гребење загатка 603 00:29:27,000 --> 00:29:31,090 дека ние сме пре-инсталиран во CS50 IDE дека ние ќе се користи за неколку недели 604 00:29:31,090 --> 00:29:34,010 обука тркала на сорти, и на крајот да ги исклучи, и со нетрпение 605 00:29:34,010 --> 00:29:37,210 под хаубата, можеби, во како се спроведуваат овие работи. 606 00:29:37,210 --> 00:29:40,460 >> Но, за да го направите ова, ајде всушност се напише програма. 607 00:29:40,460 --> 00:29:41,770 Дозволете ми да оди напред сега. 608 00:29:41,770 --> 00:29:44,750 И јас одам да се создаде нова датотеката со кликнување на оваа мала плус, 609 00:29:44,750 --> 00:29:45,970 и кликнете на филтерот. 610 00:29:45,970 --> 00:29:49,250 >> Одам да се спаси овој следната еден како, да речеме, string.c, 611 00:29:49,250 --> 00:29:50,750 затоа што сакаат да си играат со жици. 612 00:29:50,750 --> 00:29:53,990 И низа во C е само низа од карактери. 613 00:29:53,990 --> 00:29:56,090 Па сега ајде да одиме напред и да го направите следново. 614 00:29:56,090 --> 00:30:01,204 >> Вклучуваат стандардни IO.h-- и излегува стандард IO, 615 00:30:01,204 --> 00:30:03,360 IO само значи влез и излез. 616 00:30:03,360 --> 00:30:05,920 Значи излегува дека оваа линија, тука е она што 617 00:30:05,920 --> 00:30:08,140 е САД соседна да го користите printf. 618 00:30:08,140 --> 00:30:10,410 Printf, се разбира, произведува излез. 619 00:30:10,410 --> 00:30:15,000 Значи, со цел да го користите printf, што се испоставува од што треба да ја имаат оваа линија код 620 00:30:15,000 --> 00:30:16,040 на врвот на вашата датотека. 621 00:30:16,040 --> 00:30:18,456 >> И ние ќе се вратам на она што поточно, тоа значи пред долго. 622 00:30:18,456 --> 00:30:20,400 Излегува дека во било Ц програма пишувам, 623 00:30:20,400 --> 00:30:23,640 Морам да го започнете со код кој изгледа вака. 624 00:30:23,640 --> 00:30:26,860 И ќе забележите CS50 IDE, и други интегриран развој 625 00:30:26,860 --> 00:30:30,050 средини како него, ќе се обидат најдобро 626 00:30:30,050 --> 00:30:31,780 тие може да се заврши вашата мисла. 627 00:30:31,780 --> 00:30:35,930 Всушност, пред некој миг, ако јас го вратите она што јас само направив, јас притиснете Enter. 628 00:30:35,930 --> 00:30:39,160 >> Тогаш јас хит отворен кадрава голема заграда, притиснете Enter повторно. 629 00:30:39,160 --> 00:30:40,430 И заврши мојата мисла. 630 00:30:40,430 --> 00:30:45,140 Тоа ми даде нова линија, вовлечен не помалку за убаво стилски причини ќе видиме. 631 00:30:45,140 --> 00:30:48,559 А потоа автоматски ми даде дека кадрава голема заграда за да се заврши мојата мисла. 632 00:30:48,559 --> 00:30:50,600 Сега, тоа не е секогаш Претпоставувам дека она што сакате да го направите. 633 00:30:50,600 --> 00:30:53,620 Но, во голем дел, го прави тоа ќе те спаси некои кратенки. 634 00:30:53,620 --> 00:30:59,560 Значи пред еден миг, ние трчаше оваа program-- Здраво, свет, а потоа го состави, 635 00:30:59,560 --> 00:31:00,460 а потоа истрча. 636 00:31:00,460 --> 00:31:01,867 Но, не постои динамика тука. 637 00:31:01,867 --> 00:31:03,700 Што ако сакавме да направи нешто друго? 638 00:31:03,700 --> 00:31:07,630 Па, што ако јас сакав да се, всушност, добие стринг од корисникот? 639 00:31:07,630 --> 00:31:11,250 Одам да се користи сложувалка наречен точно that-- се стринг. 640 00:31:11,250 --> 00:31:15,860 >> Излезе во C, кога не сакате да се обезбеди влез на сложувалка парче, 641 00:31:15,860 --> 00:31:19,360 или посоодветно до некоја функција, можете буквално само го прават отворена заграда, 642 00:31:19,360 --> 00:31:20,430 затворена заграда. 643 00:31:20,430 --> 00:31:25,540 Па тоа е како да има Не белата кутија да напишеш во. 644 00:31:25,540 --> 00:31:27,720 блок забелешки пред имаше малку белата кутија. 645 00:31:27,720 --> 00:31:29,660 Немаме дека белата кутија сега. 646 00:31:29,660 --> 00:31:33,310 >> Но, кога ќе се јавам добие низа, јас сакате да се стави резултат некаде. 647 00:31:33,310 --> 00:31:37,680 Значи многу честа парадигма во C е да се јавете се на функција, како и добие тука низа, 648 00:31:37,680 --> 00:31:41,070 а потоа и чување на повратната вредност. 649 00:31:41,070 --> 00:31:44,450 Тоа е резултат на нејзината напор во нешто. 650 00:31:44,450 --> 00:31:47,630 >> И она што е изградба во програмирање, 651 00:31:47,630 --> 00:31:53,450 без разлика дали во гребење или сега Ц, кои ги можете да го користите за да всушност складираат нешто? 652 00:31:53,450 --> 00:31:55,990 Го нарече променлива, нели? 653 00:31:55,990 --> 00:32:00,320 И во нула, ние навистина не е гајле што се случува во променливи. 654 00:32:00,320 --> 00:32:02,170 >> Но, во овој случај, ние всушност го направи. 655 00:32:02,170 --> 00:32:03,719 Јас ќе одам да се каже стринг. 656 00:32:03,719 --> 00:32:05,510 И тогаш јас може да се нарече ова што сакам. 657 00:32:05,510 --> 00:32:08,340 Одам да го наречеме име, добива се стринг. 658 00:32:08,340 --> 00:32:10,250 >> И сега, дури и ако сте малку нови за ова, 659 00:32:10,250 --> 00:32:11,984 се забележи дека јас сум недостигаат некои детали. 660 00:32:11,984 --> 00:32:13,150 Јас сум заборавајќи точка-запирка. 661 00:32:13,150 --> 00:32:14,400 Јас треба да се заврши оваа мисла. 662 00:32:14,400 --> 00:32:17,480 Па јас ќе одам да се движи мојот курсорот, и хит-запирка таму. 663 00:32:17,480 --> 00:32:19,130 А што јас само се направи? 664 00:32:19,130 --> 00:32:21,440 Во оваа линија код, број 5 во моментот, 665 00:32:21,440 --> 00:32:23,799 Се јавувам добие низа без влезови. 666 00:32:23,799 --> 00:32:26,090 Така што не постои малку бело кутија како Зачувај блок има. 667 00:32:26,090 --> 00:32:28,590 >> Јас сум само велејќи, еј, компјутер, да ме стринг. 668 00:32:28,590 --> 00:32:31,390 знакот за еднакво е навистина знак за еднаквост, само по себе. 669 00:32:31,390 --> 00:32:33,790 Тоа е задача оператор, што значи, 670 00:32:33,790 --> 00:32:37,860 Еј, компјутер, се движат на вредноста по десната страна во текот на левата страна. 671 00:32:37,860 --> 00:32:40,480 И во лево, јас го имаат следново. 672 00:32:40,480 --> 00:32:43,580 >> Еј, компјутер, дај ми string-- низа од карактери. 673 00:32:43,580 --> 00:32:45,637 И повик таа низа име. 674 00:32:45,637 --> 00:32:47,220 И јас дури и не мора да го наречеме име. 675 00:32:47,220 --> 00:32:49,970 >> Јас би можеле да го наречеме, конвенционално, нешто како S, 676 00:32:49,970 --> 00:32:52,900 слично како што се користи од I до повик ì променлива. 677 00:32:52,900 --> 00:32:54,829 Но, сега треба да се направи нешто со неа. 678 00:32:54,829 --> 00:32:57,370 Тоа ќе биде прилично глупаво да обидете составувањето на овој код, трчање 679 00:32:57,370 --> 00:32:59,410 оваа програма, и покрај тоа што Јас сум добивање на стринг, 680 00:32:59,410 --> 00:33:01,580 бидејќи тоа е сепак само да се каже Здраво светот. 681 00:33:01,580 --> 00:33:06,140 >> Но, што ако јас сакам да го промени тоа. 682 00:33:06,140 --> 00:33:07,940 Зошто не можам да го направите ова? 683 00:33:07,940 --> 00:33:11,632 Процент s, запирка s. 684 00:33:11,632 --> 00:33:13,090 И ова е малку криптичната уште. 685 00:33:13,090 --> 00:33:15,560 >> Значи, дозволете ми да ми променливи повеќе јасно. 686 00:33:15,560 --> 00:33:17,510 Дозволете ми да се именува оваа променлива име. 687 00:33:17,510 --> 00:33:20,230 И да видиме ако не можеме да се закачам освен она што се случува овде. 688 00:33:20,230 --> 00:33:22,770 >> Така, на линија на пет, јас сум добивање на стринг. 689 00:33:22,770 --> 00:33:25,620 И јас сум со зачувување на таа низа, она што корисникот го внеле во 690 00:33:25,620 --> 00:33:28,430 во неговата или нејзината тастатура, во променлива наречена име. 691 00:33:28,430 --> 00:33:30,590 И излегува дека printf не само 692 00:33:30,590 --> 00:33:34,220 земе еден аргумент во двојен цитати, еден влез во двојни наводници. 693 00:33:34,220 --> 00:33:39,100 >> Тоа може да потрае два, или три, или повеќе, како дека во вториот или третиот или четвртиот, 694 00:33:39,100 --> 00:33:42,320 се сите имиња на променливи, или посебно вредности, 695 00:33:42,320 --> 00:33:48,610 што сакате да го приклучиш во, динамично, тоа стринг во наводници. 696 00:33:48,610 --> 00:33:52,110 Со други зборови, она што би било погрешно со ова? 697 00:33:52,110 --> 00:33:57,920 Ако јас само се поздравил со името, обратна коса црта n, ми го спаси датотека, составена мојот код, 698 00:33:57,920 --> 00:34:01,660 и се стрча тоа, она што ќе се случи? 699 00:34:01,660 --> 00:34:05,139 >> Тоа е само случува да се каже, здраво име, буквално N-А-М-Е, 700 00:34:05,139 --> 00:34:07,900 кој е глупаво бидејќи тоа е не се разликува од светот. 701 00:34:07,900 --> 00:34:10,400 Па ако нешто е во наводници што буквално добива печатени. 702 00:34:10,400 --> 00:34:12,520 Значи, ако сакам да имам случаеви таму, 703 00:34:12,520 --> 00:34:14,422 Јас всушност треба да се користи некои специјална синтакса. 704 00:34:14,422 --> 00:34:17,380 И излегува ако го прочитате документација за функција printf, 705 00:34:17,380 --> 00:34:21,320 тоа ќе ви каже дека ако користите проценти s, 706 00:34:21,320 --> 00:34:23,920 може да се замени со вредност како што следи. 707 00:34:23,920 --> 00:34:27,190 >> По запирка после тоа двојни наводници, можете едноставно 708 00:34:27,190 --> 00:34:29,179 напишете го името на променлива што сакате 709 00:34:29,179 --> 00:34:33,790 да го приклучиш во тој формат код или формат назначувач, 710 00:34:33,790 --> 00:34:35,469 проценти за жици. 711 00:34:35,469 --> 00:34:39,190 И сега ако сум ми го спаси датотека, Јас се врати долу на мојот терминал. 712 00:34:39,190 --> 00:34:42,870 И јас тип Направете стринг, затоа што, повторно, името на овој 713 00:34:42,870 --> 00:34:45,510 датотека што ја одбрав е пред string.c. 714 00:34:45,510 --> 00:34:48,510 >> Па јас ќе одам да се каже Направете стринг, влезе. 715 00:34:48,510 --> 00:34:51,550 О добрина, се погледне во сите грешките што веќе го направиле. 716 00:34:51,550 --> 00:34:55,540 И ова is-- што, ова е навистина како шест, седум линија програма? 717 00:34:55,540 --> 00:34:57,790 Значи ова е местото каде што многу да брзо да се добие огромно. 718 00:34:57,790 --> 00:35:00,890 >> Овој терминал прозорец има сега само се враќаат 719 00:35:00,890 --> 00:35:03,230 голем број на пораки за грешка. 720 00:35:03,230 --> 00:35:07,560 Се разбира, немам повеќе грешки пораки отколку што имаат линии на код. 721 00:35:07,560 --> 00:35:08,680 Значи она што се случува? 722 00:35:08,680 --> 00:35:10,920 >> Па, најдобрата стратегија да се направи во секое време 723 00:35:10,920 --> 00:35:13,710 се судрите со големо листата на грешки како што, 724 00:35:13,710 --> 00:35:16,690 е дојдете назад, погледнете за команда вие само се стрча, што во мојот случај 725 00:35:16,690 --> 00:35:18,020 е да се направи низа. 726 00:35:18,020 --> 00:35:21,630 Погледнеме во она што го прават не, и тоа е тоа долго ѕвекот команда, не е голема работа таму. 727 00:35:21,630 --> 00:35:22,950 >> Но црвено е лошо. 728 00:35:22,950 --> 00:35:24,750 Зелена се обидува да биде нежна и корисни. 729 00:35:24,750 --> 00:35:26,140 Но, тоа е уште лошо, во овој случај. 730 00:35:26,140 --> 00:35:27,510 Но, каде е лошо? 731 00:35:27,510 --> 00:35:31,450 >> String.c алинеја пет, пет карактер. 732 00:35:31,450 --> 00:35:32,930 Значи ова е само заеднички конвенцијата. 733 00:35:32,930 --> 00:35:36,060 Нешто нешто значи дебелото црево линијата број и бројот карактер. 734 00:35:36,060 --> 00:35:41,080 Грешка, употреба на непријавена идентификатор стринг. 735 00:35:41,080 --> 00:35:42,900 Дали мислевте стандард во? 736 00:35:42,900 --> 00:35:45,530 >> Значи, за жал, ѕвекот се обидува да биде од корист. 737 00:35:45,530 --> 00:35:46,850 Но, тоа не е во ред, во овој случај. 738 00:35:46,850 --> 00:35:49,350 Не, ѕвекот, јас не значи стандард IO. 739 00:35:49,350 --> 00:35:51,070 Мислев дека на линија еден, да. 740 00:35:51,070 --> 00:35:53,420 >> Но пет линија е овој овде. 741 00:35:53,420 --> 00:35:57,040 И ѕвекот не разбере С-Т-Р-И-Н-G. 742 00:35:57,040 --> 00:36:01,490 Тоа е непријавена идентификатор, на зборот едноставно никогаш не видел порано. 743 00:36:01,490 --> 00:36:05,730 И тоа е затоа C, јазикот ние сме пишување на код во право сега, 744 00:36:05,730 --> 00:36:08,070 нема променливи се нарекува жици. 745 00:36:08,070 --> 00:36:11,380 >> Тоа не се случи, по дифолт, поддршка нешто што се нарекува стринг. 746 00:36:11,380 --> 00:36:16,750 Тоа е CS50 парче жаргон, но многу конвенционално. 747 00:36:16,750 --> 00:36:18,600 Но, можам да го надминете овој, како што следи. 748 00:36:18,600 --> 00:36:22,090 >> Ако додадам една линија код на врвот на оваа програма, 749 00:36:22,090 --> 00:36:27,890 вклучуваат cs50.h, што е уште една датотека некаде во внатрешноста на CS50 IDE, некаде 750 00:36:27,890 --> 00:36:30,820 на хард дискот, така да се каже, на оперативниот систем Ubuntu 751 00:36:30,820 --> 00:36:33,590 дека јас се кандидирам, дека е датотека која е 752 00:36:33,590 --> 00:36:38,740 ќе учат за работа систем што низа е, само 753 00:36:38,740 --> 00:36:41,930 како стандард io.h е датотека во оперативниот систем кој е 754 00:36:41,930 --> 00:36:44,430 ќе го учат што printf е. 755 00:36:44,430 --> 00:36:46,810 >> Всушност, ние би го добиле многу слична порака 756 00:36:46,810 --> 00:36:50,600 ако IO призна стандард Io.h и се обидел да го користите printf. 757 00:36:50,600 --> 00:36:53,632 Па јас ќе одам да се оди напред и само ја преземат контролата L да го исчистите мојот екран. 758 00:36:53,632 --> 00:36:56,340 Или можете да напишете јасни и дека ќе биде само го исчистите прозорецот на терминалот. 759 00:36:56,340 --> 00:36:58,020 Но, сеуште можете да се движите назад во времето. 760 00:36:58,020 --> 00:37:01,100 >> И јас одам да повторување Направете стринг. 761 00:37:01,100 --> 00:37:03,660 Премине моите прсти овој пат, Enter. 762 00:37:03,660 --> 00:37:05,380 О, Боже мој, тој работел. 763 00:37:05,380 --> 00:37:09,280 тоа ми е долга криптичната команда тоа е она со што се создава преку ѕвекот, 764 00:37:09,280 --> 00:37:10,460 но не и пораките за грешки. 765 00:37:10,460 --> 00:37:12,460 Значи се реализира, иако може да се добие целосно 766 00:37:12,460 --> 00:37:14,480 обземен со број на пораки за грешки, 767 00:37:14,480 --> 00:37:17,540 тоа само може да биде оваа досадни каскадни ефект, каде ѕвекот не разбира 768 00:37:17,540 --> 00:37:19,620 една работа, што значи тогаш не се разбере на следниот збор, 769 00:37:19,620 --> 00:37:20,560 или на следната линија. 770 00:37:20,560 --> 00:37:22,850 И така тоа само пригушници на вашиот код. 771 00:37:22,850 --> 00:37:24,440 Но, на фикс може да биде едноставна. 772 00:37:24,440 --> 00:37:27,822 И така секогаш се фокусира на првата линија на производство. 773 00:37:27,822 --> 00:37:29,530 И ако не се го разбирам, само погледнете 774 00:37:29,530 --> 00:37:32,480 за клучни зборови, кои може да бидат индиции, и бројот на линијата, 775 00:37:32,480 --> 00:37:34,650 и карактер, каде таа грешка може да биде. 776 00:37:34,650 --> 00:37:40,328 >> Сега дозволете ми да оди напред и да напишеш точка црта, стринг, влезе. 777 00:37:40,328 --> 00:37:44,340 Хм, тоа не е велејќи здраво ништо. 778 00:37:44,340 --> 00:37:46,210 Зошто? 779 00:37:46,210 --> 00:37:48,170 Па, да се потсетиме, каде што е тоа трчање? 780 00:37:48,170 --> 00:37:53,730 >> Тоа е веројатно заглавени во моментот во еден циклус, ако сакате, на линија шест, 781 00:37:53,730 --> 00:37:56,950 бидејќи Земете Стринг страна на дизајнот, напишани од страна на персоналот CS50, 782 00:37:56,950 --> 00:38:00,350 е буквално значи само да седи таму те чека, и чекање, 783 00:38:00,350 --> 00:38:01,850 и чекање за низа. 784 00:38:01,850 --> 00:38:03,792 Сите ние подразбираме под низа е човечки влез. 785 00:38:03,792 --> 00:38:04,500 Па да знаете што? 786 00:38:04,500 --> 00:38:05,166 Дозволете ми да оди напред. 787 00:38:05,166 --> 00:38:08,704 И само за каприц, дозволете ми да тип моето име, Давид, влезе. 788 00:38:08,704 --> 00:38:10,120 Сега имам повеќе динамична програма. 789 00:38:10,120 --> 00:38:11,240 Тоа, рече, здраво Давид. 790 00:38:11,240 --> 00:38:16,280 >> Ако одам напред и да ја стартувате ова, повторно, дозволете ми да се обиде да се каже Zamila име, влезе. 791 00:38:16,280 --> 00:38:17,940 И сега имаме динамична програма. 792 00:38:17,940 --> 00:38:19,380 Не сум хард кодирани светот. 793 00:38:19,380 --> 00:38:21,760 Не сум хард кодирани име или Давид или Zamila. 794 00:38:21,760 --> 00:38:25,350 >> Сега е многу повеќе како програми знаеме, каде што ако тоа се влез, 795 00:38:25,350 --> 00:38:27,870 го произведува малку поинаква излез. 796 00:38:27,870 --> 00:38:31,020 Сега, ова не е најдобар корисник искуство, или UX. 797 00:38:31,020 --> 00:38:33,000 Јас ја стартувате програмата. 798 00:38:33,000 --> 00:38:35,830 >> Јас не знам што би требало да се направи, ако јас всушност поглед на 799 00:38:35,830 --> 00:38:37,290 или се сеќаваат на изворниот код. 800 00:38:37,290 --> 00:38:39,640 Значи, да се направи на корисникот искуство малку подобро 801 00:38:39,640 --> 00:38:41,240 со наједноставните нешта. 802 00:38:41,240 --> 00:38:44,782 Дозволете ми да се вратам во оваа програма, и едноставно да се каже printf. 803 00:38:44,782 --> 00:38:48,870 >> И дозволете ми да оди напред и да го изговара името, дебелото црево, и простор, а потоа и точка-запирка. 804 00:38:48,870 --> 00:38:51,170 И само за клоци, без реакција n. 805 00:38:51,170 --> 00:38:52,980 И тоа е намерно, бидејќи јас не сакам 806 00:38:52,980 --> 00:38:54,590 брза да се преселат на следната линија. 807 00:38:54,590 --> 00:38:58,800 >> Сакам да се, наместо тоа, да го направите ова, бидете низа повторно да го компајлирате кодот ми во нова машина 808 00:38:58,800 --> 00:39:00,980 код точка намали стринг. 809 00:39:00,980 --> 00:39:02,460 Ах, ова е многу поубава. 810 00:39:02,460 --> 00:39:05,780 Сега јас всушност знам што компјутерот сака мене да се направи, да го даде името. 811 00:39:05,780 --> 00:39:10,020 >> Па јас ќе одам да се оди напред и да напишеш во Роб, внесете го и здраво, Роб. 812 00:39:10,020 --> 00:39:13,640 Значи, се реализира, тоа е, сепак, на крајот на ден, само програма од девет линија. 813 00:39:13,640 --> 00:39:15,090 Но, ги зедовме овие бебешки чекори. 814 00:39:15,090 --> 00:39:18,380 >> Ние напиша една линија со која се беа познати, printf, Здраво светот. 815 00:39:18,380 --> 00:39:19,980 Тогаш ние undid малку за тоа. 816 00:39:19,980 --> 00:39:21,560 И ние всушност се користи добие стринг. 817 00:39:21,560 --> 00:39:23,362 И ние го исфрли таа вредност во променлива. 818 00:39:23,362 --> 00:39:26,070 А потоа отидовме напред и да се подобри што понатаму со третата линија. 819 00:39:26,070 --> 00:39:29,220 И ова итеративен процес на пишување софтвер е навистина клучот. 820 00:39:29,220 --> 00:39:33,420 Во CS50, и во животот воопшто, обично не треба да се седне, 821 00:39:33,420 --> 00:39:36,800 има програма во умот, и да се обиде пишување целата проклета работа на сите одеднаш. 822 00:39:36,800 --> 00:39:40,810 >> Тоа ќе неизбежно резултира со начин повеќе грешки отколку ние самите видов тука. 823 00:39:40,810 --> 00:39:44,070 Дури и јас, на овој ден, постојано направи други глупави грешки, 824 00:39:44,070 --> 00:39:47,480 се всушност потешко грешки кои се потешко да дознаам. 825 00:39:47,480 --> 00:39:52,095 Но, ќе се направи повеќе грешки повеќе линии на код пишувате на сите одеднаш. 826 00:39:52,095 --> 00:39:54,220 И така оваа практика, напишете малку на код 827 00:39:54,220 --> 00:39:57,930 дека сте удобно со, состави тоа, да го стартуваш, проба поопшто, 828 00:39:57,930 --> 00:40:01,370 а потоа се пресели on-- па исто како и ние се чуваат дели и дели минатата недела, 829 00:40:01,370 --> 00:40:04,190 зграда од нешто многу едноставно да се нешто повеќе комплекс, 830 00:40:04,190 --> 00:40:05,200 го стори истото овде. 831 00:40:05,200 --> 00:40:08,500 Не се седне, и обидете се да напишам целиот проблем. 832 00:40:08,500 --> 00:40:10,780 Всушност се овие мали чекори. 833 00:40:10,780 --> 00:40:15,100 >> Сега, жици не се сите тоа корисно при себе. 834 00:40:15,100 --> 00:40:18,210 Ние би всушност, идеално, како да има нешто друго во нашето раководство. 835 00:40:18,210 --> 00:40:20,990 Па ајде да всушност го прават токму тоа. 836 00:40:20,990 --> 00:40:24,900 >> Дозволете ми да оди напред сега и разбивам малку поинаква програма. 837 00:40:24,900 --> 00:40:28,320 И ние ќе го наречеме ова int.c, на цел број. 838 00:40:28,320 --> 00:40:30,870 Одам да се, на сличен начин, вклучуваат CS550.h. 839 00:40:30,870 --> 00:40:33,060 Одам да вклучуваат стандардни IO. 840 00:40:33,060 --> 00:40:36,630 И тоа се случува да биде доста заеднички во овие првите неколку дена од класата. 841 00:40:36,630 --> 00:40:39,050 >> И јас одам да се подготвени себеси со главната функција. 842 00:40:39,050 --> 00:40:43,370 И сега, наместо на добивање на стринг, ајде да одиме напред и да добиете Инт. 843 00:40:43,370 --> 00:40:49,285 Ајде да го наречеме јас, и повик да го добие int, во близина parens, точка-запирка. 844 00:40:49,285 --> 00:40:51,410 И сега ајде да го направите нешто со него, printf. 845 00:40:51,410 --> 00:40:56,190 >> Да речеме нешто како Здраво, обратна коса црта n, запирка i. 846 00:40:56,190 --> 00:41:00,010 Затоа, јас сум доста имитирајќи она што го направив пред само еден миг. 847 00:41:00,010 --> 00:41:01,660 Имам случаеви тука. 848 00:41:01,660 --> 00:41:05,150 Имам запирка јас тука, затоа што сакам да го приклучиш I во кои случаеви. 849 00:41:05,150 --> 00:41:07,250 >> Па ајде да одиме напред и да се обидат составувањето на оваа програма. 850 00:41:07,250 --> 00:41:10,060 Датотеката се нарекува int.c. 851 00:41:10,060 --> 00:41:12,920 Па јас ќе одам да се каже, се int, влезе. 852 00:41:12,920 --> 00:41:16,420 О, боже, но не е голема работа, нели? 853 00:41:16,420 --> 00:41:17,230 Има грешка. 854 00:41:17,230 --> 00:41:19,810 >> Има еден синтаксичка грешка тука, така што програмата не може да 855 00:41:19,810 --> 00:41:25,460 се состави во int.c, линија седум, ликот 27, формат грешка 856 00:41:25,460 --> 00:41:28,400 Го одредува видот знак ѕвезда, што и да е. 857 00:41:28,400 --> 00:41:30,020 Но, типот на аргумент е Инт. 858 00:41:30,020 --> 00:41:33,110 >> Значи тука, исто така, ние не ќе to-- иако денес е многу материјал, 859 00:41:33,110 --> 00:41:35,710 ние ќе ви ги победат со апсолутно секоја функција на C, 860 00:41:35,710 --> 00:41:38,070 и програмирање поопшто, само овие првите неколку недели. 861 00:41:38,070 --> 00:41:40,400 Па таму често се случува да биде жаргон со која не сте запознаени. 862 00:41:40,400 --> 00:41:43,350 И, всушност, знак ѕвезда е нешто ние ќе треба да се врати на 863 00:41:43,350 --> 00:41:44,830 во една недела или две е време. 864 00:41:44,830 --> 00:41:47,530 >> Но, за сега, ајде да видиме дали можеме да анализирам зборови, кои се познати. 865 00:41:47,530 --> 00:41:50,750 Formats-- така слушнавме формат спецификациите, формат код пред. 866 00:41:50,750 --> 00:41:51,840 Тоа е познато. 867 00:41:51,840 --> 00:41:53,840 Type-- но аргументот има int тип. 868 00:41:53,840 --> 00:41:55,980 Чекај малку, јас е int. 869 00:41:55,980 --> 00:41:59,230 >> Можеби проценти е, всушност, има некои дефинирано значење. 870 00:41:59,230 --> 00:42:00,230 И, навистина, го прави тоа. 871 00:42:00,230 --> 00:42:03,101 Цел број, ако сакате printf да го замени, 872 00:42:03,101 --> 00:42:05,350 што всушност треба да се користи различен формат спецификациите. 873 00:42:05,350 --> 00:42:06,890 А ти да не ќе знаат ова освен ако некој ви кажал, 874 00:42:06,890 --> 00:42:07,973 или ќе му го направи пред тоа. 875 00:42:07,973 --> 00:42:10,490 Но, проценти i е она што може да се најчесто се користи 876 00:42:10,490 --> 00:42:12,240 во printf за приклучување на цел број. 877 00:42:12,240 --> 00:42:14,920 Вие исто така може да се користи проценти г за децимален број. 878 00:42:14,920 --> 00:42:16,490 Но, јас е убав и едноставен тука. 879 00:42:16,490 --> 00:42:17,590 Па ние ќе се оди со тоа. 880 00:42:17,590 --> 00:42:21,160 >> Сега дозволете ми да оди напред и да прегласувањето направи int, Enter. 881 00:42:21,160 --> 00:42:23,328 Тоа е добро, нема грешки. 882 00:42:23,328 --> 00:42:27,260 Dot намали int-- ред, лоша корисник искуство, бидејќи не сум си реков 883 00:42:27,260 --> 00:42:27,760 што да се прави. 884 00:42:27,760 --> 00:42:28,426 Но, тоа е во ред. 885 00:42:28,426 --> 00:42:29,480 Јас сум фаќање на брзо. 886 00:42:29,480 --> 00:42:36,260 >> А сега дозволете ми да оди напред и да напишете Дејвид, во ред, Zamila, Роб. 887 00:42:36,260 --> 00:42:37,820 Добро, така што ова е добра работа. 888 00:42:37,820 --> 00:42:41,710 Овој пат, јас сум со користење на функцијата, загатка парче, наречен добие Инт. 889 00:42:41,710 --> 00:42:44,230 И излегува out-- и ние ќе види ова подоцна во term-- 890 00:42:44,230 --> 00:42:47,730 вработените во CS50 има имплементирано се низа на таков начин 891 00:42:47,730 --> 00:42:50,350 дека тоа само физички добие стринг за вас. 892 00:42:50,350 --> 00:42:54,340 >> Таа има имплементирано стапите int во на таков начин што тоа само ќе 893 00:42:54,340 --> 00:42:55,590 добие цел број за вас. 894 00:42:55,590 --> 00:42:57,830 И ако, на човекот, не соработува, тоа е 895 00:42:57,830 --> 00:43:00,590 буквално само ќе се велат обидете се повторно, обидете се повторно, обидете се повторно, 896 00:43:00,590 --> 00:43:05,200 буквално седи таму looping, додека се обврзат со некои магични број, 897 00:43:05,200 --> 00:43:07,670 како 50, 50 и здраво. 898 00:43:07,670 --> 00:43:11,440 >> Или ако трчаме тоа повторно и тип во 42, здраво 42. 899 00:43:11,440 --> 00:43:15,750 И така функција на се int внатре во тоа сложувалка 900 00:43:15,750 --> 00:43:19,050 е доволно логика, доволно мисла, да дознаам, она што е зборот? 901 00:43:19,050 --> 00:43:20,330 И она што е бројот? 902 00:43:20,330 --> 00:43:23,165 Прифаќање само во крајна линија броеви. 903 00:43:23,165 --> 00:43:25,690 904 00:43:25,690 --> 00:43:30,230 >> Значи излегува дека овој не е толку експресивен. 905 00:43:30,230 --> 00:43:30,910 до сега. 906 00:43:30,910 --> 00:43:33,690 Значи, Yay, последен пат се отиде прилично брзо 907 00:43:33,690 --> 00:43:38,320 во игри за спроведување, и анимација, и уметнички дела во Scratch. 908 00:43:38,320 --> 00:43:42,260 И тука, ние сме се содржина со здраво светот, и здраво 50. 909 00:43:42,260 --> 00:43:43,696 >> Тоа не е сè што инспиративни. 910 00:43:43,696 --> 00:43:46,070 И, навистина, овие првите неколку примери ќе потрае некое време 911 00:43:46,070 --> 00:43:47,510 на рампата во возбуда. 912 00:43:47,510 --> 00:43:49,854 Но, ние имаме толку многу повеќе контролираат сега, во факт. 913 00:43:49,854 --> 00:43:51,770 И ние ќе се многу начин почне да дели 914 00:43:51,770 --> 00:43:53,870 на врвот на овие основни примитиви. 915 00:43:53,870 --> 00:43:56,370 >> Но прво, да се разбере она што ограничувања. 916 00:43:56,370 --> 00:43:58,620 Всушност, една од работите Нула не е лесно 917 00:43:58,620 --> 00:44:00,990 ајде да направите е да навистина се погледне под капакот на моторот, 918 00:44:00,990 --> 00:44:03,740 и да го разбере она што компјутер е, она што може да направи, 919 00:44:03,740 --> 00:44:05,250 и кои се нејзините ограничувања. 920 00:44:05,250 --> 00:44:08,580 И, навистина, дека недостатокот на разбирање, потенцијално, долгорочните 921 00:44:08,580 --> 00:44:12,520 може да доведе до нашите сопствени mistakes-- пишување грешки, пишување несигурен софтвер кој 922 00:44:12,520 --> 00:44:13,880 добива пробиени на некој начин. 923 00:44:13,880 --> 00:44:17,130 >> Значи, да се преземат некои чекори кон разбирање на овој малку подобро од 924 00:44:17,130 --> 00:44:19,710 начин, на пример, следниов пример. 925 00:44:19,710 --> 00:44:23,550 Одам да се оди напред и да се спроведе вистински брз програма наречена Гуја. 926 00:44:23,550 --> 00:44:25,134 Како, да додадете некои броеви заедно. 927 00:44:25,134 --> 00:44:27,800 И јас одам да се кодира некои делови тука, и само копирајте 928 00:44:27,800 --> 00:44:30,270 каде што беше досега, само така што може да се случува порано. 929 00:44:30,270 --> 00:44:33,090 Па сега имам основни почетоци на програмата наречена Гуја. 930 00:44:33,090 --> 00:44:34,670 >> И да одиме напред и да го направите тоа. 931 00:44:34,670 --> 00:44:38,680 Одам да се оди напред и да да речеме, intx добива се Инт. 932 00:44:38,680 --> 00:44:39,430 И знаете што? 933 00:44:39,430 --> 00:44:40,990 Да се ​​направи подобро корисничко искуство. 934 00:44:40,990 --> 00:44:45,740 >> Значи, да речеме x е, како и ефикасно го извести корисникот за да ни даде x. 935 00:44:45,740 --> 00:44:50,600 И тогаш дозволете ми да оди напред и да каже, printf како за у е, ова време се во очекување 936 00:44:50,600 --> 00:44:53,140 две вредности од корисникот. 937 00:44:53,140 --> 00:44:59,759 И тогаш ајде да одиме напред и да да речеме, printf, збирот на x и y е. 938 00:44:59,759 --> 00:45:01,300 И сега не сакам да се направи отсто s. 939 00:45:01,300 --> 00:45:09,080 Сакам да се направи проценти i, обратна коса црта n, а потоа приклучок во вредност сума. 940 00:45:09,080 --> 00:45:10,620 >> Па како можам да се обратите за тоа? 941 00:45:10,620 --> 00:45:11,270 Знаеш што? 942 00:45:11,270 --> 00:45:12,840 Знам како да се користи променливи. 943 00:45:12,840 --> 00:45:15,140 Дозволете ми да се изјасни за нова, int z. 944 00:45:15,140 --> 00:45:16,770 >> И јас одам да се погоди тука. 945 00:45:16,770 --> 00:45:21,470 Еднаквите знаци во оваа јазик, можеби и јас само може да го направи x плус y, 946 00:45:21,470 --> 00:45:23,660 толку долго како што крајот на мојата мислев со точка-запирка? 947 00:45:23,660 --> 00:45:28,170 Сега можам да се вратам овде, уклучете z, заврши оваа мисла со точка-запирка. 948 00:45:28,170 --> 00:45:33,160 И ајде да видиме сега, ако тие секвенци на lines-- x е да се добие Инт. 949 00:45:33,160 --> 00:45:34,770 Y е да се добие Инт. 950 00:45:34,770 --> 00:45:37,980 >> Додај x и y, чување на вредноста во z-- Значи, повторно, се сеќавам на знак за еднаквост 951 00:45:37,980 --> 00:45:38,560 не е еднаква. 952 00:45:38,560 --> 00:45:41,100 Тоа е задача од десно кон лево. 953 00:45:41,100 --> 00:45:45,180 И ајде да испечатите дека сумата од X и Y не е буквално z, 954 00:45:45,180 --> 00:45:46,830 Но, она што е во внатрешноста на ●. 955 00:45:46,830 --> 00:45:50,090 Значи, да се направи Гуја - убаво, нема грешки тоа време. 956 00:45:50,090 --> 00:45:53,030 Dot намали Гуја, внесете, x се случува да биде 1. 957 00:45:53,030 --> 00:45:55,380 >> Y ќе биде 2. 958 00:45:55,380 --> 00:45:58,964 И збирот на x и y е 3. 959 00:45:58,964 --> 00:46:00,130 Па тоа е во ред и добро. 960 00:46:00,130 --> 00:46:03,260 >> Па можете да се замисли дека математиката треба да работат во програма како оваа. 961 00:46:03,260 --> 00:46:04,040 Но знаеш што? 962 00:46:04,040 --> 00:46:06,904 Дали оваа променлива, линија 12, па дури и е потребно? 963 00:46:06,904 --> 00:46:09,820 Вие не треба да се добие во навика на само чување на работи во променливи 964 00:46:09,820 --> 00:46:10,980 само затоа што можеш. 965 00:46:10,980 --> 00:46:13,550 И, всушност, тоа е генерално смета за лоша дизајн 966 00:46:13,550 --> 00:46:18,100 ако се создавање на променлива, наречен z во овој случај, чување нешто во него, 967 00:46:18,100 --> 00:46:21,390 а потоа веднаш го користите, но никогаш повеќе. 968 00:46:21,390 --> 00:46:24,700 Зошто да се откаже нешто име како z ако сте буквално 969 00:46:24,700 --> 00:46:26,770 ке го искористиме работа само еднаш, и така 970 00:46:26,770 --> 00:46:29,380 проксимално од каде што сте го креирале се на прво место, 971 00:46:29,380 --> 00:46:31,052 толку блиску, во смисла на линии на код? 972 00:46:31,052 --> 00:46:31,760 Па да знаете што? 973 00:46:31,760 --> 00:46:34,480 Излегува дека C е прилично флексибилни. 974 00:46:34,480 --> 00:46:36,586 Ако јас всушност сакаат да plug-in вредности тука, 975 00:46:36,586 --> 00:46:38,210 Јас не треба да се изјасни за нова променлива. 976 00:46:38,210 --> 00:46:41,680 Јас само може да plug-in-x плус y, бидејќи C разбира 977 00:46:41,680 --> 00:46:43,390 аритметика, и математички оператори. 978 00:46:43,390 --> 00:46:47,140 >> Па јас едноставно може да се каже, го прават тоа по математика, x плус y, без оглед на тие вредности се, 979 00:46:47,140 --> 00:46:50,780 приклучок како резултат на цел број во таа низа. 980 00:46:50,780 --> 00:46:53,730 Така што ова може да биде, иако само една линија пократко, 981 00:46:53,730 --> 00:46:58,480 подобар дизајн, подобра програма, затоа што има помалку код, затоа 982 00:46:58,480 --> 00:46:59,921 помалку за мене да се разбере. 983 00:46:59,921 --> 00:47:01,920 И тоа е исто така само почиста, доколку ние не сме 984 00:47:01,920 --> 00:47:04,620 воведување на нови зборови, нови симболи, како z, 985 00:47:04,620 --> 00:47:07,510 и покрај тоа што не ми се служи многу на таа цел. 986 00:47:07,510 --> 00:47:12,890 >> За жал, математика не е сето тоа сигурен понекогаш. 987 00:47:12,890 --> 00:47:15,270 Ајде да одиме напред и да го направите тоа. 988 00:47:15,270 --> 00:47:18,200 Одам да се оди напред сега и да го направите следново. 989 00:47:18,200 --> 00:47:27,650 >> Ајде да го направиме printf, проценти i, плус проценти I, се проценти i, обратна коса црта n. 990 00:47:27,650 --> 00:47:32,240 И јас одам да се направи this-- xyx плус y. 991 00:47:32,240 --> 00:47:34,821 Па јас сум само ќе го преработи уште еднаш ова малку поинаку тука. 992 00:47:34,821 --> 00:47:36,320 Дозволете ми да се направи брза проверка разумност. 993 00:47:36,320 --> 00:47:37,986 Повторно, да не се понапред од нас самите. 994 00:47:37,986 --> 00:47:41,420 Направете ехидна, точка коса црта ехидна. 995 00:47:41,420 --> 00:47:44,950 x е 1, y е 2, 1 плус 2 е 3. 996 00:47:44,950 --> 00:47:45,870 Па тоа е добро. 997 00:47:45,870 --> 00:47:49,060 Но, ајде да ја комплицира оваа сега малку, и да се создаде нова датотека. 998 00:47:49,060 --> 00:47:53,350 >> Јас ќе одам да се јавите на оваа една, велат, ints, множина за цели броеви. 999 00:47:53,350 --> 00:47:55,980 Дозволете ми да започнам каде што беше пред една момент. 1000 00:47:55,980 --> 00:47:57,770 Но, сега ајде да направиме неколку други линии. 1001 00:47:57,770 --> 00:48:03,430 Дозволете ми да оди напред и да го направите следново, printf, проценти i, минус проценти i, 1002 00:48:03,430 --> 00:48:08,959 е проценти i, запирка x, y запирка yx минус. 1003 00:48:08,959 --> 00:48:10,750 Па јас го правам малку различни математика таму. 1004 00:48:10,750 --> 00:48:11,624 Ајде да го направиме уште еден. 1005 00:48:11,624 --> 00:48:16,610 Значи проценти i пати проценти i е проценти i, обратна коса црта n. 1006 00:48:16,610 --> 00:48:21,430 Ајде plug-in-x и y, x и y пати. 1007 00:48:21,430 --> 00:48:24,530 Ние ќе го користите ѕвездичка на вашиот компјутер за време. 1008 00:48:24,530 --> 00:48:26,390 >> Не го користите x. x е име на променлива овде. 1009 00:48:26,390 --> 00:48:28,270 Можете да го користите ѕвезда за множење. 1010 00:48:28,270 --> 00:48:29,020 Ајде да го направиме уште еден. 1011 00:48:29,020 --> 00:48:34,580 Printf посто, поделени со проценти јас, проценти i, 1012 00:48:34,580 --> 00:48:40,460 обратна коса црта n. xy поделено со y-- така да го користите коса црта во C 1013 00:48:40,460 --> 00:48:41,502 да се направи поделба. 1014 00:48:41,502 --> 00:48:42,460 И ајде да се направи еден на друг. 1015 00:48:42,460 --> 00:48:47,920 1016 00:48:47,920 --> 00:48:55,240 Остатокот од проценти i, поделени со проценти i, е посто. 1017 00:48:55,240 --> 00:48:59,550 xy-- и сега остатокот е она што се останати. 1018 00:48:59,550 --> 00:49:02,980 Кога ќе се обидат делење на именител во броителот, 1019 00:49:02,980 --> 00:49:05,570 колку е лево во текот на овој не би можел да се подели надвор? 1020 00:49:05,570 --> 00:49:07,910 >> Па не е, навистина, мора, симбол 1021 00:49:07,910 --> 00:49:09,470 ние сме се користи во основно училиште за ова. 1022 00:49:09,470 --> 00:49:13,830 Но, постои во C. Можете велат modulo x y, каде што 1023 00:49:13,830 --> 00:49:18,000 овој процент знак во оваа context-- збунувачки кога сте внатре 1024 00:49:18,000 --> 00:49:20,170 на двојни наводници, внатрешноста на printf, проценти 1025 00:49:20,170 --> 00:49:21,830 се користи како назначувач формат. 1026 00:49:21,830 --> 00:49:25,420 >> Кога користите проценти надвор од дека во математички израз, 1027 00:49:25,420 --> 00:49:29,910 тоа е операторот на modulo за модуларна arithmetic-- за нашите цели 1028 00:49:29,910 --> 00:49:33,650 тука, само значи, она што е остатокот од x поделено со y? 1029 00:49:33,650 --> 00:49:36,130 Значи x поделено со y е y x коса црта. 1030 00:49:36,130 --> 00:49:38,220 Што е остатокот од x поделено со y? 1031 00:49:38,220 --> 00:49:41,780 Тоа е x y МО, како програмер би рекол. 1032 00:49:41,780 --> 00:49:48,300 >> Значи, ако сум направил ниту една грешка тука, дозволете ми да оди напред и да ints, множина, убаво, 1033 00:49:48,300 --> 00:49:50,010 и точка коса црта ints. 1034 00:49:50,010 --> 00:49:55,270 И да одиме напред и да се направи, да речеме, 1, 10. 1035 00:49:55,270 --> 00:49:58,390 Сите во право, 1 плус 10 е 11, чек. 1036 00:49:58,390 --> 00:50:01,240 1 минус 10 е негативен 9, проверете. 1037 00:50:01,240 --> 00:50:03,420 >> 1 пати 10 е 10, чек. 1038 00:50:03,420 --> 00:50:07,090 1 поделено со 10 is-- Добро, ќе го прескокне тој. 1039 00:50:07,090 --> 00:50:09,480 Остатокот од 1 поделено со 10 е 1. 1040 00:50:09,480 --> 00:50:10,680 Тоа е точно. 1041 00:50:10,680 --> 00:50:12,630 Но, има грешка во тука. 1042 00:50:12,630 --> 00:50:15,390 >> Така, оној ставам предаде, не е точно. 1043 00:50:15,390 --> 00:50:16,670 Мислам, тоа е во близина на 0. 1044 00:50:16,670 --> 00:50:20,670 1 поделено со 10, знаеш, ако ние сме намалување на некои делови, да, тоа е нула. 1045 00:50:20,670 --> 00:50:28,050 Но, тоа навистина треба да биде 1/10, 0.1, или 0,10, 0,1000, и така натаму. 1046 00:50:28,050 --> 00:50:30,600 >> Тоа навистина не треба да биде нула. 1047 00:50:30,600 --> 00:50:35,990 Па, излегува дека компјутерот е прави буквално она што го рече да се направи. 1048 00:50:35,990 --> 00:50:39,460 Ние се прави математика како X поделено со y. 1049 00:50:39,460 --> 00:50:44,680 И двете x и y, по линиите на код порано, се цели броеви. 1050 00:50:44,680 --> 00:50:50,440 >> Покрај тоа, на линија 15, ние сме кажува printf, еј, printf plug-in 1051 00:50:50,440 --> 00:50:54,230 цел број, plug-in-цел број, plug-in-на integer-- посебно 1052 00:50:54,230 --> 00:50:57,580 x, а потоа и y, а потоа x поделено со y. x и y се ints. 1053 00:50:57,580 --> 00:50:59,060 Ние сме добро таму. 1054 00:50:59,060 --> 00:51:01,250 >> Но, она што е x поделено со X? 1055 00:51:01,250 --> 00:51:06,790 x поделено со y треба да биде, математички, 1/10, или 0.1, 1056 00:51:06,790 --> 00:51:11,600 кој е вистинскиот број, реален број има, потенцијално, децимална точка. 1057 00:51:11,600 --> 00:51:13,230 Тоа не е цел број. 1058 00:51:13,230 --> 00:51:18,290 >> Но, она што е најблиску број на 1/10, или 0,1? 1059 00:51:18,290 --> 00:51:21,114 Да, тоа е вид на нула. 1060 00:51:21,114 --> 00:51:22,030 0.1 е како тоа многу. 1061 00:51:22,030 --> 00:51:22,890 И 1 е ова многу. 1062 00:51:22,890 --> 00:51:25,870 Значи 1/10 е поблиску до 0 отколку што е на еден. 1063 00:51:25,870 --> 00:51:30,800 >> И така она C прави за us-- вид, затоа што тоа го кажа to-- 1064 00:51:30,800 --> 00:51:32,600 е truncating дека цел број. 1065 00:51:32,600 --> 00:51:40,540 Тоа е преземање на вредноста, кој повторно е би требало да биде нешто како 0,1000, 1066 00:51:40,540 --> 00:51:41,800 0 и така натаму. 1067 00:51:41,800 --> 00:51:45,320 И тоа е се што truncating по децималната точка 1068 00:51:45,320 --> 00:51:47,510 така што сите на овој работи, бидејќи тоа не се случи 1069 00:51:47,510 --> 00:51:51,910 вклопат во поимот на број, кој е само број како негативни 1, 0, 1, 1070 00:51:51,910 --> 00:51:55,830 нагоре и надолу, го фрла далеку се по децималната точка затоа што 1071 00:51:55,830 --> 00:51:59,020 не може да се вклопат на децимална точка во целиот број и по дефиниција. 1072 00:51:59,020 --> 00:52:01,290 >> Значи одговорот тука е нула. 1073 00:52:01,290 --> 00:52:02,600 Па, како да го надминете овој? 1074 00:52:02,600 --> 00:52:04,400 Ние треба друго решение, сите заедно. 1075 00:52:04,400 --> 00:52:06,880 И ние може да го направите ова, како што следи. 1076 00:52:06,880 --> 00:52:12,820 >> Дозволете ми да оди напред и да се создаде нова датотека, ова се вика floats.c. 1077 00:52:12,820 --> 00:52:16,500 И зачувајте тука во истиот директориум, float.c. 1078 00:52:16,500 --> 00:52:19,360 1079 00:52:19,360 --> 00:52:23,260 И дозволете ми да оди напред и да ја копирате некои од дека кодот од порано. 1080 00:52:23,260 --> 00:52:27,690 >> Но, наместо на добивање на int, ајде да го направите тоа. 1081 00:52:27,690 --> 00:52:31,037 Дај ми децимален број наречен x. каде што со подвижна запирка 1082 00:52:31,037 --> 00:52:33,370 вредност е само буквално нешто со подвижна запирка. 1083 00:52:33,370 --> 00:52:34,410 Тоа може да се движи кон лево, на десно. 1084 00:52:34,410 --> 00:52:35,530 Тоа е вистински број. 1085 00:52:35,530 --> 00:52:38,050 >> И дозволете ми да не ги нарекуваат се int, но се плови, 1086 00:52:38,050 --> 00:52:41,420 кој исто така беше еден од менито на опции во библиотеката C250. 1087 00:52:41,420 --> 00:52:43,220 Ајде y се промени за да се одржи. 1088 00:52:43,220 --> 00:52:45,000 Значи ова станува се плови. 1089 00:52:45,000 --> 00:52:47,620 >> И сега, ние не сакаме да го приклучиш во ints. 1090 00:52:47,620 --> 00:52:53,130 Излегува ние мора да ја користи проценти F за плови, проценти F за плови, 1091 00:52:53,130 --> 00:52:54,560 и сега да ја зачувате. 1092 00:52:54,560 --> 00:53:01,220 И сега, прсти ја преминал, бидете плови, убаво, точка коса црта плови. 1093 00:53:01,220 --> 00:53:04,280 x се случува да биде еден 1. y Ќе биде 10 повторно. 1094 00:53:04,280 --> 00:53:08,240 >> И, добро, во ред тоа ми е точна. 1095 00:53:08,240 --> 00:53:10,240 Се надевав на повеќе, но јас заборавив да го пишувам. 1096 00:53:10,240 --> 00:53:13,250 Па ајде да одиме и да ја поправите оваа логичка грешка. 1097 00:53:13,250 --> 00:53:16,280 >> Ајде да одиме напред и го имате следново. 1098 00:53:16,280 --> 00:53:18,080 Ние само ќе се направи малку копирате и залепите. 1099 00:53:18,080 --> 00:53:20,080 И јас одам да се каже минус. 1100 00:53:20,080 --> 00:53:21,890 >> И јас одам да се каже пати. 1101 00:53:21,890 --> 00:53:24,060 И јас одам да се каже поделени. 1102 00:53:24,060 --> 00:53:28,240 И јас не одам да се направи modulo, кое не е толку germane тука, 1103 00:53:28,240 --> 00:53:33,690 поделено со F, и времиња plus-- Добро, ајде да го направите ова повторно. 1104 00:53:33,690 --> 00:53:44,210 >> Направете плови, точка коса црта плови, и 1, 10, and-- убаво, не, во ред. 1105 00:53:44,210 --> 00:53:45,250 Па јас сум идиот. 1106 00:53:45,250 --> 00:53:47,000 Значи ова е многу честа по компјутерски науки 1107 00:53:47,000 --> 00:53:49,780 да се направи глупави грешки како оваа. 1108 00:53:49,780 --> 00:53:53,100 >> За педагошки цели, она што јас навистина сакав да го направам 1109 00:53:53,100 --> 00:53:57,410 е промена на науката тука до плус, минус, да пати, 1110 00:53:57,410 --> 00:54:01,140 и да се подели, како што се надевам дека забележи во текот на оваа вежба. 1111 00:54:01,140 --> 00:54:04,700 Па сега ајде повторно да ги собере на оваа програма, се направи точка коса црта плови. 1112 00:54:04,700 --> 00:54:07,950 >> И по трет пат, ајде види дали таа ги исполнува моите очекувања. 1113 00:54:07,950 --> 00:54:21,480 1, 10, внесете, да, во ред, 1.000, поделено со 10.000, е 0,100000. 1114 00:54:21,480 --> 00:54:24,952 И излегува можеме да ги контролираме колку Бројките се по оние децимални места. 1115 00:54:24,952 --> 00:54:25,660 Ние, всушност, ќе. 1116 00:54:25,660 --> 00:54:26,790 Ќе се вратам на тоа. 1117 00:54:26,790 --> 00:54:28,440 >> Но, сега, всушност, математика е точно. 1118 00:54:28,440 --> 00:54:30,090 Значи, повторно, она што е готова брза тука? 1119 00:54:30,090 --> 00:54:33,050 Излегува дека во C, постојат не само што strings-- и, всушност, 1120 00:54:33,050 --> 00:54:36,120 Не постојат навистина, затоа што додадете оние со CS50 библиотека. 1121 00:54:36,120 --> 00:54:37,710 Но, не се само ints. 1122 00:54:37,710 --> 00:54:38,990 >> Исто така, постојат плови. 1123 00:54:38,990 --> 00:54:42,810 И излегува еден куп други податоци видови исто така, дека ние ќе се користи пред долго. 1124 00:54:42,810 --> 00:54:46,270 Излегува ако сакате еден карактер, не е низа од карактери, 1125 00:54:46,270 --> 00:54:47,610 можете да го користите само еден знак. 1126 00:54:47,610 --> 00:54:52,350 >> Излегува дека ако сакате bool, Булова вредност, тоа е вистина или само лажна, 1127 00:54:52,350 --> 00:54:56,840 благодарение на CS50 библиотека, ние сме додадени на C тип bool податоци. 1128 00:54:56,840 --> 00:54:59,180 Но, тоа, исто така, е присутна во многу други јазици, како и. 1129 00:54:59,180 --> 00:55:04,130 И излегува дека понекогаш потребни поголеми броеви потоа се стандардно 1130 00:55:04,130 --> 00:55:05,210 со ints и плови. 1131 00:55:05,210 --> 00:55:10,590 >> И, всушност, двојно е број не дека го користи 32-битна, но 64 бита. 1132 00:55:10,590 --> 00:55:14,990 И долго време е број кој користи не 32, туку 64 битови битови, 1133 00:55:14,990 --> 00:55:19,190 односно, за подвижна запирка вредности и цели броеви, соодветно. 1134 00:55:19,190 --> 00:55:22,780 Па ајде, всушност, сега види во акција. 1135 00:55:22,780 --> 00:55:26,150 >> Одам да се оди напред тука и камшик до една друга програма. 1136 00:55:26,150 --> 00:55:32,020 Еве, јас ќе одам да се оди напред и ги вклучуваат cs50.h. 1137 00:55:32,020 --> 00:55:34,910 И дозволете ми да оди, вклучуваат стандардни IO.h. 1138 00:55:34,910 --> 00:55:37,320 >> И ќе забележите нешто фанки се случува овде. 1139 00:55:37,320 --> 00:55:40,592 Тоа не е боја кодирање работи во на ист начин како што беше порано. 1140 00:55:40,592 --> 00:55:43,550 И што излезе, тоа е затоа што не дале нешто името на датотеката. 1141 00:55:43,550 --> 00:55:47,270 >> Јас ќе одам да се јавите на оваа sizeof.c, и кликнете на Save. 1142 00:55:47,270 --> 00:55:51,039 И ќе забележите што се случува со мојата бела кодот против таа црна позадина. 1143 00:55:51,039 --> 00:55:52,830 Сега барем има некои пурпурна таму. 1144 00:55:52,830 --> 00:55:54,490 И тоа е синтакса истакнат. 1145 00:55:54,490 --> 00:55:57,700 >> Тоа е затоа што, едноставно, јас сум изјави за IDE тоа каков тип на датотека 1146 00:55:57,700 --> 00:56:01,060 тоа е со давање на тоа име, и посебно наставката на датотеката. 1147 00:56:01,060 --> 00:56:03,620 Сега, ајде да одиме напред и да го направите тоа. 1148 00:56:03,620 --> 00:56:08,910 Одам да се оди напред и многу едноставно печатење на following-- bool 1149 00:56:08,910 --> 00:56:11,080 е LU проценти. 1150 00:56:11,080 --> 00:56:12,950 >> Ние ќе се вратам на дека во само еден миг. 1151 00:56:12,950 --> 00:56:15,840 И тогаш јас ќе одам да големината на печатењето на bool. 1152 00:56:15,840 --> 00:56:18,170 И сега, само за да се спаси си некое време, јас сум 1153 00:56:18,170 --> 00:56:20,280 случува да се направи целина куп од нив одеднаш. 1154 00:56:20,280 --> 00:56:24,620 И, посебно, јас ќе одам да се промените ова во знак и знак. 1155 00:56:24,620 --> 00:56:27,760 Овој, јас ќе одам да се промени на двојно и двојно. 1156 00:56:27,760 --> 00:56:31,440 >> Овој, јас ќе одам да се промени да се плови и плови. 1157 00:56:31,440 --> 00:56:35,670 Овој, јас ќе одам да промена на int и int. 1158 00:56:35,670 --> 00:56:38,660 И ова, јас ќе одам да се менува во долго долго. 1159 00:56:38,660 --> 00:56:40,840 И тоа е уште ги долго време, долго долго. 1160 00:56:40,840 --> 00:56:44,572 >> И тогаш, на крај, јас дадов си еден и премногу, стринг. 1161 00:56:44,572 --> 00:56:47,030 Излегува дека во C, има посебните оператор наречен 1162 00:56:47,030 --> 00:56:50,260 големината на таа буквално случува да се, кога се работи, 1163 00:56:50,260 --> 00:56:52,099 да ни кажете големината на секоја од овие варијабли. 1164 00:56:52,099 --> 00:56:53,890 И ова е еден начин, сега, можеме да се поврзете назад 1165 00:56:53,890 --> 00:56:57,140 да се расправа минатата недела на податоци и застапеност. 1166 00:56:57,140 --> 00:57:00,330 >> Дозволете ми да оди напред и да се изработат големина на dot големина коса црта. 1167 00:57:00,330 --> 00:57:01,210 И ајде да видиме. 1168 00:57:01,210 --> 00:57:05,210 Излегува дека во C, посебно на CS50 IDE, 1169 00:57:05,210 --> 00:57:08,170 посебно на оперативниот систем Ubuntu, 1170 00:57:08,170 --> 00:57:11,100 која е 64-битен оперативен на систем во овој случај, 1171 00:57:11,100 --> 00:57:14,189 на bool ќе се користи еден бајт на просторот. 1172 00:57:14,189 --> 00:57:16,480 Тоа е како се мери големината, не во битови, но во бајти. 1173 00:57:16,480 --> 00:57:18,690 И се сети дека еден бајт е осум бита. 1174 00:57:18,690 --> 00:57:22,030 Значи, bool, и покрај тоа што технички треба само 0 или 1, 1175 00:57:22,030 --> 00:57:24,092 тоа е малку непотребното како ние сме го спроведува. 1176 00:57:24,092 --> 00:57:26,800 Тоа е, всушност, ќе се користи во целина byte-- па сите нули, можеби се 1177 00:57:26,800 --> 00:57:31,050 сите оние, или нешто слично, или само еден 1 меѓу осум бита. 1178 00:57:31,050 --> 00:57:34,962 >> Знак, пак, што се користи за лик како ASCII карактер на минатата недела, 1179 00:57:34,962 --> 00:57:36,170 се случува да биде еден знак. 1180 00:57:36,170 --> 00:57:42,340 И тоа synchs со нашиот поим на тоа да биде не повеќе од 256 bits-- подобро, 1181 00:57:42,340 --> 00:57:45,360 synchs со него бидејќи нема подолго од 8 бита, што 1182 00:57:45,360 --> 00:57:47,450 ни дава колку што 256 вредности. 1183 00:57:47,450 --> 00:57:49,680 А двојно ќе се биде 8 бајти или 64 бита. 1184 00:57:49,680 --> 00:57:50,510 >> Носете е 4. 1185 00:57:50,510 --> 00:57:51,690 На int е 4. 1186 00:57:51,690 --> 00:57:52,980 А долго, долго време е 8. 1187 00:57:52,980 --> 00:57:54,716 И низа е 8. 1188 00:57:54,716 --> 00:57:55,840 Но, не грижете се за тоа. 1189 00:57:55,840 --> 00:57:57,340 Ние ќе се лупам назад тој слој. 1190 00:57:57,340 --> 00:57:59,940 Излезе, жици може да да биде подолг од 8 бајти. 1191 00:57:59,940 --> 00:58:02,310 >> И, навистина, ние сум напишал жици веќе, здраво светот, 1192 00:58:02,310 --> 00:58:03,700 подолго од 8 бајти. 1193 00:58:03,700 --> 00:58:06,270 Но, ние ќе се вратам на дека во само еден миг. 1194 00:58:06,270 --> 00:58:09,690 Но, да го одземе тука е следниот. 1195 00:58:09,690 --> 00:58:15,320 >> Секој компјутер има само ограничен количина на меморија и простор. 1196 00:58:15,320 --> 00:58:17,860 Можете да ги чувате само толку многу додадени фајлови на вашиот Mac или PC. 1197 00:58:17,860 --> 00:58:23,030 Можете да ги чувате само толку многу програми во RAM работи одеднаш, нужно, дури и 1198 00:58:23,030 --> 00:58:26,360 со виртуелна меморија, затоа имате ограничен износ на RAM меморија. 1199 00:58:26,360 --> 00:58:28,990 >> И само да picture-- ако никогаш не сте отвори лаптоп 1200 00:58:28,990 --> 00:58:31,300 или нареди дополнителна меморија за компјутер, 1201 00:58:31,300 --> 00:58:33,670 може да не знаат дека внатрешноста на вашиот компјутер 1202 00:58:33,670 --> 00:58:36,590 е нешто што изгледа малку се допаѓа ова. 1203 00:58:36,590 --> 00:58:40,540 Значи ова е само една заедничка компанија со име Од клучно значење што го прави RAM меморија за компјутери. 1204 00:58:40,540 --> 00:58:43,620 И RAM меморија е местото каде што програми живеат, а тие си работи. 1205 00:58:43,620 --> 00:58:46,630 >> Така, на секој Mac или PC, кога ќе се удвои кликнете на програма, а тоа се отвора, 1206 00:58:46,630 --> 00:58:48,921 и тоа се отвора некои Word документ или нешто слично, 1207 00:58:48,921 --> 00:58:51,764 тоа го чува привремено RAM меморија, RAM меморија, бидејќи е побрз 1208 00:58:51,764 --> 00:58:53,680 од вашиот хард диск, или вашата цврста состојба диск. 1209 00:58:53,680 --> 00:58:56,600 Па тоа е само во случај кога програмите се да живее, кога тие работи, 1210 00:58:56,600 --> 00:58:58,060 или кога се користат датотеки. 1211 00:58:58,060 --> 00:59:00,890 >> Значи мора да работите кои изгледаат како овој во внатрешноста на вашиот лаптоп, 1212 00:59:00,890 --> 00:59:03,320 или малку поголеми работи во внатрешноста на вашиот десктоп. 1213 00:59:03,320 --> 00:59:07,440 Но, клучот е дека треба само ограничен број на овие работи. 1214 00:59:07,440 --> 00:59:11,230 И има само ограничен износ на хардвер седи на маса ова право 1215 00:59:11,230 --> 00:59:11,730 овде. 1216 00:59:11,730 --> 00:59:15,920 >> Значи, сигурно, не можеме да ги чувате бескрајно долга броеви. 1217 00:59:15,920 --> 00:59:19,030 И, сепак, ако се сетам основно училиште, колку може бројки 1218 00:59:19,030 --> 00:59:21,400 имаш на правото на децимална точка? 1219 00:59:21,400 --> 00:59:24,680 За таа работа, колку може бројки мора да се од лево на децимална точка? 1220 00:59:24,680 --> 00:59:26,300 Навистина, бесконечно многу. 1221 00:59:26,300 --> 00:59:30,840 >> Сега, ние, луѓето само што може да знаат како да го изговара милиони евра, 1222 00:59:30,840 --> 00:59:34,990 и милијарди, милијарди долари, а квадрилион и квинтилијарди. 1223 00:59:34,990 --> 00:59:39,370 И јас сум туркање на границите на мојот understanding-- или my-- Разбирам 1224 00:59:39,370 --> 00:59:41,110 броеви, но ми изговор на броеви. 1225 00:59:41,110 --> 00:59:44,720 Но, тие може да се добие бесконечно голем со бесконечно многу цифри лево 1226 00:59:44,720 --> 00:59:47,050 или на правото на децимална точка. 1227 00:59:47,050 --> 00:59:50,040 >> Но, компјутери имаат само ограничен износ на меморија, 1228 00:59:50,040 --> 00:59:53,510 ограничен број на транзистори, на ограничен број на светилки во внатрешноста. 1229 00:59:53,510 --> 00:59:57,350 Значи она што се случува кога ќе снема простор? 1230 00:59:57,350 --> 00:59:59,620 Со други зборови, ако сетам на минатата недела 1231 00:59:59,620 --> 01:00:03,160 кога зборувавме за броеви самите може да бидат застапени во бинарна, 1232 01:00:03,160 --> 01:00:05,480 Претпоставувам дека ние го добивме овој 8-битна вредност тука. 1233 01:00:05,480 --> 01:00:08,290 >> И ние имаме седум 1 и еден 0. 1234 01:00:08,290 --> 01:00:10,827 И да претпоставиме дека сакаме да додадете 1 на оваа вредност. 1235 01:00:10,827 --> 01:00:12,410 Ова е навистина голема бројка во моментов. 1236 01:00:12,410 --> 01:00:16,610 >> Ова е 254, ако се сеќавам математика од минатата недела во право. 1237 01:00:16,610 --> 01:00:19,480 Но, што ако јас се промени дека најдесната 0 до 1? 1238 01:00:19,480 --> 01:00:22,800 Целиот број на Се разбира, станува осум 1 е. 1239 01:00:22,800 --> 01:00:24,050 Значи ние се уште сме добри. 1240 01:00:24,050 --> 01:00:27,204 >> И тоа веројатно претставува 255, иако во зависност од контекстот 1241 01:00:27,204 --> 01:00:29,120 тоа всушност може да претставува негативен број. 1242 01:00:29,120 --> 01:00:31,240 Но повеќе за тоа друг пат. 1243 01:00:31,240 --> 01:00:34,220 Ова се чувствува како да е за високо како што може да смета. 1244 01:00:34,220 --> 01:00:35,290 >> Сега, тоа е само 8 бита. 1245 01:00:35,290 --> 01:00:38,170 И мојот Mac, секако, има начин повеќе од 8 бита од меморија. 1246 01:00:38,170 --> 01:00:39,170 Но тоа не се конечни. 1247 01:00:39,170 --> 01:00:43,230 Значи истиот аргумент се однесува, дури и ако имаат повеќе од овие оние на екранот. 1248 01:00:43,230 --> 01:00:47,020 >> Но, она што се случува ако сте складирање на овој број, 255, 1249 01:00:47,020 --> 01:00:49,290 и сакате да се избројат 1 малку повисоки? 1250 01:00:49,290 --> 01:00:51,600 Сакаш да одиме 255-256. 1251 01:00:51,600 --> 01:00:55,800 Проблемот, се разбира, е дека ако почне пребројување на нула како и минатата недела, 1252 01:00:55,800 --> 01:00:59,670 што не може да се смета како високо како 256, а камоли 257, 1253 01:00:59,670 --> 01:01:02,584 а камоли 258, m, бидејќи она што се случува кога ќе додадете 1? 1254 01:01:02,584 --> 01:01:05,000 Ако го направите стариот основно училиште пристап, ќе се стави на 1 тука, 1255 01:01:05,000 --> 01:01:08,150 а потоа 1 плус 1 е 2, но тоа е навистина нула, ти го носиш на 1, 1256 01:01:08,150 --> 01:01:09,695 носат 1, носат 1. 1257 01:01:09,695 --> 01:01:12,620 Сите овие работи, овие 1, оди на нула. 1258 01:01:12,620 --> 01:01:17,820 И ќе навивам, да, како некој посочи, 1 на левата страна. 1259 01:01:17,820 --> 01:01:22,540 Но, сè може да се всушност гледаат и се вклопуваат во меморијата 1260 01:01:22,540 --> 01:01:27,960 е само осум 0, што е да се каже во одреден момент, ако, на компјутер, 1261 01:01:27,960 --> 01:01:32,490 се обиде броење доволно високо, ти си ќе заврши околу, се чини, 1262 01:01:32,490 --> 01:01:35,850 на нула, или можеби дури и негативен броеви, кои се дури и пониски од нула. 1263 01:01:35,850 --> 01:01:37,260 >> И ние може да вид на се види тоа. 1264 01:01:37,260 --> 01:01:39,900 Дозволете ми да оди напред и да пишува вистински брз програмата тука. 1265 01:01:39,900 --> 01:01:43,690 Дозволете ми да оди напред и да пишува програма наречена прелевање. 1266 01:01:43,690 --> 01:01:49,980 Вклучуваат cs50.h, вклучуваат стандард IO.h-- ох, 1267 01:01:49,980 --> 01:01:51,730 Јас навистина промашив означувањето на синтаксата. 1268 01:01:51,730 --> 01:01:54,440 Значи, да се спаси ова како overflow.c. 1269 01:01:54,440 --> 01:01:57,084 >> И сега int главната void-- и пред долго време, ние ќе 1270 01:01:57,084 --> 01:01:59,500 се врати да се објасни зошто ние се задржи пишување int главната неважечки. 1271 01:01:59,500 --> 01:02:02,080 Но, за сега, ајде да се направи тоа, земајќи го здраво за готово. 1272 01:02:02,080 --> 01:02:06,200 Ајде да си даде int, и се иницијализира на 0. 1273 01:02:06,200 --> 01:02:11,716 >> Ајде тогаш да го направите за int i добие zero-- Всушност, ајде да го направите бесконечна јамка 1274 01:02:11,716 --> 01:02:12,590 и да видиме што се случува. 1275 01:02:12,590 --> 01:02:22,440 Иако е точно, тогаш ајде да се печати n е проценти i, обратна коса црта n, plug-in-n. 1276 01:02:22,440 --> 01:02:27,200 Но, сега, да се направи n n добива плус 1. 1277 01:02:27,200 --> 01:02:29,660 >> Значи со други зборови, на секоја повторување на овој бескрајна јамка, 1278 01:02:29,660 --> 01:02:32,550 ајде да ги вредност n е, и додадете 1 до неа, а потоа 1279 01:02:32,550 --> 01:02:34,350 зачувување на резултатот уште во n на левата страна. 1280 01:02:34,350 --> 01:02:37,150 И, всушност, сме виделе синтакса нешто како ова, за кратко време. 1281 01:02:37,150 --> 01:02:39,730 А се излади трик е наместо на пишување на сето тоа, 1282 01:02:39,730 --> 01:02:42,770 всушност, може да се каже еден n плус еднаков на 1. 1283 01:02:42,770 --> 01:02:47,480 >> Или, пак, ако навистина сакате да биде фенси, може да се каже n плус плус точка-запирка. 1284 01:02:47,480 --> 01:02:50,130 Но, овие последните две се само она што ние би го нарекуваат синтаксички шеќер 1285 01:02:50,130 --> 01:02:50,790 за првото нешто. 1286 01:02:50,790 --> 01:02:53,456 >> Првата работа е поексплицитно, сосема во ред, целосно точни. 1287 01:02:53,456 --> 01:02:55,470 Но, ова е почест случај, јас ќе кажам. 1288 01:02:55,470 --> 01:02:57,210 Значи, ние ќе го направи тоа за само еден миг. 1289 01:02:57,210 --> 01:03:01,685 >> Ајде сега да преливник, што звучи прилично застрашувачки, точка коса црта претекување. 1290 01:03:01,685 --> 01:03:04,380 1291 01:03:04,380 --> 01:03:09,852 Ајде да видиме, n е добивање прилично голема. 1292 01:03:09,852 --> 01:03:11,310 Но, ајде да размислиме, колку е голема може N добие? 1293 01:03:11,310 --> 01:03:12,870 >> n е цел број. 1294 01:03:12,870 --> 01:03:16,400 Видовме еден миг пред со големината на пример за тоа дека на int е четири бајти. 1295 01:03:16,400 --> 01:03:22,070 Ние знаеме од минатата недела, четири бајти е 32 бита, бидејќи 8 4 пати, тоа е 32. 1296 01:03:22,070 --> 01:03:23,460 Тоа се случува да биде 4 милијарди долари. 1297 01:03:23,460 --> 01:03:25,802 >> И ние сме до 800.000. 1298 01:03:25,802 --> 01:03:28,510 Ова се случува да се засекогаш да се смета како високо како што веројатно може. 1299 01:03:28,510 --> 01:03:30,635 Па јас ќе одам да се оди напред, Како што можете да пред долго време, 1300 01:03:30,635 --> 01:03:34,910 и ја погоди контрола C-- искрено, контрола Ц, многу, каде што контролата C генерално 1301 01:03:34,910 --> 01:03:36,034 средства откажете. 1302 01:03:36,034 --> 01:03:38,200 За жал, поради ова работи во облакот, 1303 01:03:38,200 --> 01:03:41,190 Понекогаш облакот е плукање од толку многу работи, 1304 01:03:41,190 --> 01:03:44,180 толку многу излез, тоа се случува да потрае малку повеќе време за мојот влез 1305 01:03:44,180 --> 01:03:45,630 да се дојде до облакот. 1306 01:03:45,630 --> 01:03:49,240 Значи, иако јас хит Контрола C пред неколку секунди, 1307 01:03:49,240 --> 01:03:53,110 ова е дефинитивно страна Ефектот на бесконечна јамка. 1308 01:03:53,110 --> 01:03:56,070 >> И така, во тие случаи, ние сме тоа останува да биде. 1309 01:03:56,070 --> 01:03:59,050 И ние си оди за да додадете друг терминален прозорец овде 1310 01:03:59,050 --> 01:04:03,186 со плус, што секако не е како што, бидејќи тоа е се уште размислува. 1311 01:04:03,186 --> 01:04:05,310 И да одиме напред и да биде малку повеќе разумни. 1312 01:04:05,310 --> 01:04:07,768 >> Одам да се оди напред и да прават ова само finitely многу пати. 1313 01:04:07,768 --> 01:04:10,047 Ајде да го користите за телефонска линија, што јас се алудира погоре. 1314 01:04:10,047 --> 01:04:10,630 Ајде да го направиме ова. 1315 01:04:10,630 --> 01:04:13,430 Дај ми уште една променлива int i добива 0. 1316 01:04:13,430 --> 01:04:17,430 i е помал од, да речеме, 64 i ++. 1317 01:04:17,430 --> 01:04:24,010 А сега дозволете ми да оди напред и печатење од n е проценти i, запирка n. 1318 01:04:24,010 --> 01:04:27,547 И тогаш n-- ова е уште случува да се земе засекогаш. 1319 01:04:27,547 --> 01:04:28,130 Ајде да го направиме ова. 1320 01:04:28,130 --> 01:04:30,620 >> n добива n пати 2. 1321 01:04:30,620 --> 01:04:34,140 Или, пак, може да биде фенси и не е еднакво на 2 пати. 1322 01:04:34,140 --> 01:04:37,120 Но, ајде да речеме n се еднакви, 2 пати. 1323 01:04:37,120 --> 01:04:39,321 Со други зборови, во овој новата верзија на програмата, 1324 01:04:39,321 --> 01:04:41,820 Не сакам да чекаат вечно како од 800.000 до 4 милијарди долари. 1325 01:04:41,820 --> 01:04:43,070 Ајде да се добие оваа во текот со. 1326 01:04:43,070 --> 01:04:44,920 >> Ајде да всушност двојно N секој пат. 1327 01:04:44,920 --> 01:04:47,660 Која, да се потсетиме, а удвојувањето е спротивно на се има, се разбира. 1328 01:04:47,660 --> 01:04:50,035 И додека минатата недела имаме нешто повторно, и повторно, 1329 01:04:50,035 --> 01:04:52,200 и повторно, супер брз, удвојување сигурно ќе 1330 01:04:52,200 --> 01:04:58,080 ни се од 1 до најголем можен вредност што може да се смета да се со int. 1331 01:04:58,080 --> 01:04:59,750 >> Значи, да го прават токму тоа. 1332 01:04:59,750 --> 01:05:01,720 И ние ќе се вратам на ова пред долго. 1333 01:05:01,720 --> 01:05:04,180 Но, ова, повторно, е исто како повторениот блок во Scratch. 1334 01:05:04,180 --> 01:05:05,600 И ќе го користите овој пред долго. 1335 01:05:05,600 --> 01:05:10,170 >> Ова само значи Грофот од нула до, но не се еднакви, на 64. 1336 01:05:10,170 --> 01:05:14,285 И на секој повторување на овој јамка, само продолжи да ја зголемува i. 1337 01:05:14,285 --> 01:05:18,990 Па јас ++ - и ова општо конструкција на линија 7 е само супер заеднички начин 1338 01:05:18,990 --> 01:05:22,290 за повторување на некои линии на код, некои број на пати. 1339 01:05:22,290 --> 01:05:23,362 Кои линии на код? 1340 01:05:23,362 --> 01:05:25,570 Овие големи загради, како што може да се береше класи од сега, 1341 01:05:25,570 --> 01:05:26,780 значи, го направите следново. 1342 01:05:26,780 --> 01:05:29,510 >> Тоа е во како нула, кога што има жолти блокови 1343 01:05:29,510 --> 01:05:32,680 и други бои тој вид на прифатат или прегрне други блокови. 1344 01:05:32,680 --> 01:05:34,750 Тоа е она што тие кадрава протези се прави тука. 1345 01:05:34,750 --> 01:05:40,200 Значи, ако јас добив синтакса мојот right-- вас може да се види симбол на морков во C средства 1346 01:05:40,200 --> 01:05:42,706 тоа е колку пати сум бил обидуваат да го решат овој проблем. 1347 01:05:42,706 --> 01:05:45,330 Значи, да се ослободи од тоа еден целосно, и да го затворите прозорецот. 1348 01:05:45,330 --> 01:05:46,520 И ние ќе го користат новиот еден. 1349 01:05:46,520 --> 01:05:51,980 Направете преливник, точка коса црта преливник, Enter, сите во право, 1350 01:05:51,980 --> 01:05:53,090 тоа изгледа лошо во прв план. 1351 01:05:53,090 --> 01:05:56,200 Но, ајде да дојдете назад во времето, затоа што јас го направи ова 64 пати. 1352 01:05:56,200 --> 01:05:58,700 >> И информации за прв пат, што n е 1. 1353 01:05:58,700 --> 01:06:03,110 Втор пат, n е 2, а потоа 4, а потоа 8, а потоа 16. 1354 01:06:03,110 --> 01:06:09,450 И се чини дека штом Јас се на околу 1 милијарда евра, 1355 01:06:09,450 --> 01:06:12,800 ако јас го удвои повторно, дека треба да ми даде 2 милијарди долари. 1356 01:06:12,800 --> 01:06:14,980 Но, се покажа, тоа е право на врвот. 1357 01:06:14,980 --> 01:06:18,930 >> И така тоа всушност се прелева на int од 1 милијарда 1358 01:06:18,930 --> 01:06:23,514 на околу негативните 2 милијарди долари, бидејќи цел број, 1359 01:06:23,514 --> 01:06:25,430 за разлика од броеви што на претпоставуваа минатата недела, 1360 01:06:25,430 --> 01:06:28,397 може да биде и позитивни и негативни во реалноста и во компјутерот. 1361 01:06:28,397 --> 01:06:30,730 И така барем еден од оние битови е ефективно украдени. 1362 01:06:30,730 --> 01:06:34,190 Значи ние навистина треба само 31 бита, или 2 милијарди можни вредности. 1363 01:06:34,190 --> 01:06:38,220 >> Но, за сега, готова брза е доста едноставно, што бројките се 1364 01:06:38,220 --> 01:06:42,280 и без оглед на математика е, нешто лошо се случува на крајот, 1365 01:06:42,280 --> 01:06:46,980 бидејќи на крајот ќе се обидуваат да permute битови еден премногу пати. 1366 01:06:46,980 --> 01:06:51,060 И ќе можат ефикасно да одат од сите 1 е да можеби ги сите 0, или можеби 1367 01:06:51,060 --> 01:06:54,260 само некој друг модел кој го Јасно е дека, во зависност од контекстот, 1368 01:06:54,260 --> 01:06:56,342 може да се толкува како негативен број. 1369 01:06:56,342 --> 01:06:59,300 И така тоа ќе изгледа на највисоко јас може да се смета во оваа конкретна програма 1370 01:06:59,300 --> 01:07:01,210 е само околу 1 милијарда долари. 1371 01:07:01,210 --> 01:07:02,760 Но, има делумно решение овде. 1372 01:07:02,760 --> 01:07:03,480 Знаеш што? 1373 01:07:03,480 --> 01:07:07,600 >> Дозволете ми да се промени од int за долго долго. 1374 01:07:07,600 --> 01:07:10,633 И дозволете ми да оди напред тука и say-- јас ќе одам да се 1375 01:07:10,633 --> 01:07:12,290 да го промените ова во една непотпишана долго. 1376 01:07:12,290 --> 01:07:16,860 Или, ајде да видиме, Никогаш не се сеќавам. 1377 01:07:16,860 --> 01:07:19,920 >> Ајде да одиме напред и да претекување. 1378 01:07:19,920 --> 01:07:21,860 Не, тоа не е тоа, LLD, ви благодарам. 1379 01:07:21,860 --> 01:07:23,430 Па понекогаш ѕвекот може да биде корисно. 1380 01:07:23,430 --> 01:07:27,550 Јас не се сеќавам што формат спецификациите беше порано за долго долго. 1381 01:07:27,550 --> 01:07:28,950 >> Но, навистина, ѕвекот ми кажа. 1382 01:07:28,950 --> 01:07:31,570 Зелената е некој вид на добро, сепак значи дека направил грешка. 1383 01:07:31,570 --> 01:07:33,190 Тоа е Сомневајќи се дека мислев LLD. 1384 01:07:33,190 --> 01:07:38,750 >> Значи, да ме однесе тоа е совет, долг долго децимален број, освен тоа. 1385 01:07:38,750 --> 01:07:43,190 И дозволете ми да го повторија, точка намалување на претекување, Enter. 1386 01:07:43,190 --> 01:07:45,020 И сега што е кул е тоа. 1387 01:07:45,020 --> 01:07:49,140 >> Ако јас дојдете назад во времето, ние се уште се започне броење во исто place-- 1, 2, 4, 1388 01:07:49,140 --> 01:07:50,220 8, 16. 1389 01:07:50,220 --> 01:07:54,860 Забележуваме, ги добиете сите па се до 1 милијарда долари. 1390 01:07:54,860 --> 01:07:57,070 Но, тогаш можеме безбедно да се дојде до 2 милијарди долари. 1391 01:07:57,070 --> 01:08:01,300 >> Тогаш ние се дојде до 4 милијарди долари, од 8 милијарди долари, 17 милијарди долари. 1392 01:08:01,300 --> 01:08:03,340 И ние се оди повисоко, и повисоки и повисоки. 1393 01:08:03,340 --> 01:08:05,740 На крајот, тоа, исто така, паузи. 1394 01:08:05,740 --> 01:08:09,350 >> На крајот, со долго време, која е 64-битна вредност, а не на 1395 01:08:09,350 --> 01:08:13,660 вредноста на еден 32-битен, ако смета премногу високи, ќе заврши околу 0. 1396 01:08:13,660 --> 01:08:16,410 И во овој случај, ние се случи да заврши со негативен број. 1397 01:08:16,410 --> 01:08:17,550 >> Значи ова е проблемот. 1398 01:08:17,550 --> 01:08:20,439 И излегува дека овој Проблемот не е толку таинствени. 1399 01:08:20,439 --> 01:08:23,060 Иако сум намерно тоа предизвикана со овие грешки, 1400 01:08:23,060 --> 01:08:26,149 излегува можеме да го видиме каков вид на сите околу нас, или барем некои од нас. 1401 01:08:26,149 --> 01:08:28,939 >> Значи во Лего Војна на ѕвездите, ако Дали некогаш сте играле играта, 1402 01:08:28,939 --> 01:08:33,830 излегува можете да одите околу кршење работи во ЛЕГО светот, 1403 01:08:33,830 --> 01:08:36,640 и собирање монети, во суштина. 1404 01:08:36,640 --> 01:08:39,200 И ако сте некогаш играл оваа игра премногу време, 1405 01:08:39,200 --> 01:08:42,630 како овој неименуван индивидуални овде го направи тоа, вкупниот број 1406 01:08:42,630 --> 01:08:46,700 на кованите пари што може да се соберат е, се чини, 4 милијарди долари. 1407 01:08:46,700 --> 01:08:48,240 >> Сега, со тоа е всушност заоблени. 1408 01:08:48,240 --> 01:08:50,239 Значи ЛЕГО се обидува да задржи нешта корисник пријателски. 1409 01:08:50,239 --> 01:08:53,779 Тие не го прават токму од 2 до 32 власт, на минатата недела. 1410 01:08:53,779 --> 01:08:55,310 Но, 4 милијарди е причина. 1411 01:08:55,310 --> 01:08:58,979 Се чини дека, врз основа на оваа информација, дека LEGO, а компанијата која 1412 01:08:58,979 --> 01:09:02,624 го направи овој вистински софтвер, одлучи дека максималниот број на монети, 1413 01:09:02,624 --> 01:09:04,540 корисникот може да се акумулира е, всушност, 4 милијарди долари, 1414 01:09:04,540 --> 01:09:12,069 затоа што одлучил во нивните код да се користи не долго долго, очигледно, 1415 01:09:12,069 --> 01:09:16,140 но само цел број, една непотпишана цел број, само позитивен цел број, чија 1416 01:09:16,140 --> 01:09:18,089 Макс вредност приближно е тоа. 1417 01:09:18,089 --> 01:09:19,380 Па, еве уште една смешна еден. 1418 01:09:19,380 --> 01:09:23,500 Значи во играта цивилизација, која Некои од вас може да биде запознаен со 1419 01:09:23,500 --> 01:09:26,660 излегува дека пред неколку години има беше грешка во оваа игра која 1420 01:09:26,660 --> 01:09:28,750 Ако сте играле улога на Ганди во играта, 1421 01:09:28,750 --> 01:09:34,020 наместо него се многу пацифист, наместо тоа беше неверојатно, неверојатно 1422 01:09:34,020 --> 01:09:36,399 агресивни, во некои околности. 1423 01:09:36,399 --> 01:09:40,529 Особено, на начинот на кој цивилизација работи е дека ако, на играчот, 1424 01:09:40,529 --> 01:09:44,680 прифати демократија, вашиот агресивност резултат добива 1425 01:09:44,680 --> 01:09:48,130 decremented со два, па минус минус, а потоа минус минус. 1426 01:09:48,130 --> 01:09:50,569 >> Така да одзема 2 од вашиот вистински процесирањето. 1427 01:09:50,569 --> 01:09:56,650 За жал, ако вашиот процесирањето е првично 1, 2 и ќе се одземе од него 1428 01:09:56,650 --> 01:09:59,050 по усвојувањето на демократијата како Ганди тука може да 1429 01:09:59,050 --> 01:10:02,200 да се направи, бидејќи тој беше многу passive-- 1 на скалата на агресивност. 1430 01:10:02,200 --> 01:10:04,830 Но, ако тој прифаќа демократијата, тогаш тој се движи од 1 до негативни 1. 1431 01:10:04,830 --> 01:10:11,470 >> За жал, тие беа користење на непотпишана броеви, 1432 01:10:11,470 --> 01:10:15,400 што значи дека тие се третираат дури и негативен броеви, како и иако тие беа позитивни. 1433 01:10:15,400 --> 01:10:19,780 И излегува дека позитивни еквивалент на негативни 1, 1434 01:10:19,780 --> 01:10:23,480 во типичен компјутерски програми, е 255. 1435 01:10:23,480 --> 01:10:27,250 Значи, ако Ганди прифаќа , А со тоа и демократијата има 1436 01:10:27,250 --> 01:10:32,470 неговата агресивност резултат намален, тоа всушност се врти 255 1437 01:10:32,470 --> 01:10:35,470 и него најмногу го прави агресивен карактер во играта. 1438 01:10:35,470 --> 01:10:36,930 Па можете на Google врз ова. 1439 01:10:36,930 --> 01:10:39,380 И тоа беше, всушност, на случајно програмски грешки, 1440 01:10:39,380 --> 01:10:43,010 но тоа е сосема влезе ученост и оттогаш. 1441 01:10:43,010 --> 01:10:44,360 >> Тоа е сите забава и симпатична. 1442 01:10:44,360 --> 01:10:47,760 Повеќе застрашувачки е кога вистинските реалниот свет уреди, и не игри, 1443 01:10:47,760 --> 01:10:48,820 имаат истите грешки. 1444 01:10:48,820 --> 01:10:54,500 Всушност, само пред една година дојде една статија дознаете за Боинг 787 Dreamliner. 1445 01:10:54,500 --> 01:10:56,850 >> И член на прв поглед чита малку таинствени. 1446 01:10:56,850 --> 01:11:01,480 Но, тоа го рече ова, софтвер ранливост во Боинг 1447 01:11:01,480 --> 01:11:04,790 нови 787 Dreamliner Џет потенцијал да предизвика пилоти 1448 01:11:04,790 --> 01:11:07,220 да ја изгуби контролата авионот, можеби 1449 01:11:07,220 --> 01:11:11,750 во средината на летот, службениците FAA предупреди авиокомпании неодамна. 1450 01:11:11,750 --> 01:11:14,520 Тоа беше определување Тој модел 787 1451 01:11:14,520 --> 01:11:19,770 Авионот кој се напојува постојано за 248 дена 1452 01:11:19,770 --> 01:11:24,880 да ги изгубите сите наизменична струја, наизменична струја, електрична енергија се должи на генератор 1453 01:11:24,880 --> 01:11:28,892 контролни единици, GCUs, истовремено ќе успеат во сигурниот режим. 1454 01:11:28,892 --> 01:11:29,850 Тоа е вид на ме губи. 1455 01:11:29,850 --> 01:11:35,390 Но, во меморандумот што е наведено, во ред, сега добив дека, состојбата е предизвикана од страна на софтвер 1456 01:11:35,390 --> 01:11:38,590 се спротивстави на внатрешната контрола на генератор 1457 01:11:38,590 --> 01:11:44,860 единици кои ќе се прелеваат по 248 дена на континуирано моќ. 1458 01:11:44,860 --> 01:11:47,070 Ние сме издавање на оваа известување за да се спречи загуба 1459 01:11:47,070 --> 01:11:49,300 на сите AC електрични моќ, која може да доведе до 1460 01:11:49,300 --> 01:11:50,980 со губење на контрола на авионот. 1461 01:11:50,980 --> 01:11:55,380 >> Значи, во буквална смисла, постои некоја цел број, или некоја еквивалентна тип на податоци, 1462 01:11:55,380 --> 01:11:57,960 се користи во софтвер во вистински авион 1463 01:11:57,960 --> 01:12:00,756 дека ако се задржи вашиот авион доволно долго, која очигледно 1464 01:12:00,756 --> 01:12:03,880 може да биде случај ако сте само трчање нив постојано и никогаш не го исклучувате 1465 01:12:03,880 --> 01:12:06,810 вашиот авион, се чини, или допуштајќи батериите умре, 1466 01:12:06,810 --> 01:12:09,840 на крајот ќе брои до и горе, и нагоре и нагоре и нагоре и нагоре. 1467 01:12:09,840 --> 01:12:12,150 >> И, од природата, ограничен износ на меморија 1468 01:12:12,150 --> 01:12:15,880 ќе претекување, тркалање назад кон нула или некоја негативна вредност, 1469 01:12:15,880 --> 01:12:19,920 пропратен ефект на која е застрашувачка вистинската реалност 1470 01:12:19,920 --> 01:12:23,970 дека авионот можеби ќе треба да се рестартира, ефикасно, 1471 01:12:23,970 --> 01:12:27,290 или може да падне, уште полошо, како што лета. 1472 01:12:27,290 --> 01:12:29,230 Значи, овие видови на прашања се уште со нас, 1473 01:12:29,230 --> 01:12:33,130 even-- ова беше 2015 член, сите пострашно 1474 01:12:33,130 --> 01:12:36,100 кога ќе не мора да се се разбере, цениме, или за предвидување 1475 01:12:36,100 --> 01:12:38,640 овие видови на грешки. 1476 01:12:38,640 --> 01:12:42,030 >> Значи излегува дека една друга лоша работа во врска податоци застапеност. 1477 01:12:42,030 --> 01:12:47,080 Излезе дека дури и плови се вид на недостатоци, затоа што плови, исто така, 1478 01:12:47,080 --> 01:12:51,440 Предложив се 32 бити, или можеби 64 ако користите двојно. 1479 01:12:51,440 --> 01:12:53,070 Но тоа е уште конечни. 1480 01:12:53,070 --> 01:12:57,070 >> И се фати е дека ако може да стави бесконечен број на броеви 1481 01:12:57,070 --> 01:12:59,460 по децималната точка, не постои начин можете 1482 01:12:59,460 --> 01:13:02,690 може да ги претставуваат сите можни броеви кои учевме 1483 01:13:02,690 --> 01:13:04,990 во основно училиште може да постои во светот. 1484 01:13:04,990 --> 01:13:08,870 А компјутерот, во суштина, мора да изберете подмножество од оние броеви 1485 01:13:08,870 --> 01:13:10,200 да ги претставуваат точно. 1486 01:13:10,200 --> 01:13:12,450 >> Сега, компјутерот може да круг можеби малку, 1487 01:13:12,450 --> 01:13:17,900 и може да ви овозможи да се грубо продавница било кој број ви би можеле да сакаат. 1488 01:13:17,900 --> 01:13:20,940 Но, само интуитивно, ако имаат ограничен број на битови, 1489 01:13:20,940 --> 01:13:24,560 можете да ги permute само во многу ограничен начин. 1490 01:13:24,560 --> 01:13:26,570 Значи, вие не може да се користи конечен број 1491 01:13:26,570 --> 01:13:29,880 на пермутација на битови, модели на нули и единици, 1492 01:13:29,880 --> 01:13:32,940 да ја претставува бесконечен број на броеви, 1493 01:13:32,940 --> 01:13:37,370 што укажува на тоа дека компјутерите можат да многу добро може да лежи на нас понекогаш. 1494 01:13:37,370 --> 01:13:38,770 >> Всушност, ајде да го направите тоа. 1495 01:13:38,770 --> 01:13:41,239 Дозволете ми да се врати во CS50 ИРО. 1496 01:13:41,239 --> 01:13:43,030 Дозволете ми да оди напред и да создаде мала програма 1497 01:13:43,030 --> 01:13:47,940 наречен непрецизност, да се покаже дека компјутерите се, навистина, непрецизни. 1498 01:13:47,940 --> 01:13:51,910 >> И дозволете ми да оди напред и да се започне со некои на кои код од порано, 1499 01:13:51,910 --> 01:13:53,830 и сега само го направите следново. 1500 01:13:53,830 --> 01:14:03,640 Дозволете ми да оди напред и да прават printf, проценти f, обратна коса црта n, 1 поделено со 10. 1501 01:14:03,640 --> 01:14:07,430 Со други зборови, да се нурне подлабоко на 1/10, како и 1 поделено со 10. 1502 01:14:07,430 --> 01:14:09,760 Навистина, компјутерот може да претставуваат 1/10. 1503 01:14:09,760 --> 01:14:13,620 >> Па ајде да одиме напред и да направат непрецизност. 1504 01:14:13,620 --> 01:14:14,390 Ајде да видиме. 1505 01:14:14,390 --> 01:14:16,210 Формат одредува видот двојно. 1506 01:14:16,210 --> 01:14:18,160 Но аргументот има int тип. 1507 01:14:18,160 --> 01:14:19,040 Што се случува? 1508 01:14:19,040 --> 01:14:21,970 >> О, интересни, па тоа е Лекцијата научена од порано. 1509 01:14:21,970 --> 01:14:26,050 Сакам да кажам дека, еј, компјутерски шоу ми плови со проценти f. 1510 01:14:26,050 --> 01:14:28,200 Но, јас сум давајќи 2 ints. 1511 01:14:28,200 --> 01:14:31,120 Значи излегува, јас може да се поправи ова во неколку начини. 1512 01:14:31,120 --> 01:14:38,430 >> Јас само може да се претвори еден во 1.0, и 10 во 10.0, кој, навистина, 1513 01:14:38,430 --> 01:14:42,390 да има ефект на конвертирање нив во floats-- уште се надевам 1514 01:14:42,390 --> 01:14:43,180 на истиот број. 1515 01:14:43,180 --> 01:14:45,880 Или, пак, излегува дека има нешто ќе видиме повторно пред долго. 1516 01:14:45,880 --> 01:14:47,170 Вие би можеле да го дадат на броеви. 1517 01:14:47,170 --> 01:14:49,880 >> Можете да, со користење на овој заграда изразување, може да се каже, 1518 01:14:49,880 --> 01:14:52,560 Еј, компјутер, земи го ова 10, што знам е int. 1519 01:14:52,560 --> 01:14:54,660 Но, тоа лекување, ве молам, како да е се одржи. 1520 01:14:54,660 --> 01:14:56,680 Но, тоа се чувствува непотребно комплексни. 1521 01:14:56,680 --> 01:14:59,040 >> За нашите цели и денес, ајде да буквално 1522 01:14:59,040 --> 01:15:02,700 точка вредности да ги направи подвижна со децимална точка, вака. 1523 01:15:02,700 --> 01:15:07,060 Дозволете ми да оди напред и прегласувањето, бидете непрецизност, добро, точка коса црта 1524 01:15:07,060 --> 01:15:08,870 непрецизност, влезе. 1525 01:15:08,870 --> 01:15:10,990 Добро, ние сме во потрага добро. 1526 01:15:10,990 --> 01:15:18,194 >> 1 поделено со 10, според моето Mac тука е, всушност, 0,100000. 1527 01:15:18,194 --> 01:15:21,360 Сега, ме учеа во основно училиште има треба да биде бесконечен број од 0 е. 1528 01:15:21,360 --> 01:15:23,151 Значи, да се барем да се обидат за да ја видите некои од нив. 1529 01:15:23,151 --> 01:15:26,770 Излегува дека printf е малку познавач уште не сме го користеле. 1530 01:15:26,770 --> 01:15:30,890 Излегува вие не мора да се определи само отсто f, или само посто. 1531 01:15:30,890 --> 01:15:33,830 Ти всушност може да се определи некои контрола опции тука. 1532 01:15:33,830 --> 01:15:36,470 >> Поточно, јас ќе одам да се каже, еј, printf, 1533 01:15:36,470 --> 01:15:39,660 всушност, ми покаже децимални 10 поени. 1534 01:15:39,660 --> 01:15:40,820 Па тоа изгледа малку чудно. 1535 01:15:40,820 --> 01:15:42,845 Но, да се каже отсто, точка, колку броеви 1536 01:15:42,845 --> 01:15:44,970 сакате да се види по децимална точка, и тогаш f 1537 01:15:44,970 --> 01:15:48,340 за рамен, само затоа што тоа е што вели документација. 1538 01:15:48,340 --> 01:15:50,080 Дозволете ми да оди напред и да се спаси. 1539 01:15:50,080 --> 01:15:52,460 >> И ќе забележите исто така, јас сум добивање на уморни прекуцување работи. 1540 01:15:52,460 --> 01:15:55,900 Па јас сум само поставување на на стрелката надолу за клучеви тука. 1541 01:15:55,900 --> 01:15:58,710 И ако јас удираш, вие може да се види на сите команди 1542 01:15:58,710 --> 01:16:01,090 дека не сум направил, или неправилно. 1543 01:16:01,090 --> 01:16:04,630 >> И јас одам да се оди напред и сега всушност, не го користат, очигледно. 1544 01:16:04,630 --> 01:16:11,416 Направете непрецизност, точка намали imprecision-- така 1545 01:16:11,416 --> 01:16:13,290 она што ме учеа во основно училиште проверки. 1546 01:16:13,290 --> 01:16:19,010 Дури и ако јас го испечатите до 10 децималниот го става, навистина, е 0,10000. 1547 01:16:19,010 --> 01:16:19,840 Но знаеш што? 1548 01:16:19,840 --> 01:16:21,150 >> Ајде да се малку алчен. 1549 01:16:21,150 --> 01:16:23,990 Да речеме, како, покажи ми 55 укажува по децималната. 1550 01:16:23,990 --> 01:16:26,160 Ајде да навистина се тоа програма надвор за центрифугирање. 1551 01:16:26,160 --> 01:16:31,170 Дозволете ми да го римејк со шминка непрецизност, точка коса црта, непрецизност. 1552 01:16:31,170 --> 01:16:32,390 >> И тука ќе одиме. 1553 01:16:32,390 --> 01:16:34,420 Детството е лага. 1554 01:16:34,420 --> 01:16:48,410 Очигледно, 1 поделено со 10 е навистина 0.100000000000000005551115123-- 1555 01:16:48,410 --> 01:16:49,740 >> Што се случува? 1556 01:16:49,740 --> 01:16:53,360 Па, што се испоставува, ако вид на барате доволно далеку во основната 1557 01:16:53,360 --> 01:16:55,950 застапеност на овој број, тоа, всушност, 1558 01:16:55,950 --> 01:17:00,400 не е точно 1/10, или 0,1 и бесконечен број на нули. 1559 01:17:00,400 --> 01:17:01,630 Сега, зошто е тоа така? 1560 01:17:01,630 --> 01:17:06,250 >> Па, иако ова е едноставна број за нас луѓето, 1 поделено со 10, 1561 01:17:06,250 --> 01:17:10,910 тоа е уште една од бесконечно многу броеви кои ние би можеле да смислат. 1562 01:17:10,910 --> 01:17:14,490 Но, компјутерот може да само што претставуваат finitely толку многу броеви. 1563 01:17:14,490 --> 01:17:18,710 И така, ефикасно, што компјутер се покажува ни е нејзиниот најблизок 1564 01:17:18,710 --> 01:17:22,940 приближување на бројот ние сакаме да веруваме дека е 1/10, 1565 01:17:22,940 --> 01:17:27,760 или навистина 0,10000 бескрајноста. 1566 01:17:27,760 --> 01:17:30,425 >> Наместо тоа, иако, ова е како блиски, како што може да се добие. 1567 01:17:30,425 --> 01:17:32,300 И, навистина, ако се погледне под капакот на моторот, 1568 01:17:32,300 --> 01:17:37,050 како што ние сме тука со гледање 55 цифри по децималната, 1569 01:17:37,050 --> 01:17:39,990 ние всушност ја гледаат таа реалност. 1570 01:17:39,990 --> 01:17:42,610 Сега како настрана, ако сте некогаш сте виделе movie-- 1571 01:17:42,610 --> 01:17:45,780 Повеќето од вас веројатно haven't-- но пред Супермен 3 неколку години, 1572 01:17:45,780 --> 01:17:49,500 Ричард Pryor суштина балон ова реалност во неговата компанија да украде многу 1573 01:17:49,500 --> 01:17:53,500 на фракции и ситен дел од парите, бидејќи company-- што се сеќавам, 1574 01:17:53,500 --> 01:17:57,210 тоа е е while--, во суштина, фрлањето на нешто што не се вклопува 1575 01:17:57,210 --> 01:17:58,790 во поимот центи. 1576 01:17:58,790 --> 01:18:01,480 >> Но, ако ги додадете сите овие мали, мали, мали броеви повторно, 1577 01:18:01,480 --> 01:18:04,960 и повторно, и повторно, може да, како и во неговиот случај, направи добар износ на пари. 1578 01:18:04,960 --> 01:18:08,010 >> Истата идеја беше горат од понов, но сепак сега постари 1579 01:18:08,010 --> 01:18:10,500 филм, наречен деловен простор, каде момци во тој филм, 1580 01:18:10,500 --> 01:18:13,501 го направи истото, тоа зезнав целосно, заврши со премногу 1581 01:18:13,501 --> 01:18:14,666 пари во нивната банкарска сметка. 1582 01:18:14,666 --> 01:18:15,800 Сето тоа е многу сомнително. 1583 01:18:15,800 --> 01:18:19,290 Но, на крајот на денот, непрецизност е насекаде околу нас. 1584 01:18:19,290 --> 01:18:22,240 >> И тоа, исто така, може да биде застрашувачка случајот. 1585 01:18:22,240 --> 01:18:25,590 Излегува дека Супермен 3 и деловен простор на страна, има 1586 01:18:25,590 --> 01:18:28,460 може да има некои многу реална светот последици 1587 01:18:28,460 --> 01:18:32,290 на реалноста на непрецизни претставување на податоците 1588 01:18:32,290 --> 01:18:34,770 дека дури и ние, луѓето да овој ден не мора да 1589 01:18:34,770 --> 01:18:38,230 се разбере како и што и треба, или се сеќавам толку често колку што треба. 1590 01:18:38,230 --> 01:18:42,950 И, навистина, следниве клип е од разгледаме во некои многу реалниот свет 1591 01:18:42,950 --> 01:18:47,730 последици од она што се случува ако не го цениме непрецизноста дека 1592 01:18:47,730 --> 01:18:50,065 може да се случи во бројки застапеност. 1593 01:18:50,065 --> 01:18:51,300 >> [Видео репродукција] 1594 01:18:51,300 --> 01:18:55,620 >> -Computers, Ние сме сите доаѓаат да го прифати честопати фрустрирачки проблеми кои 1595 01:18:55,620 --> 01:19:00,310 оди со them-- грешки, вируси, и софтвер баговите, 1596 01:19:00,310 --> 01:19:03,130 за мали цени да плати за погодност. 1597 01:19:03,130 --> 01:19:07,800 Но, во висока технологија и висока брзина воена и вселенска програма апликации, 1598 01:19:07,800 --> 01:19:12,800 најмалиот проблем може да се зголемува во катастрофа. 1599 01:19:12,800 --> 01:19:18,900 >> На 4-ти јуни 1996 година, подготвени научници да започне беспилотни Ariane 5 ракета. 1600 01:19:18,900 --> 01:19:21,220 Тоа беше спроведувањето научни сателити дизајниран 1601 01:19:21,220 --> 01:19:24,600 прецизно да се утврди како Магнетното поле на Земјата се поврзува 1602 01:19:24,600 --> 01:19:27,410 со соларни ветрови. 1603 01:19:27,410 --> 01:19:30,800 Ракетата била изградена за Европската вселенска агенција, 1604 01:19:30,800 --> 01:19:34,370 и крена надвор од својот објект на брегот на Француска Гвајана. 1605 01:19:34,370 --> 01:19:37,540 >> -На Околу 37 секунди во на летот, тие прво 1606 01:19:37,540 --> 01:19:39,270 забележав дека нешто треба да се случи. 1607 01:19:39,270 --> 01:19:42,250 Млазниците се вртење во начинот на кој тие навистина не треба. 1608 01:19:42,250 --> 01:19:46,580 Околу 40 секунди во лет, Јасно е дека возилото е во неволја. 1609 01:19:46,580 --> 01:19:48,850 >> И тоа е кога тие го направија одлука да го уништат. 1610 01:19:48,850 --> 01:19:52,780 офицер за безбедност опсег, со огромна храброст, притисне копчето, 1611 01:19:52,780 --> 01:19:58,150 разнесе ракета, пред да може да стане опасност за јавната безбедност. 1612 01:19:58,150 --> 01:20:01,060 >> -Ова Беше девица патување на Ariane 5. 1613 01:20:01,060 --> 01:20:03,960 И неговото уништување се место поради недостаток 1614 01:20:03,960 --> 01:20:05,822 вградени во софтверот на ракетата. 1615 01:20:05,822 --> 01:20:08,280 -На Проблем на Ariane беше дека има голем број што 1616 01:20:08,280 --> 01:20:10,600 бара 64 бита за да се изразат. 1617 01:20:10,600 --> 01:20:13,590 И тие сакаа да конвертирате тоа го бројот за 16-битна. 1618 01:20:13,590 --> 01:20:15,610 Тие претпоставуваат дека број никогаш не се случува 1619 01:20:15,610 --> 01:20:20,980 да биде многу голем, дека повеќето од оние бројот на цифри во 64-битна беа нули. 1620 01:20:20,980 --> 01:20:22,440 Тие беа во право. 1621 01:20:22,440 --> 01:20:25,060 >> -На Неспособноста на еден софтверска програма да го прифати 1622 01:20:25,060 --> 01:20:29,510 вид на бројот генериран од уште се во коренот на неуспех. 1623 01:20:29,510 --> 01:20:34,350 развој на софтвер стана многу скапи дел од новата технологија. 1624 01:20:34,350 --> 01:20:38,140 На Ariane ракета биле многу успешна, па голем дел од софтверот 1625 01:20:38,140 --> 01:20:41,550 создадени за тоа беше, исто така, кои се користат во Ariane 5. 1626 01:20:41,550 --> 01:20:47,940 >> -На Основен проблем беше дека Ariane 5 беше побрз, забрза побрзо. 1627 01:20:47,940 --> 01:20:51,450 И софтверот не придонеле за тоа. 1628 01:20:51,450 --> 01:20:55,060 >> -На Уништување на ракетата Беше тоа една огромна финансиска катастрофа, 1629 01:20:55,060 --> 01:20:58,790 сите поради грешка во минути софтвер. 1630 01:20:58,790 --> 01:21:01,210 Но, ова не е прв податоци конверзија проблеми време 1631 01:21:01,210 --> 01:21:04,820 учењето на современи ракетната технологија. 1632 01:21:04,820 --> 01:21:08,050 >> -Во 1991 година, со почеток на Првата заливска војна, 1633 01:21:08,050 --> 01:21:10,570 Патриот проектили доживеа сличен вид 1634 01:21:10,570 --> 01:21:12,800 на проблем број реализација. 1635 01:21:12,800 --> 01:21:16,090 И како резултат на тоа, 28 лица, 28 американски војници, 1636 01:21:16,090 --> 01:21:19,080 беа убиени, а околу 100 ранети 1637 01:21:19,080 --> 01:21:22,780 кога патриот, кој требаше да се заштити од влезните Scuds, 1638 01:21:22,780 --> 01:21:25,830 не успеа да оган проектили. 1639 01:21:25,830 --> 01:21:31,670 >> -Кога Ирак го нападна Кувајт и Америка започна Пустинска бура во почетокот на 1991 година, 1640 01:21:31,670 --> 01:21:35,780 Патриот проектили батерии беа распоредени за заштита на Саудиска Арабија и Израел 1641 01:21:35,780 --> 01:21:39,230 од ирачките Скад ракетни напади. 1642 01:21:39,230 --> 01:21:43,810 Патриот е среден дострел САД површина за воздух систем, произведени 1643 01:21:43,810 --> 01:21:45,770 од страна на компанијата Raytheon. 1644 01:21:45,770 --> 01:21:52,340 >> -На Големината на пресретнувачи Патриот само по себе е долг околу приближно 20 стапки. 1645 01:21:52,340 --> 01:21:55,230 И тежи околу 2.000 фунти. 1646 01:21:55,230 --> 01:21:59,320 И тоа носи боева глава од околу, Мислам дека тоа е околу 150 фунти. 1647 01:21:59,320 --> 01:22:03,930 И самата боева глава е висок експлозив, кој 1648 01:22:03,930 --> 01:22:07,330 има фрагменти околу неа. 1649 01:22:07,330 --> 01:22:11,680 На обвивка на боева глава е со цел да се однесува како buckshot. 1650 01:22:11,680 --> 01:22:14,110 >> -На Проектили се врши четири од контејнер, 1651 01:22:14,110 --> 01:22:17,130 и се транспортира со полу приколка. 1652 01:22:17,130 --> 01:22:24,930 >> -На Систем Патриот анти-ракетен навраќа сега барем 20 години. 1653 01:22:24,930 --> 01:22:28,420 Првобитно таа беше наменета како ракетна одбрана на воздухот 1654 01:22:28,420 --> 01:22:30,720 да ги соборат непријател авиони. 1655 01:22:30,720 --> 01:22:34,500 Во првата Заливска војна, кога таа војна дојдоа заедно, 1656 01:22:34,500 --> 01:22:39,745 Армијата сакаше да го користите за да соборат Scuds, не авионите. 1657 01:22:39,745 --> 01:22:43,620 >> Ирачката воздухопловните сили беше не е толку голем проблем. 1658 01:22:43,620 --> 01:22:46,670 Меѓутоа, армијата е загрижен за Scuds. 1659 01:22:46,670 --> 01:22:50,170 И така тие се обиделе да надградба на Патриот. 1660 01:22:50,170 --> 01:22:52,800 >> -Intercepting Непријател проектили патуваат со брзина од Мах 5 1661 01:22:52,800 --> 01:22:55,830 требаше да биде предизвик доволно. 1662 01:22:55,830 --> 01:22:58,490 Но, кога Патриот бил пренесен во употреба, 1663 01:22:58,490 --> 01:23:02,860 Армијата не беше свесна за Ирачкиот модификација што го направија 1664 01:23:02,860 --> 01:23:05,930 нивните Scuds речиси невозможно да се погоди. 1665 01:23:05,930 --> 01:23:10,740 >> -Што Се случи е дека Scuds кои доаѓаат во се нестабилни. 1666 01:23:10,740 --> 01:23:11,692 Тие се ниша. 1667 01:23:11,692 --> 01:23:14,910 Причината за ова е Ирачаните, со цел 1668 01:23:14,910 --> 01:23:18,280 да се добие 600 километри од 300 километар 1669 01:23:18,280 --> 01:23:21,700 дострел, ја тежината од пред боева глава. 1670 01:23:21,700 --> 01:23:23,390 Тие направија боева глава полесни. 1671 01:23:23,390 --> 01:23:27,330 >> Па сега на Патриот е се обидува да дојде на Скад. 1672 01:23:27,330 --> 01:23:30,230 И поголемиот дел од времето, Најголемиот дел од времето, 1673 01:23:30,230 --> 01:23:32,940 тоа само ќе лета од страна на Скад. 1674 01:23:32,940 --> 01:23:37,260 Откако операторите на системот Патриот реализира Патриот пропушти својата цел, 1675 01:23:37,260 --> 01:23:41,690 тие детонираа боева глава Патриот е да се избегнат можните жртви, ако тоа 1676 01:23:41,690 --> 01:23:44,570 беше дозволено да падне на земјата. 1677 01:23:44,570 --> 01:23:48,790 >> -Тоа Е она што го видов повеќето луѓе, тие големи огнени топки на небото, 1678 01:23:48,790 --> 01:23:54,550 и погрешно разбран како оската на Скад боеви глави. 1679 01:23:54,550 --> 01:23:56,630 >> -Иако Во текот на ноќта небо, патриоти се појави 1680 01:23:56,630 --> 01:24:00,370 да биде успешно уништувајќи Scuds, во Дахран, 1681 01:24:00,370 --> 01:24:03,360 не може да има грешка за својата работа. 1682 01:24:03,360 --> 01:24:07,970 Таму, радарски систем Патриот е губеше на дојдовен Скад, 1683 01:24:07,970 --> 01:24:10,721 и никогаш не започна поради на софтвер мааната. 1684 01:24:10,721 --> 01:24:14,090 1685 01:24:14,090 --> 01:24:18,940 Тоа беше Израелци кои за првпат се откриени дека на подолг систем беше, 1686 01:24:18,940 --> 01:24:22,690 толку е поголема разликата време стана, се должи на часовникот вградени 1687 01:24:22,690 --> 01:24:24,810 во компјутерот на системот. 1688 01:24:24,810 --> 01:24:28,210 >> -About Две недели пред трагедијата во Дахран, 1689 01:24:28,210 --> 01:24:30,770 Израелците пријавен Министерството за одбрана 1690 01:24:30,770 --> 01:24:32,590 дека системот е губење на време. 1691 01:24:32,590 --> 01:24:35,360 По околу осум часа или трчање, тие забележале дека системот 1692 01:24:35,360 --> 01:24:37,720 станува значително помалку точни. 1693 01:24:37,720 --> 01:24:41,900 Министерството за одбрана одговори кажувам на сите батерии Патриот 1694 01:24:41,900 --> 01:24:44,950 да не остави на системи за долго време. 1695 01:24:44,950 --> 01:24:49,160 Тие никогаш не рече дека она што долго време was-- осум часа, 10 часа, 1.000 часа. 1696 01:24:49,160 --> 01:24:51,360 Никој не знаеше. 1697 01:24:51,360 --> 01:24:53,380 >> -На Батерии Патриот стационирана во касарната 1698 01:24:53,380 --> 01:24:58,350 во Дахран и нејзините недостатоци внатрешна часовникот бил на повеќе од 100 часа 1699 01:24:58,350 --> 01:25:01,670 Во ноќта на 25-ти февруари. 1700 01:25:01,670 --> 01:25:05,917 >> -Тоа Следи време со точност од околу една десетина од секунда. 1701 01:25:05,917 --> 01:25:08,000 Сега, една десетина од секунда е интересен број, 1702 01:25:08,000 --> 01:25:11,920 поради тоа што не може да се изрази во бинарен точно, што 1703 01:25:11,920 --> 01:25:16,820 значи дека не може да се изрази точно во ниту еден модерен дигитален компјутер. 1704 01:25:16,820 --> 01:25:18,540 Тешко е да се верува. 1705 01:25:18,540 --> 01:25:21,210 >> Но, користете го ова како пример. 1706 01:25:21,210 --> 01:25:23,540 Да го земеме на број еден на третото место. 1707 01:25:23,540 --> 01:25:27,350 Една третина не може да биде изрази во децимални точно. 1708 01:25:27,350 --> 01:25:32,080 Една третина е 0.333 случува за бесконечност. 1709 01:25:32,080 --> 01:25:36,480 >> Не постои начин да го направите тоа со апсолутна точност во децимални. 1710 01:25:36,480 --> 01:25:39,560 Тоа е токму оној вид на проблем што се случи во Патриот. 1711 01:25:39,560 --> 01:25:44,100 Колку подолго системот трчаше, на полошо стана време грешка. 1712 01:25:44,100 --> 01:25:48,890 >> -По 100 часа на работа, грешка во тоа време беше само околу една третина 1713 01:25:48,890 --> 01:25:50,600 од секунда. 1714 01:25:50,600 --> 01:25:54,210 Но, во однос на одржување проектили патуваат со брзина од Мах 5, 1715 01:25:54,210 --> 01:25:58,710 тоа резултираше со следење грешка на повеќе од 600 метри. 1716 01:25:58,710 --> 01:26:02,120 Тоа ќе биде фатална грешка за војниците за тоа што 1717 01:26:02,120 --> 01:26:08,940 што се случи е почеток Скад беше откриени од страна на почетокот на сателити Предупредување 1718 01:26:08,940 --> 01:26:12,860 и тие знаеја дека Скад беше кои доаѓаат во нивната општа насока. 1719 01:26:12,860 --> 01:26:15,320 Тие не знаев од каде доаѓа. 1720 01:26:15,320 --> 01:26:18,250 >> -Тоа Беше сега до радарот компонента на системот патриот 1721 01:26:18,250 --> 01:26:23,190 одбрана Дахран да се лоцираат и да ја задржите пратите на дојдовен непријател проектили. 1722 01:26:23,190 --> 01:26:24,609 >> -На Радар бил многу паметен. 1723 01:26:24,609 --> 01:26:26,650 Тоа, всушност, ќе следи позицијата на Скад, 1724 01:26:26,650 --> 01:26:30,350 а потоа се предвиди каде што тоа веројатно ќе биде следниот пат кога радарот испрати 1725 01:26:30,350 --> 01:26:31,420 пулс надвор. 1726 01:26:31,420 --> 01:26:33,110 Кој беше наречен низа портата. 1727 01:26:33,110 --> 01:26:37,660 >> -Тогаш, Откако Патриот одлучува доволно време 1728 01:26:37,660 --> 01:26:42,450 донесени се вратиш назад и проверете на следните локација за оваа откриен објект, 1729 01:26:42,450 --> 01:26:43,600 се враќа назад. 1730 01:26:43,600 --> 01:26:48,650 Па кога се вратија на ред место, тогаш не гледа објект. 1731 01:26:48,650 --> 01:26:52,160 И тој одлучува дека не постои објект, тоа беше лажна откривање, 1732 01:26:52,160 --> 01:26:53,930 и капки на пат. 1733 01:26:53,930 --> 01:26:57,030 >> -На Дојдовен Скад исчезна од екранот на радар. 1734 01:26:57,030 --> 01:27:00,260 И секунди подоцна, удри во касарната. 1735 01:27:00,260 --> 01:27:06,150 На Скад убиени 28, а беше последниот еден отпуштен во текот на Првата заливска војна. 1736 01:27:06,150 --> 01:27:11,960 >> За жал, ажурирани софтвер пристигна во Дахран наредниот ден. 1737 01:27:11,960 --> 01:27:14,930 недостаток на софтвер мораше е фиксна, затворање 1738 01:27:14,930 --> 01:27:19,806 едно поглавје во проблематичниот историјата на проектили Патриот. 1739 01:27:19,806 --> 01:27:20,729 >> [Видео репродукција] 1740 01:27:20,729 --> 01:27:23,520 Дејвид Џ MALAN: Значи тоа е сите да се се каже дека овие прашања од претекување 1741 01:27:23,520 --> 01:27:25,860 и непрецизност се премногу реално. 1742 01:27:25,860 --> 01:27:26,920 Па како не сме се нашле? 1743 01:27:26,920 --> 01:27:28,895 Почнавме со само зборуваме за printf. 1744 01:27:28,895 --> 01:27:31,270 Повторно, ова функција која печати нешто на екранот, 1745 01:27:31,270 --> 01:27:33,450 и воведовме потоа неколку други функции 1746 01:27:33,450 --> 01:27:34,945 од т.н. CS50 библиотека е. 1747 01:27:34,945 --> 01:27:36,910 И ние ќе продолжиме да се види овие во догледно време. 1748 01:27:36,910 --> 01:27:40,760 И ние, особено, се користат добие стринг, и да добијат int, и сега, исто така, се плови, 1749 01:27:40,760 --> 01:27:44,410 и уште други се уште ќе се сретнуваме и да се користи пред долго. 1750 01:27:44,410 --> 01:27:47,220 >> Но, понекогаш, има ние веќе видовме потреба 1751 01:27:47,220 --> 01:27:50,520 за да ја запази она што рака на тие функции во грбот? 1752 01:27:50,520 --> 01:27:52,920 Тие ни се врати стринг рака, или цел број, или плови. 1753 01:27:52,920 --> 01:27:56,070 А понекогаш и ние треба да се стави тоа стринг, или цел број, или плови, некаде. 1754 01:27:56,070 --> 01:28:00,100 >> И за чување на тие работи, да се потсетиме само како и во нула, имаме променливи. 1755 01:28:00,100 --> 01:28:03,260 Но, за разлика од нула, во C имаме вистински видови 1756 01:28:03,260 --> 01:28:05,530 на variables-- податоци видови, повеќе generally-- 1757 01:28:05,530 --> 01:28:08,640 Меѓу нив, стринг, int, на плови, а овие другите сè уште. 1758 01:28:08,640 --> 01:28:12,321 >> И така, кога ние се декларираат променливи во C, ние ќе мора да се декларираат нашите типови на податоци. 1759 01:28:12,321 --> 01:28:14,820 Ова не е нешто ние ќе треба да се направи во текот на семестарот 1760 01:28:14,820 --> 01:28:16,810 како што транзицијата на други јазици. 1761 01:28:16,810 --> 01:28:19,610 Но, за сега, ние треба да се а приори однапред, 1762 01:28:19,610 --> 01:28:24,370 објасни на компјутер кој тип на променлива што сакаме да ни се даде. 1763 01:28:24,370 --> 01:28:27,290 >> Сега, пак, да се печати оние видови на типови на податоци, 1764 01:28:27,290 --> 01:28:29,570 ние треба да се каже printf што да очекувам. 1765 01:28:29,570 --> 01:28:32,450 И видовме проценти за жици, и проценти i за цели броеви, 1766 01:28:32,450 --> 01:28:33,790 и неколку веќе други. 1767 01:28:33,790 --> 01:28:37,237 И оние кои се едноставно барања за визуелна презентација 1768 01:28:37,237 --> 01:28:38,070 на тие информации. 1769 01:28:38,070 --> 01:28:42,080 >> И секоја од нив, всушност, може да биде parametrized или tweaked на некој начин, 1770 01:28:42,080 --> 01:28:45,370 Ако сакате да продолжите со контрола видот на производството што ќе добиеш. 1771 01:28:45,370 --> 01:28:49,604 И, всушност, излегува дека не само што има обратна коса црта n за нов ред. 1772 01:28:49,604 --> 01:28:52,520 Има нешто друго вика обратна коса црта r за враќање превозот, која 1773 01:28:52,520 --> 01:28:54,360 е повеќе слично на старата школа машина за пишување, 1774 01:28:54,360 --> 01:28:57,690 а исто така и на Windows се користи за многу години. 1775 01:28:57,690 --> 01:28:59,690 >> Има обратна коса црта т за јазичиња. 1776 01:28:59,690 --> 01:29:03,170 Излегува, дека ако сакате да двојни внатрешноста на стринг, 1777 01:29:03,170 --> 01:29:05,000 потсетиме дека ние сме се користи двојни двојно 1778 01:29:05,000 --> 01:29:07,900 понуда на левата и на десната завршува на нашите жици досега. 1779 01:29:07,900 --> 01:29:09,420 Тоа не е доволно за да ги мешаме работите. 1780 01:29:09,420 --> 01:29:12,503 >> Ако сакате да се стави во двојни наводници средината на string-- и, навистина, 1781 01:29:12,503 --> 01:29:13,670 тоа е збунувачки да се види. 1782 01:29:13,670 --> 01:29:17,120 И така, мора да се избега, така да се каже, двојни наводници со нешто 1783 01:29:17,120 --> 01:29:18,860 како и, буквално, обратна коса црта двојни наводници. 1784 01:29:18,860 --> 01:29:20,230 И има неколку други се уште. 1785 01:29:20,230 --> 01:29:24,540 И ќе видиме повеќе од тие во вистинска употреба пред долго. 1786 01:29:24,540 --> 01:29:27,930 >> Па ајде сега се транзиција од податоци, и застапување, 1787 01:29:27,930 --> 01:29:30,820 и аритметичките оператори, сите од кои ни даде некои зграда 1788 01:29:30,820 --> 01:29:32,070 блокови со која треба да се игра. 1789 01:29:32,070 --> 01:29:34,481 Но, сега ајде да всушност даде ни остатокот од речник 1790 01:29:34,481 --> 01:29:36,230 дека ние веќе минатата недела со гребење 1791 01:29:36,230 --> 01:29:39,350 со преземање на ум на некој друг гради во C-- не сите од нив. 1792 01:29:39,350 --> 01:29:41,680 Но идеите сме за да се види навистина само 1793 01:29:41,680 --> 01:29:45,610 да се нагласи превод од еден јазик, гребење, на друг, В. 1794 01:29:45,610 --> 01:29:48,470 >> И со текот на времето, ќе ги собереш повеќе алатки за нашето раководство, 1795 01:29:48,470 --> 01:29:49,820 така да се каже, синтаксички. 1796 01:29:49,820 --> 01:29:54,190 И, навистина, ќе видите дека идеите сега се доста познати од минатата недела. 1797 01:29:54,190 --> 01:29:55,200 Па ајде да го направите тоа. 1798 01:29:55,200 --> 01:29:58,870 >> Ајде да одиме напред и да разбивам програма кои, всушност, го користи некои изрази, 1799 01:29:58,870 --> 01:30:00,720 Булова израз. 1800 01:30:00,720 --> 01:30:02,810 Дозволете ми да оди напред тука и да се создаде нова датотека. 1801 01:30:02,810 --> 01:30:06,090 Ќе му се јавам оваа condition.c. 1802 01:30:06,090 --> 01:30:09,350 >> Дозволете ми да оди напред и да вклучуваат CS50 библиотека. 1803 01:30:09,350 --> 01:30:12,640 И дозволете ми да оди напред и да се вклучат стандард io.h за нашите функции, 1804 01:30:12,640 --> 01:30:14,690 и printf, и повеќе, соодветно. 1805 01:30:14,690 --> 01:30:18,900 Дозволете ми да се откаже од тоа на boilerplate int главната неважечки, чие објаснување ние ќе 1806 01:30:18,900 --> 01:30:20,360 се врати во иднина. 1807 01:30:20,360 --> 01:30:23,820 >> Сега дозволете ми да оди напред и да даде сметам int int добие преку. 1808 01:30:23,820 --> 01:30:25,970 Тогаш дозволете ми да оди напред и да го направите тоа. 1809 01:30:25,970 --> 01:30:30,150 Сакам да кажам, ако јас се less-- ајде се направи разлика помеѓу позитивни, негативни, 1810 01:30:30,150 --> 01:30:31,260 или нула вредности. 1811 01:30:31,260 --> 01:30:36,630 >> Значи, ако јас е помал од нула, дозволете ми да само треба оваа програма едноставно да се каже, 1812 01:30:36,630 --> 01:30:42,370 негативни, обратна коса црта n, друго ако јас е поголем од нула. 1813 01:30:42,370 --> 01:30:47,030 Сега сум, се разбира, да се каже printf позитивни, обратна коса црта n. 1814 01:30:47,030 --> 01:30:50,690 А потоа друг if-- можам да го направите тоа. 1815 01:30:50,690 --> 01:30:53,410 >> Можев да направам ако е еднаква на 0. 1816 01:30:53,410 --> 01:30:55,840 Но, јас би се прави во најмалку една веќе грешка. 1817 01:30:55,840 --> 01:30:59,480 Потсетиме дека знакот за еднакво е не се еднакви, како што луѓето го знаат. 1818 01:30:59,480 --> 01:31:01,010 >> Но, тоа е оператор на задачата. 1819 01:31:01,010 --> 01:31:05,640 И ние не сакаме да се земе 0 на право и го стави во I на левата страна. 1820 01:31:05,640 --> 01:31:11,810 Значи за да се избегне оваа забуна, или можеби злоупотреба на знак за еднаквост, 1821 01:31:11,810 --> 01:31:14,740 луѓето одлучи пред неколку години дека во многу програмски јазици 1822 01:31:14,740 --> 01:31:18,000 кога сакате да се провери за еднаквост помеѓу левата и десната страна, 1823 01:31:18,000 --> 01:31:19,635 што всушност се користи е еднаква на еднаквите. 1824 01:31:19,635 --> 01:31:21,010 Така да удри во вредноста двапати. 1825 01:31:21,010 --> 01:31:25,600 Кога ќе сакате да го доделите од десно на лево, ќе се користи еден ист знак. 1826 01:31:25,600 --> 01:31:29,360 Значи ние не можеше да стори this-- друго ако јас еднакво е еднаква на нула. 1827 01:31:29,360 --> 01:31:31,710 >> тогаш би можел да оди и отворам големи загради, 1828 01:31:31,710 --> 01:31:36,087 и да каже, printf 0, обратна коса црта n, направено. 1829 01:31:36,087 --> 01:31:38,170 Но, се сеќавам како овие вилиците на патот може да работи. 1830 01:31:38,170 --> 01:31:39,836 И, навистина, само се размислува за логиката. 1831 01:31:39,836 --> 01:31:41,510 i е број. 1832 01:31:41,510 --> 01:31:43,320 Тоа е цел број, конкретно. 1833 01:31:43,320 --> 01:31:48,600 А тоа значи дека нема да биде помалку од 0, или поголема од 0, или 0. 1834 01:31:48,600 --> 01:31:51,600 Па таму е вид на оваа подразбира случај стандардните. 1835 01:31:51,600 --> 01:31:54,920 >> И така ние би можеле, исто како и Нула, раздавам со друг, ако, 1836 01:31:54,920 --> 01:31:55,747 да и каже на друго место. 1837 01:31:55,747 --> 01:31:57,830 Логично, ако на програмер знам само дека има 1838 01:31:57,830 --> 01:32:01,635 три кофи во која сценарио може fall-- првиот, 1839 01:32:01,635 --> 01:32:03,510 втората или третата во овој case-- не 1840 01:32:03,510 --> 01:32:07,100 мачи додавање на дополнителна прецизност и на дополнителни логика таму. 1841 01:32:07,100 --> 01:32:09,690 Само напред со стандардно случај тука на друго место. 1842 01:32:09,690 --> 01:32:11,950 >> Сега, ајде да одиме напред по зачувување на ова, бидете 1843 01:32:11,950 --> 01:32:15,760 услови точка црта conditions-- не е голема кориснички интерфејс, 1844 01:32:15,760 --> 01:32:18,914 бидејќи јас не сум се прашува корисникот, како што споменав порано. 1845 01:32:18,914 --> 01:32:19,580 Но, тоа е во ред. 1846 01:32:19,580 --> 01:32:20,454 Ние ќе го задржи едноставна. 1847 01:32:20,454 --> 01:32:21,890 Ајде да се обидеме бројот 42. 1848 01:32:21,890 --> 01:32:23,240 И тоа е позитивно. 1849 01:32:23,240 --> 01:32:26,120 Ајде да се обидеме на бројот 42 негативни, негативни. 1850 01:32:26,120 --> 01:32:28,244 >> Ајде да се обидеме вредноста 0. 1851 01:32:28,244 --> 01:32:29,160 И, навистина, таа работи. 1852 01:32:29,160 --> 01:32:33,900 Сега, ќе се види со проблеми пред долго, тестирање работи три пати, 1853 01:32:33,900 --> 01:32:34,980 најверојатно не е доволно. 1854 01:32:34,980 --> 01:32:37,438 Веројатно ќе сакате да пробате некои поголеми броеви, некои помали 1855 01:32:37,438 --> 01:32:40,520 броеви, некои случаи агол, како ќе дојде да ги опише. 1856 01:32:40,520 --> 01:32:42,500 >> Но, за сега, ова е прилично едноставна програма. 1857 01:32:42,500 --> 01:32:45,160 И јас сум прилично сигурен, логично, дека тоа спаѓа во три случаи. 1858 01:32:45,160 --> 01:32:49,360 И, навистина, иако ние само фокусирани на потенцијалните негативни 1859 01:32:49,360 --> 01:32:53,480 на непрецизност и преливни, во реалност каде што многу од проблемите е CS50, 1860 01:32:53,480 --> 01:32:56,000 ние не се случува да се грижите за, во секое време, 1861 01:32:56,000 --> 01:32:59,050 овие прашања на преливник непрецизност, затоа што, всушност, во C, 1862 01:32:59,050 --> 01:33:01,889 тоа всушност не е сето тоа лесно да се избегне овие работи. 1863 01:33:01,889 --> 01:33:04,180 Ако сакате да брои до поголеми и поголеми и поголеми, 1864 01:33:04,180 --> 01:33:07,510 излегува постојат техники може да се користат, кои честопати беа инволвирани нешта наречени 1865 01:33:07,510 --> 01:33:11,240 библиотеки, збирки на код, други луѓе, пишува дека можете да го користите, 1866 01:33:11,240 --> 01:33:13,910 и други јазици, како што Јава и други, всушност, 1867 01:33:13,910 --> 01:33:15,800 се направи тоа многу полесно да се смета дури и повисока. 1868 01:33:15,800 --> 01:33:19,810 Значи, тоа навистина е дел од овие опасности функција на јазикот кој го користите. 1869 01:33:19,810 --> 01:33:22,710 И во следните неколку недели, ние ќе види колку опасно C навистина 1870 01:33:22,710 --> 01:33:24,950 може да биде ако не го користите. 1871 01:33:24,950 --> 01:33:27,610 Но, од таму, и со Python, и JavaScript, ќе 1872 01:33:27,610 --> 01:33:32,620 ние слој на некои дополнителни заштитни мерки, и да ја стартувате помалку на тие ризици. 1873 01:33:32,620 --> 01:33:35,820 >> Значи, да се направи малку повеќе Интересно логика во нашата програма. 1874 01:33:35,820 --> 01:33:39,110 Значи, дозволете ми да оди напред и да се создаде програма наречена Логичка 1875 01:33:39,110 --> 01:33:43,804 само така можам да играм со некои Крај на логика, logical.c. 1876 01:33:43,804 --> 01:33:46,870 Јас само ќе копирате и залепите некои кодот од порано, па ќе се вратам 1877 01:33:46,870 --> 01:33:49,950 на овој убав почетна точка. 1878 01:33:49,950 --> 01:33:53,980 >> Дозволете ми тоа време направи знак C. сум ќе го даде името на C 1879 01:33:53,980 --> 01:33:58,510 само затоа што е конвенционален, добие лик од корисникот. 1880 01:33:58,510 --> 01:34:00,730 И ајде да се преправаме како Јас сум имплементација на дел 1881 01:34:00,730 --> 01:34:04,130 на тој Rm програмата, извадете го програма пред што предизвика на корисникот 1882 01:34:04,130 --> 01:34:05,400 за отстранување на датотека. 1883 01:34:05,400 --> 01:34:06,750 Како можеме да го направите ова? 1884 01:34:06,750 --> 01:34:11,090 >> Сакам да кажам, ако C е еднакво на е еднаква на, цитирам unquote, 1885 01:34:11,090 --> 01:34:16,304 y, тогаш јас ќе одам да се претпостави што корисникот го избра да. 1886 01:34:16,304 --> 01:34:17,470 Јас сум само се случува да се печати да. 1887 01:34:17,470 --> 01:34:19,440 Ако тоа се всушност пишување програмата за отстранување, 1888 01:34:19,440 --> 01:34:21,420 ние може да се отстрани датотеката со повеќе линии на код. 1889 01:34:21,420 --> 01:34:22,461 Но, ќе биде едноставно. 1890 01:34:22,461 --> 01:34:25,950 1891 01:34:25,950 --> 01:34:31,250 >> Друго, ако в еднаква еднаква n-- а сега тука, јас ќе одам да се каже, 1892 01:34:31,250 --> 01:34:32,980 корисникот мора да значи бр. 1893 01:34:32,980 --> 01:34:34,360 А потоа друг, знаеш што? 1894 01:34:34,360 --> 01:34:36,200 Јас не знам што друго корисникот се случува да напишеш. 1895 01:34:36,200 --> 01:34:38,533 Па јас сум само ќе кажам дека дека е грешка, без оглед на 1896 01:34:38,533 --> 01:34:40,070 тој или таа, всушност, го напишале. 1897 01:34:40,070 --> 01:34:41,180 >> Значи она што се случува овде? 1898 01:34:41,180 --> 01:34:44,530 Постои фундаментална разлика наспроти она што го направив во минатото. 1899 01:34:44,530 --> 01:34:49,300 Двојни наводници, двојни наводници, двојно цитати, и, сепак, единечен наводник, 1900 01:34:49,300 --> 01:34:50,170 единечен наводник. 1901 01:34:50,170 --> 01:34:52,860 Излезе во C, дека кога сакате да се напише низа, 1902 01:34:52,860 --> 01:34:56,680 ќе го користат двојни наводници, исто како што сум бил со користење на сите овој пат со printf. 1903 01:34:56,680 --> 01:35:02,030 >> Но, ако сакате да се справи со само еден лик, таканаречен знак, 1904 01:35:02,030 --> 01:35:03,780 тогаш вие всушност Користете единечен наводник. 1905 01:35:03,780 --> 01:35:05,450 Оние од вас кои сте програмирани пред, вие не би можеле да имаат 1906 01:35:05,450 --> 01:35:07,850 мораше да се грижите за тоа разлика во некои јазици. 1907 01:35:07,850 --> 01:35:09,450 Во C, тоа не е важно. 1908 01:35:09,450 --> 01:35:12,560 И така, кога ќе се знак и сакам да се споредат знак дека користење на еднаквите 1909 01:35:12,560 --> 01:35:18,350 еднаква на некои писмо како Y или N, јас не, навистина, треба да имаат единствена наводници. 1910 01:35:18,350 --> 01:35:19,770 >> Сега, ајде да одиме напред и да го направите тоа. 1911 01:35:19,770 --> 01:35:26,180 Ајде да одиме напред и да прават логички точка црта логично. 1912 01:35:26,180 --> 01:35:27,305 И сега јас сум се известени. 1913 01:35:27,305 --> 01:35:30,638 Па, веројатно, подобро искуство за корисниците всушност, ќе ми каже што да направите тука. 1914 01:35:30,638 --> 01:35:33,030 Но, јас ќе одам да се само слепо y за да се каже, во ред, убаво. 1915 01:35:33,030 --> 01:35:35,780 >> Ајде да се кандидира повторно, n за да нема, убаво. 1916 01:35:35,780 --> 01:35:39,610 Да претпоставиме како некои луѓе што ги знам, капи мојот Lock копчето е на сите премногу често. 1917 01:35:39,610 --> 01:35:43,740 Па јас се направи капитал Y, влезе, грешка. 1918 01:35:43,740 --> 01:35:46,130 Добро, тоа не е точно она што јас го очекував. 1919 01:35:46,130 --> 01:35:48,170 Всушност, на компјутерот прави буквално она што 1920 01:35:48,170 --> 01:35:51,794 Јас реков да се провери за do-- мали y и мали n. 1921 01:35:51,794 --> 01:35:53,960 Ова не се чувствува како добра корисник искуство, иако. 1922 01:35:53,960 --> 01:35:59,010 Дозволете ми да побара и да се прифати или мали букви или големи букви. 1923 01:35:59,010 --> 01:36:02,090 Значи излегува, можеби ќе сакате да се каже нешто како во нула, 1924 01:36:02,090 --> 01:36:08,150 како буквално или C е еднакво на еднаква на капитал една цитираше y. 1925 01:36:08,150 --> 01:36:11,400 Излегува, C нема овој буквален клучен збор или. 1926 01:36:11,400 --> 01:36:12,880 >> Но, тоа не имаат две вертикални решетки. 1927 01:36:12,880 --> 01:36:15,463 Мора да се одржи Shift обично, Ако сте со користење на тастатурата на САД, 1928 01:36:15,463 --> 01:36:18,910 и хит на вертикалната лента клуч над вашиот клуч за возврат. 1929 01:36:18,910 --> 01:36:22,410 Но, оваа вертикална лента вертикалната лента значи или. 1930 01:36:22,410 --> 01:36:26,220 >> Ако, од друга страна, сакавме да се каже, и како и во нула, 1931 01:36:26,220 --> 01:36:28,180 ние не можеше да стори симболот симболот. 1932 01:36:28,180 --> 01:36:31,330 Тоа не прави никаква логика тука, бидејќи човек не би можел да 1933 01:36:31,330 --> 01:36:37,110 го напишале и y и мали y и капитал Y како од ист карактер. 1934 01:36:37,110 --> 01:36:39,470 Значи или е она што треба тука. 1935 01:36:39,470 --> 01:36:46,280 >> Значи, ако го направам тоа во двете места, или в еднаква еднаква на капитал N, сега повторување, 1936 01:36:46,280 --> 01:36:49,390 логичка, повторување логично. 1937 01:36:49,390 --> 01:36:51,200 Сега, јас да напишете y. 1938 01:36:51,200 --> 01:36:53,920 И можам да го направи тоа повторно со Y град или град Н. 1939 01:36:53,920 --> 01:36:56,630 И јас може да го додадете во дополнителни комбинации уште. 1940 01:36:56,630 --> 01:36:58,810 >> Значи ова е логичен Програмата, доколку сега 1941 01:36:58,810 --> 01:37:01,940 Јас сум проверка логично за оваа вредност или на таа вредност. 1942 01:37:01,940 --> 01:37:06,420 И јас не треба да се, значи, излезе со уште две ИЧС или IFS друго. 1943 01:37:06,420 --> 01:37:09,960 Јас всушност може да се комбинираат некои од поврзани логика заедно на овој начин. 1944 01:37:09,960 --> 01:37:11,950 Значи ова ќе биде подобро дизајниран од едноставно 1945 01:37:11,950 --> 01:37:17,490 велејќи: ако C е еднакво мали букви y, печатење ДА, друго ако C е еднакво на капитал Y, 1946 01:37:17,490 --> 01:37:20,074 печатење ДА, друго ако C е еднакво на lower-- со други зборови, 1947 01:37:20,074 --> 01:37:21,990 вие не мора да се има се повеќе и повеќе гранки. 1948 01:37:21,990 --> 01:37:28,840 Може да се комбинираат некои од еквивалент гранки логично, бидејќи на овој начин. 1949 01:37:28,840 --> 01:37:34,150 >> Па ајде да ги разгледаме во само еден Завршно состојка, една конечна изградба, 1950 01:37:34,150 --> 01:37:34,847 дека C дозволува. 1951 01:37:34,847 --> 01:37:36,930 И ние ќе се вратам во иднината на другите уште. 1952 01:37:36,930 --> 01:37:41,400 А потоа ќе се заклучи со гледање во не исправноста на code-- 1953 01:37:41,400 --> 01:37:46,070 добивање на кодот да work-- но дизајнот на кодот, и да посадиме тоа семе на почетокот. 1954 01:37:46,070 --> 01:37:51,337 >> Па дозволете ми да оди напред и да се отвори нова датотека. 1955 01:37:51,337 --> 01:37:51,920 Знаеш што? 1956 01:37:51,920 --> 01:37:54,450 Одам да повторно спроведување дека истата програма, 1957 01:37:54,450 --> 01:37:55,940 но со користење на различни конструкција. 1958 01:37:55,940 --> 01:38:00,110 >> Па дозволете ми да брзо си даде пристап до вклучуваат cs50.h 1959 01:38:00,110 --> 01:38:04,150 за CS50 библиотека, стандард io.h за printf. 1960 01:38:04,150 --> 01:38:06,510 Дај ми int главната неважечки. 1961 01:38:06,510 --> 01:38:09,310 А потоа во текот тука, ајде ми да оди напред и да го направите тоа. 1962 01:38:09,310 --> 01:38:12,010 >> Шар в добива се знак, како и порано. 1963 01:38:12,010 --> 01:38:16,770 И јас одам да се користи нова конструкција now-- префрлат, на она што карактер? 1964 01:38:16,770 --> 01:38:19,820 Значи прекинувач е вид на како префрлување на пругите. 1965 01:38:19,820 --> 01:38:22,070 Или, пак, навистина, тоа е вид на ако на друг, ако друго, ако, 1966 01:38:22,070 --> 01:38:23,980 но напишани малку поинаку. 1967 01:38:23,980 --> 01:38:25,490 >> Прекинувачот изгледа вака. 1968 01:38:25,490 --> 01:38:29,060 Мора прекинувач, а потоа она што карактер или бројот што сакате да се погледне, 1969 01:38:29,060 --> 01:38:32,000 тогаш некои големи загради како во Нула, само велат дека прават овие работи. 1970 01:38:32,000 --> 01:38:33,480 А потоа ќе имаат различни случаи. 1971 01:38:33,480 --> 01:38:34,830 >> Не го користите ако и друго. 1972 01:38:34,830 --> 01:38:37,050 Вие буквално го користи случајот на зборот. 1973 01:38:37,050 --> 01:38:38,790 И ќе каже нешто како ова. 1974 01:38:38,790 --> 01:38:43,820 >> Така што во случај на мали y, или, во случај на главниот Y, 1975 01:38:43,820 --> 01:38:47,350 оди напред и да ги испечатите да. 1976 01:38:47,350 --> 01:38:49,020 А потоа се пробие на прекинувачот. 1977 01:38:49,020 --> 01:38:49,580 Тоа е тоа. 1978 01:38:49,580 --> 01:38:50,880 Ние сме направиле. 1979 01:38:50,880 --> 01:38:57,270 >> Друго, ако, така да се каже, помал случај n, или капитал N, 1980 01:38:57,270 --> 01:39:02,560 па ќе одиме напред и печатење надвор, не, а потоа се скрши. 1981 01:39:02,560 --> 01:39:08,022 Else-- и овој вид на е случај стандардно indeed-- printf error-- 1982 01:39:08,022 --> 01:39:10,980 и само за добра мерка, иако логично оваа пауза не е потребно 1983 01:39:10,980 --> 01:39:12,896 бидејќи ние сме на крајот на прекинувачот во секој случај, 1984 01:39:12,896 --> 01:39:14,520 Јас сум сега кршење на прекинувачот. 1985 01:39:14,520 --> 01:39:16,280 Значи ова изгледа малку поинаква. 1986 01:39:16,280 --> 01:39:18,272 >> Но, логично, тоа е всушност еквивалентни. 1987 01:39:18,272 --> 01:39:19,980 И зошто би го користите еден над друг? 1988 01:39:19,980 --> 01:39:23,220 Понекогаш, само личен избор, Понекогаш естетика, 1989 01:39:23,220 --> 01:39:25,420 ако јас поглед во оваа сега, има по нешто 1990 01:39:25,420 --> 01:39:27,510 да се каже и за читливост на овој законик. 1991 01:39:27,510 --> 01:39:30,690 Мислам, без оглед на фактот дека оваа код е ново за многумина од нас во собата. 1992 01:39:30,690 --> 01:39:33,515 >> Но, тоа е само вид на убаво. 1993 01:39:33,515 --> 01:39:37,760 Гледаш мали y, главниот град на Y, помал случај n, главниот град N стандардно, 1994 01:39:37,760 --> 01:39:40,150 Тоа само вид на скокови на тебе на начин 1995 01:39:40,150 --> 01:39:42,200 кои, веројатно, можеби претходниот пример 1996 01:39:42,200 --> 01:39:45,780 со што IFS и вертикални линии, и IFS на друг, не може да има. 1997 01:39:45,780 --> 01:39:51,600 Значи ова е навистина е прашање на личен избор, навистина, или читливост, 1998 01:39:51,600 --> 01:39:52,360 на кодот. 1999 01:39:52,360 --> 01:39:58,230 >> Но, во однос на функционалноста, дозволете ми да оди напред и да се направи еден гајтан, точка коса црта 2000 01:39:58,230 --> 01:40:05,830 прекинувач, а сега пишувате со мали букви y, капитал Y, мали n, главниот град на N, 2001 01:40:05,830 --> 01:40:09,250 Давид, обидете се повторно, бидејќи тоа е не еден лик. 2002 01:40:09,250 --> 01:40:12,050 Ајде да направите X, грешка, како што се очекуваше. 2003 01:40:12,050 --> 01:40:15,640 И, logically-- и ова е нешто Јас ќе ги охрабри во general-- дури 2004 01:40:15,640 --> 01:40:17,790 иако ние сме само гребење на површината на некои од овие карактеристики. 2005 01:40:17,790 --> 01:40:20,560 >> И тоа не може да биде очигледна кога ќе се си седнат на тастатура, 2006 01:40:20,560 --> 01:40:21,370 Како го прави ова дело? 2007 01:40:21,370 --> 01:40:22,240 Што ова би го направил? 2008 01:40:22,240 --> 01:40:25,630 Позицијата на работа за да има лаптоп или десктоп, или пристап 2009 01:40:25,630 --> 01:40:29,290 до компјутер со компајлер, и со код едитор како овој, 2010 01:40:29,290 --> 01:40:32,990 е речиси може да се секогаш да одговори на овие прашања за себе само со обидот. 2011 01:40:32,990 --> 01:40:36,570 >> На пример, ако реторички прашање во рака беа, 2012 01:40:36,570 --> 01:40:39,540 што ќе се случи ако заборавите вашиот одмор изјави? 2013 01:40:39,540 --> 01:40:41,400 Кој е всушност многу честа работа да се направи, 2014 01:40:41,400 --> 01:40:43,540 поради тоа што не изгледа како навистина им треба. 2015 01:40:43,540 --> 01:40:46,790 Тие навистина не ја заврши својата мислев како заграда или кадрава 2016 01:40:46,790 --> 01:40:47,714 голема заграда го прави тоа. 2017 01:40:47,714 --> 01:40:49,630 Ајде да одиме напред и прекомпајлирате код и да видиме. 2018 01:40:49,630 --> 01:40:53,690 Така бидете прекинувач, прекинувачот точка коса црта. 2019 01:40:53,690 --> 01:40:56,435 Ајде да пишувате со мали букви y, на врвот случај, Enter. 2020 01:40:56,435 --> 01:40:59,390 2021 01:40:59,390 --> 01:41:00,700 Па јас ја внеле y. 2022 01:41:00,700 --> 01:41:04,420 >> Програмата рече да, не, грешка, како и покрај тоа се менуваше својот ум. 2023 01:41:04,420 --> 01:41:09,280 Но, тоа беше вид, бидејќи она што се случува со прекинувач е прв случај во кој 2024 01:41:09,280 --> 01:41:13,899 натпревар во основа значи, еј компјутер, изврши сите го кодот под него. 2025 01:41:13,899 --> 01:41:16,690 И ако не се каже пауза, или не се каже пауза, или не се каже пауза, 2026 01:41:16,690 --> 01:41:19,540 компјутерот ќе удар преку сите оние линии 2027 01:41:19,540 --> 01:41:22,779 и извршување на сите од нив, додека таа добива дека кадрава голема заграда. 2028 01:41:22,779 --> 01:41:24,320 Значи сопирачките се, навистина, е потребно. 2029 01:41:24,320 --> 01:41:27,120 Но, готова брза тука е, кога двоумите, обидете се нешто. 2030 01:41:27,120 --> 01:41:29,510 Можеби го спаси вашиот код, прво, или да го зачувате во дополнителен датотека 2031 01:41:29,510 --> 01:41:32,930 ако сте навистина загрижени за Месинг и ја да се опорави 2032 01:41:32,930 --> 01:41:34,430 работата што знаете е работа. 2033 01:41:34,430 --> 01:41:35,410 >> Но, обидете се работи. 2034 01:41:35,410 --> 01:41:38,074 И не бидете како страв, можеби, на она што може да се направи на компјутерот, 2035 01:41:38,074 --> 01:41:39,490 или дека може да се скрши нешто. 2036 01:41:39,490 --> 01:41:42,790 Секогаш можете да се вратите назад на некои претходната верзија. 2037 01:41:42,790 --> 01:41:45,640 >> Значи, да се заврши со гледање на дизајнот на код. 2038 01:41:45,640 --> 01:41:49,020 Имаме оваа можност сега да се напише услови и запишување петелки, 2039 01:41:49,020 --> 01:41:50,850 и променливи и функции повик. 2040 01:41:50,850 --> 01:41:54,590 Па, искрено, ние сме вид на назад во каде што бевме пред една недела со нула, 2041 01:41:54,590 --> 01:42:00,120 иако со текстуална помалку привлечни животната средина од гребење дозволува. 2042 01:42:00,120 --> 01:42:03,990 >> Но забележите колку брзо се стекнавме дека речник, дури и ако тоа е 2043 01:42:03,990 --> 01:42:07,570 случува да се земе малку време да потоне, така што сега можеме да го користиме овој речник 2044 01:42:07,570 --> 01:42:10,320 да се напише повеќе интересни програми. 2045 01:42:10,320 --> 01:42:12,940 И ајде да чекор бебе кон тоа, како што следи. 2046 01:42:12,940 --> 01:42:14,890 Дозволете ми да оди напред и да се создаде нова датотека. 2047 01:42:14,890 --> 01:42:17,750 >> Јас ќе одам да се јавите на оваа prototype.c, и да се воведе 2048 01:42:17,750 --> 01:42:20,954 за прв пат, способноста за да направите свој функции. 2049 01:42:20,954 --> 01:42:22,870 Некои од вас може да има направено со нула, 2050 01:42:22,870 --> 01:42:25,430 при што може да се создаде сопствени блокови во нула, 2051 01:42:25,430 --> 01:42:27,892 а потоа повлечете ги во место каде и да сакате во В. 2052 01:42:27,892 --> 01:42:30,100 И во повеќето програмирање јазици, можете да го направите токму 2053 01:42:30,100 --> 01:42:33,580 that-- направите свој функции, ако тие не се веќе постои. 2054 01:42:33,580 --> 01:42:38,660 >> Така, на пример, дозволете ми да оди напред и вклучуваат cs50.h, и вклучуваат 2055 01:42:38,660 --> 01:42:43,110 стандард io.h, int главната неважечки. 2056 01:42:43,110 --> 01:42:46,020 И сега имаме случаеви подготвени да одите. 2057 01:42:46,020 --> 01:42:48,550 Продолжувам печатење работи како и имињата на луѓето денес. 2058 01:42:48,550 --> 01:42:51,910 И дека се чувствува like-- не би било убаво ако има 2059 01:42:51,910 --> 01:42:53,936 беа на функција наречена име печати? 2060 01:42:53,936 --> 01:42:55,060 Јас не треба да ги користите printf. 2061 01:42:55,060 --> 01:42:56,976 Јас не треба да се запамети сите кодови формат. 2062 01:42:56,976 --> 01:43:00,050 Зошто не јас, или зошто не некој пред мене, 2063 01:43:00,050 --> 01:43:02,980 создаде функција наречена печатење име, со оглед на некои име, 2064 01:43:02,980 --> 01:43:03,980 едноставно отпечатоци? 2065 01:43:03,980 --> 01:43:08,700 >> Со други зборови, ако кажам, еј, компјутер, ми даде една низа 2066 01:43:08,700 --> 01:43:11,870 со поставување на корисникот за такви, преку добие низа функција е CS50. 2067 01:43:11,870 --> 01:43:15,090 Еј, компјутер, стави тоа во низа променливата на левата страна, 2068 01:43:15,090 --> 01:43:16,150 и повик е тоа. 2069 01:43:16,150 --> 01:43:22,150 И тогаш, еј компјутер, да оди напред и печати дека името на лицето, направи. 2070 01:43:22,150 --> 01:43:26,240 >> Сега, тоа би било убаво, бидејќи оваа програма, наречена, 2071 01:43:26,240 --> 01:43:29,170 ми кажува она што би требало да се направи по пат на имињата на оние функцијата. 2072 01:43:29,170 --> 01:43:32,930 Дозволете ми да оди и да се направи прототип, Enter. 2073 01:43:32,930 --> 01:43:34,930 И, за жал, ова не се случува да лета. 2074 01:43:34,930 --> 01:43:39,430 >> Prototype.c алинеја 7, карактер 5, грешка, имплицитни декларација 2075 01:43:39,430 --> 01:43:42,960 на име на функција за печатење не е валиден во C99, C99 2076 01:43:42,960 --> 01:43:45,130 што значи верзија на C кој излезе во 1999 година. 2077 01:43:45,130 --> 01:43:45,730 Тоа е се. 2078 01:43:45,730 --> 01:43:48,780 >> Па јас не знам што значи сето ова уште. 2079 01:43:48,780 --> 01:43:50,810 Но, јас не се признае грешка во црвено. 2080 01:43:50,810 --> 01:43:51,770 Тоа е доста очигледно. 2081 01:43:51,770 --> 01:43:53,769 >> И се чини дека со зелените карактер тука, 2082 01:43:53,769 --> 01:43:57,520 прашањето е со името на печатење, отворен заграда е, блиску заграда, точка-запирка. 2083 01:43:57,520 --> 01:44:01,800 Но имплицитна изјава за функција видовме накратко порано. 2084 01:44:01,800 --> 01:44:04,880 Ова значи дека, едноставно, дека ѕвекот не се знае на што мислам. 2085 01:44:04,880 --> 01:44:09,000 >> Јас сум користел речник збор дека тоа е никогаш не видел или се изучува пред. 2086 01:44:09,000 --> 01:44:11,950 И така јас треба да го учат што значи оваа функција. 2087 01:44:11,950 --> 01:44:13,590 Па јас ќе одам да се оди напред и да го направи тоа. 2088 01:44:13,590 --> 01:44:17,970 >> Одам да се оди напред и да се спроведе мојата функција наречена печатење име. 2089 01:44:17,970 --> 01:44:24,720 И јас одам да се каже, како што следува, дека тоа го прави ова, printf, здраво, проценти 2090 01:44:24,720 --> 01:44:27,760 ОК, обратна коса црта n, име, точка-запирка. 2091 01:44:27,760 --> 01:44:29,250 Значи она што јас само го направи? 2092 01:44:29,250 --> 01:44:31,325 >> Значи излегува, да се спроведе своја функција, 2093 01:44:31,325 --> 01:44:33,845 ние вид на позајмуваат некои од истата структура како главен 2094 01:44:33,845 --> 01:44:35,720 дека ние само се зема здраво за готово, и јас 2095 01:44:35,720 --> 01:44:37,730 знаете само копирање и вметнување доста тоа што 2096 01:44:37,730 --> 01:44:39,170 Сум бил пишување во минатото. 2097 01:44:39,170 --> 01:44:40,570 Но забележите шема тука. 2098 01:44:40,570 --> 01:44:43,750 Int, главно, празнина, ние ќе ги разграничат пред долго што тој всушност значи. 2099 01:44:43,750 --> 01:44:46,160 >> Но, за денес, само забележи на паралелизам. 2100 01:44:46,160 --> 01:44:48,210 Празнина, името на печатење, Име на стринг, па постои 2101 01:44:48,210 --> 01:44:50,310 пурпурна клучни зборови, кои ние се случува да започне 2102 01:44:50,310 --> 01:44:54,067 повикувајќи еден вид враќање, името на функцијата, а потоа за внесување. 2103 01:44:54,067 --> 01:44:56,400 Така, всушност, може да се дестилираат овој вид на како и минатата недела 2104 01:44:56,400 --> 01:44:59,030 како, ова е името или алгоритам од кодот сме 2105 01:44:59,030 --> 01:45:00,761 ќе write-- на алгоритам основните 2106 01:45:00,761 --> 01:45:02,010 кодот ние ќе треба да се напише. 2107 01:45:02,010 --> 01:45:03,180 >> Ова е нејзиниот влез. 2108 01:45:03,180 --> 01:45:04,670 Ова е производството. 2109 01:45:04,670 --> 01:45:08,730 Оваа функција, име печатење, е дизајниран да се низа наречен име, 2110 01:45:08,730 --> 01:45:11,350 или што, како влез, а потоа и неважечки. 2111 01:45:11,350 --> 01:45:13,904 Тоа не се врати ништо, како да стринг или се int го прави тоа. 2112 01:45:13,904 --> 01:45:15,570 Така што ќе ме предаде нешто назад. 2113 01:45:15,570 --> 01:45:17,960 Тоа е само случува да имаат несакани ефекти, така да се каже, 2114 01:45:17,960 --> 01:45:19,570 на печатење име на една личност. 2115 01:45:19,570 --> 01:45:22,260 Значи забележите, алинеја 7, јас да се јавите на името на печатачот. 2116 01:45:22,260 --> 01:45:25,920 Линија 10, јас може да се дефинира или спроведување на името на печатачот. 2117 01:45:25,920 --> 01:45:28,450 Но, за жал, тоа не е доволно. 2118 01:45:28,450 --> 01:45:31,230 >> Дозволете ми да оди напред и да прекомпајлирате ова по спасување. 2119 01:45:31,230 --> 01:45:33,910 Леле, сега, јас сум го направи уште полошо, тоа ќе изгледа. 2120 01:45:33,910 --> 01:45:37,027 Значи имплицитна изјава за името на функцијата за печатење не е валиден. 2121 01:45:37,027 --> 01:45:38,360 И, повторно, има повеќе грешки. 2122 01:45:38,360 --> 01:45:41,430 Но, како што предупреди порано, дури и ако се преоптовари со, 2123 01:45:41,430 --> 01:45:44,850 или малку тажно да се види толку многу грешки, да се фокусираат само на првата 2124 01:45:44,850 --> 01:45:47,500 на почетокот, бидејќи тоа само може да имале каскаден ефект. 2125 01:45:47,500 --> 01:45:51,970 Значи C, или ѕвекот поконкретно, уште не го признава името на печатачот. 2126 01:45:51,970 --> 01:45:54,580 >> И тоа е затоа ѕвекот, од страна на дизајнот, е вид на нем. 2127 01:45:54,580 --> 01:45:56,280 Тоа само го прави она што ќе го каже да го стори. 2128 01:45:56,280 --> 01:46:00,950 И тоа не само тоа во ред во кој ќе го каже да го стори. 2129 01:46:00,950 --> 01:46:05,270 >> Значи имам дефинирано главната линија на четири, како ние сме биле прави доста често. 2130 01:46:05,270 --> 01:46:07,980 Сум дефинирано име за печатење на линија 10. 2131 01:46:07,980 --> 01:46:11,793 Но јас се обидувам да се користи Име на печатење на линија седум. 2132 01:46:11,793 --> 01:46:13,670 >> Тоа е прерано, сè уште не постои. 2133 01:46:13,670 --> 01:46:19,150 Па јас би можел да биде умен, и да биде како, Добро, па ајде да играат заедно, 2134 01:46:19,150 --> 01:46:23,680 и да се движат име на печатење до тука, и повторно да се состави. 2135 01:46:23,680 --> 01:46:24,550 О Боже. 2136 01:46:24,550 --> 01:46:25,260 Успеа. 2137 01:46:25,260 --> 01:46:26,670 Тоа е толку едноставно како што. 2138 01:46:26,670 --> 01:46:28,120 >> Но, логиката е токму тоа. 2139 01:46:28,120 --> 01:46:30,870 Мора да ги учат ѕвекот што е со дефинирање на функција во прв план. 2140 01:46:30,870 --> 01:46:31,920 Потоа можете да го користите. 2141 01:46:31,920 --> 01:46:33,940 Но, искрено, тоа се чувствува како лизгава патека. 2142 01:46:33,940 --> 01:46:35,773 >> Па секој пат кога ќе ја стартувате во проблем, јас сум само 2143 01:46:35,773 --> 01:46:39,450 сакал да нагласам и ископирајте го кодот Јас го напишав, го намали и ставете го тука. 2144 01:46:39,450 --> 01:46:41,370 И, секако, би можеле да смогвам некои сценарија 2145 01:46:41,370 --> 01:46:43,286 каде што една функција може треба да се јавите на друг. 2146 01:46:43,286 --> 01:46:46,030 И едноставно не може да се стави секој функција над секој друг. 2147 01:46:46,030 --> 01:46:47,930 >> Значи излегува дека е подобро решение. 2148 01:46:47,930 --> 01:46:50,100 Ние може да го оставите да биде. 2149 01:46:50,100 --> 01:46:53,677 И, искрено, тоа е обично убаво, и лесен, и добриот дизајн 2150 01:46:53,677 --> 01:46:56,760 да се стави главен прво, затоа што, повторно, Главната исто како кога зелено знаме кликнато, 2151 01:46:56,760 --> 01:46:59,027 тоа е функција која добива извршена од стандардните. 2152 01:46:59,027 --> 01:47:01,110 Така што би можело да се стави тоа на врвот на датотеката 2153 01:47:01,110 --> 01:47:03,560 така што кога ќе или било други човечки гледа во датотека 2154 01:47:03,560 --> 01:47:06,360 знаете што се случува само со читање на главната прв план. 2155 01:47:06,360 --> 01:47:15,360 Значи излегува, може да се каже ѕвекот проактивно, еј, ѕвекот, on-line четири, 2156 01:47:15,360 --> 01:47:17,940 Јас ветувам дека ќе се спроведе функција наречена печатење 2157 01:47:17,940 --> 01:47:22,600 Име која се низа наречен име како влез, и се враќа ништо, празнина. 2158 01:47:22,600 --> 01:47:24,770 И јас ќе добие околу да се спроведување на тоа подоцна. 2159 01:47:24,770 --> 01:47:25,680 >> Еве доаѓа Мајна. 2160 01:47:25,680 --> 01:47:29,130 Главната сега на линија 9 може да се користи Верзија за името, бидејќи ѕвекот 2161 01:47:29,130 --> 01:47:32,600 е верувајќи дека, на крајот, тоа ќе се сретне со дефиниција 2162 01:47:32,600 --> 01:47:34,880 на спроведувањето на печатење име. 2163 01:47:34,880 --> 01:47:37,390 Па по заштеда на мојата датотека, да ми да оди напред и да се направи прототип, 2164 01:47:37,390 --> 01:47:38,498 изгледа добро тоа време. 2165 01:47:38,498 --> 01:47:43,470 Dot црта, прототип, дозволете ми да оди напред и да напишете име. 2166 01:47:43,470 --> 01:47:48,440 Дејвид, здраво Давид, Zamila, здраво Zamila, и, навистина, сега таа работи. 2167 01:47:48,440 --> 01:47:52,200 >> Значи состојка е дека ние сме направени обичај функција, како и сопствен 2168 01:47:52,200 --> 01:47:54,219 Нула блок ние сме го повикува. 2169 01:47:54,219 --> 01:47:57,010 Но, за разлика од гребење каде што можете да само да го создаде и да почнете да го користите, 2170 01:47:57,010 --> 01:47:59,330 ние сега треба да биде малку повеќе педантни, 2171 01:47:59,330 --> 01:48:03,410 а всушност се обучуваат ѕвекот да се користи, или да го очекував. 2172 01:48:03,410 --> 01:48:09,140 Сега, како настрана, зошто сето ова време да има сме биле само слепо на верата, вклучувајќи 2173 01:48:09,140 --> 01:48:12,170 Cs50.h, вклучувајќи стандардни io.h? 2174 01:48:12,170 --> 01:48:15,190 >> Па, што се испоставува, меѓу неколку други работи, 2175 01:48:15,190 --> 01:48:18,550 сето она што е во тие точки h датотеки, кои се случи да биде на датотеки. 2176 01:48:18,550 --> 01:48:20,460 Тие насловот датотеки, така да се каже. 2177 01:48:20,460 --> 01:48:23,270 Тие се уште се напишани во C. Но, тие се друг тип на датотека. 2178 01:48:23,270 --> 01:48:28,690 >> За сега, доста може да се претпостави дека сето она што е во внатрешноста на cs50.h 2179 01:48:28,690 --> 01:48:33,360 е некој една облоги, како таков, не за функции се нарекува печатење име, 2180 01:48:33,360 --> 01:48:36,840 но за се стрингови, Добиј Плови, и уште неколку други. 2181 01:48:36,840 --> 01:48:41,510 И таму се слични прототипови, еден облоги, во внатрешноста на стандард io.h 2182 01:48:41,510 --> 01:48:46,241 за printf, кој сега е во мојата функција за печатење име. 2183 01:48:46,241 --> 01:48:49,490 Значи со други зборови, целото ова време ние сме само се слепо копирање и вметнување 2184 01:48:49,490 --> 01:48:51,780 вклучуваат овој, вклучуваат дека, што се случува? 2185 01:48:51,780 --> 01:48:55,310 Тоа се само вид на индиции да ѕвекот за тоа што функции 2186 01:48:55,310 --> 01:49:00,170 се, навистина, имплементирани, само на друго место во различни фајлови 2187 01:49:00,170 --> 01:49:02,440 На друго место на системот. 2188 01:49:02,440 --> 01:49:05,160 >> Значи ние сме спроведува име печатење. 2189 01:49:05,160 --> 01:49:07,910 Тоа го прави да овој несакан ефект на печатење нешто на екранот. 2190 01:49:07,910 --> 01:49:10,170 Но, тоа не се случи, всушност, рака ме нешто назад. 2191 01:49:10,170 --> 01:49:12,200 Како да одиме за спроведување на програма со која 2192 01:49:12,200 --> 01:49:14,510 не ме предаде нешто назад? 2193 01:49:14,510 --> 01:49:15,580 >> Па, ајде да се обидеме ова. 2194 01:49:15,580 --> 01:49:21,360 Дозволете ми да оди напред и да се спроведе датотека наречена return.c 2195 01:49:21,360 --> 01:49:24,530 така што може да се покаже како нешто како Добие Стринг, или да се int, 2196 01:49:24,530 --> 01:49:27,340 е всушност враќање нешто назад до корисникот. 2197 01:49:27,340 --> 01:49:29,840 Ајде да одиме напред и да ги дефинира int главната неважечки. 2198 01:49:29,840 --> 01:49:33,230 >> И, повторно, во иднина, ние ќе се објасни она што int и таа празнина 2199 01:49:33,230 --> 01:49:34,090 е всушност прави. 2200 01:49:34,090 --> 01:49:35,840 Но, за денес, ние ќе го земам здраво за готово. 2201 01:49:35,840 --> 01:49:39,970 Одам да се оди напред и да printf, за добар корисник искуство, x е. 2202 01:49:39,970 --> 01:49:44,360 И тогаш јас ќе одам да се чека за корисникот да ми даде x со стапите Инт. 2203 01:49:44,360 --> 01:49:48,459 >> И тогаш јас ќе одам да се оди напред и да ги испечатите x на плоштадот. 2204 01:49:48,459 --> 01:49:50,500 Значи, кога имаш само една тастатура, луѓето најчесто се 2205 01:49:50,500 --> 01:49:52,600 употреба на малку морков симбол на тастатурата 2206 01:49:52,600 --> 01:49:55,330 да ги претставуваат на моќта , или за експонент. 2207 01:49:55,330 --> 01:49:58,960 Значи x квадрат е присутен i. 2208 01:49:58,960 --> 01:50:00,660 >> И сега јас ќе одам да го направите тоа. 2209 01:50:00,660 --> 01:50:03,940 Јас само може да do-- што е х на квадрат? х квадрат е x x пати. 2210 01:50:03,940 --> 01:50:06,690 >> И ние го направи ова некои одамна веќе денес. 2211 01:50:06,690 --> 01:50:08,730 Ова не се чувствува како сите дека многу напредок. 2212 01:50:08,730 --> 01:50:09,570 Знаеш што? 2213 01:50:09,570 --> 01:50:13,100 Ајде да се потпора на некои од таа идеја од последниот пат на апстракција. 2214 01:50:13,100 --> 01:50:16,080 >> Зарем не би било убаво ако има функција наречена 2215 01:50:16,080 --> 01:50:18,460 плоштадот што го прави токму тоа? 2216 01:50:18,460 --> 01:50:20,640 Се уште е, на крајот на ден, истото го прави математика. 2217 01:50:20,640 --> 01:50:22,410 Но, ајде да апстрактни далеку од идејата за преземање 2218 01:50:22,410 --> 01:50:25,280 еден број се множи со друг, и само да го даде име, 2219 01:50:25,280 --> 01:50:27,360 како плоштад на таа вредност. 2220 01:50:27,360 --> 01:50:29,560 >> И, со други зборови, Ц, ајде да се создаде функција 2221 01:50:29,560 --> 01:50:32,660 наречен плоштадот што го прави токму тоа. 2222 01:50:32,660 --> 01:50:34,600 Тоа се случува да се нарече плоштад. 2223 01:50:34,600 --> 01:50:35,790 Тоа се случува да се земе Инт. 2224 01:50:35,790 --> 01:50:37,820 И ние ќе сака да го нарекуваат n, по дифолт. 2225 01:50:37,820 --> 01:50:39,403 >> Но, ние може да се нарече нешто што сакаме. 2226 01:50:39,403 --> 01:50:42,900 И сето тоа се случува да се направи, буквално, е враќање 2227 01:50:42,900 --> 01:50:45,810 и резултат од n n пати. 2228 01:50:45,810 --> 01:50:48,980 Но, бидејќи тоа е враќање на нешто што 2229 01:50:48,980 --> 01:50:53,690 е клучниот збор во пурпурна имаме никогаш не видел, јас, на линија 11, 2230 01:50:53,690 --> 01:50:55,410 не може само да се каже празнина тоа време. 2231 01:50:55,410 --> 01:51:01,320 >> Празнина, во примерот кој го видоа а од името на печатење, само значи, 2232 01:51:01,320 --> 01:51:02,190 направи нешто. 2233 01:51:02,190 --> 01:51:04,170 Но, не ми рака нешто назад. 2234 01:51:04,170 --> 01:51:06,790 Во овој случај, јас сакам да се врати n пати n, 2235 01:51:06,790 --> 01:51:08,460 или што и да е, тој број. 2236 01:51:08,460 --> 01:51:12,460 >> Така што не може да се каже, еј, компјутер, Се враќам ништо, празнина. 2237 01:51:12,460 --> 01:51:16,166 Тоа се случува да се врати, по природа, int. 2238 01:51:16,166 --> 01:51:17,790 И така тоа е се што се случува овде. 2239 01:51:17,790 --> 01:51:20,070 >> За внесување на плоштад ќе биде int. 2240 01:51:20,070 --> 01:51:24,760 И, така што можеме да го употребиме, мора да да има име, Н. Тоа се случува да излез 2241 01:51:24,760 --> 01:51:26,240 на int, тоа не треба име. 2242 01:51:26,240 --> 01:51:29,590 Ние можеме да го оставиме тоа за главната, или кој и да е користење на мене да се запамети оваа вредност, ако ние 2243 01:51:29,590 --> 01:51:31,120 сакаат со свои променлива. 2244 01:51:31,120 --> 01:51:33,230 >> И, повторно, единственото ново Клучниот збор тука е пријава. 2245 01:51:33,230 --> 01:51:34,480 И јас сум само ќе го направите некои математика. 2246 01:51:34,480 --> 01:51:41,825 Ако навистина сака да биде непотребно, Можам да кажам int производот добива n пати n. 2247 01:51:41,825 --> 01:51:44,170 >> И тогаш јас може да се каже, да се вратите производот. 2248 01:51:44,170 --> 01:51:47,360 Но, повторно, до мојата поента на почетокот на ова едноставно не се добри design-- 2249 01:51:47,360 --> 01:51:50,060 како, зошто се воведе име, симбол, како производ, 2250 01:51:50,060 --> 01:51:51,570 само за да веднаш да се врати? 2251 01:51:51,570 --> 01:51:53,670 Тоа е малку почиста, малку построги, па 2252 01:51:53,670 --> 01:51:59,380 да се каже, само да се каже враќање n пати n, да се ослободи од оваа линија заедно. 2253 01:51:59,380 --> 01:52:02,860 >> И тоа е само помалку код да чита, помалку можност за грешки. 2254 01:52:02,860 --> 01:52:05,180 И ајде да видиме дали ова всушност, сега работи. 2255 01:52:05,180 --> 01:52:09,380 Сега, јас ќе одам да си напред и да се вратат. 2256 01:52:09,380 --> 01:52:11,460 >> Ух-ах, имплицитна изјава на функцијата. 2257 01:52:11,460 --> 01:52:14,080 Не сум направил оваа грешка пред да, не е голема работа. 2258 01:52:14,080 --> 01:52:18,950 Дозволете ми да пишувате или да се потенцира и копирате, на иста функција прототип, 2259 01:52:18,950 --> 01:52:21,342 или потпис, на функцијата тука. 2260 01:52:21,342 --> 01:52:22,800 Или би можел да се движи целиот функција. 2261 01:52:22,800 --> 01:52:23,841 >> Но, тоа е малку мрзливи. 2262 01:52:23,841 --> 01:52:24,870 Значи, ние нема да го стори тоа. 2263 01:52:24,870 --> 01:52:27,960 Сега, дозволете ми да се врати повторно, точка коса црта враќање. 2264 01:52:27,960 --> 01:52:32,790 >> x е квадрат 2 x е 4. x е квадрат 3 x е 9. 2265 01:52:32,790 --> 01:52:35,300 И функцијата чини сега треба да се работи. 2266 01:52:35,300 --> 01:52:36,550 Значи она што е разликата тука? 2267 01:52:36,550 --> 01:52:42,520 Имам функција што се вика плоштад, во овој случај, што го стави во влез. 2268 01:52:42,520 --> 01:52:43,830 И ќе се вратам излез. 2269 01:52:43,830 --> 01:52:46,210 А сепак, претходно, ако Кога ќе го отворите друг пример 2270 01:52:46,210 --> 01:52:51,640 од порано, што беше наречен prototype.c, 2271 01:52:51,640 --> 01:52:54,770 Имав име печати, што врати празен, така да се каже, 2272 01:52:54,770 --> 01:52:58,730 Или да го врати ништо, и едноставно имаше ефект. 2273 01:52:58,730 --> 01:53:00,230 >> Значи она што се случува овде? 2274 01:53:00,230 --> 01:53:03,520 Па, размислете за функцијата се низа за само еден миг. 2275 01:53:03,520 --> 01:53:06,570 Ние сме биле со користење на функцијата се низа на следниот начин. 2276 01:53:06,570 --> 01:53:10,464 >> Имавме функција се стринг, како вклучуваат cs50.h, 2277 01:53:10,464 --> 01:53:16,624 вклучуваат стандардни io.h, int, главно, неважечки. 2278 01:53:16,624 --> 01:53:18,790 И тогаш секој пат кога сум наречен добие низа досега, 2279 01:53:18,790 --> 01:53:23,260 Сум рече нешто како: Стринг а добива се стринг, бидејќи добие string-- 2280 01:53:23,260 --> 01:53:27,880 ајде да се јавите на оваа get.c-- добие низа се враќа стринг што можам потоа 2281 01:53:27,880 --> 01:53:32,050 користење, и да каже здраво, запирка, проценти s, обратна коса црта n, с. 2282 01:53:32,050 --> 01:53:35,660 >> Значи ова е истиот пример, навистина, дека сме имале претходно. 2283 01:53:35,660 --> 01:53:37,920 Па се враќа стринг вредност. 2284 01:53:37,920 --> 01:53:41,260 Но пред еден миг, печати низа не се врати вредност. 2285 01:53:41,260 --> 01:53:42,721 Тоа едноставно има несакани ефекти. 2286 01:53:42,721 --> 01:53:44,220 Значи ова е фундаментална разлика. 2287 01:53:44,220 --> 01:53:46,710 Видовме различни видови на функции сега, 2288 01:53:46,710 --> 01:53:49,490 од кои некои се вратија вредности, од кои некои не. 2289 01:53:49,490 --> 01:53:51,890 Па можеби тоа е стринг, или цел број, или плови. 2290 01:53:51,890 --> 01:53:53,480 Или можеби тоа е само празнина. 2291 01:53:53,480 --> 01:53:55,710 >> И разликата е дека овие функции кои 2292 01:53:55,710 --> 01:53:59,940 добијат податоци и се врати на вредност, всушност, носат нешто назад кон масата, 2293 01:53:59,940 --> 01:54:01,110 така да се каже. 2294 01:54:01,110 --> 01:54:03,710 Па ајде да одиме напред и да погледне во едно последниот сет 2295 01:54:03,710 --> 01:54:09,129 примери кои ја дава чувство, сега, како да, навистина, апстрактен подобро, 2296 01:54:09,129 --> 01:54:11,670 и подобро и подобро, или повеќе, и повеќе, и повеќе, со цел 2297 01:54:11,670 --> 01:54:13,810 да се напише, во крајна линија, подобро код. 2298 01:54:13,810 --> 01:54:16,860 Ајде да одиме напред, а во духот на нула, го направите следново. 2299 01:54:16,860 --> 01:54:21,700 >> Дозволете ми да оди напред и да се вклучат Cs50.h и стандардни IO.h. 2300 01:54:21,700 --> 01:54:24,010 Дозволете ми да оди напред и да даде си int, главно, неважечки. 2301 01:54:24,010 --> 01:54:27,380 И дозволете ми да оди напред, ова го нарекуваат cough.c. 2302 01:54:27,380 --> 01:54:35,510 >> И дозволете ми да оди напред и само како гребење, печатење кашлица / n. 2303 01:54:35,510 --> 01:54:37,170 И јас сакам да го направите тоа три пати. 2304 01:54:37,170 --> 01:54:39,670 Затоа, јас сум, се разбира, само ќе да копирате и залепите три пати. 2305 01:54:39,670 --> 01:54:46,440 Јас сум сега се случува да се направи кашлица точка коса црта кашлица. 2306 01:54:46,440 --> 01:54:50,120 Ајде да си даде малку повеќе простор тука, Enter, кашлица, кашлица, кашлица. 2307 01:54:50,120 --> 01:54:53,970 >> Има, очигледно, веќе можност за подобрување. 2308 01:54:53,970 --> 01:54:55,679 Јас копирани и атипичен неколку пати денес. 2309 01:54:55,679 --> 01:54:58,261 Но тоа беше само тоа, јас не треба да напишете што повеќе ликови. 2310 01:54:58,261 --> 01:55:00,250 Јас се уште смени оние линии на код се. 2311 01:55:00,250 --> 01:55:04,240 >> Овие три линии се идентични, која се чувствува мрзливи и навистина е, 2312 01:55:04,240 --> 01:55:07,110 а веројатно и не е вистинскиот пристап. 2313 01:55:07,110 --> 01:55:11,029 Така е и со она што состојка би можеле да се подобри овој код? 2314 01:55:11,029 --> 01:55:12,570 Ние не треба да го копирате и залепите кодот. 2315 01:55:12,570 --> 01:55:15,070 >> И, навистина, во секое време да се чувствувате себе копирање и вметнување, 2316 01:55:15,070 --> 01:55:17,700 па дури и не се менува кодот, шансите се има подобар начин. 2317 01:55:17,700 --> 01:55:19,470 И, навистина, постои. 2318 01:55:19,470 --> 01:55:22,510 Дозволете ми да оди напред и да се направи за телефонска линија, иако синтаксата, можеби и не 2319 01:55:22,510 --> 01:55:24,570 дојде природно уште. 2320 01:55:24,570 --> 01:55:29,494 >> Направете го ова три пати, едноставно со правење на following-- 2321 01:55:29,494 --> 01:55:31,160 и јас се случи да знам од пракса. 2322 01:55:31,160 --> 01:55:32,810 Но, ние имаме голем број на примери сега. 2323 01:55:32,810 --> 01:55:34,950 И ќе видите на интернет повеќе референци уште. 2324 01:55:34,950 --> 01:55:37,790 >> Ова е синтакса на алинеја 6, која слично како гребење што се повторува 2325 01:55:37,790 --> 01:55:40,090 блок, се повторува три пати. 2326 01:55:40,090 --> 01:55:41,340 Тоа е малку магичен за сега. 2327 01:55:41,340 --> 01:55:43,050 Но, ова ќе добиете повеќе, и повеќе познати. 2328 01:55:43,050 --> 01:55:45,050 >> И тоа се случува да се повторува линија осум три пати, 2329 01:55:45,050 --> 01:55:52,390 така што ако јас повторно компајлирајте направи кашлица, точка црта кашлица, кашлица, кашлица, кашлица. 2330 01:55:52,390 --> 01:55:54,030 Таа се уште работи на истиот начин. 2331 01:55:54,030 --> 01:55:55,550 Па тоа е во ред и добро. 2332 01:55:55,550 --> 01:55:58,200 Но тоа не е многу апстрактни. 2333 01:55:58,200 --> 01:55:59,371 >> Тоа е совршено точни. 2334 01:55:59,371 --> 01:56:01,370 Но тоа се чувствува како да има може да биде можност, 2335 01:56:01,370 --> 01:56:03,750 како во светот на Нула, да се вид на почеток 2336 01:56:03,750 --> 01:56:07,530 за да додадете некои семантика тука, така што Не само што има некои за телефонска линија, 2337 01:56:07,530 --> 01:56:09,867 и функцијата за која се вели кашлица, или не се плаќа. 2338 01:56:09,867 --> 01:56:10,450 Знаеш што? 2339 01:56:10,450 --> 01:56:12,620 Дозволете ми да се обиде да биде малку поладна од тоа, 2340 01:56:12,620 --> 01:56:16,090 и всушност пишува функција која има некои несакани ефекти, го нарекуваат кашлица. 2341 01:56:16,090 --> 01:56:20,830 >> И тоа не презема влез, и се враќа нема вредност како излез. 2342 01:56:20,830 --> 01:56:22,680 Но, знаете што го прави тоа? 2343 01:56:22,680 --> 01:56:29,370 Тоа го прави this-- printf, цитат unquote, кашлица. 2344 01:56:29,370 --> 01:56:32,380 >> И сега тука, јас ќе одам да се оди напред и за int, 2345 01:56:32,380 --> 01:56:36,070 i добива нула, јас помалку од 3, јас плус плус. 2346 01:56:36,070 --> 01:56:39,770 Одам да не printf, што е веројатно спроведување на ниско ниво 2347 01:56:39,770 --> 01:56:40,270 детали. 2348 01:56:40,270 --> 01:56:41,353 Не ми е гајле колку да кашла. 2349 01:56:41,353 --> 01:56:43,240 Јас само сакам да ја користите функцијата за кашлица. 2350 01:56:43,240 --> 01:56:44,840 И јас сум само ќе се јавите кашлица. 2351 01:56:44,840 --> 01:56:46,204 >> Сега, забележуваат дихотомија. 2352 01:56:46,204 --> 01:56:49,370 Кога ќе се јавите на функција, ако не сакате да го даде влезови, сосема во ред. 2353 01:56:49,370 --> 01:56:51,780 Едноставно направете отворена заграда, во близина заграда, и ќе завршиш. 2354 01:56:51,780 --> 01:56:56,271 >> Кога ќе се дефинира функција, или прогласи прототип на функцијата, 2355 01:56:56,271 --> 01:56:58,770 ако се знае однапред дека не е ќе се преземат сите аргументи, 2356 01:56:58,770 --> 01:57:01,170 велат празнина во овие загради таму. 2357 01:57:01,170 --> 01:57:05,660 И тоа го прави сигурни дека ќе не случајно ќе ја злоупотребат. 2358 01:57:05,660 --> 01:57:07,020 Дозволете ми да оди напред и да кашлица. 2359 01:57:07,020 --> 01:57:08,540 И, се разбира, јас сум направил грешка. 2360 01:57:08,540 --> 01:57:10,410 >> Мајката, тука е дека имплицитна изјава. 2361 01:57:10,410 --> 01:57:11,325 Но, тоа е во ред. 2362 01:57:11,325 --> 01:57:12,590 Тоа е лесен фикс. 2363 01:57:12,590 --> 01:57:18,240 Јас само треба прототип повисоко во моето досие отколку што сум, всушност, го користи. 2364 01:57:18,240 --> 01:57:20,070 >> Па сега дозволете ми да кашлица, повторно, убаво. 2365 01:57:20,070 --> 01:57:20,790 Сега, таа работи. 2366 01:57:20,790 --> 01:57:22,930 Направете кашлица, кашлица, кашлица, кашлица. 2367 01:57:22,930 --> 01:57:25,930 Така што може да мислам дека ние сме навистина само во текот на инженеринг овој проблем. 2368 01:57:25,930 --> 01:57:26,763 И, навистина, ние сме. 2369 01:57:26,763 --> 01:57:28,870 Ова не е добра кандидат на програмата 2370 01:57:28,870 --> 01:57:31,930 во моментот за refactoring, и прави она што е 2371 01:57:31,930 --> 01:57:35,645 се нарекува хиерархиска распаѓање, каде што се дел од кодот, а потоа 2372 01:57:35,645 --> 01:57:38,790 можете вид на факторот на работите, така што да им ја припишуваме повеќе семантиката на нив, 2373 01:57:38,790 --> 01:57:40,930 и повторна употреба на крајот подолг рок. 2374 01:57:40,930 --> 01:57:43,490 Но, тоа е градење на блок кон повеќе софистицирани програми 2375 01:57:43,490 --> 01:57:45,600 дека ние ќе започнеме писмена форма пред долго што 2376 01:57:45,600 --> 01:57:50,090 ни овозможува да имаме вокабуларот со што да пишувам подобро код. 2377 01:57:50,090 --> 01:57:52,920 И, навистина, ајде да видиме дали можеме не може да се генерализира овој понатаму. 2378 01:57:52,920 --> 01:57:57,984 >> Се чини дека е малку несмасен дека, главно, треба да се грижите за тоа ебам за телефонска линија, 2379 01:57:57,984 --> 01:57:59,400 и повикувајќи кашлица повторно и повторно. 2380 01:57:59,400 --> 01:58:03,050 Зошто не можам да кажам само кашлица, Ве молиме да се плаќа три пати? 2381 01:58:03,050 --> 01:58:08,170 Со други зборови, зошто да не можам само даде свој придонес да кашла и да го направите ова? 2382 01:58:08,170 --> 01:58:11,270 >> Зошто не можам да кажам, во главната кашлица три пати. 2383 01:58:11,270 --> 01:58:13,150 И сега, ова е вид на магично. 2384 01:58:13,150 --> 01:58:14,540 Тоа е многу итеративен тука. 2385 01:58:14,540 --> 01:58:15,940 И тоа е, навистина, чекор бебе. 2386 01:58:15,940 --> 01:58:19,250 >> Но, само способноста да се каже на линија осум, кашлица три пати, 2387 01:58:19,250 --> 01:58:20,730 тоа е само многу повеќе може да се чита. 2388 01:58:20,730 --> 01:58:24,210 И, плус, јас не треба да се знае или грижа како се спроведува кашлица. 2389 01:58:24,210 --> 01:58:26,460 И, навистина, подоцна во текот на рок и за конечниот проекти, 2390 01:58:26,460 --> 01:58:29,150 ако се справи со проектот со соученик или двајца соученици, 2391 01:58:29,150 --> 01:58:32,370 ќе сфатите дека ви се случува да треба, или сакате да, се подели на работа. 2392 01:58:32,370 --> 01:58:34,650 >> И ви се случува да сакаат да се одлучи однапред, кој се случува да се направи она што, 2393 01:58:34,650 --> 01:58:35,483 и во кои парчиња? 2394 01:58:35,483 --> 01:58:37,520 И не би било убаво ако, на пример, 2395 01:58:37,520 --> 01:58:40,100 да преземе одговорност за пишување главната, направено. 2396 01:58:40,100 --> 01:58:43,470 И вашиот цимер, или вашиот партнер поопшто, 2397 01:58:43,470 --> 01:58:45,230 се грижи за спроведување на кашлица. 2398 01:58:45,230 --> 01:58:49,540 >> И оваа поделба, овие ѕидовите на апстракција, 2399 01:58:49,540 --> 01:58:52,310 или слоеви на апстракција ако ќе ви се супер моќен, 2400 01:58:52,310 --> 01:58:55,480 затоа што особено за поголеми, повеќе комплексни програми и системи, 2401 01:58:55,480 --> 01:59:00,070 тоа им овозможува на повеќе луѓе да се изгради работи заедно, и во крајна линија 2402 01:59:00,070 --> 01:59:02,680 бод нивната работа заедно на овој начин. 2403 01:59:02,680 --> 01:59:05,332 Но, се разбира, ние сега треба да се поправи кашлица. 2404 01:59:05,332 --> 01:59:07,290 Ние треба да се каже кашлица дека, еј, знаеш што? 2405 01:59:07,290 --> 01:59:11,230 Ви се случува да треба да се земе input-- па не празнина, но int и сега. 2406 01:59:11,230 --> 01:59:15,170 Ајде да одиме напред и да се стави во кашлица Инт. i добива нула. 2407 01:59:15,170 --> 01:59:16,890 >> i е помал од колку пати. 2408 01:59:16,890 --> 01:59:18,550 Реков пред три. 2409 01:59:18,550 --> 01:59:20,420 Но, тоа не е она што го сакате. 2410 01:59:20,420 --> 01:59:25,520 Сакам да се плаќа да се генерализира поддршка на било кој број на повторувања. 2411 01:59:25,520 --> 01:59:28,800 >> Значи, навистина, тоа е n што сакам, без оглед на корисник ми кажува. 2412 01:59:28,800 --> 01:59:31,620 Сега, јас може да оди напред и да каже печатење кашлица. 2413 01:59:31,620 --> 01:59:34,750 И без оглед на тоа што бројот корисникот поминува, 2414 01:59:34,750 --> 01:59:36,890 Јас ќе iterate дека многу пати. 2415 01:59:36,890 --> 01:59:39,160 >> Па на крајот на денот, програма е идентичен. 2416 01:59:39,160 --> 01:59:42,820 Но забележите сите овие работи па дури и може да биде во друга датотека. 2417 01:59:42,820 --> 01:59:45,620 Всушност, јас не знам на момент како printf се спроведува. 2418 01:59:45,620 --> 01:59:47,980 >> Не знам во овој момент како да се стринг, или да се int, или да се плови 2419 01:59:47,980 --> 01:59:48,646 се спроведуваат. 2420 01:59:48,646 --> 01:59:50,930 И јас не сакам да ги видите на мојот екран. 2421 01:59:50,930 --> 01:59:55,320 Како и да е, јас сум почнуваат да се фокусираат на мојата програма, а не оние функции. 2422 01:59:55,320 --> 01:59:59,070 >> И така, навистина, штом ќе се започне факторинг код како ова, 2423 01:59:59,070 --> 02:00:01,397 дури и да се движиме кашлица на посебна датотека? 2424 02:00:01,397 --> 02:00:02,730 Некој друг може да се имплементира. 2425 02:00:02,730 --> 02:00:06,810 И вие и вашата програма да стане многу убава, и многу може да се чита, 2426 02:00:06,810 --> 02:00:10,830 веројатно, навистина четири лајн програма во право таму. 2427 02:00:10,830 --> 02:00:13,510 >> Па ајде да одиме напред сега и да се направи уште една промена. 2428 02:00:13,510 --> 02:00:16,180 Забележете дека моите прототип мора да се промени до врвот. 2429 02:00:16,180 --> 02:00:18,390 Значи, дозволете ми да го надминете тоа така Јас не се викна. 2430 02:00:18,390 --> 02:00:22,580 >> Направете кашлица, дозволете ми да се кандидира откако кашлица повеќе, се уште го прават истото. 2431 02:00:22,580 --> 02:00:26,010 Но, сега, да се забележи имаме состојка за една конечна верзија. 2432 02:00:26,010 --> 02:00:26,940 Знаеш што? 2433 02:00:26,940 --> 02:00:29,040 Не сакам да се плаќа само, е задолжително. 2434 02:00:29,040 --> 02:00:30,802 Сакам да има нешто повеќе воопшто. 2435 02:00:30,802 --> 02:00:31,510 Па да знаете што? 2436 02:00:31,510 --> 02:00:32,450 Сакам да го направите тоа. 2437 02:00:32,450 --> 02:00:37,140 Сакам да имам, многу сличен на гребење не, на пример блокот, но не само 2438 02:00:37,140 --> 02:00:38,680 каже нешто одреден број на пати. 2439 02:00:38,680 --> 02:00:41,510 Сакам да кажам многу специфична низа. 2440 02:00:41,510 --> 02:00:43,850 И, затоа, јас не сакате да речеме кашлица. 2441 02:00:43,850 --> 02:00:47,660 Сакам да се каже она што стринг е проследена во. 2442 02:00:47,660 --> 02:00:49,960 >> Значи забележите, јас сум се генерализира ова, така што сега 2443 02:00:49,960 --> 02:00:53,110 да речеме се чувствува како добра името за ова, како нула, 2444 02:00:53,110 --> 02:00:55,530 зема два аргументи, за разлика од гребење. 2445 02:00:55,530 --> 02:00:56,570 Една од нив е стринг. 2446 02:00:56,570 --> 02:00:57,300 Една од нив е int. 2447 02:00:57,300 --> 02:00:58,130 >> И би можел да ги префрлат. 2448 02:00:58,130 --> 02:01:00,713 Јас само вид на се допаѓа идејата на велат дека низа, а потоа 2449 02:01:00,713 --> 02:01:01,940 колку пати подоцна. 2450 02:01:01,940 --> 02:01:03,970 Празнината што значи дека се уште не се врати ништо. 2451 02:01:03,970 --> 02:01:06,428 Овие се само визуелната страна ефекти, како и со [? Јордан?] 2452 02:01:06,428 --> 02:01:08,240 вербален пропратен ефект на врескаше. 2453 02:01:08,240 --> 02:01:12,630 Тоа, сепак, не нешто n пати, 0 до, но не е еднаква на n. 2454 02:01:12,630 --> 02:01:14,540 Ова значи n Вкупно пати. 2455 02:01:14,540 --> 02:01:16,540 А потоа само се печати што и да е низа. 2456 02:01:16,540 --> 02:01:19,060 Па јас сум навистина се генерализира оваа линија код. 2457 02:01:19,060 --> 02:01:22,460 Па сега, како можам да се спроведе функцијата за кашлица? 2458 02:01:22,460 --> 02:01:25,520 >> Што можам да направам празнина кашлица. 2459 02:01:25,520 --> 02:01:28,501 И јас се уште може да се земе во колку колку пати сакате да кашла. 2460 02:01:28,501 --> 02:01:29,250 Но знаеш што? 2461 02:01:29,250 --> 02:01:31,240 сега можам да залог да се каже. 2462 02:01:31,240 --> 02:01:36,540 >> Јас може да се јавите каже со зборот кашлица, поминува во n. 2463 02:01:36,540 --> 02:01:40,410 И ако сакам исто така да се спроведе, само за забава, функција кивавица, 2464 02:01:40,410 --> 02:01:42,290 Можам да кивнете, неколку број на пати. 2465 02:01:42,290 --> 02:01:47,300 И можам да го задржи повторната употреба на n, бидејќи се забележи дека метри во овој контекст и обемот 2466 02:01:47,300 --> 02:01:49,470 постои само во рамките на оваа функција. 2467 02:01:49,470 --> 02:01:52,767 >> И n во овој контекст само постои во рамките на оваа функција овде. 2468 02:01:52,767 --> 02:01:54,600 Па ние ќе се вратам на овие прашања од опсегот. 2469 02:01:54,600 --> 02:02:01,160 И тука, јас сум само се случува да се каже, achoo, а потоа n пати, точка-запирка. 2470 02:02:01,160 --> 02:02:04,340 >> И сега, јас само треба да позајмите овие функција потписи до тука. 2471 02:02:04,340 --> 02:02:06,290 Значи кашлица е точно. 2472 02:02:06,290 --> 02:02:10,090 Празнина кивањето е точно сега. 2473 02:02:10,090 --> 02:02:12,390 >> И јас се уште само треба да се каже. 2474 02:02:12,390 --> 02:02:18,990 Па јас ќе одам да се каже, да речеме Стринг а, int n, точка-запирка. 2475 02:02:18,990 --> 02:02:22,010 Па јас сум над-Инженерните подлец од оваа програма. 2476 02:02:22,010 --> 02:02:23,760 >> И ова не се мора да значи дека тоа е 2477 02:02:23,760 --> 02:02:26,343 што треба да направите кога пишувате дури и наједноставните програми. 2478 02:02:26,343 --> 02:02:29,280 Се земе нешто што е очигледно навистина едноставно, навистина краток, 2479 02:02:29,280 --> 02:02:31,800 и повторно да се имплементира користење на премногу код. 2480 02:02:31,800 --> 02:02:34,560 Но, всушност ќе се види, и во време да се погледне назад на овие примери, 2481 02:02:34,560 --> 02:02:38,610 и реализација, ох, оние кои се чекорите ние почнавме да всушност се генерализира, 2482 02:02:38,610 --> 02:02:40,797 да се земат нешто, додека на крајот на денот 2483 02:02:40,797 --> 02:02:42,380 мојот код е всушност прилично разумна. 2484 02:02:42,380 --> 02:02:45,960 Затоа што ако сакам да кашла три пати, тогаш кивавица три пати, 2485 02:02:45,960 --> 02:02:50,420 Јас сум едноставно ќе се повторување ова, Програмата се кашлица, и да ја стартувате кашлица. 2486 02:02:50,420 --> 02:02:53,620 И јас имам три кашлање и три кивање. 2487 02:02:53,620 --> 02:02:55,990 >> И така ова е основен парадигма, ако сакате, 2488 02:02:55,990 --> 02:03:00,110 за како да се обратите за всушност спроведување на програмата. 2489 02:03:00,110 --> 02:03:03,220 Но, ајде да видиме сега што е тоа ние сме прави сето ова време, 2490 02:03:03,220 --> 02:03:06,940 и она што некои од конечната парчиња стојат зад ова едноставна команда. 2491 02:03:06,940 --> 02:03:09,620 На крајот на денот, ние сме е користење ѕвекот како што е нашата компајлерот. 2492 02:03:09,620 --> 02:03:11,494 Ние сме биле пишување на код код, конвертирање на тоа 2493 02:03:11,494 --> 02:03:12,820 преку ѕвекот во машински код. 2494 02:03:12,820 --> 02:03:15,540 >> И ние сме биле користење се направи само да се олесни нашата тастатурата, така 2495 02:03:15,540 --> 02:03:20,740 дека ние не треба да се запамети оние баењата на самата ѕвекот. 2496 02:03:20,740 --> 02:03:22,640 Но, она што е да се направи, всушност, се прави? 2497 02:03:22,640 --> 02:03:24,750 И, за возврат, што е Ѕвекот, всушност, се прави? 2498 02:03:24,750 --> 02:03:28,790 >> Излегува, иако имаат поедноставен денешната дискусија со зборовите: 2499 02:03:28,790 --> 02:03:33,090 ќе се земе изворниот код, да го давате како влез на компајлерот, кој ви дава 2500 02:03:33,090 --> 02:03:35,750 производството на машина код, се испоставува дека има 2501 02:03:35,750 --> 02:03:37,420 неколку различни чекори во таму. 2502 02:03:37,420 --> 02:03:41,940 И составувањето се случува да биде чадор термин за еден куп на чекори. 2503 02:03:41,940 --> 02:03:43,970 Но, ајде да се закачам ова навистина брзо. 2504 02:03:43,970 --> 02:03:48,070 >> Излегува дека ние сме прави повеќе работи секој пат кога ќе ја стартувате програмата, 2505 02:03:48,070 --> 02:03:50,990 или секој пат кога ќе се состави програма за денес. 2506 02:03:50,990 --> 02:03:55,020 Значи препроцесирачка се однесува на this-- ништо во програмата C, 2507 02:03:55,020 --> 02:03:58,720 како што ќе видиме повторно и повторно, која започнува со овој хаш симбол, 2508 02:03:58,720 --> 02:04:03,320 или симбол хаштагот тука, значи тоа е директива препроцесори. 2509 02:04:03,320 --> 02:04:07,330 Тоа значи дека, во овој случај, еј компјутер, направи нешто со оваа датотека, 2510 02:04:07,330 --> 02:04:09,430 пред навистина да сте ги собере мојот код. 2511 02:04:09,430 --> 02:04:15,220 >> Во овој случај, хаш вклучуваат применува, Во суштина, начин на велејќи Ц, 2512 02:04:15,220 --> 02:04:19,325 еј компјутер, одам да купам содржината на cs50.h и ставете ги тука. 2513 02:04:19,325 --> 02:04:22,170 Еј компјутер, одам да купам содржината на стандардни io.h, 2514 02:04:22,170 --> 02:04:24,690 каде што е на хард диск, ставете го тука. 2515 02:04:24,690 --> 02:04:27,390 Значи оние работи се случуваат првиот за време препроцесирачка. 2516 02:04:27,390 --> 02:04:28,880 >> И ѕвекот го прави сето ова за нас. 2517 02:04:28,880 --> 02:04:30,510 И тоа го прави толку ебам брзо, дури и не 2518 02:04:30,510 --> 02:04:32,000 види четири различни работи што се случуваат. 2519 02:04:32,000 --> 02:04:34,100 Но, тоа е прв ваков чекор. 2520 02:04:34,100 --> 02:04:35,560 >> Што всушност се случува следно? 2521 02:04:35,560 --> 02:04:38,320 Па, следниот официјален чекор е составувањето. 2522 02:04:38,320 --> 02:04:40,385 И излегува дека составувањето на програмата 2523 02:04:40,385 --> 02:04:44,060 технички средства одат од изворен код, работи кои ги имаме 2524 02:04:44,060 --> 02:04:47,890 пишува денес, на нешто свиканото собрание код, нешто 2525 02:04:47,890 --> 02:04:49,260 што изгледа малку различен. 2526 02:04:49,260 --> 02:04:51,050 >> И, всушност, може да се види овој вистински пост. 2527 02:04:51,050 --> 02:04:53,890 Дозволете ми да се, всушност, оди во мојата ИРО. 2528 02:04:53,890 --> 02:04:58,050 Дозволете ми да оди напред и отворен hello.c, која е прв програма со која се 2529 02:04:58,050 --> 02:04:59,120 започна денес. 2530 02:04:59,120 --> 02:05:04,130 И дозволете ми да оди напред и да се кандидира ѕвекот на малку поинаку, ѕвекот-и, hello.c, 2531 02:05:04,130 --> 02:05:07,720 што е, всушност, ќе се дај ми друга датотека hello.s. 2532 02:05:07,720 --> 02:05:10,330 >> А ние веројатно никогаш нема да еднаш да се види овој вид на код. 2533 02:05:10,330 --> 02:05:13,030 Ако се земе на пониско ниво системи класа како CS61, 2534 02:05:13,030 --> 02:05:14,920 ќе видите многу повеќе на овој вид на код. 2535 02:05:14,920 --> 02:05:17,020 Но, ова е асемблер јазикот. 2536 02:05:17,020 --> 02:05:22,050 Ова е x86 собранието јазик дека процесорот кој е во основата 2537 02:05:22,050 --> 02:05:24,460 CS50 IDE, всушност, го разбира. 2538 02:05:24,460 --> 02:05:27,060 >> И криптичната како го прави тоа изгледа, тоа е нешто 2539 02:05:27,060 --> 02:05:29,180 компјутерот разбира многу добро. 2540 02:05:29,180 --> 02:05:30,790 Под q, ова е одземање. 2541 02:05:30,790 --> 02:05:31,660 Има движења. 2542 02:05:31,660 --> 02:05:35,730 >> Има повикувајќи функции тука, x oring, движење, додаток, поп, 2543 02:05:35,730 --> 02:05:36,430 враќање. 2544 02:05:36,430 --> 02:05:38,850 Значи има некои многу инструкции ниско ниво 2545 02:05:38,850 --> 02:05:41,280 дека процесори се разбере дека Јас се алудира погоре. 2546 02:05:41,280 --> 02:05:43,100 Тоа е она што Intel Inside. 2547 02:05:43,100 --> 02:05:45,030 >> Постојат модели на нули и оние кои 2548 02:05:45,030 --> 02:05:51,800 карта на овие arcanely формулирани, но нешто добро име, упатства, 2549 02:05:51,800 --> 02:05:52,780 така да се каже. 2550 02:05:52,780 --> 02:05:54,780 Тоа е она што се случува кога ќе компајлирате вашиот код. 2551 02:05:54,780 --> 02:05:58,560 Можете да добиете собранието јазик надвор од неа, кое 2552 02:05:58,560 --> 02:06:04,680 значи третиот чекор е да се соберат дека собранието код во крајна линија, 2553 02:06:04,680 --> 02:06:09,080 машина code-- нули и единици, а не на текст кој ние само видов пред еден миг. 2554 02:06:09,080 --> 02:06:13,370 >> Значи пред-обработка, дали тоа да и да ја замени, како и неколку други работи. 2555 02:06:13,370 --> 02:06:16,430 Компајлирање зема вашиот извор код од C, изворниот код 2556 02:06:16,430 --> 02:06:18,980 кои ги напишал, до собранието код кој ние само го погледна. 2557 02:06:18,980 --> 02:06:22,170 Монтажа зема дека собранието кодот на нули и оние 2558 02:06:22,170 --> 02:06:24,680 дека процесорот навистина ќе се разбере на крајот на денот. 2559 02:06:24,680 --> 02:06:27,630 И поврзување е последниот чекор Тоа се случува us-- повторно, 2560 02:06:27,630 --> 02:06:29,830 толку брзо ние дури и не notice-- која се вели: 2561 02:06:29,830 --> 02:06:32,460 еј компјутер, да ги преземе сите нули и оние кои 2562 02:06:32,460 --> 02:06:36,750 произлезе од составувањето код Давид, и неговата главна функција во овој случај. 2563 02:06:36,750 --> 02:06:39,160 >> И еј компјутер, одам да купам сите нули и единици 2564 02:06:39,160 --> 02:06:42,180 дека вработените CS50 пишува во CS50 библиотека. 2565 02:06:42,180 --> 02:06:43,440 Се меша оние со Давид. 2566 02:06:43,440 --> 02:06:46,648 И еј компјутер, одам да купам сите нули и оние кои на некој друг напишал години 2567 02:06:46,648 --> 02:06:47,470 пред за printf. 2568 02:06:47,470 --> 02:06:49,880 И да додадете оние во целата работа, така што ние сме 2569 02:06:49,880 --> 02:06:52,870 добив нули и оние, нули и персонал CS50, 2570 02:06:52,870 --> 02:06:55,370 нули на printf и оние, и се друго што го користите. 2571 02:06:55,370 --> 02:07:00,410 >> Сите тие се комбинираат заедно во една програма наречена, во овој случај, здраво. 2572 02:07:00,410 --> 02:07:03,141 Па сега па натаму, ние само ќе го користат зборот составувањето. 2573 02:07:03,141 --> 02:07:06,390 И ние ќе се земе здраво за готово дека кога ние велиме, состави својата програма, тоа значи, 2574 02:07:06,390 --> 02:07:08,849 еј направи пред-обработка, монтажа и поврзување. 2575 02:07:08,849 --> 02:07:11,890 Но, таму е всушност некои сочни работи се случува таму под хауба. 2576 02:07:11,890 --> 02:07:13,723 А особено ако се љубопитни за некое време, 2577 02:07:13,723 --> 02:07:15,900 можете да почнете ѕиркаа околу во овој пониско ниво. 2578 02:07:15,900 --> 02:07:19,660 Но, за сега, да сфатат дека меѓу takeaways за денес 2579 02:07:19,660 --> 02:07:23,420 се доста едноставно почеток на еден процес, 2580 02:07:23,420 --> 02:07:26,700 за добивање удобно со нешто како Здраво светот. 2581 02:07:26,700 --> 02:07:29,575 Всушност, повеќето од она што ние го направивме денес сигурно нема да потоне во супер брзо. 2582 02:07:29,575 --> 02:07:31,491 И тоа ќе биде потребно извесно време, и некои пракса. 2583 02:07:31,491 --> 02:07:33,864 И шансите се, ќе се најде решение на сакаат да се погоди вашиот тастатура 2584 02:07:33,864 --> 02:07:34,780 или се развикам на екранот. 2585 02:07:34,780 --> 02:07:35,880 И сето тоа е во ред. 2586 02:07:35,880 --> 02:07:38,320 Иако, можеби, не се обидуваат да го направи тоа во библиотеката толку многу. 2587 02:07:38,320 --> 02:07:40,820 >> И на крајот, ќе иако се во можност, да се започне 2588 02:07:40,820 --> 02:07:44,580 гледајќи модели, и во добар код дека сте го напишале и грешки 2589 02:07:44,580 --> 02:07:45,370 што сте ги направиле. 2590 02:07:45,370 --> 02:07:48,965 И многу сличен на процесот на станува ТФ или CA е како, 2591 02:07:48,965 --> 02:07:51,590 ќе започне да се подобри и подобро да види овие модели, 2592 02:07:51,590 --> 02:07:53,774 и само решавање на вашите сопствените проблеми на крајот. 2593 02:07:53,774 --> 02:07:56,940 Во меѓувреме, ќе има многу од нас да ја дадат да ви помогне, и ќе добиете 2594 02:07:56,940 --> 02:07:57,481 преку ова. 2595 02:07:57,481 --> 02:07:59,450 И во пишуваат прозорци за сите проблеми 2596 02:07:59,450 --> 02:08:01,366 ќе ви бидат водени преку сите команди 2597 02:08:01,366 --> 02:08:05,330 дека јас сигурно знам од многу пракса до сега, 2598 02:08:05,330 --> 02:08:07,380 но може да се вее над глава за сега. 2599 02:08:07,380 --> 02:08:08,580 И тоа е сосема во ред. 2600 02:08:08,580 --> 02:08:11,230 >> Но, на крајот, си оди за да започнете да гледате шеми се појават. 2601 02:08:11,230 --> 02:08:14,260 И штом еднаш ќе добиете минатото сите глупави детали, како загради, 2602 02:08:14,260 --> 02:08:16,710 и големи загради, и полу-запирки, и работи, искрено, 2603 02:08:16,710 --> 02:08:19,360 дека не е на сите интелектуално интересно. 2604 02:08:19,360 --> 02:08:22,690 И тоа не е целта на преземање на какви било воведен класа. 2605 02:08:22,690 --> 02:08:24,410 Тоа е на идеи што се случува е важно. 2606 02:08:24,410 --> 02:08:26,659 >> Тоа е петелките, и услови, како и функции, 2607 02:08:26,659 --> 02:08:30,552 и уште посилна на апстракција, и факторингот на код, 2608 02:08:30,552 --> 02:08:33,510 и добриот дизајн и добрата стил, и на крајот на исправноста 2609 02:08:33,510 --> 02:08:37,330 на вашиот код, тоа е на крајот ќе се најважни. 2610 02:08:37,330 --> 02:08:40,925 Значи следната недела ќе ги преземат овие идеи кои ние прв пат го виде во Скреч 2611 02:08:40,925 --> 02:08:42,800 а сега се преведени до В И ние ќе започнеме 2612 02:08:42,800 --> 02:08:45,740 да се воведе првиот од реалниот свет домени курсот. 2613 02:08:45,740 --> 02:08:50,140 >> Ќе се фокусира на светот на безбедноста, и поконкретно криптографијата, 2614 02:08:50,140 --> 02:08:51,980 уметноста на scrambling информации. 2615 02:08:51,980 --> 02:08:54,000 А меѓу првите проблеми ќе се 2616 02:08:54,000 --> 02:08:56,840 ќе добиете за да се напише надвор играјќи си со некои од синтаксата 2617 02:08:56,840 --> 02:08:59,880 и решавање на некои логички проблеми, во крајна линија пред долго време, 2618 02:08:59,880 --> 02:09:03,960 е всушност да се трка, или шифрирање, и на крајот да ја декриптира информации. 2619 02:09:03,960 --> 02:09:06,470 И се што сме го направиле денес, прилично ќе ниско 2620 02:09:06,470 --> 02:09:09,190 ниво, е само ќе се овозможи нас да се земе еден, и еден, 2621 02:09:09,190 --> 02:09:13,550 и уште еден чекор над кон пишување најинтересните код уште. 2622 02:09:13,550 --> 02:09:15,050 >> Значи повеќе за тоа следната недела. 2623 02:09:15,050 --> 02:09:17,834 2624 02:09:17,834 --> 02:09:18,762 >> [Видео репродукција] 2625 02:09:18,762 --> 02:09:19,690 2626 02:09:19,690 --> 02:09:22,006 >> -Што Може да ми кажете за последен пат сте го виделе? 2627 02:09:22,006 --> 02:09:26,041 2628 02:09:26,041 --> 02:09:27,040 -Што Да кажам, навистина? 2629 02:09:27,040 --> 02:09:30,500 2630 02:09:30,500 --> 02:09:35,340 Мислам, тоа беше како и секој друг пред-продукција проба, 2631 02:09:35,340 --> 02:09:40,510 освен дека има нешто што рече На самиот крај што заглавив со мене. 2632 02:09:40,510 --> 02:09:44,810 2633 02:09:44,810 --> 02:09:46,640 >> 'Ова е CS50. 2634 02:09:46,640 --> 02:09:49,440 2635 02:09:49,440 --> 02:09:52,190 >> -Тоа Е намалување на сите, одлична работа на проба. 2636 02:09:52,190 --> 02:09:53,070 >> ручек -Тоа е? 2637 02:09:53,070 --> 02:09:54,986 >> -Да, И јас може да зграби еден сендвич во малку. 2638 02:09:54,986 --> 02:09:58,380 Дозволете ми само со debrief Дејвид навистина брзо. 2639 02:09:58,380 --> 02:09:59,160 Давид? 2640 02:09:59,160 --> 02:10:01,260 Давид? 2641 02:10:01,260 --> 02:10:03,110 >> [END репродукција]