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