1 00:00:00,000 --> 00:00:02,880 >> [За възпроизвеждане на музика] 2 00:00:02,880 --> 00:00:10,580 3 00:00:10,580 --> 00:00:13,500 >> SPEAKER 1: Това е CS50 и Това е началото на две седмици. 4 00:00:13,500 --> 00:00:18,400 Така че, нека да се потопите право в нещо че е бъгав, така да се каже. 5 00:00:18,400 --> 00:00:24,015 Така че, тук е CS50 IDE и съм придърпа предварително тази screen-- дяволите 6 00:00:24,015 --> 00:00:25,070 това. 7 00:00:25,070 --> 00:00:25,760 Предупредителен спойлери. 8 00:00:25,760 --> 00:00:26,260 Всичко е наред. 9 00:00:26,260 --> 00:00:29,060 Аз бях спрял на този екран тук, който има много проста програма. 10 00:00:29,060 --> 00:00:32,659 Ако ние превъртете надолу, най- за това е просто коментира, 11 00:00:32,659 --> 00:00:36,730 но тук, в 13 линии през 17 имаме програма. 12 00:00:36,730 --> 00:00:40,580 >> Това е синтактично валидна, което означава, ако Аз го компилирате, то ще събира и управлява, 13 00:00:40,580 --> 00:00:41,920 но това е бъгав. 14 00:00:41,920 --> 00:00:47,330 Тази програма твърди в коментарите до върха, че тя трябва да отпечатате 10 звезди, 15 00:00:47,330 --> 00:00:48,870 но това не е така. 16 00:00:48,870 --> 00:00:53,290 И въз основа на вашия опит, или скоро да бъде опит с C, 17 00:00:53,290 --> 00:00:56,820 може ли логично различи защо това е, всъщност, бъги? 18 00:00:56,820 --> 00:00:57,804 Да? 19 00:00:57,804 --> 00:00:59,220 АУДИТОРИЯ: Той отива от нула до 10. 20 00:00:59,220 --> 00:01:01,884 Това е 11 повторения. 21 00:01:01,884 --> 00:01:02,550 SPEAKER 1: Да. 22 00:01:02,550 --> 00:01:06,030 Така, че ще ходи от нула нагоре през и равно на 10, 23 00:01:06,030 --> 00:01:08,140 което разбира се е на 11 повторения. 24 00:01:08,140 --> 00:01:10,020 Така че, това ще печат, наистина, 11 звезди. 25 00:01:10,020 --> 00:01:13,040 Така че, конвенцията за компютърни науки в повечето езици за програмиране 26 00:01:13,040 --> 00:01:15,270 е, наистина, само за да започне броенето на нула, 27 00:01:15,270 --> 00:01:18,800 но брои до но не чрез стойност, която всъщност е грижа за. 28 00:01:18,800 --> 00:01:21,216 >> Сега, това е едно нещо, което Отнема малко време за опознаване 29 00:01:21,216 --> 00:01:25,350 и дори Scratch, тъй като тя е предназначена Достъпът за програмисти или без компютър 30 00:01:25,350 --> 00:01:28,070 учени и за деца до голяма степен, е проектиран да има 31 00:01:28,070 --> 00:01:29,570 да започнете да се брои като цяло в един. 32 00:01:29,570 --> 00:01:30,277 И това е добре. 33 00:01:30,277 --> 00:01:33,110 Абсолютно Можете да започнете да броим по едно, ако това е по-удобно. 34 00:01:33,110 --> 00:01:37,210 И брои до 10 и чрез, но ще разбереш особено тази седмица 35 00:01:37,210 --> 00:01:39,950 и извън нея, че просто така много неща в програмирането 36 00:01:39,950 --> 00:01:42,465 предположи, че 0 е първият цифра, с която можете да разчита, 37 00:01:42,465 --> 00:01:45,590 че започваш да се намери по-лесно само за да влязат в този навик на стартовата 38 00:01:45,590 --> 00:01:49,490 от нула и да броим до стойността ти пука за сега от 39 00:01:49,490 --> 00:01:49,990 получите отида. 40 00:01:49,990 --> 00:01:50,990 >> Така, че е определила, че. 41 00:01:50,990 --> 00:01:53,670 Ние променихме по-малка или се равнява на по-малко от просто. 42 00:01:53,670 --> 00:01:56,050 Нека да разгледаме най- втори пример тук. 43 00:01:56,050 --> 00:01:59,585 >> Така че, тази програма също твърди в своята Коментари до върха, че тя трябва да отпечатате 44 00:01:59,585 --> 00:02:02,260 десет звезди, но това не го прави. 45 00:02:02,260 --> 00:02:05,540 Каква е грешката тук? 46 00:02:05,540 --> 00:02:07,930 >> Така че, what-- и съжалявам, нека да е ясно. 47 00:02:07,930 --> 00:02:08,610 10 звезди. 48 00:02:08,610 --> 00:02:11,644 Един на ред, но не го прави. 49 00:02:11,644 --> 00:02:14,810 Така че, всъщност, нека да вървим напред и да съставят това, защото това е малко по-малко 50 00:02:14,810 --> 00:02:16,900 изчисти въз основа на това описание. 51 00:02:16,900 --> 00:02:18,720 Позволете ми да отида в нашия източник директория. 52 00:02:18,720 --> 00:02:25,110 Направи бъги една точка наклонена черта, бъги един. 53 00:02:25,110 --> 00:02:28,680 OK, виждам 11 звезди, които все още е проблематично, 54 00:02:28,680 --> 00:02:30,090 но те са също и всички в един ред. 55 00:02:30,090 --> 00:02:31,500 Какъв е проблема тук? 56 00:02:31,500 --> 00:02:32,339 Да. 57 00:02:32,339 --> 00:02:33,255 АУДИТОРИЯ: [недоловим]. 58 00:02:33,255 --> 00:02:36,194 59 00:02:36,194 --> 00:02:36,860 SPEAKER 1: Да. 60 00:02:36,860 --> 00:02:40,210 Така че това е една тънкост, че вие ​​може припомни ми направи кратко споменаване на. 61 00:02:40,210 --> 00:02:42,793 Въпреки всичко изглежда доста, и това е добре разчленена, 62 00:02:42,793 --> 00:02:45,850 и да го вид изглежда Scratch-подобни в тази линия 16 и 17 са, 63 00:02:45,850 --> 00:02:47,600 Наистина, с отстъп под това за цикъл. 64 00:02:47,600 --> 00:02:48,400 Това е без значение. 65 00:02:48,400 --> 00:02:50,460 Компютърът не знаете или вижте бяло пространство. 66 00:02:50,460 --> 00:02:52,910 White пространство е само за нас, хората, стилистично. 67 00:02:52,910 --> 00:02:57,010 Компютърът не знае, когато имате фигурни скоби, които би, наистина, 68 00:02:57,010 --> 00:02:58,280 решите този проблем. 69 00:02:58,280 --> 00:03:02,350 >> Така че, ако ние действително влезе и изрично записани в тези фигурни скоби 70 00:03:02,350 --> 00:03:05,220 че ще решите този проблем, като изясняване на компилатора 71 00:03:05,220 --> 00:03:07,930 че аз всъщност искате да изпълните два реда код отново, 72 00:03:07,930 --> 00:03:09,220 и отново и отново. 73 00:03:09,220 --> 00:03:11,680 Но това, което е основното обяснение? 74 00:03:11,680 --> 00:03:12,180 Нали така? 75 00:03:12,180 --> 00:03:15,260 Ние не строго нужда фигурни скоби през цялото време, 76 00:03:15,260 --> 00:03:18,210 въпреки че това е може би най-добрият практика, за да влязат в този навик, така или иначе 77 00:03:18,210 --> 00:03:20,878 макар и да добавя две знака на кода си. защо? 78 00:03:20,878 --> 00:03:22,380 >> АУДИТОРИЯ: [недоловим]? 79 00:03:22,380 --> 00:03:24,630 SPEAKER 1: Да, така че е друго решение напълно. 80 00:03:24,630 --> 00:03:25,130 Нали така? 81 00:03:25,130 --> 00:03:28,250 Особено, ако на пръв поглед не го направите Наистина оценявам това, което се случва. 82 00:03:28,250 --> 00:03:31,070 Е, със сигурност можехме просто правя две неща наведнъж 83 00:03:31,070 --> 00:03:32,710 и просто да се избегне проблема напълно. 84 00:03:32,710 --> 00:03:36,080 И това е добре, но сега, за днешните цели, това, което 85 00:03:36,080 --> 00:03:38,200 е обяснението за бъг? 86 00:03:38,200 --> 00:03:39,810 Защо са всички тези звезди на една линия? 87 00:03:39,810 --> 00:03:40,806 Да? 88 00:03:40,806 --> 00:03:43,296 >> АУДИТОРИЯ: Изглежда, че ако имате един ред код, 89 00:03:43,296 --> 00:03:46,649 можете да го направите без тези. 90 00:03:46,649 --> 00:03:47,440 SPEAKER 1: Точно така. 91 00:03:47,440 --> 00:03:48,750 Това е само една човешка конвенция. 92 00:03:48,750 --> 00:03:50,750 Хората осъзнават, че това е малко досадно или досаден 93 00:03:50,750 --> 00:03:53,470 да трябва да сложите фигурни скоби всички от времето, ако всичко, което искате да направите, 94 00:03:53,470 --> 00:03:55,090 е изпълни един ред код. 95 00:03:55,090 --> 00:03:57,660 Така че, хората решиха някои Преди време, че това е добре. 96 00:03:57,660 --> 00:04:01,180 Ако искате да поставите всичките си линия върху само, че един ред като този, 97 00:04:01,180 --> 00:04:04,030 това е добре със сингъла точка и запетая в края. 98 00:04:04,030 --> 00:04:07,210 Но можете да направите само една такава линия без фигурните скоби. 99 00:04:07,210 --> 00:04:09,900 >> Така че, когато CS50 стил употреба като ще ви насочи към, 100 00:04:09,900 --> 00:04:11,980 ще видите, че като цяло това е добър навик 101 00:04:11,980 --> 00:04:14,920 да влязат в това, докато сте доста удобно отклони 102 00:04:14,920 --> 00:04:17,404 от тези видове конвенции и да си вършиш нещо свое. 103 00:04:17,404 --> 00:04:18,820 Така че стига да сте самостоятелно последователен. 104 00:04:18,820 --> 00:04:21,540 И ние ще говорим повече за това оформите малко по-късно днес. 105 00:04:21,540 --> 00:04:23,200 >> Така че, нека да отворят една друга програма. 106 00:04:23,200 --> 00:04:24,930 Разбира се, ние трябва да предупредим 10, както добре. 107 00:04:24,930 --> 00:04:32,470 Нека да вървим напред и да напише реално бърза програма, която ще се обадя, 108 00:04:32,470 --> 00:04:38,140 да речем, линия Дот C. Така че, линия Дот C. И в цикъл точка C Отивам да имат, 109 00:04:38,140 --> 00:04:41,970 включва стандартна I / O точка H INT главната невалидни. 110 00:04:41,970 --> 00:04:44,020 А сега нека просто правя, наистина, една линия. 111 00:04:44,020 --> 00:04:46,020 Така че, 4 инт I получава нула. 112 00:04:46,020 --> 00:04:48,660 I е по-малко от, да кажем, 50. 113 00:04:48,660 --> 00:04:49,950 I плюс, плюс. 114 00:04:49,950 --> 00:04:53,350 И тогава тук позволим отидете напред и да отпечатате F. 115 00:04:53,350 --> 00:04:56,400 И тогава аз искам да отпечатате I и нова линия, точка и запетая. 116 00:04:56,400 --> 00:05:00,015 >> И това трябва да отпечатате всички номера от нула до 50? 117 00:05:00,015 --> 00:05:02,900 118 00:05:02,900 --> 00:05:03,680 Няколко главата кимва. 119 00:05:03,680 --> 00:05:04,270 Няколко Nos. 120 00:05:04,270 --> 00:05:05,339 Какво е вече бъг? 121 00:05:05,339 --> 00:05:06,630 Какво е най-лесно грешка направих? 122 00:05:06,630 --> 00:05:07,170 Да. 123 00:05:07,170 --> 00:05:08,544 >> АУДИТОРИЯ: [недоловим]. 124 00:05:08,544 --> 00:05:09,210 SPEAKER 1: Да. 125 00:05:09,210 --> 00:05:11,520 Така че, дори и да изглежда като това е, което аз смятам, 126 00:05:11,520 --> 00:05:13,920 Припомняме, че аз също само ASCII символи. 127 00:05:13,920 --> 00:05:14,955 >> Така че, ако кажа, печат "I." 128 00:05:14,955 --> 00:05:16,670 Това е буквално ще да отпечатате I. Така че, ако аз 129 00:05:16,670 --> 00:05:20,030 Искам да плъг-ин контейнер стойност аз всъщност трябва да направите това 130 00:05:20,030 --> 00:05:22,630 и след това включете-в стойност на I-динамично. 131 00:05:22,630 --> 00:05:25,200 Иначе аз съм просто ще получавате 50 I е на екрана. 132 00:05:25,200 --> 00:05:28,140 >> Така че, нека да вървим напред и да направи тази линия, стартирайте го, 133 00:05:28,140 --> 00:05:30,650 и, наистина, ние имаме всички път нагоре през 49. 134 00:05:30,650 --> 00:05:34,140 И ако аз превъртете назад във времето виждам числото нула в началото. 135 00:05:34,140 --> 00:05:36,050 >> Е, какво ще стане ако някак се притеснявам? 136 00:05:36,050 --> 00:05:37,800 Какво става, ако го направя? 137 00:05:37,800 --> 00:05:40,120 Просто, защото аз не съм мислене. 138 00:05:40,120 --> 00:05:40,970 Каква е тази програма. 139 00:05:40,970 --> 00:05:43,970 След като отново се компилира и изпълнява, ще направим логично? 140 00:05:43,970 --> 00:05:44,870 >> АУДИТОРИЯ: Нищо. 141 00:05:44,870 --> 00:05:45,661 >> SPEAKER 1: Нищо. 142 00:05:45,661 --> 00:05:47,156 Защо така? 143 00:05:47,156 --> 00:05:49,124 >> АУДИТОРИЯ: I е предназначен за нула. 144 00:05:49,124 --> 00:05:51,899 Така че, условието е невярно. 145 00:05:51,899 --> 00:05:52,940 SPEAKER 1: Да, точно така. 146 00:05:52,940 --> 00:05:55,110 All кодът е правилен, синтактично. 147 00:05:55,110 --> 00:05:57,310 Това ще се съберат, това код ще работи, но това не е 148 00:05:57,310 --> 00:06:00,110 смяташ да правиш нещо полезно защото аз се инициализира I до нула. 149 00:06:00,110 --> 00:06:02,240 Ние след това проверка, е I-голяма от 50? 150 00:06:02,240 --> 00:06:03,810 Очевидно е, че не, това не е така. 151 00:06:03,810 --> 00:06:05,760 Така че цикълът никога не изпълнява изобщо. 152 00:06:05,760 --> 00:06:09,580 >> Какво става, ако правим нещо малко по-безразсъдно? 153 00:06:09,580 --> 00:06:12,890 Така че, това, което, ако ни допада инт I получава нула. 154 00:06:12,890 --> 00:06:15,640 А сега нека да използваме това време линия, която е друго състояние. 155 00:06:15,640 --> 00:06:21,810 И докато аз казвам, докато аз е по-голямо от или равно на нула, и след това в тук 156 00:06:21,810 --> 00:06:26,070 отидете напред и да запишете файла, направи примка. 157 00:06:26,070 --> 00:06:27,070 И аз съм за да го стартирате. 158 00:06:27,070 --> 00:06:30,230 Какво съм аз ще видите това път с линия, докато? 159 00:06:30,230 --> 00:06:30,852 Да. 160 00:06:30,852 --> 00:06:32,120 >> АУДИТОРИЯ: Един безкраен цикъл? 161 00:06:32,120 --> 00:06:35,360 >> SPEAKER 1: Един безкраен цикъл? 162 00:06:35,360 --> 00:06:36,662 Да, и защо? 163 00:06:36,662 --> 00:06:38,120 АУДИТОРИЯ: Защото тя винаги е нула. 164 00:06:38,120 --> 00:06:38,786 SPEAKER 1: Да. 165 00:06:38,786 --> 00:06:40,100 Така че, аз се инициализира с нула. 166 00:06:40,100 --> 00:06:44,470 Разбира се, че винаги е по-голяма от или равно на 0 като резултат. 167 00:06:44,470 --> 00:06:46,460 Така че, аз съм просто ще виж това безкрайно. 168 00:06:46,460 --> 00:06:49,850 И сега, това е дошъл веднъж или два пъти на ръководителите на курса. 169 00:06:49,850 --> 00:06:52,417 Какво се случва, когато има един безкраен цикъл? 170 00:06:52,417 --> 00:06:53,314 >> АУДИТОРИЯ: Control C. 171 00:06:53,314 --> 00:06:53,980 SPEAKER 1: Да. 172 00:06:53,980 --> 00:06:56,250 Така Control C в крайна сметка ще реагира. 173 00:06:56,250 --> 00:06:59,520 За съжаление, ние сме разпечатан милиони и милиони нули вече 174 00:06:59,520 --> 00:07:01,520 и така компютърът вид имам пред мен. 175 00:07:01,520 --> 00:07:03,394 Така, че ще ходи да се игнорира ме за малко. 176 00:07:03,394 --> 00:07:06,560 Но ако просто натиснете Control C малцина пъти на вашия Mac или PC клавиатура, 177 00:07:06,560 --> 00:07:08,790 в крайна сметка тя трябва, наистина, прекрати. 178 00:07:08,790 --> 00:07:11,770 И ако не, ние ще ви покажем някои техники преди дълго, където можете 179 00:07:11,770 --> 00:07:14,850 всъщност може насила да убие програми, много прилича на Windows и Mac OS, 180 00:07:14,850 --> 00:07:15,562 ако е необходимо. 181 00:07:15,562 --> 00:07:16,770 Но нека се опитаме нещо друго. 182 00:07:16,770 --> 00:07:19,895 Нека действително нарастване I. Е това все още продължава да бъде безкраен? 183 00:07:19,895 --> 00:07:22,870 184 00:07:22,870 --> 00:07:25,140 Позволете ми да изпълня този. 185 00:07:25,140 --> 00:07:27,090 А сега можете да вид виж какво се случва. 186 00:07:27,090 --> 00:07:30,140 Това също е един безкраен цикъл. 187 00:07:30,140 --> 00:07:33,080 Но това е малко подвеждащ въпрос. 188 00:07:33,080 --> 00:07:35,460 Дали това ще се отпечата номера завинаги? 189 00:07:35,460 --> 00:07:36,647 >> АУДИТОРИЯ: No. 190 00:07:36,647 --> 00:07:37,230 SPEAKER 1: No. 191 00:07:37,230 --> 00:07:37,620 Защо? 192 00:07:37,620 --> 00:07:38,820 Чух някои номера тук. 193 00:07:38,820 --> 00:07:41,859 Someone-- Да. 194 00:07:41,859 --> 00:07:44,275 АУДИТОРИЯ: Вие нямате достатъчно бита наистина продължавай. 195 00:07:44,275 --> 00:07:44,730 SPEAKER 1: Добре. 196 00:07:44,730 --> 00:07:46,000 Така че аз не разполагат с достатъчно бита да продължавай. 197 00:07:46,000 --> 00:07:47,124 И така, какво ще се случи? 198 00:07:47,124 --> 00:07:49,320 Това е просто няма да спре? 199 00:07:49,320 --> 00:07:52,542 >> АУДИТОРИЯ: В един момент тя ще се изключи the-- 200 00:07:52,542 --> 00:07:54,500 SPEAKER 1: Тя ще се изключи линия надолу, но защо? 201 00:07:54,500 --> 00:07:57,950 Какво ще се случи в Много край на границите му? 202 00:07:57,950 --> 00:07:58,479 Да? 203 00:07:58,479 --> 00:08:00,520 АУДИТОРИЯ: Тя ще цикъл обратно към отрицателни числа. 204 00:08:00,520 --> 00:08:02,900 SPEAKER 1: Към отрицателните числа, или ако ние бяхме просто лечение на положителна, 205 00:08:02,900 --> 00:08:03,570 нулата поне. 206 00:08:03,570 --> 00:08:04,550 Така че, да, абсолютно. 207 00:08:04,550 --> 00:08:08,059 Припомнете си, че видяхме за последен път, че ако увеличите вашите бита един твърде много пъти, 208 00:08:08,059 --> 00:08:10,225 и вие Трябва следователно преливник капацитета на инт 209 00:08:10,225 --> 00:08:13,058 или каквото и типа на данните е, че си ще обгърне, вероятно, 210 00:08:13,058 --> 00:08:14,020 две отрицателни числа. 211 00:08:14,020 --> 00:08:16,644 Или ако сте се уточни, че си диапазон трябва да бъде положителна, само, 212 00:08:16,644 --> 00:08:18,560 които можете да направите, но ние не сме виждали, че все пак, 213 00:08:18,560 --> 00:08:21,420 може да свърши най-малко назад към нула. 214 00:08:21,420 --> 00:08:22,410 Въпреки че, всъщност, да. 215 00:08:22,410 --> 00:08:24,320 В този случай, отрицателно числа, в който случай 216 00:08:24,320 --> 00:08:26,870 примката ще се прекрати защото не е, в действителност, 217 00:08:26,870 --> 00:08:29,220 по-голямо от или равно на нула, ако е отрицателна. 218 00:08:29,220 --> 00:08:31,780 >> Така че, за съжаление, как дълго ще трябва да чакаме? 219 00:08:31,780 --> 00:08:35,490 Точно сега ние сме до какво, 2000000-Иш? 220 00:08:35,490 --> 00:08:37,705 Ние сме като 2000000000, ние ще трябва да почака 221 00:08:37,705 --> 00:08:39,330 докато всъщност можем да видим този симптом. 222 00:08:39,330 --> 00:08:46,200 Но можем да го видим малко по-бързо, maybe-- нека да видим дали можем да се прекъсне. 223 00:08:46,200 --> 00:08:46,700 Хайде. 224 00:08:46,700 --> 00:08:49,500 225 00:08:49,500 --> 00:08:51,331 Дори менютата се появяват бавно. 226 00:08:51,331 --> 00:08:51,830 Всичко е наред. 227 00:08:51,830 --> 00:08:54,270 Така че, ние ще се върнем към това, преди дълго. 228 00:08:54,270 --> 00:08:56,320 Това е добра time-- дявол да го вземе, кученца. 229 00:08:56,320 --> 00:08:58,280 >> Това е добро време за някои съобщения. 230 00:08:58,280 --> 00:09:01,225 Така че, ако може би искате да се включат в YHack, 231 00:09:01,225 --> 00:09:03,600 която е събитие в спонсорирано от нашите приятели в Йейл. 232 00:09:03,600 --> 00:09:05,990 И, наистина, някои от курса TFS в Йейл са ангажирани с това. 233 00:09:05,990 --> 00:09:08,610 YHack е международен хак-а-Thon домакин и държани 234 00:09:08,610 --> 00:09:12,395 в Йейл, обединяваща 1500 съмишленици хакери и рекламни послания всички 235 00:09:12,395 --> 00:09:13,120 по света. 236 00:09:13,120 --> 00:09:14,610 Ако това е от значение, вижте тук. 237 00:09:14,610 --> 00:09:17,401 Ако това е твърде кратко на екран, да погледнем на днешните пързалки 238 00:09:17,401 --> 00:09:19,622 за URL адреса за yhack.org. 239 00:09:19,622 --> 00:09:21,080 Така че, това е и няколко бързи съобщения. 240 00:09:21,080 --> 00:09:24,410 Така че, официално секции ще започнат следващата седмица както тук, така и Ню Хейвън. 241 00:09:24,410 --> 00:09:27,660 Имайте предвид, че ще бъдат намалени с имейл-късно този уикенд най-вероятно. 242 00:09:27,660 --> 00:09:29,390 Това отнема много време за CS50 раздел, 243 00:09:29,390 --> 00:09:32,080 дадени всички хора в клас и всички движещи се наоколо. 244 00:09:32,080 --> 00:09:34,871 И всичките Учебни стипендианти " графици са също все още консолидиране, 245 00:09:34,871 --> 00:09:38,110 но очаквайте имейл и ако е необходимо се, можете да си точка там след. 246 00:09:38,110 --> 00:09:39,580 >> Study.cs50.net. 247 00:09:39,580 --> 00:09:43,280 Така че, дори и да сте на постоянен участник по секции, осъзнавам, че почти всички 248 00:09:43,280 --> 00:09:46,786 от средствата, които използваме в раздели са публично достъпни в CS50 249 00:09:46,786 --> 00:09:48,460 Проучване на този URL тук. 250 00:09:48,460 --> 00:09:51,630 Така че, ако някога искате да се възстанови преглед материал от раздел, или да прочетете напред, 251 00:09:51,630 --> 00:09:54,170 или не можете да го направите някои седмици, Осъзнайте, че пробите пързалки, 252 00:09:54,170 --> 00:09:58,210 и проблеми, и определения, и по-всички са там, както добре. 253 00:09:58,210 --> 00:10:00,645 >> Работно време възобнови днес и утре, и в сряда 254 00:10:00,645 --> 00:10:03,020 и четвъртък провери разбира се те години сайт за графика. 255 00:10:03,020 --> 00:10:05,690 >> И също така, сега стартира днес е CS50 Обсъждане. 256 00:10:05,690 --> 00:10:09,230 Така че, ако и когато имате въпроси за помежду си, или за персонала на курса, 257 00:10:09,230 --> 00:10:12,099 и обикновено се работи на някакъв проблем набор, 258 00:10:12,099 --> 00:10:15,015 осъзнае, че не е задължително Трябва да се обърнем към човека следващата ти. 259 00:10:15,015 --> 00:10:17,810 Ако няма никой там, можете да достигне до нас и съученици 260 00:10:17,810 --> 00:10:19,890 онлайн чрез CS50 Обсъждане. 261 00:10:19,890 --> 00:10:22,600 Така че, това е дискусия дъска за курса, 262 00:10:22,600 --> 00:10:24,550 и осъзнавам, че това е може би най-добрия 263 00:10:24,550 --> 00:10:28,480 място да започнете, когато имате въпроси, когато извън работно време 264 00:10:28,480 --> 00:10:29,470 в частност. 265 00:10:29,470 --> 00:10:31,070 >> Обяд ще започнат тази седмица също. 266 00:10:31,070 --> 00:10:33,170 В Огън и лед [Недоловим] в Ню Хейвън. 267 00:10:33,170 --> 00:10:35,379 Обърнете внимание на дисциплината те години уебсайт, за да RSVP. 268 00:10:35,379 --> 00:10:36,753 Първи по време, първи служи за това. 269 00:10:36,753 --> 00:10:39,380 Ако не получите в тази седмица ние ще направим това най-всеки петък 270 00:10:39,380 --> 00:10:40,400 по време на срока. 271 00:10:40,400 --> 00:10:41,830 >> OK, а сега и дума за категоризация. 272 00:10:41,830 --> 00:10:44,690 Особено когато навлизаме проблем зададете една, която е извън тази седмица, 273 00:10:44,690 --> 00:10:46,670 и проблем зададете два и след това. 274 00:10:46,670 --> 00:10:51,680 Как да отида за оценяване P комплекти и оценка на качеството от него? 275 00:10:51,680 --> 00:10:55,560 Така че, това е четири оси, които ние използваме в CS50, и те са тези четири тук. 276 00:10:55,560 --> 00:10:59,200 >> Обхват, който улавя на цифровата база точно колко от множеството P 277 00:10:59,200 --> 00:10:59,860 Знаете ли справи. 278 00:10:59,860 --> 00:11:02,890 Това е приблизително съответства с усилия, и това е нашият начин на заснемане 279 00:11:02,890 --> 00:11:05,190 не се опитате половината от P определя, всички от множеството P. 280 00:11:05,190 --> 00:11:08,860 Това е лесен за да получите перфектно резултати на ако го направите, наистина, 281 00:11:08,860 --> 00:11:11,020 опитайте всеки аспект на снимачната площадка P. 282 00:11:11,020 --> 00:11:12,010 Така че, имайте това предвид. 283 00:11:12,010 --> 00:11:13,420 >> Коректност е точно това. 284 00:11:13,420 --> 00:11:17,760 Има ли вашата работа като код на спецификацията и като разтвор на пробата щабовете " 285 00:11:17,760 --> 00:11:19,730 подсказват, че си код трябва, в действителност, да работи. 286 00:11:19,730 --> 00:11:23,260 Проверете 50, ако не сте го срещнах Все още е в P зададете една спецификация 287 00:11:23,260 --> 00:11:25,060 и обикновено ти дам да / не отговори 288 00:11:25,060 --> 00:11:26,518 за това дали си код е правилен. 289 00:11:26,518 --> 00:11:30,680 Поне доколкото отиваме За да се оцени, че на базата на тестовете 290 00:11:30,680 --> 00:11:32,430 че ще свършим в рамките на тази програма. 291 00:11:32,430 --> 00:11:33,850 >> Дизайнът е много по-субективно. 292 00:11:33,850 --> 00:11:35,994 Това е колко добре написано е кода си. 293 00:11:35,994 --> 00:11:38,410 И това е нещо, което вие ще получите по-добри в течение на времето, 294 00:11:38,410 --> 00:11:41,201 и това е нещо, което ние ще предоставят по-качествена обратна връзка. 295 00:11:41,201 --> 00:11:43,350 И още при проектирането бих могъл означава преди време сте 296 00:11:43,350 --> 00:11:47,650 може да се изкуши по някакъв P настроен да направи нещо loopingly, 297 00:11:47,650 --> 00:11:51,590 но да има може би три или четири, или пет вложени предни примки или вложени по време на 298 00:11:51,590 --> 00:11:52,090 контури. 299 00:11:52,090 --> 00:11:54,130 Това принцип би следвало да започне да ви накара да се свият 300 00:11:54,130 --> 00:11:56,070 и като цяло би било смята за лош дизайн. 301 00:11:56,070 --> 00:11:59,490 И вие ще започнете да виждате в класа и от класа добри начини за правене на нещата, 302 00:11:59,490 --> 00:12:02,920 лошите начини за правене на нещата, които може всичко да е вярна, но не 303 00:12:02,920 --> 00:12:04,304 непременно добре проектирана. 304 00:12:04,304 --> 00:12:05,220 Подобно писане на есе. 305 00:12:05,220 --> 00:12:08,100 Може да бъде в състояние да сложи думи по страница, че са граматически правилно, 306 00:12:08,100 --> 00:12:10,016 но есето или теза те са в е просто 307 00:12:10,016 --> 00:12:11,810 напълно непоследователна или неубедителен. 308 00:12:11,810 --> 00:12:15,930 И така, това може да е аналог в писмено свят на лош или добър дизайн. 309 00:12:15,930 --> 00:12:18,490 >> И стил, също е доста субективно. 310 00:12:18,490 --> 00:12:20,060 Но най-малко очакваме консистенция. 311 00:12:20,060 --> 00:12:21,480 Това е начина, доста е кода си. 312 00:12:21,480 --> 00:12:22,840 Възможно нещата добре отстъп? 313 00:12:22,840 --> 00:12:26,600 Вашите променливи и име / са всички от вашите скоби и фигурни скоби 314 00:12:26,600 --> 00:12:27,920 подравнен, тъй като те трябва да бъде? 315 00:12:27,920 --> 00:12:31,490 Имаме употреба на CS50 стил като набора проблем ще ви посоча. 316 00:12:31,490 --> 00:12:33,730 Тези, по-удобни са Приветствам да се отклоняват от които 317 00:12:33,730 --> 00:12:35,771 толкова дълго, колкото сте самостоятелно последователен. 318 00:12:35,771 --> 00:12:38,020 И това също е урок ние ще се засили в раздел. 319 00:12:38,020 --> 00:12:40,990 Така че, ако всичко това е малко бързо, осъзнаваш комплекта P и секции 320 00:12:40,990 --> 00:12:42,900 ще отидат в по-голяма дълбочина не след дълго. 321 00:12:42,900 --> 00:12:45,490 >> Но като цяло имаме много малко кофи за CS50. 322 00:12:45,490 --> 00:12:48,170 Десетки са като цяло по десетобалната от 02:59 или 04:59. 323 00:12:48,170 --> 00:12:50,836 Ние сме literally-- и аз не мога да кажа това е достатъчно в първата седмица. 324 00:12:50,836 --> 00:12:51,582 Три е добро. 325 00:12:51,582 --> 00:12:54,290 Така че, въпреки че, да, три от пет нормално, математически, 326 00:12:54,290 --> 00:12:57,240 може да е 60 процента или като D минус. 327 00:12:57,240 --> 00:12:58,840 Три е, в действителност, добре. 328 00:12:58,840 --> 00:13:01,050 И, всъщност, ние очакваме повечето ученици в класа 329 00:13:01,050 --> 00:13:04,280 да започнем термина около двойки, тройки и четворки и. 330 00:13:04,280 --> 00:13:05,510 Вероятно не толкова много петици. 331 00:13:05,510 --> 00:13:06,661 Не твърде много такива. 332 00:13:06,661 --> 00:13:08,910 Но като цяло, за да започне че сладко място в кривата 333 00:13:08,910 --> 00:13:11,694 така че с течение на времето, всъщност има стая за, 334 00:13:11,694 --> 00:13:13,360 и възможности за горната прогресия. 335 00:13:13,360 --> 00:13:15,810 Така че, моля, не се равнява на три с 60%. 336 00:13:15,810 --> 00:13:17,410 Това е много по-абстрактно от това. 337 00:13:17,410 --> 00:13:20,160 Формулата, с които ние се изчисли класове се претеглят, както следва. 338 00:13:20,160 --> 00:13:21,610 Коректност е на стойност най-много. 339 00:13:21,610 --> 00:13:23,010 Design е на стойност малко по-малко. 340 00:13:23,010 --> 00:13:24,490 Style е на стойност малко по-малко. 341 00:13:24,490 --> 00:13:26,950 И това като цяло улавя размера на времето 342 00:13:26,950 --> 00:13:29,800 която отива в получаване на всяка от тези оси точно. 343 00:13:29,800 --> 00:13:31,810 Style е супер лесно, трябва да бъде супер бързо, 344 00:13:31,810 --> 00:13:33,657 но това е един лесен навик за да получите мързелив около. 345 00:13:33,657 --> 00:13:35,490 Коректност може да отнеме можете голямата част от времето. 346 00:13:35,490 --> 00:13:38,990 Преследването на земята част бъг мощ вземе, че допълнителен час или повече, 347 00:13:38,990 --> 00:13:41,737 и така, точкуването в крайна сметка, че улавя. 348 00:13:41,737 --> 00:13:43,070 И така, сега е по-сериозна дума. 349 00:13:43,070 --> 00:13:45,240 Тъй като има CS50 разграничение, за по-добро 350 00:13:45,240 --> 00:13:47,440 или за лошо, че са може би по-добре запознати 351 00:13:47,440 --> 00:13:50,065 с проблемите на академичната честност, отколкото повечето всеки друг разбира се. 352 00:13:50,065 --> 00:13:53,720 И наистина, това е, за да ми е известно, че ние изпращаме повече студенти, за съжаление, 353 00:13:53,720 --> 00:13:56,690 дисциплинарна цел всяка година, като резултат. Така че, 354 00:13:56,690 --> 00:13:59,040 в интерес на пълното оповестяване, нека да поговорим за кратко 355 00:13:59,040 --> 00:14:02,820 за това, което се случва в CS50, и това, което може да направи, и какво можете да се забравя. 356 00:14:02,820 --> 00:14:05,530 >> Така че, тук от 2007 г. насам, когато Аз наследих хода, 357 00:14:05,530 --> 00:14:07,870 е броят на случаите Ad съвет. 358 00:14:07,870 --> 00:14:10,690 Ad Board е дисциплинарно Харвард тяло, или сега Honor съветник, 359 00:14:10,690 --> 00:14:13,790 към който са посочени случаите, когато учениците да направят нещо, че разбира се те години 360 00:14:13,790 --> 00:14:15,470 конспект счита неразумно. 361 00:14:15,470 --> 00:14:17,220 Няма по-реален модел тук, бих казал. 362 00:14:17,220 --> 00:14:19,530 Тя се колебае над река години, но като цяло 363 00:14:19,530 --> 00:14:22,262 това е броят на случаи, които са посочени. 364 00:14:22,262 --> 00:14:23,970 Броят на студентите които са включени? 365 00:14:23,970 --> 00:14:25,290 Тя също варира. 366 00:14:25,290 --> 00:14:27,930 Обикновено, миналата година за Например, 29 студенти в Харвардския 367 00:14:27,930 --> 00:14:29,740 Ad бяха качили, така да се каже. 368 00:14:29,740 --> 00:14:32,670 29 от тях са настоящи студенти, две от тях преди учениците, 369 00:14:32,670 --> 00:14:35,610 които са били сътрудничество по някакъв нежелан начин. 370 00:14:35,610 --> 00:14:38,400 И след това от гледна точка на процент, това е обикновено около 3% 371 00:14:38,400 --> 00:14:41,360 от класа, че, за съжаление, прави тези видове решения. 372 00:14:41,360 --> 00:14:44,470 >> Така че, миналата година той е бил 3,5% на студент тялото на CS50 373 00:14:44,470 --> 00:14:46,820 това беше Ad качва, така да се каже. 374 00:14:46,820 --> 00:14:48,490 >> И така, какво означава всичко това? 375 00:14:48,490 --> 00:14:49,660 И какво всъщност правим? 376 00:14:49,660 --> 00:14:52,930 >> Така че, за пълно разкриване, ние абсолютно, като компютърни специалисти, 377 00:14:52,930 --> 00:14:57,620 има софтуерни инструменти, с които разполагаме и това е много лесно за нас, в справедливостта, 378 00:14:57,620 --> 00:15:00,980 че другите съученици, които не са преминаване тези редове да пресече сравни 379 00:15:00,980 --> 00:15:04,570 всяко представяне тази година срещу всеки Подаването за последните осем години. 380 00:15:04,570 --> 00:15:05,445 Software прави това. 381 00:15:05,445 --> 00:15:07,440 И в крайна сметка това е човешки очи, които решават 382 00:15:07,440 --> 00:15:11,410 дали да отнесе някои значение за по-нататъшното решаване, 383 00:15:11,410 --> 00:15:12,737 но софтуер със сигурност помага. 384 00:15:12,737 --> 00:15:15,820 И това, честно казано, е защо аз мисля, че имаме такива големи числа в CS50. 385 00:15:15,820 --> 00:15:18,540 Това не е така, защото CS50 студенти или ученици CS повече 386 00:15:18,540 --> 00:15:20,840 като цяло са по-малко честен от всички други ученици, 387 00:15:20,840 --> 00:15:22,340 това е просто имаме инструменти и техники 388 00:15:22,340 --> 00:15:24,095 с които да се възползвам от тази на първо преминаване. 389 00:15:24,095 --> 00:15:25,960 >> Но ние държим под око за всички тези неща, 390 00:15:25,960 --> 00:15:30,340 както и, отново, в интерес на признавайки дейността, че е се сложи 391 00:15:30,340 --> 00:15:32,397 в с супер мнозинство от класа. 392 00:15:32,397 --> 00:15:34,230 И политиката на курса на академична честност, 393 00:15:34,230 --> 00:15:37,021 въпреки че това е един куп точки дълго с един куп куршуми 394 00:15:37,021 --> 00:15:40,490 че сме се надяваме съвсем разбираеми, то наистина се свежда да бъдем разумни. 395 00:15:40,490 --> 00:15:44,000 И най-добрият правило, че ние предлагаме в рамките на учебната програма 396 00:15:44,000 --> 00:15:46,020 е това, същността от цялата работа, че сте 397 00:15:46,020 --> 00:15:47,850 представя този курс трябва да бъде вашата собствена. 398 00:15:47,850 --> 00:15:51,510 И наистина, в почти всички от тези, В случаите, предвидени за дисциплинарни действия 399 00:15:51,510 --> 00:15:55,640 това е, защото на някои студент късно една нощта обикновено се обърна си код 400 00:15:55,640 --> 00:15:58,130 над направо да съученик, които след това я прие 401 00:15:58,130 --> 00:16:00,840 в своята цялост или значително от него. 402 00:16:00,840 --> 00:16:02,680 >> Но наистина, това е ОК. 403 00:16:02,680 --> 00:16:04,684 И наистина, в офиса часа, листчета 404 00:16:04,684 --> 00:16:07,850 сте били предадени, ако дойде от офиса часа миналата седмица насърчава толкова много. 405 00:16:07,850 --> 00:16:09,710 Вие сте абсолютно приветства и насърчава 406 00:16:09,710 --> 00:16:12,340 за да обсъдят проблемните комплекти със съученици. 407 00:16:12,340 --> 00:16:14,461 За да помагат един на друг, когато препъване. 408 00:16:14,461 --> 00:16:17,710 Но като цяло правилото следва да бъде това ", когато сте с молба за помощ, 409 00:16:17,710 --> 00:16:20,412 може да се покаже кода си на другите, но не можете да видите тяхно. " 410 00:16:20,412 --> 00:16:22,620 Така че, с други думи, ако съм се борят с някои P комплект 411 00:16:22,620 --> 00:16:25,290 и аз съм седнал там в зала за хранене, или в библиотеката, 412 00:16:25,290 --> 00:16:28,470 или в класната стая опитвайки се да намери някаква вина, 413 00:16:28,470 --> 00:16:30,340 Със сигурност мога да покажа моя код на екрана си 414 00:16:30,340 --> 00:16:32,590 към човека до за мен, със сигурност на персонала, 415 00:16:32,590 --> 00:16:33,600 но също така и един съученик. 416 00:16:33,600 --> 00:16:36,580 Но ако решението, което моя съученичка предлага е, о, 417 00:16:36,580 --> 00:16:39,200 тук просто да разгледаме какво Направих, че пресича линията. 418 00:16:39,200 --> 00:16:43,120 >> И бих казал, че е посмял цяло разумен нещо за повечето хора 419 00:16:43,120 --> 00:16:45,030 да много лесно място на линията на. 420 00:16:45,030 --> 00:16:47,195 И така, вижте конспекта за повече подробности. 421 00:16:47,195 --> 00:16:49,070 И сега един от най- спорни аспекти 422 00:16:49,070 --> 00:16:52,529 на CS50 учебна програма, която мислех, че бих говорил в заключение тук 423 00:16:52,529 --> 00:16:53,820 е така наречената клауза съжаление. 424 00:16:53,820 --> 00:16:55,340 Така че, тук е всичко, с дребен шрифт. 425 00:16:55,340 --> 00:16:58,090 Но като цяло сме виждали през последните 8 години плюс 426 00:16:58,090 --> 00:17:01,510 че наистина, почти всички CS50 на случаи на академична нечестност 427 00:17:01,510 --> 00:17:04,390 са резултат от просто лошо вземане на решение, късно през нощта. 428 00:17:04,390 --> 00:17:07,144 В резултат на стрес, резултатът от липса на хранене, липса на сън, 429 00:17:07,144 --> 00:17:09,560 твърде много P комплекти, твърде много срокове, твърде много ангажименти. 430 00:17:09,560 --> 00:17:13,520 Стресът изграждане в 02:00 AM, 03:00 AM, 04:00 AM, с краен срок задаващата. 431 00:17:13,520 --> 00:17:17,020 Повечето студенти в тези случаи Току-що направени лоши решения 432 00:17:17,020 --> 00:17:20,619 че те могат много добре съжалявам за На следващата сутрин, ако не минути по-късно, 433 00:17:20,619 --> 00:17:25,490 но до миналата година не е имало клапан за пресата, че тези студенти могъл 434 00:17:25,490 --> 00:17:29,140 всъщност се отворят към действително адрес проблем с глава без страх да не се 435 00:17:29,140 --> 00:17:30,850 зарежда от колежа напълно. 436 00:17:30,850 --> 00:17:33,260 >> И наистина, ние въведохме тази клауза съжаление миналата година, 437 00:17:33,260 --> 00:17:35,970 в която се казва, че ако в рамките на 72 часа, три дни, 438 00:17:35,970 --> 00:17:37,970 на пресичане някаква линия предписано в учебната програма 439 00:17:37,970 --> 00:17:41,178 дойдеш с нетърпение едно от курса главите и ние ще имат чат за това. 440 00:17:41,178 --> 00:17:43,720 Има все още има някакъв изход, противно на това, което е 441 00:17:43,720 --> 00:17:44,990 Съобщава се за противното. 442 00:17:44,990 --> 00:17:49,190 Все още има някои резултати, които е обжалваем от курса, 443 00:17:49,190 --> 00:17:51,611 обикновено зануляване на P комплект или като някои други действия, 444 00:17:51,611 --> 00:17:53,610 но ние, наистина, се справя себе си и не 445 00:17:53,610 --> 00:17:58,460 вижте го по-високи са резултатите може да бъде много по-тежки. 446 00:17:58,460 --> 00:18:01,810 И наистина, за да споделят какво се е случило миналата година, в рамките на осем години, а сега 447 00:18:01,810 --> 00:18:04,950 девет години, от преподаването на този курс и след бърникането с различни копчета, 448 00:18:04,950 --> 00:18:07,866 превръщайки различни циферблати над миналото няколко години на академична честност, 449 00:18:07,866 --> 00:18:11,920 и тъй като по данни без видима въздействие, дори и на изказвания като това, 450 00:18:11,920 --> 00:18:15,490 това е ръцете надолу най-хубавото нещо въведохме педагогически 451 00:18:15,490 --> 00:18:18,090 за осем години заедно тези линии в CS50. 452 00:18:18,090 --> 00:18:21,010 >> 19 студенти се отзоваха по тази клауза миналата година. 453 00:18:21,010 --> 00:18:23,389 Взехме никакви действия за седем от тези студенти, 454 00:18:23,389 --> 00:18:25,430 определяне, че те са ненужно разтревожен. 455 00:18:25,430 --> 00:18:27,304 Те не са, в действителност, пресече линията, но това 456 00:18:27,304 --> 00:18:28,960 Беше добър чат да има все пак. 457 00:18:28,960 --> 00:18:31,190 Ние занули 11 от точките които са били представени. 458 00:18:31,190 --> 00:18:33,840 И в единия случай ние зададе студент да направи проблем зададете. 459 00:18:33,840 --> 00:18:36,370 Но по-наложителна, честно казано, с тези 19 чатове, 460 00:18:36,370 --> 00:18:39,020 която беше начин повече от мен Очаква се да има, всеки един от тях 461 00:18:39,020 --> 00:18:41,370 10 минути до може би един час дълго, също подава 462 00:18:41,370 --> 00:18:44,920 да запали редица въпроси по отношение на семейни проблеми, въпроси, приятел 463 00:18:44,920 --> 00:18:46,940 психични проблеми че ние тогава ангажирани, 464 00:18:46,940 --> 00:18:50,200 със студента благословение, пребиваващи декан, или с приятели, или друг номер 465 00:18:50,200 --> 00:18:51,450 на ресурси за поддръжка. 466 00:18:51,450 --> 00:18:54,454 Така че това е далеч един от най-добрите начини на използване на нашето време 467 00:18:54,454 --> 00:18:55,870 и един от най-добрите интервенции. 468 00:18:55,870 --> 00:18:58,870 >> С това каза, той не е имал въвеждане на степента на разкриване 469 00:18:58,870 --> 00:19:00,909 на академична нечестност по-общо. 470 00:19:00,909 --> 00:19:02,950 И смея да кажа, тази подгрупа на студенти от миналата година 471 00:19:02,950 --> 00:19:06,350 Беше демографска че ние преди това не е идентифициран преди 472 00:19:06,350 --> 00:19:08,140 и никога не е свързана с преди. 473 00:19:08,140 --> 00:19:10,020 И така, това са прекрасни истории на успеха 474 00:19:10,020 --> 00:19:13,390 въпреки че те са били доведени до светлината по-малко от оптимални условия. 475 00:19:13,390 --> 00:19:15,640 Така че, имайте предвид това както ти направи, може би, 476 00:19:15,640 --> 00:19:17,390 грешка на решение себе си късно през нощта, 477 00:19:17,390 --> 00:19:20,151 че се прибягва толкова дълго като студент в тази ситуация 478 00:19:20,151 --> 00:19:23,400 Притежавате и излезе, за да можем има този вид на чат и се справят с него 479 00:19:23,400 --> 00:19:27,310 по начин, който е образователна, а след това можем да го сложи зад нас на следващия ден. 480 00:19:27,310 --> 00:19:30,335 >> Така че, без повече приказки, вземи ръба на разстояние от този разговор, 481 00:19:30,335 --> 00:19:35,080 причината кученцата са нагоре т.е. само за разчупване на леда за миг. 482 00:19:35,080 --> 00:19:39,560 И за съжаление, всички те са на сън, но това, което е трябвало да се случи тук 483 00:19:39,560 --> 00:19:41,760 е всеки е трябвало да страхопочитание и вид релакс 484 00:19:41,760 --> 00:19:43,910 след това много тежък разговор. 485 00:19:43,910 --> 00:19:46,930 Но очевидно Сложих кученцата да спят. 486 00:19:46,930 --> 00:19:50,070 Но ако отидете в CS50 е уебсайт наклонена черта кученца, 487 00:19:50,070 --> 00:19:51,610 можете да ги гледате по цял ден. 488 00:19:51,610 --> 00:19:55,280 Особено може би 02:00, или 03:00 или 04:00 AM през нощта 489 00:19:55,280 --> 00:19:57,480 да видите малко облекчение стрес там. 490 00:19:57,480 --> 00:19:58,805 Така, че е наклонена черта кученца. 491 00:19:58,805 --> 00:20:01,700 492 00:20:01,700 --> 00:20:02,200 Всичко е наред. 493 00:20:02,200 --> 00:20:03,020 Не беше ли това забавно? 494 00:20:03,020 --> 00:20:04,200 ДОБРЕ. 495 00:20:04,200 --> 00:20:07,140 Така че, обратно на някои компютъра науката, ако ми позволите. 496 00:20:07,140 --> 00:20:10,600 >> Така че, припомни, че за последен път започнахме не търси само в основното, което 497 00:20:10,600 --> 00:20:13,930 е функция по подразбиране, когато зелен флаг кликнали еквивалент, 498 00:20:13,930 --> 00:20:16,999 но ние също започна накратко написването на някои от нашите собствени функции. 499 00:20:16,999 --> 00:20:20,040 И досега нито едно от тези функции бяха особено големи или месест. 500 00:20:20,040 --> 00:20:24,570 Ще получите в тези по-големи функции, вероятно, P комплект 2, P настроите 3, 501 00:20:24,570 --> 00:20:26,410 Определено P зададете 4 и нататък. 502 00:20:26,410 --> 00:20:29,340 Точно сега повечето от вашите програми, ако не всички от тях, определено за P 503 00:20:29,340 --> 00:20:31,550 комплект 1 може да се извършва изцяло в основната. 504 00:20:31,550 --> 00:20:33,810 Ако вашата програма е само пет линии, 10 реда, 505 00:20:33,810 --> 00:20:37,070 дълго дори 20 линии, перфектно разумно да го напиша 506 00:20:37,070 --> 00:20:40,930 всичко това в главната и да не прекалите усложняват Код си, но това, което правим днес 507 00:20:40,930 --> 00:20:44,360 и нататък се опитва да се представим някои добри техники за дизайн 508 00:20:44,360 --> 00:20:48,660 така че като си код получава повече сложна и като проблемите 509 00:20:48,660 --> 00:20:51,690 искате да се реши стават все по- по-интересно ли, нещо, 510 00:20:51,690 --> 00:20:55,850 инструментите в инструментариум, с който да проектира добри решения на тези. 511 00:20:55,850 --> 00:21:01,210 >> Така че, нека хвърлим един бърз поглед назад към тази програма от последната ми седмица, която 512 00:21:01,210 --> 00:21:06,550 беше функции нулева точка C. И забележите, че, съвсем просто, 513 00:21:06,550 --> 00:21:10,310 тя изглежда така с две функции, основната и името на печат. 514 00:21:10,310 --> 00:21:13,160 И мисля назад или може би обратен инженеринг днес 515 00:21:13,160 --> 00:21:16,880 какви са били мотивите за въвеждане на функция в съответствие 28 нарича, 516 00:21:16,880 --> 00:21:18,180 Име на печат? 517 00:21:18,180 --> 00:21:21,745 Или какво е този пример в от гледна точка на един принцип, или храна за вкъщи, 518 00:21:21,745 --> 00:21:22,605 ако искате. 519 00:21:22,605 --> 00:21:26,560 520 00:21:26,560 --> 00:21:27,300 Някои шумове. 521 00:21:27,300 --> 00:21:28,830 Какво? 522 00:21:28,830 --> 00:21:32,210 >> Да, така Функционално разпадане е вид на луксозен начин на казвайки, 523 00:21:32,210 --> 00:21:34,690 разлагат програма на съставните си части 524 00:21:34,690 --> 00:21:37,530 и след това да използвате тези части да се събере цяло. 525 00:21:37,530 --> 00:21:39,620 Така че, това също е просто вид на хапка вече, 526 00:21:39,620 --> 00:21:42,050 но това е може би дори по- по-добър пример за нещо, 527 00:21:42,050 --> 00:21:43,081 Просто нарича абстракция. 528 00:21:43,081 --> 00:21:43,580 Нали така? 529 00:21:43,580 --> 00:21:46,950 Abstraction ще бъде една на повтарящи се теми в CS50 530 00:21:46,950 --> 00:21:49,085 а също и компютърни науки по-общо, тъй като това е 531 00:21:49,085 --> 00:21:53,060 техника, с която можете да решите проблеми по-ефективно, защото вие 532 00:21:53,060 --> 00:21:56,807 може да напише решения повече интуитивно и по начин, който везни 533 00:21:56,807 --> 00:21:58,390 и е разбираемо от други хора. 534 00:21:58,390 --> 00:21:59,860 Какво имам предвид с това? 535 00:21:59,860 --> 00:22:04,340 >> Така че, може би тя е много по-разбираеми да погледнем в програма като тази, 536 00:22:04,340 --> 00:22:05,990 супер кратко макар че той е. 537 00:22:05,990 --> 00:22:10,050 Когато видите по линия 22, която има функция, наречена, име на печат. 538 00:22:10,050 --> 00:22:12,620 Само това име казва това, което прави. 539 00:22:12,620 --> 00:22:15,780 Тази функция очевидно отнема вход между неговите скоби, 540 00:22:15,780 --> 00:22:18,600 и очевидно прави нещо, вероятно отпечатва името. 541 00:22:18,600 --> 00:22:20,880 И така, въпреки че ние абсолютно биха могли да имат 542 00:22:20,880 --> 00:22:25,280 направи това, което направихме преди една седмица, на която беше просто приемете това действително ред код, 543 00:22:25,280 --> 00:22:28,710 Отърви се от това, и да получите отърви от тази, всички заедно, 544 00:22:28,710 --> 00:22:31,436 ние някак абстрахира понятието за отпечатване на име. 545 00:22:31,436 --> 00:22:33,060 Не ми пука, ако използвате за печат деф. 546 00:22:33,060 --> 00:22:35,601 Не ми пука, ако имате процента S и наклонена черта N. Те 547 00:22:35,601 --> 00:22:37,270 са невероятно мистериозните подробности. 548 00:22:37,270 --> 00:22:40,090 Това, което ме интересува като програмист печата име. 549 00:22:40,090 --> 00:22:43,414 И така, какъв по-добър начин да направите това отколкото чрез извикване на функцията, името на печат? 550 00:22:43,414 --> 00:22:46,330 И така, това беше една от мотивациите за правене на нещо подобно. 551 00:22:46,330 --> 00:22:50,370 Осъществяване на кода по-разбираеми, по- за многократна употреба, а също и самостоятелно описателен. 552 00:22:50,370 --> 00:22:52,120 Сега, нека да разгледаме в друг пример, 553 00:22:52,120 --> 00:22:56,220 който е един функции, които имахме тук. 554 00:22:56,220 --> 00:23:00,367 >> Така че, това е може би още по- убедителна, тъй като в този случай, 555 00:23:00,367 --> 00:23:01,700 Аз не искам просто да се качите на инт. 556 00:23:01,700 --> 00:23:03,320 Аз искам да отида положителен инт. 557 00:23:03,320 --> 00:23:06,470 И се оказва, за да получите положителен INT което трябва да направите един куп подготвителна работа. 558 00:23:06,470 --> 00:23:06,969 Нали така? 559 00:23:06,969 --> 00:23:09,600 Това не е просто една линия обадя като името на печат е, 560 00:23:09,600 --> 00:23:11,480 което е несъмнено по-малко убедителни. 561 00:23:11,480 --> 00:23:16,000 >> За да получите положителен инт, logically-- позволете ми да превъртите надолу, за да се скрие това. 562 00:23:16,000 --> 00:23:18,887 Какво трябва да направя? 563 00:23:18,887 --> 00:23:20,720 Подобно на всички инструменти, ние имаме в момента са 564 00:23:20,720 --> 00:23:24,440 неща като печат деф от Standard Библиотека, а също и от CS50 библиотека 565 00:23:24,440 --> 00:23:26,990 имаме Вземи Int, и да получавате Float, Вземи Long Long, Get String, 566 00:23:26,990 --> 00:23:29,260 но единственият, уместен, точно сега е Спечелете Int. 567 00:23:29,260 --> 00:23:32,970 Така че, ако единственият инструмент имате във вашата кутия за инструменти е Спечелете Int, 568 00:23:32,970 --> 00:23:35,505 как да отида за изпълнение тя да получи положителна инт? 569 00:23:35,505 --> 00:23:35,929 >> АУДИТОРИЯ: Създаване на регистър и проверка от това дали на входа, че те дадоха 570 00:23:35,929 --> 00:23:36,762 е положителна или не. 571 00:23:36,762 --> 00:23:39,390 572 00:23:39,390 --> 00:23:40,640 >> SPEAKER 1: Perfect. 573 00:23:40,640 --> 00:23:41,200 Точно. 574 00:23:41,200 --> 00:23:43,950 Друг инструмент, които имаме в нашия инструментариум от преди една седмица или две 575 00:23:43,950 --> 00:23:45,419 е само конструкцията примка. 576 00:23:45,419 --> 00:23:48,210 И така, да, ако използваме известно време линия, или да не се прави, докато линия, или преден план 577 00:23:48,210 --> 00:23:50,850 линия ние вероятно може да се размине с някои от тези в някаква форма. 578 00:23:50,850 --> 00:23:55,140 Ние може да реализира идеята за GET положителна инт само с помощта на Get Int, 579 00:23:55,140 --> 00:23:57,830 и след това просто да го наричаш отново и да досажда на потребителя 580 00:23:57,830 --> 00:24:00,320 докато той или тя всъщност ни дава това, което искаме. 581 00:24:00,320 --> 00:24:03,260 >> И така, сега, това абстракция на процеса 582 00:24:03,260 --> 00:24:05,680 за получаване на положителна инт в функция, наречена 583 00:24:05,680 --> 00:24:08,930 Вземи Positive Int е малко по- убедителна, защото гледам на това. 584 00:24:08,930 --> 00:24:10,990 Те са като 10 плюс реда код, който 585 00:24:10,990 --> 00:24:15,090 са въвлечени в получаване на положително инт, и аз не ми пука как го правиш. 586 00:24:15,090 --> 00:24:17,850 Всички ме интересува е, че може да го направи, и така съм 587 00:24:17,850 --> 00:24:21,660 скрити всички тези детайли, които стоят зад функция, наречена Вземи Positive инт, че, 588 00:24:21,660 --> 00:24:23,430 Наистина, има тази задача, докато линия. 589 00:24:23,430 --> 00:24:27,660 >> И виж миналата седмица за синтаксиса там, но тя просто декларира, N, 590 00:24:27,660 --> 00:24:29,800 и го отпечатва инструкция за потребителя. 591 00:24:29,800 --> 00:24:33,330 Той призовава да получавате Int и след това го проверява това състояние отново и отново, 592 00:24:33,330 --> 00:24:35,230 и отново, докато потребителят не сътрудничи. 593 00:24:35,230 --> 00:24:38,000 >> Така че сега, след няколко проверки по. 594 00:24:38,000 --> 00:24:40,370 За тези, които може би запознати с малко програмиране, 595 00:24:40,370 --> 00:24:46,410 Затова е обявен N, защо да създам N извън правя, докато цикъл? 596 00:24:46,410 --> 00:24:50,370 Защо е по линия 29, а не на 33, като, например. 597 00:24:50,370 --> 00:24:53,529 >> АУДИТОРИЯ: Защото, когато известете отвън, тя натура 598 00:24:53,529 --> 00:24:56,688 повече, по-голямата scope-- 599 00:24:56,688 --> 00:24:58,146 >> SPEAKER 1: Добро. 600 00:24:58,146 --> 00:24:59,604 >> АУДИТОРИЯ: --and ако декларират то вътре в контура, [недоловим] 601 00:24:59,604 --> 00:25:00,979 защото той не знае за това. 602 00:25:00,979 --> 00:25:02,819 603 00:25:02,819 --> 00:25:03,610 SPEAKER 1: Точно така. 604 00:25:03,610 --> 00:25:06,330 Ако мога да simplify-- това е въпрос на характер. 605 00:25:06,330 --> 00:25:11,530 И обхват се отнася до контекста, в който променлива съществува или е използваема. 606 00:25:11,530 --> 00:25:15,050 И хубаво правило тук е, че по принцип, когато декларират или да създадете 607 00:25:15,050 --> 00:25:21,642 променлива можете да го използвате само вътре от най-близките възприемане фигурни скоби. 608 00:25:21,642 --> 00:25:22,600 И така, какво означава това? 609 00:25:22,600 --> 00:25:26,551 Ако аз, вместо това, да отмените това и да отида с нещо, което се чувства малко по-лесно. 610 00:25:26,551 --> 00:25:27,050 Нали така? 611 00:25:27,050 --> 00:25:29,360 >> Line 32 просто изглежда по-чист за мен сега. 612 00:25:29,360 --> 00:25:31,500 Правя и двете неща веднъж и след възлагане 613 00:25:31,500 --> 00:25:33,070 дясната ръка към лявата страна. 614 00:25:33,070 --> 00:25:35,180 Проблемът сега на базата на тази дефиниция на обхвата 615 00:25:35,180 --> 00:25:41,130 е това, че п може да бъде използван линии 31 и 32 в рамките на този цикъл, 616 00:25:41,130 --> 00:25:45,100 но когато от това определение не може да се използва? 617 00:25:45,100 --> 00:25:45,660 В съответствие какво? 618 00:25:45,660 --> 00:25:46,160 Да. 619 00:25:46,160 --> 00:25:47,490 >> АУДИТОРИЯ: 35. 620 00:25:47,490 --> 00:25:49,180 >> SPEAKER 1: 35. 621 00:25:49,180 --> 00:25:50,480 Определено не е 35. 622 00:25:50,480 --> 00:25:52,349 И също така къде другаде? 623 00:25:52,349 --> 00:25:52,890 АУДИТОРИЯ: 34. 624 00:25:52,890 --> 00:25:55,040 SPEAKER 1: Дори 34 е проблематично, защото това е 625 00:25:55,040 --> 00:25:56,450 извън фигурните скоби. 626 00:25:56,450 --> 00:25:58,200 И така, в действителност, нека да видим какво ще стане. 627 00:25:58,200 --> 00:25:58,700 Нали така? 628 00:25:58,700 --> 00:26:00,722 Това може да изглежда малко по- интуитивно или не вали, 629 00:26:00,722 --> 00:26:02,680 но нека да видим какво съставител има да каже, когато 630 00:26:02,680 --> 00:26:04,730 отиваме в днешния източник директория. 631 00:26:04,730 --> 00:26:08,950 Направи една функция. 632 00:26:08,950 --> 00:26:11,231 О, Боже мой. 633 00:26:11,231 --> 00:26:12,980 Е, аз най-накрая завърши които, между другото. 634 00:26:12,980 --> 00:26:14,030 Всичко е наред. 635 00:26:14,030 --> 00:26:15,510 И каква е въпрос тук? 636 00:26:15,510 --> 00:26:17,430 Много тайнствена да погледнете. 637 00:26:17,430 --> 00:26:19,570 Но ето какво typed-- направи една функция. 638 00:26:19,570 --> 00:26:21,640 Ето какво направи индуцирана, който всъщност 639 00:26:21,640 --> 00:26:23,705 използване на компилатор звън с някои от тези флагове 640 00:26:23,705 --> 00:26:25,080 че ще видим отново след дълго. 641 00:26:25,080 --> 00:26:26,829 И пак, винаги гледам в първата грешка, 642 00:26:26,829 --> 00:26:30,540 защото може просто да има каскаден безсмислена ефект върху други линии. 643 00:26:30,540 --> 00:26:34,410 >> И така, какво означава това е, че проблем е във функционална 1.c. 644 00:26:34,410 --> 00:26:36,890 Тя е на линия 32. 645 00:26:36,890 --> 00:26:39,712 И това е най-колона или герой, 13. 646 00:26:39,712 --> 00:26:42,670 Така че, когато си текстов редактор, който може да да ви помогне да се определи къде е проблема. 647 00:26:42,670 --> 00:26:47,079 Така че, ако превъртите нагоре, което е ред 32? 648 00:26:47,079 --> 00:26:49,120 Това е наистина това това е вече маркирана 649 00:26:49,120 --> 00:26:50,607 полето here-- неизползвана променлива п. 650 00:26:50,607 --> 00:26:51,440 Но това не е неизползван. 651 00:26:51,440 --> 00:26:52,320 Аз съм го използвате. 652 00:26:52,320 --> 00:26:56,110 Но компилатор-те бърка, защото тя съществува само вътре в този обхват. 653 00:26:56,110 --> 00:26:57,727 И така, аз не мога да го използвам тук. 654 00:26:57,727 --> 00:26:58,560 Не мога да го използвам тук. 655 00:26:58,560 --> 00:27:01,320 И компилатора, следователно, дори не е грижа, че аз се опитвам. 656 00:27:01,320 --> 00:27:03,940 Изглежда, че е неизползвана в рамките на действителната му обхват. 657 00:27:03,940 --> 00:27:08,854 >> Така че можем да се разшири обхватът чрез правене точно това, което сме започнали with-- INT п. 658 00:27:08,854 --> 00:27:11,020 И въпреки, че това не е така изглежда толкова елегантен, може би, 659 00:27:11,020 --> 00:27:15,110 и ние сме като допълнителен ред тук, сега е в обхват навсякъде. 660 00:27:15,110 --> 00:27:15,970 Така че нека да се опитаме отново. 661 00:27:15,970 --> 00:27:19,040 Така че направи една функция. 662 00:27:19,040 --> 00:27:19,610 Ница. 663 00:27:19,610 --> 00:27:23,370 И сега, ако аз, ако аз тичам функция един, нека го даде отрицателен 10, 664 00:27:23,370 --> 00:27:27,170 отрицателна 1, 0, 1, и тя наистина работи. 665 00:27:27,170 --> 00:27:28,610 >> Така че има и друго решение тук. 666 00:27:28,610 --> 00:27:29,280 Знаеш ли какво? 667 00:27:29,280 --> 00:27:31,230 Какво става, ако аз наистина съм се боря с това? 668 00:27:31,230 --> 00:27:33,140 Аз не знам къде е п е трябвало да отиде. 669 00:27:33,140 --> 00:27:33,723 Знаеш ли какво? 670 00:27:33,723 --> 00:27:39,220 Аз съм просто ще го постави всички начин в горната част на досието ми тук. 671 00:27:39,220 --> 00:27:42,835 Какво би това ми, как мислиш? 672 00:27:42,835 --> 00:27:43,335 Да? 673 00:27:43,335 --> 00:27:44,251 >> АУДИТОРИЯ: [недоловим]. 674 00:27:44,251 --> 00:27:47,964 675 00:27:47,964 --> 00:27:48,630 SPEAKER 1: Да. 676 00:27:48,630 --> 00:27:50,560 Така че аз съм правил това глобално, така да се каже. 677 00:27:50,560 --> 00:27:54,430 Ако имате променлива, която е извън всичките си функции, които е разрешено, 678 00:27:54,430 --> 00:27:58,780 и кода трябва да се съберат, и п Сега ще бъде достъпна не само в GET 679 00:27:58,780 --> 00:28:02,490 положителна инт, но и в която main-- е малко по-тревожен, защото има 680 00:28:02,490 --> 00:28:04,864 вече е п в основната, така че по- за това само с moment-- 681 00:28:04,864 --> 00:28:06,530 но това ще се счита за лош дизайн. 682 00:28:06,530 --> 00:28:06,910 Всичко е наред. 683 00:28:06,910 --> 00:28:08,570 Ако трябва да се прибегне до нещо подобно, о, аз ще 684 00:28:08,570 --> 00:28:10,125 Просто го направи тук, защото кодът изглежда да съставят 685 00:28:10,125 --> 00:28:12,180 обикновено не е най-добрата практика. 686 00:28:12,180 --> 00:28:14,590 По-скоро искате да изберете възможно най-малкото обхвата 687 00:28:14,590 --> 00:28:18,720 за вашите променливи, което би означавало, става с нашия първоначален проект, който 688 00:28:18,720 --> 00:28:19,920 е точно тук. 689 00:28:19,920 --> 00:28:24,400 >> Сега като се отмени, ако нямаше един и същ начин, именувана променлива тук, 690 00:28:24,400 --> 00:28:27,750 начина, по който ще се справят век this-- въпреки че това няма да се случи твърде often-- 691 00:28:27,750 --> 00:28:30,150 е, че това е още съвършено глоба в тук. 692 00:28:30,150 --> 00:28:35,000 Но това определение на п в съответствие 22 ще засенчи световната един. 693 00:28:35,000 --> 00:28:38,190 Така че това ще работи в рамките на Основната и глобалната този, 694 00:28:38,190 --> 00:28:41,670 всъщност ще се прилага, когато сте в получите положителен инт Но повече за това 695 00:28:41,670 --> 00:28:43,890 друг път, но просто за тези любопитни. 696 00:28:43,890 --> 00:28:45,970 >> Така че по-кратко, ние се определи това тук. 697 00:28:45,970 --> 00:28:49,220 Сега нека да дразни освен две други парчета преди да разгледаме един последен ред код 698 00:28:49,220 --> 00:28:50,170 в тази програма. 699 00:28:50,170 --> 00:28:52,170 Вземи положителна инт. 700 00:28:52,170 --> 00:28:54,450 От лявата страна на неговата дума е думата Int. 701 00:28:54,450 --> 00:28:56,860 Какво значи това означава, как мислиш? 702 00:28:56,860 --> 00:28:58,900 До този момент ние сме най-вече се вижда нищожно. 703 00:28:58,900 --> 00:28:59,400 Да? 704 00:28:59,400 --> 00:29:01,810 >> АУДИТОРИЯ: Това е вида на променлива, която можете да започнете пита за. 705 00:29:01,810 --> 00:29:04,550 >> SPEAKER 1: Да Това е вида на, нека Ще кажа по-променливо, но видът на стойност 706 00:29:04,550 --> 00:29:05,990 че аз питам за обратно. 707 00:29:05,990 --> 00:29:08,070 И наистина, това е интуитивен тук, надявам се. 708 00:29:08,070 --> 00:29:08,200 Нали така? 709 00:29:08,200 --> 00:29:10,250 Ако искате да получите положителна инт, какво е, който 710 00:29:10,250 --> 00:29:12,920 искам function-- като нашия доброволци от миналата седмица 711 00:29:12,920 --> 00:29:15,720 да ви върне парче хартия с пад върху него? 712 00:29:15,720 --> 00:29:19,190 И затова сме уточни, че така наречения тип възвръщаемост на тази функция 713 00:29:19,190 --> 00:29:20,450 е да получите положителен инт. 714 00:29:20,450 --> 00:29:22,990 Ако ние не го искаме да върнете всичко, което казвате за невалидни. 715 00:29:22,990 --> 00:29:25,270 Ако искате да го да се върне низ, вие казвате низ. 716 00:29:25,270 --> 00:29:27,310 Ако искате да го да се върне поплавък, което казвате плувка. 717 00:29:27,310 --> 00:29:30,440 Но единственият, който се прилага тук логично, защото аз съм с GET инт, 718 00:29:30,440 --> 00:29:34,130 въпреки че аз съм ги ограничава положителни стойности, е да се върне на инт. 719 00:29:34,130 --> 00:29:38,380 >> Така че обратно, какво означава това че има празнота в скоби? 720 00:29:38,380 --> 00:29:40,130 Какво да направя скоби обикновено определят? 721 00:29:40,130 --> 00:29:40,588 Да? 722 00:29:40,588 --> 00:29:42,880 >> АУДИТОРИЯ: Това означава, че функцията те години всъщност не го получат. 723 00:29:42,880 --> 00:29:44,650 >> SPEAKER 1: Това означава, че функцията те години всъщност не получава това, което? 724 00:29:44,650 --> 00:29:45,430 >> АУДИТОРИЯ: An вход. 725 00:29:45,430 --> 00:29:46,763 >> SPEAKER 1: Един вход, каквато. 726 00:29:46,763 --> 00:29:49,870 Така че наистина, ако скобите Тук можете зададени нищожен, 727 00:29:49,870 --> 00:29:51,650 това просто означава, че аз не искам всеки вход. 728 00:29:51,650 --> 00:29:53,269 Аз ще се справят с проблема си. 729 00:29:53,269 --> 00:29:55,810 И наистина, не е нужно да кажете получи положителна инт нищо. 730 00:29:55,810 --> 00:29:59,630 Можете само да кажа, може да получи положителна инт, и че функция ще изгасне и да си свърши работата. 731 00:29:59,630 --> 00:30:02,970 >> Но е имало един малък трик съм играе тук цялото това време 732 00:30:02,970 --> 00:30:04,970 да се уверите, този код се компилира. 733 00:30:04,970 --> 00:30:09,620 Забележете, че int-- получи положителна инт void-- е на линия 27. 734 00:30:09,620 --> 00:30:14,530 Но по някаква причина на пръв поглед странно тя също е тук по линия 16. 735 00:30:14,530 --> 00:30:18,530 И точно за добра мярка ще повторя това, така че е напълно идентични. 736 00:30:18,530 --> 00:30:21,640 И аз съм казвал прототип с малко коментар от един ред. 737 00:30:21,640 --> 00:30:28,850 Какво се случва, ако изтрия, че, И Сега изпълнете отново направи функция 1, влиза. 738 00:30:28,850 --> 00:30:29,350 Опа. 739 00:30:29,350 --> 00:30:32,527 740 00:30:32,527 --> 00:30:33,110 Чакай малко. 741 00:30:33,110 --> 00:30:34,764 Къде е моята сметка? 742 00:30:34,764 --> 00:30:35,263 А? 743 00:30:35,263 --> 00:30:37,969 744 00:30:37,969 --> 00:30:39,620 В готовност. 745 00:30:39,620 --> 00:30:41,570 Направи функция 1. 746 00:30:41,570 --> 00:30:42,150 Ето. 747 00:30:42,150 --> 00:30:42,310 ДОБРЕ. 748 00:30:42,310 --> 00:30:43,400 Ако не го е записал правилно. 749 00:30:43,400 --> 00:30:45,220 Така че, аз мисля, че има малко по- бъг тук, където аз не съм 750 00:30:45,220 --> 00:30:46,636 виждаме името на раздела в момента. 751 00:30:46,636 --> 00:30:47,940 Така че това, което се случва тук? 752 00:30:47,940 --> 00:30:52,210 Скритият декларация на функция получите положителен инт е недействителен, C99. 753 00:30:52,210 --> 00:30:53,940 Така обърква отново. 754 00:30:53,940 --> 00:30:55,200 Така че това, което е показателно за това? 755 00:30:55,200 --> 00:30:57,287 Е, оказва се, че C е доста глупаво. 756 00:30:57,287 --> 00:30:59,912 Е, това е програмирането език, или по-скоро на компилатора е. 757 00:30:59,912 --> 00:31:02,940 Той знае само това, което имате той преподава, и това е само 758 00:31:02,940 --> 00:31:05,640 Ще знаете нещо ако го научи преди. 759 00:31:05,640 --> 00:31:07,960 С други думи, в Основният в момента, аз съм 760 00:31:07,960 --> 00:31:10,900 опитвайки се да се обадя на функция наречено получите положителен инт. 761 00:31:10,900 --> 00:31:14,120 Но компилаторът не върви да забележите, че се получи положителен инт 762 00:31:14,120 --> 00:31:16,500 съществува, докато линия 26. 763 00:31:16,500 --> 00:31:21,360 И какво от това компилаторът прави, е просто грешки, веднага след като тя стане по линията 17, 764 00:31:21,360 --> 00:31:23,700 казвайки имплицитно декларация на получите положителен инт, които 765 00:31:23,700 --> 00:31:27,740 е само един луксозен начин на казвайки, че не правим знам какво се получи положителен инт е все още. 766 00:31:27,740 --> 00:31:31,240 >> Други езици като Java и Python и Ruby може да гледа напред. 767 00:31:31,240 --> 00:31:32,240 C не го прави. 768 00:31:32,240 --> 00:31:35,110 И така начина, по който фиксира това е един от двата начина. 769 00:31:35,110 --> 00:31:40,160 Всеки един, ако проблемът е, че получавате положителна инт не е виждал преди, 770 00:31:40,160 --> 00:31:42,150 добре, нека просто да го преместите в горната част. 771 00:31:42,150 --> 00:31:43,650 Това ще решите този проблем. 772 00:31:43,650 --> 00:31:46,790 Но като цяло, това е счита по-добра техника 773 00:31:46,790 --> 00:31:50,220 да се постави основната си функция в самото отгоре, така че човек чете кода си 774 00:31:50,220 --> 00:31:52,710 знае какво е случаят с програмата, защото основната не е погребан всички 775 00:31:52,710 --> 00:31:53,960 начинът на дъното или в средата. 776 00:31:53,960 --> 00:31:55,130 Това е най-отгоре. 777 00:31:55,130 --> 00:31:56,410 Така, че не се чувства идеално. 778 00:31:56,410 --> 00:31:58,326 И всъщност можете да получите в ситуации, в които 779 00:31:58,326 --> 00:32:00,820 ако една функция повиквания друго, което изисква друго, 780 00:32:00,820 --> 00:32:04,630 можете да получите в проблем, когато нито може да отиде над друга, логично. 781 00:32:04,630 --> 00:32:05,920 Това просто не е възможно. 782 00:32:05,920 --> 00:32:09,290 >> И така, на път за работа около това е просто да си вземе 783 00:32:09,290 --> 00:32:13,200 подписване на функцията, така че да speak-- на първа линия, където това е declared-- 784 00:32:13,200 --> 00:32:16,850 и просто да копирате, поставете го в отгоре, но не и с къдрава braces-- 785 00:32:16,850 --> 00:32:17,980 само с точка и запетая. 786 00:32:17,980 --> 00:32:20,840 Това е като малко намек от това, което предстои. 787 00:32:20,840 --> 00:32:26,630 И в действителност, всичко това време, когато съм виждал неща като стандарт io.h 788 00:32:26,630 --> 00:32:33,040 и cs50.h също така, в тези точки з файлове има други прототипи. 789 00:32:33,040 --> 00:32:35,250 И ние ще видим, че не след дълго. 790 00:32:35,250 --> 00:32:39,340 >> Така че по-кратко, когато имате програма във файл с множество функции 791 00:32:39,340 --> 00:32:42,300 освен основната, почти Винаги искаш да ги декларира 792 00:32:42,300 --> 00:32:45,360 само по пътя на първото си линия, следвана от точка и запетая, 793 00:32:45,360 --> 00:32:48,410 в самото началото на файла. 794 00:32:48,410 --> 00:32:50,460 Това беше много наведнъж. 795 00:32:50,460 --> 00:32:53,130 Някакви въпроси? 796 00:32:53,130 --> 00:32:53,920 Някакви въпроси? 797 00:32:53,920 --> 00:32:54,530 Всичко е наред. 798 00:32:54,530 --> 00:32:59,760 >> Така че нека да преминем след това до нещо като кашлица. 799 00:32:59,760 --> 00:33:00,260 Oh. 800 00:33:00,260 --> 00:33:00,570 Как монтаж. 801 00:33:00,570 --> 00:33:01,220 Всичко е наред. 802 00:33:01,220 --> 00:33:02,260 Кашлица. 803 00:33:02,260 --> 00:33:05,080 Така че тук е в изпълнение на програма 804 00:33:05,080 --> 00:33:07,560 ние направихме на другия ден в Scratch, че много просто просто 805 00:33:07,560 --> 00:33:08,691 казва кашлица, кашлица, кашлица. 806 00:33:08,691 --> 00:33:09,190 Всичко е наред. 807 00:33:09,190 --> 00:33:11,136 И някой каза няколко Преди дни, че има 808 00:33:11,136 --> 00:33:12,760 начин за почистване на този код се вече. 809 00:33:12,760 --> 00:33:12,880 Всичко е наред? 810 00:33:12,880 --> 00:33:15,440 Веднага след като сте копиране и поставяне вероятно лош дизайн. 811 00:33:15,440 --> 00:33:18,725 Поне веднъж да стигнем до четири или пет или 20 кашлица, тя се чувства лоша практика. 812 00:33:18,725 --> 00:33:19,850 Ние просто да копирате, пастиране. 813 00:33:19,850 --> 00:33:22,213 Какво е най-очевидното решение да почистите тази програма става? 814 00:33:22,213 --> 00:33:23,120 >> АУДИТОРИЯ: Loop. 815 00:33:23,120 --> 00:33:23,350 >> SPEAKER 1: Да. 816 00:33:23,350 --> 00:33:24,070 Така че използването на една линия. 817 00:33:24,070 --> 00:33:27,697 И ние можем да използвате за цикъл, а същевременно контур произволен брой подходи. 818 00:33:27,697 --> 00:33:29,780 И наистина, това е, което което правим във версия тук. 819 00:33:29,780 --> 00:33:32,250 Аз бях вместо да го пренаписва във версия един от cough.c 820 00:33:32,250 --> 00:33:35,170 да бъде само в рамките на една кашлица за цикъл. 821 00:33:35,170 --> 00:33:38,240 Добре, но има един възможност сега да вид старт 822 00:33:38,240 --> 00:33:41,630 да се изработи този малко повече като урока сме научени преди малко, 823 00:33:41,630 --> 00:33:46,190 което е this-- Предполагам, че аз исках да се създаде функция, наречена кашлица, 824 00:33:46,190 --> 00:33:49,730 нека разгледаме само за миг какво ще прилича. 825 00:33:49,730 --> 00:33:51,900 Така че, ако Искам нещо да кашля, аз просто трябва 826 00:33:51,900 --> 00:33:53,800 да се използва за печат е в самата функция. 827 00:33:53,800 --> 00:33:55,030 И наистина съм. 828 00:33:55,030 --> 00:33:56,990 И в действителност, това време, по всяко време, че си 829 00:33:56,990 --> 00:33:59,000 отпечатване на нещо, което да екрана, програмист 830 00:33:59,000 --> 00:34:00,610 ще се обади, че е страничен ефект. 831 00:34:00,610 --> 00:34:02,990 Не ме е подавайки гърба на някого стойност. 832 00:34:02,990 --> 00:34:06,170 Това ме води някакво действие които могат да бъдат визуално очевидно. 833 00:34:06,170 --> 00:34:10,672 Но тази функция кашлица, няма да го върне нещо въз основа на своята първа линия? 834 00:34:10,672 --> 00:34:12,880 Не, защото неговото връщане тип е нищожен, което просто означава, 835 00:34:12,880 --> 00:34:14,250 тя не ме е да дадете нещо в замяна. 836 00:34:14,250 --> 00:34:16,791 Би могло да се направи нещо визуално, но това е не ми подаваше 837 00:34:16,791 --> 00:34:18,639 резервно парче хартия като миналата седмица. 838 00:34:18,639 --> 00:34:21,310 >> Трябва ли всеки вход? 839 00:34:21,310 --> 00:34:21,810 Не. 840 00:34:21,810 --> 00:34:23,134 И така, това е нищожно и тук. 841 00:34:23,134 --> 00:34:25,600 Така че това също е един вид свръх-инженеринг на този проблем. 842 00:34:25,600 --> 00:34:26,099 Нали така? 843 00:34:26,099 --> 00:34:28,820 Аз направих програмата по- комплексни, повече реда код, 844 00:34:28,820 --> 00:34:31,889 Аз не съм го направила по-функционален, но този 845 00:34:31,889 --> 00:34:34,210 ще бъде етапно, Може би по-широк 846 00:34:34,210 --> 00:34:36,830 връзка с по-сложна код. 847 00:34:36,830 --> 00:34:38,150 Но какво да кажем за това? 848 00:34:38,150 --> 00:34:42,050 Какво съм done-- просто погледна това без да гледа в коментара 849 00:34:42,050 --> 00:34:46,076 на самия връх на file-- какво има Аз принципно прави тук с моята кашлица 850 00:34:46,076 --> 00:34:47,409 изпълнение, който е по-различно? 851 00:34:47,409 --> 00:34:48,327 Да, в гърба? 852 00:34:48,327 --> 00:34:51,384 >> АУДИТОРИЯ: Направи го така че можете да имат характер изключите. 853 00:34:51,384 --> 00:34:52,050 SPEAKER 1: Да. 854 00:34:52,050 --> 00:34:53,270 Така че този вид се чувства приятно. 855 00:34:53,270 --> 00:34:53,389 Нали така? 856 00:34:53,389 --> 00:34:56,600 Това е като добавяне на функция, за да ви програма или си функция, в този случай. 857 00:34:56,600 --> 00:34:57,830 Той все още не връща нищо. 858 00:34:57,830 --> 00:35:00,538 Тя може да има визуален страничен ефект, защото тя се обажда на печат е. 859 00:35:00,538 --> 00:35:02,800 Но сега съм parametrized функцията, която 860 00:35:02,800 --> 00:35:06,470 означава I сте посочили взето вход от тип INT и го наричат ​​п, 861 00:35:06,470 --> 00:35:08,510 но можех да го наречем нещо, което искам. 862 00:35:08,510 --> 00:35:11,550 В действителност, това може да бъде само пъти, за да бъдат още по-категоричен. 863 00:35:11,550 --> 00:35:13,310 И тогава аз може просто да промени това тук. 864 00:35:13,310 --> 00:35:16,450 Но въпросът е, че това е начинът, I създадете функция, която използва вход. 865 00:35:16,450 --> 00:35:19,530 И ако си спомняте обръщане чрез онлайн може би в един 866 00:35:19,530 --> 00:35:23,000 на разходка проходи, на Четвъртата и последна например кашлица, 867 00:35:23,000 --> 00:35:27,150 вие ще забележите, тук съм генерализирана код ми further-- вид добиваната 868 00:35:27,150 --> 00:35:27,690 това по-нататък. 869 00:35:27,690 --> 00:35:31,390 Подобно на кашлица и кихане, както са около като да кажеш нещо или вземане 870 00:35:31,390 --> 00:35:32,330 някакъв звук. 871 00:35:32,330 --> 00:35:34,725 Save ще бъде най- съответстваща Scratch блок. 872 00:35:34,725 --> 00:35:37,350 И така, какво съм направил в тази версия, които можем просто поглед, 873 00:35:37,350 --> 00:35:43,170 е кашлицата е точно като каза: [КАШЛИЦА], кашлица, и междувременно, кихане е 874 00:35:43,170 --> 00:35:44,570 все едно да кажеш, [ACHOO]. 875 00:35:44,570 --> 00:35:46,900 И така, аз съм генерализирана прилагането на тези, 876 00:35:46,900 --> 00:35:48,970 от предприятието за изпълнение това родово функция, 877 00:35:48,970 --> 00:35:51,490 казват, което е интересно за днешните цели 878 00:35:51,490 --> 00:35:54,300 само защото все още не разполага с връщане тип. 879 00:35:54,300 --> 00:35:56,398 Но колко входа има тя? 880 00:35:56,398 --> 00:35:56,981 АУДИТОРИЯ: Two. 881 00:35:56,981 --> 00:35:57,430 SPEAKER 1: Two. 882 00:35:57,430 --> 00:35:59,263 И така, ако искате да вземат в два аргумента, 883 00:35:59,263 --> 00:36:00,710 Просто отделете ги със запетая. 884 00:36:00,710 --> 00:36:03,110 А ако искате да след това наричаме тази функция, 885 00:36:03,110 --> 00:36:05,800 забележите, че просто обадя да речем, цитирам, край на цитата, 886 00:36:05,800 --> 00:36:09,090 за първи аргумент, обща п, за втория аргумент. 887 00:36:09,090 --> 00:36:12,130 Така че отново, ние просто трябва сега и изграждащи блокове, така че ние можем действително 888 00:36:12,130 --> 00:36:15,686 изпълнение на някои от нашите собствени функции. 889 00:36:15,686 --> 00:36:16,570 Всичко е наред. 890 00:36:16,570 --> 00:36:19,690 Всякакви въпроси за тях? 891 00:36:19,690 --> 00:36:22,400 >> Така че сега нека отстранете слой ако е така. 892 00:36:22,400 --> 00:36:24,840 И целта, в крайна сметка, е следващата седмица проблем набор 893 00:36:24,840 --> 00:36:27,710 ще бъде по cryptogrophy-- изкуството на кодиране на информация. 894 00:36:27,710 --> 00:36:30,640 И по-специално, информацията ще има ли криптиране или декриптиране 895 00:36:30,640 --> 00:36:31,605 ще бъде текст. 896 00:36:31,605 --> 00:36:33,980 И така, този вид на покани въпросът днес като добре, 897 00:36:33,980 --> 00:36:38,480 какво се случва под капака с текст извън ASCII от нула седмица 898 00:36:38,480 --> 00:36:40,730 и как може ние всъщност започнете да го манипулира? 899 00:36:40,730 --> 00:36:43,070 Така че тук е името Zamyla му. 900 00:36:43,070 --> 00:36:47,380 И в текст, който може да бъде въведен в подобно на функцията за GET низ. 901 00:36:47,380 --> 00:36:52,540 И сега започва, когато видите низ като this-- Z-A-M-Y-L-A-- 902 00:36:52,540 --> 00:36:56,550 започнем да мислим за него като че ли всеки от тези знаци е в кутия на неговата 903 00:36:56,550 --> 00:36:57,050 собствен. 904 00:36:57,050 --> 00:36:59,460 И наистина, в една седмица или така е време, всеки един от тези кутии 905 00:36:59,460 --> 00:37:04,280 ще представлява много специфично блок от memory-- ухапване на паметта. 906 00:37:04,280 --> 00:37:07,050 Така че всеки един от тези писма, в крайна сметка, ще представлява 8 бита. 907 00:37:07,050 --> 00:37:10,560 И ние всъщност ще видим какво се случва за под предния капак в моя компютър. 908 00:37:10,560 --> 00:37:13,440 >> Но за да не е достатъчно просто да погледнете Zamyla 909 00:37:13,440 --> 00:37:17,520 през тази леща, при което всяка от тези писма е в собствената си кутия. 910 00:37:17,520 --> 00:37:22,697 И достатъчно добре в C, което можем достъп до всеки от тези кутии директно. 911 00:37:22,697 --> 00:37:25,530 Така че, ако искате да получите първата писмо от името й, супер лесно в C. 912 00:37:25,530 --> 00:37:28,410 Ако искате да получавате последните писмо, супер лесно, както и 913 00:37:28,410 --> 00:37:30,240 с парче нов синтаксис. 914 00:37:30,240 --> 00:37:36,250 >> Така че аз ще отида напред в CS50 IDE и да се отворят низа нулева точка C. 915 00:37:36,250 --> 00:37:40,270 И в този пример тук, има Няколко нови неща става. 916 00:37:40,270 --> 00:37:44,360 Така за първи път в ред 19, ние сме виждал този before-- GET низ. 917 00:37:44,360 --> 00:37:49,840 Така че просто като бърза проверка здрав разум, ако някой може да предложи до словесно 918 00:37:49,840 --> 00:37:52,662 обяснение на лаик това, което се случва в ред 19. 919 00:37:52,662 --> 00:37:55,370 Както току-що преведе този в English че не съквартирант в CS50 920 00:37:55,370 --> 00:37:56,416 може да се разбере. 921 00:37:56,416 --> 00:37:56,916 Да. 922 00:37:56,916 --> 00:37:59,749 >> АУДИТОРИЯ: Има потребителския вход низ и да го съхранява в променлива ите. 923 00:37:59,749 --> 00:38:01,934 924 00:38:01,934 --> 00:38:02,600 SPEAKER 1: Добро. 925 00:38:02,600 --> 00:38:05,579 Има вход за употреба низ и да го съхранява в променлива ите. 926 00:38:05,579 --> 00:38:06,120 Това е прекрасно. 927 00:38:06,120 --> 00:38:08,090 Така че от дясната страна страна, която наричаме GET низ. 928 00:38:08,090 --> 00:38:10,340 Това връща стойност че не се възлага 929 00:38:10,340 --> 00:38:14,230 от дясната страна, за да лява страна в променлива наречена лидер, който е 930 00:38:14,230 --> 00:38:15,950 проектирани да съхраняват низ. 931 00:38:15,950 --> 00:38:16,800 Точно. 932 00:38:16,800 --> 00:38:20,000 >> Така че сега линия 22, на коментара в ред 21, 933 00:38:20,000 --> 00:38:22,780 Очевидно отпечатва, че низ един символ на ред. 934 00:38:22,780 --> 00:38:23,740 Но как? 935 00:38:23,740 --> 00:38:27,040 Така че на първо място, ние I до 0 инициализира. 936 00:38:27,040 --> 00:38:31,061 И тогава как можем да стигнем до В края на име Zamyla си? 937 00:38:31,061 --> 00:38:32,810 Е, в края на Име Zamyla, аз можех 938 00:38:32,810 --> 00:38:38,151 ръчно въведете в последния символ на името й по някакъв начин, или от броя на него. 939 00:38:38,151 --> 00:38:38,650 Нали така? 940 00:38:38,650 --> 00:38:43,500 Ако се върнем here-- Z-A-M-L-- Y-L-A-- така че можех да напишете инча 941 00:38:43,500 --> 00:38:47,340 Какъв е индексът на Последно писмо Zamyla си? 942 00:38:47,340 --> 00:38:52,517 Ако това е 0-- говори като programmer-- 0, 1, 2, 3, 4, 5, 943 00:38:52,517 --> 00:38:56,570 I heard-- така наистина, последната буква в името Zamyla е шести, 944 00:38:56,570 --> 00:38:58,890 но ако ние разчитаме от 0, това ще бъде номер 5. 945 00:38:58,890 --> 00:39:01,320 Така че имайте това предвид тук. 946 00:39:01,320 --> 00:39:04,929 >> Оказва се, че има функция в C нарича strlen, и през деня 947 00:39:04,929 --> 00:39:06,720 и до днес все още, много програмисти 948 00:39:06,720 --> 00:39:09,524 изберете да синхронизирате имената им функции, които звучат като думите 949 00:39:09,524 --> 00:39:10,440 те се опитват да се каже. 950 00:39:10,440 --> 00:39:12,590 Така strlen е с дължина низ. 951 00:39:12,590 --> 00:39:18,168 И така, какво ще низ дължина S се върне, когато Zamyla е на входа? 952 00:39:18,168 --> 00:39:19,569 >> АУДИТОРИЯ: Five. 953 00:39:19,569 --> 00:39:22,090 >> Високоговорител 1: Z-A-М-Y-L. Six. 954 00:39:22,090 --> 00:39:22,590 Нали така? 955 00:39:22,590 --> 00:39:23,940 Каква е продължителността на име Zamyla си? 956 00:39:23,940 --> 00:39:24,440 Нали така? 957 00:39:24,440 --> 00:39:26,240 И точно в действителност, шест букви. 958 00:39:26,240 --> 00:39:26,740 Нали така? 959 00:39:26,740 --> 00:39:28,940 И така, какво означава това за нашия цикъл? 960 00:39:28,940 --> 00:39:32,130 Отиваме да се премине от 0 до шест, които 961 00:39:32,130 --> 00:39:33,650 ще ни даде пет повторения. 962 00:39:33,650 --> 00:39:34,890 Какво правим за всяка итерация? 963 00:39:34,890 --> 00:39:36,870 Е, процента C, някой предположил на другия ден, 964 00:39:36,870 --> 00:39:38,710 означава контейнер за какво? 965 00:39:38,710 --> 00:39:39,335 >> АУДИТОРИЯ: Char. 966 00:39:39,335 --> 00:39:40,293 SPEAKER 1: Само на Чар. 967 00:39:40,293 --> 00:39:42,877 Така че един-единствен character-- не множество герои като низ. 968 00:39:42,877 --> 00:39:45,251 И тогава тук е новата линия че ние имаме отпечатване. 969 00:39:45,251 --> 00:39:46,580 И тогава тук е новия синтаксис. 970 00:39:46,580 --> 00:39:51,130 Ако искате да разпечатате на аз-ти символ в низа S, така да се каже, 971 00:39:51,130 --> 00:39:54,060 можете просто да се каже име на низ S, 972 00:39:54,060 --> 00:39:58,230 и след това отворете квадратна скоба, и после затвори квадратна скоба, с аз 973 00:39:58,230 --> 00:39:58,780 средата. 974 00:39:58,780 --> 00:40:01,430 И това е нещо хубаво в това тя вид прилича на квадрат 975 00:40:01,430 --> 00:40:06,210 точно като на площадите, в която е Zamyla съществуват герои на тази картина там. 976 00:40:06,210 --> 00:40:09,970 >> Така че, ако аз всъщност стартирате тази Сега, нека да видим какво ще стане. 977 00:40:09,970 --> 00:40:15,190 Направете низ 0 точки наклонена черта низ 0, а след това аз съм 978 00:40:15,190 --> 00:40:16,720 Ще напишете името Zamyla му. 979 00:40:16,720 --> 00:40:19,428 Няма по-бързо, защото не го направих използвате печат е, но това е добре. 980 00:40:19,428 --> 00:40:20,660 Просто знам какво да правя. 981 00:40:20,660 --> 00:40:23,240 И наистина, той отпечатва Име Zamyla му, по една на ред. 982 00:40:23,240 --> 00:40:25,760 >> Сега нека да е малко безотговорно. 983 00:40:25,760 --> 00:40:28,461 Да предположим, че аз не знаех около strlen и аз помислих, 984 00:40:28,461 --> 00:40:31,460 Всичко е наред, никой няма да има назове по-голяма от около 50 символи. 985 00:40:31,460 --> 00:40:36,360 Да вървим напред и да компилирате този и да го повтаря отново и след това въведете в Zamyla 986 00:40:36,360 --> 00:40:37,160 отново. 987 00:40:37,160 --> 00:40:40,850 Логично, това, което е най- програмата ще се опита да печатате? 988 00:40:40,850 --> 00:40:49,545 Z-A-М-Y-L-A след като 45 неизвестни байта памет. 989 00:40:49,545 --> 00:40:51,670 И наистина, ние ще се върнем до тази идея за памет. 990 00:40:51,670 --> 00:40:54,180 Но само логично, ако Име Zamyla е този дълъг, 991 00:40:54,180 --> 00:40:56,450 Съгласно снимката тук, това, което казва, 992 00:40:56,450 --> 00:40:59,810 се запази печат, имайте печат, имайте печат, имайте печат, имайте печат, 993 00:40:59,810 --> 00:41:03,781 чак до 50-ата характер, които кой знае какво ще се случи. 994 00:41:03,781 --> 00:41:05,030 Така че нека да погледнем реално. 995 00:41:05,030 --> 00:41:06,720 Нека да напишете в Zamyla. 996 00:41:06,720 --> 00:41:07,250 Интересно. 997 00:41:07,250 --> 00:41:08,190 Имаме късмет. 998 00:41:08,190 --> 00:41:09,700 Само един куп бяло пространство. 999 00:41:09,700 --> 00:41:09,930 Oh. 1000 00:41:09,930 --> 00:41:11,120 Има едно фънки характер. 1001 00:41:11,120 --> 00:41:14,577 Тя прилича на вид странен въпрос отбележат там, но има име Zamyla му. 1002 00:41:14,577 --> 00:41:15,660 Нека да получите наистина безотговорно. 1003 00:41:15,660 --> 00:41:20,000 Какво ще кажеш да разпечатате 500 блокове в неизвестното? 1004 00:41:20,000 --> 00:41:24,380 Да вървим напред и да направи тази както и след това отново да тичам. 1005 00:41:24,380 --> 00:41:27,980 И нека цял екран го, защото ние трябва да се види от повече пространство. 1006 00:41:27,980 --> 00:41:30,460 Zamyla. 1007 00:41:30,460 --> 00:41:31,830 Имаш късмет отново. 1008 00:41:31,830 --> 00:41:33,070 >> Осмели се да стигнем по-безразсъдна? 1009 00:41:33,070 --> 00:41:36,070 Нека да получите повече безразсъдно. 1010 00:41:36,070 --> 00:41:39,350 50,000 знаци. 1011 00:41:39,350 --> 00:41:41,390 Това не е най-сигурно е добра идея. 1012 00:41:41,390 --> 00:41:41,890 Всичко е наред. 1013 00:41:41,890 --> 00:41:42,990 Направете низ 0. 1014 00:41:42,990 --> 00:41:44,720 Това ще бъде последната ни демо. 1015 00:41:44,720 --> 00:41:47,261 Zamyla. 1016 00:41:47,261 --> 00:41:48,632 Уф. 1017 00:41:48,632 --> 00:41:50,010 Уф. 1018 00:41:50,010 --> 00:41:50,680 ДОБРЕ. 1019 00:41:50,680 --> 00:41:54,407 Така че паметта ми е наистина празна точно сега, който всъщност е вид удобен. 1020 00:41:54,407 --> 00:41:55,990 Това, което аз се опитвам да to-- оправи. 1021 00:41:55,990 --> 00:41:57,614 И сега, аз съм просто ще получите безразсъдно. 1022 00:41:57,614 --> 00:41:58,570 500 000. 1023 00:41:58,570 --> 00:42:03,860 Make-- нека цял екран тя. 1024 00:42:03,860 --> 00:42:04,990 Enter. 1025 00:42:04,990 --> 00:42:05,490 Zamyla. 1026 00:42:05,490 --> 00:42:12,050 1027 00:42:12,050 --> 00:42:13,390 Ето. 1028 00:42:13,390 --> 00:42:15,610 Нямам представа какво е това е, но това звучи зле. 1029 00:42:15,610 --> 00:42:16,110 Всичко е наред. 1030 00:42:16,110 --> 00:42:20,322 И всъщност, най-скоро, ако сте сред щастливия малкото в работно време 1031 00:42:20,322 --> 00:42:22,780 и в проблем избран един, може много добре се сблъскате с този. 1032 00:42:22,780 --> 00:42:25,490 Сегментация вина всъщност прави има добре дефинирана значение. 1033 00:42:25,490 --> 00:42:28,450 Това означава някаква грешка отнасяща се до сегмент на паметта. 1034 00:42:28,450 --> 00:42:30,490 И от гледна точка на лаик, това означава, че се докоснахме 1035 00:42:30,490 --> 00:42:34,780 memory-- ние използвахме RAM в компютъра ми че не би трябвало да има достъп до. 1036 00:42:34,780 --> 00:42:37,050 И това е, което е едновременно мощен и също е опасно 1037 00:42:37,050 --> 00:42:39,910 за C е, че всъщност имат безпрепятствен достъп 1038 00:42:39,910 --> 00:42:45,910 до съвкупността от паметта на вашата програма или байта или RAM, по-конкретно. 1039 00:42:45,910 --> 00:42:49,510 >> Така че, въпреки че името му Zamyla е с дължина само шест знака, 1040 00:42:49,510 --> 00:42:51,450 Все още мога да отида навсякъде в паметта, което искам. 1041 00:42:51,450 --> 00:42:53,491 И като се отмени, ако сте някога е чел някаква статия 1042 00:42:53,491 --> 00:42:55,610 през годините около някои сървър или някоя програма 1043 00:42:55,610 --> 00:42:58,654 Първи напукани или хакнат, че е възползвал от нещо 1044 00:42:58,654 --> 00:43:00,820 наречено препълване на буфера експлоатира, че ние всъщност ще 1045 00:43:00,820 --> 00:43:04,970 говорим за след няколко седмици, това е по принцип се отнасят до по някакъв начин да излъжем 1046 00:43:04,970 --> 00:43:09,090 компютър в върви добре извън границите на паметта 1047 00:43:09,090 --> 00:43:11,410 че трябва да има, и намери нещо сочно 1048 00:43:11,410 --> 00:43:13,530 в тази memory-- а парола, може би, по начин, 1049 00:43:13,530 --> 00:43:16,990 заобикаляне някои сериен номер проверите, или просто цяло състояние 1050 00:43:16,990 --> 00:43:20,360 да подвежда, че компютърът е изпълняващата код, който не е бил предназначен. 1051 00:43:20,360 --> 00:43:22,360 Но нека се върнем към реалност само за миг 1052 00:43:22,360 --> 00:43:24,550 когато тази програма беше осъществява с strlen, 1053 00:43:24,550 --> 00:43:26,110 и да се въведе едно нещо тук. 1054 00:43:26,110 --> 00:43:30,030 Какво е новото сред тези топ три линии? 1055 00:43:30,030 --> 00:43:30,910 >> Така низ дот ч. 1056 00:43:30,910 --> 00:43:35,490 Оказва се, че има тази библиотека, наречена String Dot H, или String библиотека, 1057 00:43:35,490 --> 00:43:38,490 чийто удар с глава на файл, така да се каже, е низ дот ч, че ми дава 1058 00:43:38,490 --> 00:43:40,860 достъп до тази функция strlen. 1059 00:43:40,860 --> 00:43:43,841 Ако пропуснете, че компилаторът е Ще ми крещиш в някаква форма. 1060 00:43:43,841 --> 00:43:44,590 Но знаете ли какво? 1061 00:43:44,590 --> 00:43:46,090 Сега нека да получите наистина нюансирано. 1062 00:43:46,090 --> 00:43:50,820 В ред 22, има нещо натура на inefficient-- зле проектирани, 1063 00:43:50,820 --> 00:43:53,990 arguably-- за този ред код. 1064 00:43:53,990 --> 00:43:56,280 Спомни си как се прилагат за цикъл 1065 00:43:56,280 --> 00:44:00,140 и какви стъпки да се случи отново и отново и again-- инициализация, 1066 00:44:00,140 --> 00:44:04,110 условието, кодът, че получава екзекутиран, а след това на нарастването 1067 00:44:04,110 --> 00:44:07,880 или промяна, след това условие, след това кода, след промяната, а след това 1068 00:44:07,880 --> 00:44:11,280 условието, тогава кода, след промяната, и така нататък. 1069 00:44:11,280 --> 00:44:15,320 Така че това, което може да е малко тревожен или лошо направено тук? 1070 00:44:15,320 --> 00:44:16,387 Да, в синьо. 1071 00:44:16,387 --> 00:44:18,220 АУДИТОРИЯ: Strlen е наречено много, много пъти. 1072 00:44:18,220 --> 00:44:20,654 1073 00:44:20,654 --> 00:44:21,320 SPEAKER 1: Да. 1074 00:44:21,320 --> 00:44:23,700 Така strlen се нарича много пъти, но това, което е 1075 00:44:23,700 --> 00:44:27,113 Дължината на името му на Zamyla Първият път, когато примката изпълнява? 1076 00:44:27,113 --> 00:44:27,860 >> АУДИТОРИЯ: Six. 1077 00:44:27,860 --> 00:44:28,110 >> SPEAKER 1: Six. 1078 00:44:28,110 --> 00:44:30,976 Е, каква е дължината на нейното име За втори път кода изпълнява? 1079 00:44:30,976 --> 00:44:31,432 >> АУДИТОРИЯ: Six. 1080 00:44:31,432 --> 00:44:31,890 >> SPEAKER 1: Добре. 1081 00:44:31,890 --> 00:44:32,720 Тя все още е шест. 1082 00:44:32,720 --> 00:44:33,220 Нали така? 1083 00:44:33,220 --> 00:44:35,260 Име Zarla не разполага променило, дори ако аз търся 1084 00:44:35,260 --> 00:44:38,240 само на част от буквите в името си. 1085 00:44:38,240 --> 00:44:41,349 И така на факта, че аз съм ефективно питам този въпрос, какво е 1086 00:44:41,349 --> 00:44:44,640 дължината на Zamyla, каква е дължината на Zamyla, каква е дължината на Zamyla, 1087 00:44:44,640 --> 00:44:47,990 шест отделни пъти, или седем дори, е просто глупаво, 1088 00:44:47,990 --> 00:44:50,390 защото това е непроменлив този отговор. 1089 00:44:50,390 --> 00:44:53,550 И така, какво мога всъщност направите е this-- в низ една 1090 00:44:53,550 --> 00:44:55,680 Имам незначително по-добра версия тук. 1091 00:44:55,680 --> 00:45:00,110 There-- whoops-- низ два имам незначително по-добър вариант, където 1092 00:45:00,110 --> 00:45:05,010 Правя this-- вместо просто инициализиране аз до 0, аз също със запетая 1093 00:45:05,010 --> 00:45:07,990 Декларирам, втора променлива, наречена , N- аз не трябва да се каже инт отново. 1094 00:45:07,990 --> 00:45:09,220 Не би трябвало, в действителност. 1095 00:45:09,220 --> 00:45:10,380 Но аз казвам п. 1096 00:45:10,380 --> 00:45:13,610 И тогава аз инициализира п да на strlen на N, така че сега 1097 00:45:13,610 --> 00:45:17,110 колко пъти се strlen се изпълнява в общия? 1098 00:45:17,110 --> 00:45:17,610 Само веднъж. 1099 00:45:17,610 --> 00:45:20,257 И така, това е, което имаме предвид рано за по-добър дизайн. 1100 00:45:20,257 --> 00:45:23,090 Всъщност, след като Ви код е правилен, връщане назад и мисли чрез, 1101 00:45:23,090 --> 00:45:26,820 Аз съм с помощта на най-малко памет или като няколко секунди 1102 00:45:26,820 --> 00:45:30,409 или милисекунди на компютърно време като възможно да се приложи някакъв проблем? 1103 00:45:30,409 --> 00:45:32,200 И аз отивам да превъртите и само да спомена, 1104 00:45:32,200 --> 00:45:34,283 че има това споменаване на нула в тази версия, 1105 00:45:34,283 --> 00:45:36,390 но ние ще се върнем към това, преди дълго. 1106 00:45:36,390 --> 00:45:41,010 Тъй като за сега, нека да разгледаме в случаите, когато това няма да ни доведе. 1107 00:45:41,010 --> 00:45:44,110 Така един, се оказва, че сега, че ние сме в състояние 1108 00:45:44,110 --> 00:45:46,860 да разгледаме отделните герои, можем да използваме нещо 1109 00:45:46,860 --> 00:45:50,807 от седмица 0, че е много тайнствена и нещо безинтересно към момента. 1110 00:45:50,807 --> 00:45:53,390 Но сега, и особено когато сме стигнем до криптография в една седмица, 1111 00:45:53,390 --> 00:45:54,820 това ще бъде доста мощен. 1112 00:45:54,820 --> 00:45:57,450 Оказва се, че с някои цели числа и плувки данни имоти-- 1113 00:45:57,450 --> 00:46:00,300 и символи и низове и друга things-- някои от тях 1114 00:46:00,300 --> 00:46:02,800 може много лесно да се преобразува в друга. 1115 00:46:02,800 --> 00:46:05,840 >> Така например, когато говорихме около ASCII известно време ago-- ето 1116 00:46:05,840 --> 00:46:07,796 на главни букви A чрез M, точка, точка, 1117 00:46:07,796 --> 00:46:12,530 dot-- казахме, че има картографиране между тези букви и цифри. 1118 00:46:12,530 --> 00:46:14,970 И в действителност, това е вярно за малки букви, както и. 1119 00:46:14,970 --> 00:46:17,470 Малки букви а е 97, а на капитала е 65. 1120 00:46:17,470 --> 00:46:20,860 И има няколко в ASCII, който е само това картографиране 1121 00:46:20,860 --> 00:46:23,240 система за всички тези други букви. 1122 00:46:23,240 --> 00:46:25,030 И така, какво означава това? 1123 00:46:25,030 --> 00:46:28,390 Е, аз отивам да се продължи напред и отворен до реално бързо нещо, наречено 1124 00:46:28,390 --> 00:46:31,240 ASCII 0, повечето от които е коментари. 1125 00:46:31,240 --> 00:46:33,860 И отново на линия винаги можете да поглед чрез коментарите. 1126 00:46:33,860 --> 00:46:36,180 >> И да погледнем какво това ще направя. 1127 00:46:36,180 --> 00:46:38,410 Така че тя има основна функция. 1128 00:46:38,410 --> 00:46:41,490 Аз съм твърдо кодирани цифрите само за сега, защото знам какво правя. 1129 00:46:41,490 --> 00:46:42,950 Знам, че това, което искам да видя тук. 1130 00:46:42,950 --> 00:46:45,220 И аз съм инициализира с 65. 1131 00:46:45,220 --> 00:46:48,490 И аз брои през 26 писма общо. 1132 00:46:48,490 --> 00:46:52,990 И това, което съм аз ще отпечата един ред наведнъж 1133 00:46:52,990 --> 00:46:54,930 ако можете да тълкуваме Това подчерта линия? 1134 00:46:54,930 --> 00:46:55,970 Какво получава отпечатан? 1135 00:46:55,970 --> 00:46:56,797 Да. 1136 00:46:56,797 --> 00:46:57,264 >> АУДИТОРИЯ: Смятате ли за отпечатване на писмото, което 1137 00:46:57,264 --> 00:46:59,805 съответства на картата на писмо стойност и стойност на цяло число? 1138 00:46:59,805 --> 00:47:01,199 1139 00:47:01,199 --> 00:47:01,990 SPEAKER 1: Точно така. 1140 00:47:01,990 --> 00:47:04,740 Отивам да отпечатате писмото съответстваща на цяло число, 1141 00:47:04,740 --> 00:47:06,131 и обратно, както следва. 1142 00:47:06,131 --> 00:47:08,880 Ами това, някой каза по-рано, е просто контейнер за Чар. 1143 00:47:08,880 --> 00:47:09,490 Все още е. 1144 00:47:09,490 --> 00:47:12,280 Това, разбира се, е контейнер за да не int-- нов ред. 1145 00:47:12,280 --> 00:47:18,140 И сега забележите, моята първа стойност, която Аз съм включите за този контейнер 1146 00:47:18,140 --> 00:47:22,320 е не само I. Казвам, в скоби, Чар I, 1147 00:47:22,320 --> 00:47:26,700 които в скобите е Чар казва на компилатора, лечение I 1148 00:47:26,700 --> 00:47:28,490 не като това, което е, което е брой. 1149 00:47:28,490 --> 00:47:30,490 Отнасяйте се като действителен характер. 1150 00:47:30,490 --> 00:47:34,490 Като има предвид, втората стойност съм включване in-- I-- трябва да бъде само един номер. 1151 00:47:34,490 --> 00:47:38,140 >> Така че, ако се съберат тази program-- така че това е направи ASCII 0, 1152 00:47:38,140 --> 00:47:41,720 дот наклонена черта ASCII 0-- аз просто се този удобен малък диаграма, която 1153 00:47:41,720 --> 00:47:44,950 ми показва всички възможни съответствия без да се налага да го мисля 1154 00:47:44,950 --> 00:47:46,450 през или го разбера на моята собствена. 1155 00:47:46,450 --> 00:47:48,783 И аз също съм отпечатване, забележите малки букви, 1156 00:47:48,783 --> 00:47:51,410 защото няколко реда по-късно, аз също отпечатате този картографиране 1157 00:47:51,410 --> 00:47:53,737 както и, което е само за да се каже, че след като разберете 1158 00:47:53,737 --> 00:47:55,570 какво става отдолу качулката, нали 1159 00:47:55,570 --> 00:47:57,111 автоматично конвертира назад и напред. 1160 00:47:57,111 --> 00:48:00,160 И всъщност, ако някой от вас някога съм правил това в началното училище 1161 00:48:00,160 --> 00:48:03,490 или чували за някой, митовете като бележка 1162 00:48:03,490 --> 00:48:05,620 и преминаването й да си или приятелката си в клас, 1163 00:48:05,620 --> 00:48:08,300 но вие бъркани на букви от A като става B, 1164 00:48:08,300 --> 00:48:11,240 и B се превръща C, или нещо по-сложно от това, добре, 1165 00:48:11,240 --> 00:48:13,410 как ще отида за прилагане, че като дете? 1166 00:48:13,410 --> 00:48:16,340 Е, вие просто вид знаете А става Б, B става C, 1167 00:48:16,340 --> 00:48:19,700 но математически, какво прави това дете? 1168 00:48:19,700 --> 00:48:22,050 Какво се добавят към всяко писмо? 1169 00:48:22,050 --> 00:48:23,340 Ефективно, 1. 1170 00:48:23,340 --> 00:48:27,740 >> Така че, когато промените А до точка Б, това е нещо като смяна на 65-66, 1171 00:48:27,740 --> 00:48:29,590 които математически означава просто добавете 1. 1172 00:48:29,590 --> 00:48:33,300 И така, ако ви се налага да приложи това малко измамна техника 1173 00:48:33,300 --> 00:48:36,380 за вашия учител в кода, вие може да направи точно това просто 1174 00:48:36,380 --> 00:48:38,552 чрез добавяне на една буква заедно. 1175 00:48:38,552 --> 00:48:40,260 Така че не след дълго, ние сме Ще видим как можем 1176 00:48:40,260 --> 00:48:43,300 могат да се възползват от това, за да всъщност действително разбъркване и подреждане 1177 00:48:43,300 --> 00:48:43,991 информация. 1178 00:48:43,991 --> 00:48:47,240 В същото време, знаете, че ние започнахме да се въведе няколко други библиотеки 1179 00:48:47,240 --> 00:48:48,990 here-- низа една днес. 1180 00:48:48,990 --> 00:48:51,180 И един много полезен сайт да се надяваме, че ще намерим 1181 00:48:51,180 --> 00:48:55,010 се нарича reference.cs50.net, които преподавателския състав са взети заедно, 1182 00:48:55,010 --> 00:48:57,510 така че, ако искате да гледам как strlen произведения, 1183 00:48:57,510 --> 00:48:59,300 можете да започнете да пишете Име на функцията му, 1184 00:48:59,300 --> 00:49:02,890 кликнете strlen там, и след това по-малко удобно обяснение 1185 00:49:02,890 --> 00:49:03,700 ще се появи. 1186 00:49:03,700 --> 00:49:06,880 Или ако искате длъжностното Linux базирани обяснение, 1187 00:49:06,880 --> 00:49:08,945 можете да щракнете по-удобно горе в дясно, и то 1188 00:49:08,945 --> 00:49:12,070 ще представи една и съща информация, но в по-сложни термини. 1189 00:49:12,070 --> 00:49:15,070 Това е полезен ресурс за всъщност знам какво всичко прави. 1190 00:49:15,070 --> 00:49:17,320 >> Следващия път, ние ще да разгледаме Ovaltine 1191 00:49:17,320 --> 00:49:20,070 и повече, и се представим в света на криптографията. 1192 00:49:20,070 --> 00:49:21,930 Преди това, ще видим можете по-късно тази седмица. 1193 00:49:21,930 --> 00:49:23,390 И сега, Колтън Огдън. 1194 00:49:23,390 --> 00:49:26,730 Ще се видим в сряда. 1195 00:49:26,730 --> 00:49:30,216 >> [За възпроизвеждане на музика] 1196 00:49:30,216 --> 00:49:33,702 >> [За възпроизвеждане на музика] 1197 00:49:33,702 --> 00:49:38,682 1198 00:49:38,682 --> 00:49:42,200 >> SPEAKER 1: Какво, по [Пуикането] правиш? 1199 00:49:42,200 --> 00:49:45,720 >> SPEAKER 1: Аз съм яденето ми десерт? 1200 00:49:45,720 --> 00:49:47,160 Как да го ядеш? 1201 00:49:47,160 --> 00:49:47,860 С ръцете си? 1202 00:49:47,860 --> 00:49:54,050 1203 00:49:54,050 --> 00:49:57,940 >> [За възпроизвеждане на музика] 1204 00:49:57,940 --> 00:50:03,453