1 00:00:00,000 --> 00:00:02,270 [Powered by Google Translate] [Недела 2, продолжение] 2 00:00:02,270 --> 00:00:04,220 [Дејвид Џ Malan, Универзитетот Харвард] 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 Има овој URL тука ако сакате да RSVP. 8 00:00:21,360 --> 00:00:26,740 Просторот е ограничен, па молам прости ако форма е исполнета од страна на време да го пополните ова. 9 00:00:26,740 --> 00:00:29,300 Друга рачно, сепак, тоа може да биде од интерес е ова. 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 дека ние ќе биде со користење дека ќе создаде основа на графичката околина како оваа. 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 која е уметност на енкрипција или scrambling информации, 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 и scrambling информации, така што работи како лозинки се сите посигурни. 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 И сега еден збор на Поминете / не. 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 да сигурно се разгледа само промена на Поминете / не. 105 00:06:01,260 --> 00:06:04,570 Повторно, не е навистина оваа култура тука на Харвард за преземање на работите Поминете / не 106 00:06:04,570 --> 00:06:08,670 бидејќи сите навистина сака да се постигне или overachieve, 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 И во повеќе конкретни смисла, она што мислам дека Поминете / не генерално не, 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 Поминете / не навистина се на работ надвор од класа вака, 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, што значи untether тоа од 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 ова ќе ви даде административни или root привилегии на вашиот 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 Овој детал тука on-line 18, зошто Изјавувам n над целата оваа looping изградба 176 00:10:21,340 --> 00:10:26,870 за разлика веднаш до линијата 22, каде што всушност се грижи да се добие n? Да. 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 [Студент] Каде можете да пристапите таа променлива. >> Перфект. 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 on-line 22, таа линија ќе работат. 185 00:11:03,070 --> 00:11:10,840 Јас ќе добие int, и јас би го стави во таа променлива n во линија 22, 186 00:11:10,840 --> 00:11:17,060 но кој линија од код сега ќе немаат поим што зборувам? >> [Студент] 25. 187 00:11:17,060 --> 00:11:23,840 [Malan] 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 но во самата датотека, надвор од сите функции што сум напишал, како што го направив тука on-line 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, хит Enter. 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 Ова bool во зелена боја. Тоа е истакнат во зелена, овој клучен збор познат како bool, кој е тип на податок. 210 00:12:47,090 --> 00:12:50,510 Тоа не доаѓа вграден со сите верзии на В 211 00:12:50,510 --> 00:12:52,650 Вие треба да вклучите специфични библиотека. 212 00:12:52,650 --> 00:12:56,460 Во нашиот случај, јас вклучени CS50 библиотека, така што ќе имаат пристап до bool. 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 бидејќи Булова вредност благодарен е иницијализиран на false, во согласност 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, тогаш јас едноставно променете ја вредноста на благодарен на true. 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 бидејќи јас не сум сеќавајќи се што n е. 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 отворен paren, во близина paren. 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 сфаќа ooh, ние сме направиле бидејќи јас сум сега благодарен, 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. >> [Malan] Да, 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 Точно станува лажни, лажни станува вистина. 253 00:15:25,810 --> 00:15:30,420 Значи ова, јас би им предложил е дури и малку повеќе интуитивна начин на пишување на кодот 254 00:15:30,420 --> 00:15:33,430 бидејќи јас се уште се иницијализира благодарен на false, јас се уште го направите следново, 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 Зборувавме за Booleans назад кога игравме со нула, 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 * a во овој случај. 271 00:16:30,240 --> 00:16:34,750 Но, она што е важно за тоа е дека јас сум земајќи влез во форма на 272 00:16:34,750 --> 00:16:39,180 и јас сум се враќаат излез во форма на * a * 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 Спротивно на тоа, printf само направи нешто. 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 Printf само направи нешто. Тоа беше пропратен ефект на печатење на екранот. 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 Ken ќе биде во функција на сорти тука. 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 Јас сум главен, јас сум само напишан printf, цитат-unquote нешто на екранот, 302 00:18:26,260 --> 00:18:29,110 Јас сум водење на оваа програма, и штом printf добива нарекува, 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 Повторно, printf всушност не се врати на број, но ние ќе го игнорираат тоа, за сега 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 бидејќи таа линија на кодот, printf, е направено извршување. 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 Овој пат тука ајде прво го исчистите екранот, и овој пат ние ќе го стори местење Рубикова коцка функција, 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 Сега имам една линија од код кој вели x добива коцка на x. 321 00:19:41,370 --> 00:19:46,370 На линија код, се потсетиме, изгледа вака: x = коцка (x); 322 00:19:46,370 --> 00:19:50,930 Па, како е ова се случува на работа? Ајде да одиме напред и да ви даде бел екран повторно. 323 00:19:50,930 --> 00:19:54,070 Одам да се запишам сега вредноста на x, 324 00:19:54,070 --> 00:20:01,400 што во овој момент во времето случува да биде, да речеме, 2 до Нека биде едноставно. 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 Во ред. И сега тој има да ми се вратат нешто. Совршена. Убаво 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 Јас сум малку збунет, бидејќи каде можам да всушност пишува вредноста на x, 333 00:20:38,210 --> 00:20:43,150 затоа што сум само направено е физички страна Кен парче хартија што го има вредност 2, 334 00:20:43,150 --> 00:20:46,590 кој беше x, и навистина, тоа е токму она што се случи. 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 Дозволете ми да оди напред и да ни донесе назад во местење Рубикова коцка пример тука. 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 Тука имаме главна функција што x и y произволно иницијализиран на 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 т.н. swap што се 2 аргументи. 363 00:22:44,170 --> 00:22:48,300 Тоа е целосно legit за функции да се земе 2 аргументи. Видовме printf го направи тоа веќе. 364 00:22:48,300 --> 00:22:51,830 >> Значи swap очигледно зема x и y, и како што сугерира името, 365 00:22:51,830 --> 00:22:54,670 Се надевам дека тоа нема да се разменуваат овие 2 вредности. 366 00:22:54,670 --> 00:23:00,090 Па тогаш тврдам on-line 25 "заменети!" и јас сепаратите x и y 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 бидејќи кога ќе притиснете ентер, забележите дека x е 1, y е 2, 371 00:23:15,770 --> 00:23:19,420 а сепак на крајот на програмата, тие се уште се, всушност, иста. 372 00:23:19,420 --> 00:23:22,960 Па врз основа на демонстрација токму сега со Ken, она што всушност се случува? 373 00:23:22,960 --> 00:23:28,710 Ајде да се нурне во оваа swap функција. Тоа е супер кратко. Тоа е само неколку линии на код долго. 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 Со други зборови, swap очигледно зема 2 аргументи, на int, 379 00:23:47,170 --> 00:23:49,370 и тоа е произволно наречен a и b, 380 00:23:49,370 --> 00:23:54,420 и до тука сум донесен во x и y, кои се соодветно 1 и 2, 381 00:23:54,420 --> 00:23:58,770 но јас не сум буквално поминува во x, не сум буквално поминува во y, 382 00:23:58,770 --> 00:24:01,450 Јас сум поминува копија на x и копија од y. 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 [Malan] Тоа само треба да биде 1, десно, бидејќи х беше донесен како првиот аргумент, 389 00:24:29,280 --> 00:24:33,080 и оваа функција само произволно повикува својот прв аргумент на. 390 00:24:33,080 --> 00:24:38,200 Слично е Y вториот аргумент, а тоа е само произволно повикувајќи вториот аргумент б. 391 00:24:38,200 --> 00:24:40,990 >> Оваа дихотомија е всушност прилично едноставно се објаснува. Размисли за тоа. 392 00:24:40,990 --> 00:24:43,320 Никој од нас не се сретна со лицето кое го напиша printf, 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 Значи со други зборови, имам напишано моите променливи како x и y, 397 00:25:05,340 --> 00:25:08,890 но ако некој друг го напишал на swap функција, тој или таа сигурно не би знаеле 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 Тоа само ќе биде чиста случајност естетски ако тоа лицето кое го напиша swap 403 00:25:23,650 --> 00:25:26,150 ги користи истите имиња. 404 00:25:26,150 --> 00:25:32,370 Па во овој момент во приказната, линија 37, а е 1, b е 2, и сега продолжи да ги трампа. 405 00:25:32,370 --> 00:25:34,900 Прво на сите, дозволете ми да всушност го направите ова многу едноставно. 406 00:25:34,900 --> 00:25:36,690 Јас не знам што тие 3 линии на код се прави. 407 00:25:36,690 --> 00:25:41,210 Дозволете ми да го направите ова: b = a; a = b; направено. 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 извршува, што е вредноста на a и b? 412 00:25:57,730 --> 00:26:03,410 Истата, 1, бидејќи имате clobbered, така да се каже, сте ги промениле б да се изедначи со. 413 00:26:03,410 --> 00:26:08,890 Значи еднаш линија 37 е погубен, тоа е одлично, сега го имате 2 копии на бројот 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 >> Tmp е многу заедничко име за привремена променлива, и тоа е int 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, вредноста на b е 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 извршува, а се нафрла врз вредноста на b. И б е 2, па сега 2. 427 00:27:00,540 --> 00:27:05,210 Па во овој момент во приказната, е 2, б е 2, и мали е 1, 428 00:27:05,210 --> 00:27:11,060 па сега логично, можеме вредност само одеднаш tmp е во б и ние ќе завршиш. 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 но повторно, ако јас ја извршите оваа програма, x и y остануваат непроменети 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 единственото нешто што сум бил во можност да се врати е една работа, а тоа е ограничување на В 438 00:27:44,170 --> 00:27:49,070 Вие само може да се врати навистина една вредност, во кој случај јас сум вид на заглавени тука 439 00:27:49,070 --> 00:27:53,310 затоа што може да се врати на нова вредност на x или би можел да се врати на нова вредност на y, 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 [Студент] a и b. >> A и b. 444 00:28:04,190 --> 00:28:08,230 Но, a и b се копии на x и y, што значи ние само не сите на ова дело, 445 00:28:08,230 --> 00:28:11,650 ние само потрошени 3 минути зборува за swap функција и сите 3 од овие променливи, 446 00:28:11,650 --> 00:28:15,420 и тоа е одлично, совршено точно во изолација, 447 00:28:15,420 --> 00:28:20,740 но и обемот на b само што е во овие линии. 448 00:28:20,740 --> 00:28:24,790 >> Па само како за телефонска линија, ако пријават целобројна i внатре во за телефонска линија, 449 00:28:24,790 --> 00:28:28,760 Слично на тоа, ако сте прогласување a и b внатрешноста на функција што сте го напишале, 450 00:28:28,760 --> 00:28:33,320 тие се само валиден внатре на таа функција, што значи штом трампа е направено извршување 451 00:28:33,320 --> 00:28:38,470 и одиме од линија 24 до линија 25, x и 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 и јас навистина не сакате да се разменуваат и x и y во исто време, 456 00:28:53,470 --> 00:28:55,210 па ние ќе мора да се врати на оваа. 457 00:28:55,210 --> 00:29:01,020 Но, за сега, да сфатат дека ова прашање во основа произлегува од фактот што a и b се копии 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 Оваа програма се нарекува зголемување, и тоа очигледно иницијализира цел број x до 1 во линија 18. 464 00:29:24,190 --> 00:29:28,150 Јас тогаш тврдат дека x е 1, јас тогаш тврдат дека "зголемување, ..." 465 00:29:28,150 --> 00:29:33,730 Јас тогаш се јавите прираст, но потоа во линии 22 и 23, тврдам тоа е се зголемува, 466 00:29:33,730 --> 00:29:40,220 Тврдам x е сега што и да е - 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 Значи x е прогласена, очигледно, on-line 18. 470 00:29:52,490 --> 00:29:54,700 Што е внатре кадрави загради main е. 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 >> Забележете дека тоа е малку cryptically напишано. 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 повторно сфатат дека bottommost еден само може да биде симптоматично на врвниот еден. 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 Па, како би можеле да го надминете овој, ако мојата цел е да прираст x? >> [Студент] Направете x глобален. 491 00:31:15,150 --> 00:31:17,060 Океј, па можеме да направиме x глобален. 492 00:31:17,060 --> 00:31:20,480 Да го земеме на кратенката што предупреди за порано, но подлец, ние само треба брз лек, 493 00:31:20,480 --> 00:31:25,730 па да речеме int x се тука. Тоа го прави x глобален. 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 многу брзо се програми се horrifically тешко да се управуваат. 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 [Студент] помине во х а потоа се врати [недоловим] >> Океј, добро. 514 00:32:38,480 --> 00:32:41,900 Па зошто да не можам да помине во х а потоа наместо да се врати, 515 00:32:41,900 --> 00:32:44,870 зошто не јас само се враќа x + 1. 516 00:32:44,870 --> 00:32:47,710 А уште неколку работи треба да се променат тука. Јас сум на вистинскиот пат. 517 00:32:47,710 --> 00:32:49,770 Што друго ми е потребно да tweak? Некој друг. Да. 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 Празнина не значи ништо се враќа, но јасно сега тоа е, 521 00:32:57,780 --> 00:32:59,830 па тоа треба да се смени во - >> [студент] int. 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 [Нечујни студент одговор] >> [Malan] Значи ми треба за зголемување х? 525 00:33:08,400 --> 00:33:12,080 [Нечујни студент одговор] >> [Malan] Ах, па затоа треба да помине х. 526 00:33:12,080 --> 00:33:16,660 Па јас треба да направите тука. >> [Нечујни студент коментар] 527 00:33:16,660 --> 00:33:20,050 [Malan] Значи прототип, морам да го промените ова до овде. 528 00:33:20,050 --> 00:33:22,930 Значи ова треба да стане int, ова мора да стане - 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 Тоа може да биде х, но искрено, ако почне повикувајќи на сите ваши променливи x, 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 Па тогаш мора да се врати без разлика на бројот е плус 1, 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 [Malan] морам да го доделите до x. Јас не само да се јавите прираст (x). 540 00:33:57,610 --> 00:34:01,960 Ми треба да се потсетиме на одговор со промена на вредноста на x на левата страна. 541 00:34:01,960 --> 00:34:04,680 И иако x е сега на лево и десно, и тоа е сосема во ред 542 00:34:04,680 --> 00:34:08,860 бидејќи десната страна добива извршува првиот потоа добива plopped во левата рака работа - 543 00:34:08,860 --> 00:34:10,600 x во овој случај. 544 00:34:10,600 --> 00:34:12,159 А потоа на крај, тоа е лесен фикс сега. 545 00:34:12,159 --> 00:34:17,230 Ова само треба да одговара она што е долу, int број. 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 Па морам да пријават тоа, int. 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, x е зголемено правилно. 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 Како е тоа што јас само може да го промени на X да ја бројот и на програмата ќе знаеш веднаш? 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 Ако има повеќе намени на променливата Ха момент пред, 578 00:36:29,180 --> 00:36:32,150 вас, програмер, ќе треба да ги промените насекаде. 579 00:36:32,150 --> 00:36:36,600 Или вие буквално може да направи датотека, Menu, а потоа Најди, замени - нешто слично - 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 [Malan] Да. Цел е важно кога ќе се јавите на функција. 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 бита, нели? Значи 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 Вили пример, тоа не е магнетни честички обично повеќе. 602 00:38:00,590 --> 00:38:04,450 Повеќе - во лап-топ компјутери во најмала рака - тоа е солидна држава дискови, SSDs, 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 Тоа се 0-ти и 1S дека се составени. 612 00:38:36,740 --> 00:38:39,020 Значи, кога ние погледна под хаубата во она што a.out е, 613 00:38:39,020 --> 00:38:41,980 сите овие 0-ти и 1S, кога ќе ја стартувате програмата, 614 00:38:41,980 --> 00:38:46,290 оние 0-ти и 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 Оние 2 делови од меморија се однесува на глобални променливи, кои не често ги користат 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 но потоа 2 важни работи што ќе се врати во текот на семестарот, 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 повторно, оние 0-ти и 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 меморија, 0-ти и 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 и има ints и стрингови и знаци и слично. 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 бита за int или треба 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 и дозволете ми да оди напред сега и не printf. 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 И нека не printf тука. Да се ​​практикуваат она што го проповеда. 677 00:42:52,720 --> 00:43:00,190 Ајде да се метода, празнина хор, и ние ќе каже int i, 678 00:43:00,190 --> 00:43:06,830 а потоа јас ќе одам да се каже printf - Не, ајде да се направи овој поинтересна. 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 i); 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 Употреба на непријавена идентификатор i. 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 Дозволете ми да кажам printf ("Јас сум тука") - без променливи. Ќе го оставиме тоа на тој начин. 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 кој е 0-ти и 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 Кога ќе се јавам прираст и јас помине во х, сликовито, што се случува овде е тоа. 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 и сега недела 2? 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 можеме да iterate од лево кон десно во текот на карактери во стринг 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 и кога ќе се вратиме, ние ќе започнеме овој процес на scrambling информации. 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 Дозволете ми да се поедностави оваа вратам на она што беше пред некои од нашите порано П & А 780 00:49:27,890 --> 00:49:35,570 Фактот дека прираст има отворени заграда, int број, затворена заграда - 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 Сега, int на левата страна претставува она што, од друга страна? 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 и така int е враќање тип на оваа функција. 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 Контекст тука сега е тоа што меморијата на вашиот компјутер е Gigabyte, 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 бидејќи тоа само претставува 0-ти и 1S дека ѕвекот ја outputted. 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 и тоа е plopped на врвот на 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 x, со никаква вредност, тој завршува малку пониска во 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. 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 и ние сме научени да се претпостави дека овие e-commerce трансакции се безбедни. 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 и уште не знам никого во Амазон и јас сум сигурно не е договорено било каков вид на тајна 885 00:55:48,620 --> 00:55:52,710 со некој на Амазон, како е мојот компјутер или мојот прелистувач го прави ова? 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 како 1 или некои мапирање помеѓу А и Б е. 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 На надворешната периферија на оваа работа, има писма A до Z, 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 Од филм наречен Приказна Божиќ, ќе видите дека малку Ralphie 907 00:56:53,020 --> 00:56:58,000 беше толку желни да дознаам што тајната порака Малку сирачиња Ени беше да го 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 Имавме ints, имавме карактери, имавме плови и двојки и неколку други, 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 дека има 2 квизови, 932 00:58:19,780 --> 00:58:23,450 можете многу лесно може да ја напишам оваа програма врз основа дури и на некои од материјал минатата недела 933 00:58:23,450 --> 00:58:28,830 со користење GetInt и неколку варијабли: int quiz1, int 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 со додавање на нив заедно, што ги дели со 2, а потоа печатење на резултатите. 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, int quiz2, int quiz3, int 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 и специјални клучни зборови кои ги користите во Ц # define. 954 00:59:34,270 --> 00:59:39,970 Па велиме # define, тогаш простор, тогаш зборот кој сакате да го користите за името постојано е 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 тоа значи, "Еј компјутер, дај ми 2 лебди и нека колективно ги нарекуваме оценки." 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 во таков начин што ние може да напише 1 линија код наместо, да речеме, 16 за 16-недела семестар. 978 01:01:04,560 --> 01:01:09,060 Не сакав да хард-код 2, бидејќи ако мислите дека за тоа сега логично, 979 01:01:09,060 --> 01:01:12,560 Претпоставувам дека следната година CS50 промени до 3 квизови наместо 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 Ова е само printf, па printf ("Квиз #% d од% d") 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 Во овој случај, јас сум јас користење, бидејќи тоа за телефонска линија започна со i изедначување што вредност, очигледно? 1002 01:02:35,170 --> 01:02:36,670 [Студент] 0. >> [Malan] 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 меморија дури и ако сте само бараат 2 плови. 1018 01:03:32,670 --> 01:03:36,840 Значи, идејата зад низи е дека компјутерот само зема парче меморија 1019 01:03:36,840 --> 01:03:41,340 а потоа apportions помали парчиња да се врати назад да се врати да се врати. 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 Ако јас дојдете тука, ова е местото каде што јас тогаш iterate во текот на низата. 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 Значи прво квиз плус вториот квиз поделено со 2, а потоа отпечатите како int. 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 Јас сум, всушност процесирањето од I до - и ова е нов трик - 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 i + + само значи зголемување јас во секоја итерација. 1042 01:05:00,660 --> 01:05:02,990 И сега забележите ова, што е навистина интересно. 1043 01:05:02,990 --> 01:05:09,180 Во линија 24, велам, "Компјутер, дај ми карактер, 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 Тоа е на чекање за влез, па ќе одам да напишеш во Давид, Enter, 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 Но, ако јас се отвори сега string2, забележите една разлика тука. 1070 01:06:45,630 --> 01:06:48,210 Забележите една разлика тука со string2. 1071 01:06:48,210 --> 01:06:51,340 Со string2, ова за телефонска линија е малку поинаква. 1072 01:06:51,340 --> 01:06:55,010 >> Дозволете ми да го избришете NULLS, така што можеме да зборуваме за оние некое друго време. 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 [Malan] Значи ние не се јавите на функција секој пат. Точно. 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 [Malan] Ти си повикувајќи 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-а-в-з-г. 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 и декриптирање на тајни пораки многу сличен на оној Ralphie има дешифрира. 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 Но, ако јас се каже збогум класа, напомена дека оваа програма очигледно iterates 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 main (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]