[Музички] ЗВУЧНИЦИ 1: Ова е CS50 и ова е почеток на две недела. Значи, ајде да се нурне во право во нешто тоа е кабриолет, така да се каже. Значи, овде е CS50 IDE и јас сум зафрла однапред оваа screen-- проклето тоа. Тревога. Во ред. Сум го зафрла овој екран тука, која има еден многу едноставна програма. Ако ние се движите надолу, повеќето ова е само коментари, но тука во линии 13 преку 17 имаме програма. Тоа е синтаксички валидна, што значи дека ако Ми се собере, тоа ќе ги собере и да ја стартувате, но тоа е кабриолет. Оваа програма се тврди во коментари до врвот дека тоа треба да се печати 10 ѕвезди, но тоа не го прави. И врз основа на вашето искуство, или наскоро ќе биде искуство со Ц, може да ви логично спознае зошто ова е, всушност, кабриолет? Да? ПУБЛИКАТА: Тоа оди од нула до 10. Тоа е 11 повторувања. ЗВУЧНИЦИ 1: Да. Значи, тоа се случува од нула до преку и еднакви на 10, што секако е 11 повторувања. Значи, тоа се случува да печатење, навистина, 11 ѕвезди. Значи, на конвенцијата на компјутерски науки во повеќето програмски јазици е, всушност, само за да почне пребројување на нула, но смета до но не преку вредноста што всушност се грижи за. Сега, ова е едно нешто што Потребно е малку се користи за добивање па дури и гребење, со цел како што е за не програмери или не компјутер научниците и за деца во голема мера, е со цел да се има ќе почнете пребројување обично на еден. И тоа е во ред. Апсолутно можете да почнат да бројат во една, ако тоа е поудобно. И бројат до и до 10, но ќе сфатите особено оваа недела и повеќе од тоа само така се многу нешта во програмирање Претпоставуваме дека 0 е прв цифрениот со која може да смета, дека си оди за да биде полесно само за да се влезе во оваа навика на почетна од нула и броење до вредноста вие се грижите за право сега од се оди. Значи, тоа е фиксна тоа. Ние го променивме помала или изнесува само помалку од. Ајде да ги разгледаме во втор пример тука. Така, оваа програма исто така тврди дека во неговата коментари до врвот дека тоа треба да се печати десет ѕвезди, но тоа не се случи. Што е бубачка тука? Значи, what-- и жал, ајде да бидеме јасни. 10 ѕвезди. Еден на линија, но тоа не го прави. Така, всушност, дозволете ми да оди напред и да ги собере овој еден, бидејќи тоа е нешто помалку јасно врз основа на тој опис. Дозволете ми да одиме во нашиот извор директориум. Направи кабриолет една точка коса црта, кабриолет еден. Добро, гледам 11 ѕвезди, кои се уште е проблематична, но тие се исто така сите во една линија. Што е, станува збор? Је. ПУБЛИКАТА: [Беззвучен]. ЗВУЧНИЦИ 1: Да. Значи ова е суптилност кои може да потсетиме ме прави кратко споменување на. И покрај тоа што изгледа убава, а тоа е убаво вовлечен, и тој вид на изгледа како гребење со тоа што линијата 16 и 17 се, навистина, вовлечен под тоа за телефонска линија. Тоа е важно. Компјутерот не знаат или се види белиот простор. Бел простор е само за нас луѓето, стилски. Компјутерот не знае кога ќе имаат големи загради, што би, навистина, го надминете овој проблем. Значи, ако ние всушност отиде во и експлицитно се стави во овие големи загради што ќе го надминете овој проблем од страна на ставајќи јасно до знаење на компајлерот дека јас всушност сакаат да се изврши две линии на код, повторно, и повторно, и повторно. Но она што е основно образложение? Нели? Ние не треба строго големи загради цело време, иако тоа е веројатно најдобро пракса за да се влезе во таа навика секој случај и покрај тоа што таа го додава на две знаци во вашиот код. зошто? ПУБЛИКАТА: [Беззвучен]? ЗВУЧНИЦИ 1: Да, така што е друго решение заедно. Нели? Особено ако на прв поглед не се направи навистина го цениме она што се случува. Па, сигурно би можеле само да се направи две работи одеднаш и само да се избегне проблемот целосно. И тоа е во ред, но сега, за денешните потреби, што е објаснувањето за грешка? Зошто сите тие ѕвезди на една линија? Да? ПУБЛИКАТА: Се чини дека ако имате една линија код, можете да го направите без оние. ЗВУЧНИЦИ 1: Токму така. Ова е само човечка конгресот. Луѓето да сфатат дека тоа е малку досадни или мачна мора да се стави на големи загради сите дел од времето ако само сакате да се направи се изврши една линија код. Значи, луѓето одлучија некои одамна дека тоа е во ред. Ако сакате да се стави сите на вашиот циклус за само дека една линија, како таков, тоа е во ред со синглот запирката на крајот. Но можете да направите само една таква линија без големите загради. Значи, кога CS50 стил водич како што ќе ви укаже, ќе видите дека, генерално, тоа е добра навика да влезат во оваа додека не сте сосема удобно скршнуваат од овие видови на конвенциите и прави што сакаш. Толку долго како што себе си доследни. И ние ќе разговараме повеќе за стил А малку подоцна денес. Па, дозволете ми да се отвори една друга програма. Се разбира, ние треба да поправите тоа 10, како и. Дозволете ми да оди напред и да пишува вистински брзо програма дека јас ќе се јавам, да речеме, јамка точка C. Значи, јамка dot Ц. И во јамка точка Ц, ќе одам да имаат, вклучуваат стандардни I / O точка H int главната неважечки. И сега ајде да се направи, навистина, еден циклус. Значи, 4 int i добива нула. Јас е помала од, да речеме, 50. Јас плус, плус. А потоа и во Еве ајде оди напред и да се печатат Ф. А потоа сакам да се печати јас и се додава нова алинеја, точка-запирка. И ова треба да се печати сите броеви од нула до 50? Неколку главата движења. Неколку бр. Она што е веќе на грешка? Што е лесно грешка сум направил? Је. ПУБЛИКАТА: [Беззвучен]. ЗВУЧНИЦИ 1: Да. Па дури и покрај тоа што изгледа како што тоа е она што јас имам намера, потсетиме дека јас, исто така, само е ASCII карактер. Значи, ако кажам печати "јас" Тоа е буквално оди И. печати Значи, ако јас сакате да го приклучиш во случаеви вредност јас всушност треба да го направите ова а потоа приклучете го вредноста на Јас динамично. Инаку јас сум само ќе добијат 50 е на екранот. Па, дозволете ми да оди напред и да направи овој циклус, да го стартуваш, и, навистина, сите ние имаме пат до преку 49. И ако јас дојдете назад во времето гледам бројот нула на почетокот. Па, што ако јас вид на заебеш? Што ако го направам тоа? Само затоа што јас не сум размислување. Што не е во оваа програма. Откако повторно се собираат и да се кандидира, случува да се направи логично? ПУБЛИКАТА: Ништо. ЗВУЧНИЦИ 1: Ништо. Зошто е тоа? ПУБЛИКАТА: Се е наменета за нула. Значи, состојбата е лажна. ЗВУЧНИЦИ 1: Да, точно. Сите код е точен, синтаксички. Ова ќе ги собере, овој Кодот ќе се кандидира, но тоа не е случува да се направи нешто корисно затоа што јас можам да го иницијализирам на нула. Ние тогаш проверете, што е повеќе од 50? Очигледно, не, тоа не е. Така циклусот никогаш извршува на сите. Што ако правиме нешто малку повеќе несовесно? Значи, она што ако тоа го правиме како int i добива нула. А сега дозволете ми да го користите додека јамка, што беше уште еден услов. И додека јас се каже, а јас е поголема од или еднаква на нула, а потоа и во тука јас оди напред и да ја зачувате датотеката, направи јамка. И јас сум за да ја стартувате. Што сум јас ќе го видите овој време со додека јамка? Је. ПУБЛИКАТА: бесконечна јамка? ЗВУЧНИЦИ 1: бесконечна јамка? Да, и зошто? ПУБЛИКАТА: Затоа што тоа е секогаш нула. ЗВУЧНИЦИ 1: Да. Значи, јас се иницијализира како нула. Се разбира дека секогаш е поголемо од или еднакво на 0, како резултат. Значи, јас сум само ќе види ова бескрајно. И сега, ова дојде откако или двапати да шефовите на курсот. Што се случува кога ќе се имаат бесконечна јамка? ПУБЛИКАТА: Контрола Ц. ЗВУЧНИЦИ 1: Да. Па Контрола С крајот ќе одговори. За жал, ние сме испечати милиони и милиони нули веќе и така на компјутерот има вид на доби пред мене. Значи, тоа се случува да се игнорира мене за малку. Но ако сте само удри Контрола С неколку пати на вашиот Mac или PC тастатура, на крајот треба, навистина, да го прекине. А ако не, ние ќе ви покажеме некои техники пред долго време, каде што всушност може на сила да го убие програми, слично како во Windows и Mac OS, ако е потребно. Но, ајде да се обиде нешто друго. Ајде да всушност прираст I. Е ова сè уште нема да биде бесконечна? Дозволете ми да ја извршите оваа. И сега можете да вид на види што се случува. Ова, исто така, е бесконечна јамка. Но, ова е малку трик прашање. Е ова се случува да се печати и бројот засекогаш? ПУБЛИКАТА: Не ЗВУЧНИЦИ 1: Не Зошто? Слушнав некои бр овде. Someone-- Да. ПУБЛИКАТА: Немате доволно битови за да навистина се насочи. ЗВУЧНИЦИ 1: Во ред. Па јас немам доволно битови да се насочи. Значи, она што ќе се случи? Тоа е само ќе да се запре? ПУБЛИКАТА: Во одреден момент тоа ќе се исклучи the-- ЗВУЧНИЦИ 1: Тоа ќе се исклучи јамка долу, но зошто? Што ќе се случи на самиот крај на своите граници? Да? ПУБЛИКАТА: Тоа ќе циклус назад кон негативните бројки. ЗВУЧНИЦИ 1: Да се ​​негативни броеви, или ако бевме само лекување на позитивен, нула барем. Така да, апсолутно. Потсетиме дека видовме последен пат дека ако прираст вашиот битови еден многу пати, и таму прв план претекување капацитетот на вашиот int или било кој вид на податоци е, ти си ќе заврши околу, веројатно, две негативни броеви. Или ако сте го прилагодите Вашиот опсег треба да биде позитивен само, која може да се направи, но не сум видел дека сеуште, може да заврши најмалку назад на нула. Иако, всушност, да. Во овој случај, негативни броеви, во кој случај јамка се случува да се прекине затоа што не е, всушност, поголема од или еднаква на нула ако е негативен. Значи, за жал, како долго ќе мора да чекаме? Токму сега ние сме до она, 2 милиони-носталгичната? Ние сме како 2 милијарди долари, ние се случува да мора да почека додека, всушност, може да се види овој симптом. Но можеме да го видиме малку побрзо, maybe-- ајде да видиме дали може да се прекине. Ајде. Дури и во менијата се појавуваат бавно. Во ред. Значи, ние ќе се вратам на тоа пред долго. Тоа е добра time-- ѓаволите, кученца. Тоа е добро време за некои најави. Значи, ако ви се допаѓа да се вклучат во YHack, кој е еден настан да се биде спонзорирана од страна на нашите пријатели на Јеил. И, навистина, некои од курсот TFS на Јеил се вклучени со оваа. YHack е меѓународен hack-а-thon хостиран од страна и се одржа на Јеил, ги здружи 1500 истомисленици хакери и сите текстови целиот свет. Ако ова е од интерес, погледнете тука. Ако ова е премногу кратко на екран, да погледнам во денешниот слајдови за URL за yhack.org. Значи, исто така, неколку брзи известувања. Значи, официјално ќе почне секции следната недела и тука и во Њу Хејвен. Имајте на ум ќе се добива еден е-маил подоцна овој викенд најверојатно. Тоа трае долго време за CS50 со делот, со оглед на сите луѓе во класа и секој се движат наоколу. И сите настава соработниците " планови се исто така уште зацврстувањето, но Stay tuned за е-мејл и ако има потреба да, може да се ре-дел има после. Study.cs50.net. Значи, дури и ако сте постојано присутниот во делови, сфаќаат дека речиси сите од средствата се користат во деловите се јавно достапни на CS50 Студираат на овој URL тука. Значи, ако некогаш сакаш да се ре преглед материјал од дел, или за читање напред, или не можете да го направите некои недела, сфатат дека примерокот слајдови, и проблеми, и дефиниции, и повеќе се сите таму, како и. Работното време да продолжи и денес, и утре, и среда, и четврток се провери на курсот Интернет страница за распоред. И, исто така, сега за лансирање денес е CS50 разговараат. Па, ако и кога имате прашања за едни со други или за персоналот на курсот, и обично се работи на некој проблем во собата, сфати дека вие не мора да се мора да се сврти кон човековите следната вас. Ако нема никој таму, можете да допрат до нас и соучениците преку интернет на CS50 разговараат. Значи, ова е дискусија одборот за курсот, и да се сфати дека овој е можеби најдобриот место да се започне, кога имаш прашања, кога надвор од работното време особено. Ручеци ќе започнат оваа недела премногу. Во Оган и мраз [Беззвучен] во Њу Хејвен. Фрлите поглед на курсот веб-страница, со цел да RSVP. Прв дојден, прв служат за тоа. Ако не се добие во оваа недела ние ќе направиме овие повеќето секој петок за време на мандатот. Добро, а сега ни збор за оценување. Особено како што влезе проблем постави еден, кој е надвор од оваа недела, и проблем во собата два и потоа. Како да одиме за оценување на P сетови и оценување на квалитетот на истите? Значи, тоа е четири оски кои се користат во CS50, а тие се овие четири тука. Обемот, која снима на нумерички основа само колку на сетот на P си се справи. Тоа е грубо соодветствува со напор, и тоа е нашиот начин на снимање се обидовте половина од P постави, сите на сетот P. Ова е лесна да се добие совршен оценките ако не, навистина, се обиде на секој аспект на сет P. Значи, да ги задржи дека во умот. Коректност е токму тоа. Дали вашиот код да работи како спецификацијата и како решение примерок штабови " укажуваат на тоа дека вашиот код треба да се, всушност, се работи. Проверете 50, ако не сте го сретнав сепак, е во P поставите една спецификација и, генерално ќе се ви даде да / не одговори за тоа дали вашиот код е точен. Барем колку што ние ќе треба да се оцени тоа врз основа на тестови дека ние се кандидира во рамките на таа програма. Дизајнот е многу повеќе субјективни. Ова е како добро напишани е вашиот код. И ова е нешто што ќе се подобри во текот на времето, и тоа е нешто што ние ќе обезбедат поквалитетни повратни информации. А од страна на дизајнот би можел значи пред долго ќе би можеле да бидат доведени во искушение во некои P во собата да се направи нешто loopingly, но да се има можеби три, или четири, или пет вгнездени јамки израз или вгнездени додека петелки. Кои обично треба да да почне да ве натера да раболепнича и, генерално, ќе биде смета за лош дизајн. И ќе почне да се види во класа и надвор од класа добри начини на вршење на работите, лоши начини на вршење на работите што сите може да биде точна, но не нужно добро дизајниран. Како пишување на есеј. Може да биде во можност да се стави зборови по страница, која се граматички точни, но есеј или Тезата дека тие се во е само целосно неповрзани или неубедливи. И така ова може да биде аналоген на напишано светот на лош или добар дизајн. И стил, исто така, е прилично субјективна. Но барем можеме да очекуваме конзистентност. Ова е како прилично е вашиот код. Се работи убаво вовлечен? Дали вашите променливи добро име / Дали сите на вашиот загради и големите загради усогласени како што треба? Ние имаме водич CS50 стил како множество проблем ќе ви точка во. Оние кои се чувствуваат поудобно се добредојде да скитници од кои толку долго како што се само во согласност. И ова, исто така, е лекција ние ќе се зајакне во делот. Значи, ако сето ова е малку брзо, ги реализира зацртаните P и делови ќе одат во повеќе длабочина пред долго. Но генерално имаме многу малку кофи за CS50. Резултати се генерално, на скала од еден до три, или еден до пет. Ние сме literally-- и не можам да кажам ова е доволно, во првата недела. Три е добро. Значи, иако, да, и тоа три од пет нормално, математички, би можело да биде за 60 проценти или како Д минус. Три е, всушност, се добри. И дека, всушност, ние очекуваме повеќето студенти во класата да започнете на терминот околу twos, а тројца, и четири. Веројатно не толку многу петки. Не премногу оние. Но генерално треба да започне во дека слатката точка на кривата така што како времето напредува, има всушност простор за, и можности за напредување во горниот. Значи, немојте да се изедначуваат три со 60%. Тоа е многу повеќе апстрактни од тоа. Формула со која ние се пресмета оценки се бројат онака како што следува. Коректност е највредни. Дизајнот е во вредност од малку помалку. Стил е во вредност од нешто помалку. И ова општо доловува на износот на време што оди во добивање на секој на овие оски само во право. Стилот е супер лесно, треба да биде супер брз, но тоа е лесен навика да се мрзливи за тоа. Коректност може да потрае можете поголемиот дел од времето. Си поигруваше со одредување на некои бубачки сила преземат тој дополнителен час или повеќе, и така, постигнувајќи во крајна линија ја доловува тоа. И така, сега посериозен збор. Бидејќи CS50 има разлика, за подобро или за полошо, да се биде можеби подобро да се запознаат со прашањата на академската чесност отколку повеќето било друг курс. И навистина, тоа е според моите сознанија дека ние испрати повеќе студенти, за жал, за дисциплинска цели секоја година, како резултат. Така, во интерес на целосно откривање, ајде да зборуваме за кратко во врска со она што се случува во CS50, и она што може да се направи, и она што може да биде свесен. Значи, тука од 2007 година, кога Ми остана на курсот, е бројот на случаи за рекламирање одбор. Реклама одбор е дисциплинска Харвард тело, или сега на честа советник, на кои се наведени случаите кога студентите се направи нешто што на курсот силабусот смета неразумно. Нема вистински модел тука, јас би рекол. Тие се променат во текот на години, но, генерално, ова е бројот на случаи кои се наведени. На бројот на студенти кои се вклучени? Тоа не е премногу варира. Типично, минатата година за На пример, 29 студенти на Харвард биле ад качија, така да се каже. 29 од нив тековните студенти, две од нив, пред студентите, кои соработувале во некои своеволен начин. А потоа и во однос на процент, тоа е обично околу 3% на класата која, за жал, прави вакви одлуки. Така, минатата година беше 3,5% од студентите на телото е CS50 тоа беше за рекламирање качија, така да се каже. Значи, она што го прави сето ова значи? И она што ние всушност го направи? Значи, за целосно откривање, ние апсолутно, како компјутерски научници, имаат софтверски алатки на располагање и тоа е многу лесно за нас, во праведност, дека другите соученици, кои не се премин овие редови да премине споредуваат секоја достава оваа година против секој поднесување во изминатите осум години. Софтвер го прави ова. И на крајот тоа е човечките очи кои одлучуваат дали или не да се однесуваат на некои Тема за понатамошна донесувањето на решението, но софтвер секако помага. И ова, искрено, затоа што мислам дека имаме толку голем број во CS50. Тоа не е затоа CS50 ученици или CS студенти повеќе генерално се помалку чесни од било кој друг на студентите, тоа е само имаме алатки и техники со која треба да се земе овој првиот помине. Но, ние не се внимава на сите овие работи како и, повторно, во интерес на признавање на работа и тоа е се стави во од страна на поголемиот дел од супер класата. И политиката на курсот на академски искреност, иако тоа е еден куп на ставовите долги со еден куп на куршуми кои се надевам дека многу може да се чита, тоа навистина не се сведуваат да бидат разумни. И најдобриот правило на палецот што ние нудиме во рамките на наставната програма е ова, суштината на сите работи кои ви се поднесе до овој курс мора да биде свој. И навистина, во речиси сите од нив случаите наведени за дисциплинска постапка тоа е затоа што на некои студентски доцна една ноќ обично се претвори својот код повеќе целосно на соученик, кој потоа го усвои во целост или значително од него. Но, навистина, тоа е во ред. И навистина, во канцеларијата часа, изводи од хартија сте биле предадени ако дојде од страна на канцеларијата часа минатата недела ги охрабрува колку. Ти си апсолутно добредојдени и охрабрени за да разговараат за проблемот поставува со соучениците. Да си помагаат едни на други, кога сопнување. Но генерално правило треба да биде тоа ", кога ќе се бара помош, може да се покаже вашиот код на другите, но вие не може нивни видите. " Значи, со други зборови, ако јас сум се борат со некои Р сет и јас сум седи таму во мензата, или во библиотека, или во училницата се обидува да најде некои вина, Јас секако може да се покаже мојот код на мојот екран на лицето седи за мене, секако, на вработените, но исто така и на соученик. Но, ако на решение кое мојот соученик нуди е, о, тука само за да ги разгледаме во она што Јас не, кои поминува линијата. И јас би се осмелил да кажам дека е генерално разумна работа за повеќето луѓе да многу лесно да самото место на линија. И така, видете на програмата за повеќе детали. А сега еден од повеќе Контроверзниот аспекти на CS50 програма што мислев дека ќе зборува за во заклучок овде е т.н. клаузула жалење. Значи, тука е сите парична казна печати. Но, во принцип што видовме во текот на изминатите 8 години плус дека, навистина, скоро сите на CS50 е случаи на академска нечесност се резултат на само сиромашните прават доцна навечер одлука. Резултат на стресот, резултат недостаток на исхрана, недостаток на сон, премногу Ц сетови, премногу рокови, премногу обврски. Стрес натрупуваат во 2:00 часот, 03:00 АМ, 04:00, со краен рок демне. Повеќето студенти во овие случаи имате само направени лоши одлуки што тие многу добро може да се жалам на Следното утро, ако не и неколку минути подоцна, но до лани немаше вентил порака дека овие студенти можат да всушност се отвори за да всушност се одговори на проблем на главата, без страв дека ќе биде стартува од колеџ заедно. И, навистина, ќе воведе ова жалење клаузула минатата година, кој вели дека ако во рок од 72 часа, три дена, премин на некои линија пропишани со наставната програма ќе дојде напред на еден од курсот глави и ние ќе имаат разговор во врска со тоа. Таму се 'уште има некои исход, спротивно на она што е се пријавени за спротивното. Се уште постои резултат кој е вистински со курсот, генерално zeroing П сет или преземање на некои други активности, но ние ќе се, навистина, се справи со себе и не погледнете што се повисоки од исходот Може да биде многу потешка. И, навистина, да го споделат она што се случи минатата година, по осум години, а сега девет години, на наставата по овој предмет и по tinkering со различни копчиња, претворање на разни бирања во текот на изминатите неколку години на академски искреност, и при гледањето на податоците без очигледна влијание, дури и на говори, како таков, ова е рацете одредување на најдобра работа воведовме педагогичен во последните осум години заедно овие редови во CS50. 19 студенти дојде напред според оваа клаузула минатата година. Ние не превзеде никаква акција за седум од оние студенти, утврдување дека тие биле непотребно се загрижени. Тие не се, всушност, преминал линија, но тоа беше добар разговор да се има сепак. Ние zeroed 11 од резултатите кои биле поднесени. А во еден случај ние праша ученикот да направи проблем во собата. Но повеќе привлечни, искрено, со овие 19 разговори, кој беше начинот на кој повеќе од мене очекува да има, секој од нив 10 минути за да можеби еден час долг, исто така, донесе на виделина голем број прашања во врска со фамилијарна прашања, пријател прашања, ментални здравствени проблеми дека ние тогаш ангажирани, со ученикот благослов, жител декан, или пријатели, или било кој друг број на поддршка на ресурси. Така што ова е далеку еден од најдобрите начини на употреба на нашето време и еден од најдобрите интервенции. Со тоа, вели, дека нема внесување на стапката на откривање на академска нечесност поопшто. И јас се осмелувам да кажам, ова подмножество на студенти од минатата година беше демографски дека ние претходно никогаш не се идентификува пред и никогаш не се поврзани со порано. И така, тие беа прекрасен успешни приказни иако тие беа на виделина во помалку од оптималната околности. Значи, да ги задржи ова на ум што ќе се направи, можеби, некои лоша одлука себе доцна во ноќта, дека има регрес толку долго како студент во таква ситуација поседуваат и да излезе така што можеме да имаат таков вид на разговор и да се справи со неа на начин што е образованието, а потоа можеме да го стави зад нас на следниот ден. Значи без понатамошно ado, да ги преземе острото надвор од овој разговор, причината на кученцата се применува до само за да го скрши мразот за момент. И, за жал, тие се сите од сонот, но она што требаше да се случи тука беше секого требаше да стравопочит и вид на одморите после тоа многу тешки разговор. Но, очигледно го ставам кученцата да спијам. Но, ако одите во CS50 е веб коса црта кученца, можете да ги види на целиот ден. Особено можеби 2:00, или 03:00 или 04:00 во текот на ноќта да видите малку олеснување на стресот таму. Па тоа е намалување на кученцата. Во ред. Не беше толку забавно? ВО РЕД. Значи, да се вратиме на некои компјутерски науката, ако може. Значи, да се потсетиме дека минатиот пат почнавме не се гледа само во главната, која беше функцијата стандардно, кога зелено знаме кликнато противвредност, но ние исто така, започна на кратко пишувањето на некои од нашите сопствени функции. И досега ниту еден од овие функции се особено големи или месен. Ќе добиете во оние кои се поголеми функции, најверојатно, на P во собата 2, П поставени 3, дефинитивно Р поставени 4 и наваму. Во моментов најголем дел од вашите програми, ако не и сите од нив, секако, за P 1 сет може да се направи целосно во главниот. Ако вашата програма е само пет линии, 10 линии, долго дури 20 линии, совршено разумно да го напише во сите главни и да не се над комплицира Вашиот код, но она што го правиме денес и натаму се обидува да се, исто така, воведат некои добри дизајн техники така што како што вашиот код добива повеќе комплицирани и за проблемите сакате да се реши се потешко и поинтересна имате, на некој начин, алатките во алатникот со кој да се дизајнира добри решенија за нив. Значи, ајде да се земе брз поглед назад во оваа програма од мојата последна недела, што беше функции нулта точката C. И забележи дека, едноставно, тоа би изгледало вака со две функции, главен и името на печатење. И размислување назад или можеби обратна инженеринг и денес, она што беше на образложение за воведување функција во линија 28 повикани, Име на печатење? Или она што беше овој пример за во однос на принцип или готова брза, ако сакате. Некои шумови. Што? Је толку функционална распаѓање е вид на фенси начин да се каже, распаѓаат вашата програма на нејзините составни делови а потоа ги користат оние делови да се соберат во целина. Значи, и тоа е само вид на еден залак веќе, но ова е можеби дури и подобар пример за нешто само се нарекува апстракција. Нели? Апстракција се случува да биде еден на периодични теми во CS50 а исто така и компјутерски науки поопшто, бидејќи тоа е техника со која може да се реши проблеми поефективно затоа што може да се напише повеќе решенија интуитивно и на начин која Вага и е разбирливо од страна на други луѓе. Што мислам кога го велам тоа? Па, веројатно тоа е многу повеќе може да се чита да се погледне во една програма, како таков, супер кратки покрај тоа што е. Кога ќе го видите на линија 22, кој има функција наречена, името на печатење. Само тоа име вели дека она што го прави тоа. Таа функција очигледно зема внесување меѓу своите загради, и очигледно прави нешто, веројатно печати името. И така, иако ние апсолутно може да има направи она што го правевме пред една недела, што беше само да се земе овој вистински линија код, се ослободи од овој, и да добијат ослободете се од оваа, сите заедно, ние вид на апстрахирани далеку идејата за печатење на името. Не ми е гајле ако сте со користење на печатење дефиниција. Не ми е гајле ако имаш проценти S и обратна коса црта Овие Н. се неверојатно таинствениот детали. Она што ми е гајле за тоа како програмерот е печатење на името. И така, што подобар начин да го направите тоа отколку со повик на функција, на име на печатење? И така, тоа беше еден од мотивите за правење на нешто како ова. Правејќи го кодот повеќе читлив, повеќе еднократно, и, исто така, само описни. Сега, ајде да ги разгледаме во уште еден пример, кој беше еден функции, кој имавме овде. Значи, ова е можеби и повеќе привлечни затоа што, во овој случај, Не сакам да се добие само int. Сакам да добие позитивен Инт. И испоставува да добие позитивен int што треба да направите еден куп на подготвителна работа. Нели? Тоа не е едноставна линија нарекуваме како име за печатење беше, што е значително помалку привлечни. Да се ​​добие позитивен цел број, logically-- дозволете ми да дојдете назад надолу за да се сокрие тоа. Што треба да направите? Како и сите алатки ние имаме во моментов се работи како печати дефиниција од Стандард Библиотека и, исто така, од CS50 библиотека имаме се int, и добивме плови, Добие долго долго, да добијат Стринг, но само еден, важен, во моментов е да се добие Инт. Значи, ако се само алатка што треба во вашиот алатка кутија е Добие int, како да одиме за спроведување тоа да се добие позитивен int? ПУБЛИКАТА: Направете се најавите и да се провери дали влезниот дека тие даде е позитивен или не. ЗВУЧНИЦИ 1: Совршена. Токму така. Уште една алатка што ја имаме во нашата Лента со алатки од пред една недела или две е само конструкт looping. И така, да, ако ние ги користиме време јамка, или направите додека јамка, или израз јамка ние веројатно може да се извлечеш со кој било од оние во некоја форма. Ние може да се спроведе идејата за стапите позитивен цел број од само со користење Земете int, и потоа само ги нарекувајќи повторно и да ја задржите Здодевните корисникот додека тој или таа, всушност, ни дава она што го сакаме. И така сега, овој црпење на процесот за добивање на позитивен цел број во функција наречена Добие позитивен инт е малку повеќе привлечни затоа се погледне на овој. Овие се како 10 плус линии на код кој се вклучени во добивање позитивен цел број, и јас не се грижам за тоа како да го направи тоа. Сè што ми е гајле што ќе да го стори тоа, и така јас сум скриени сите овие детали зад функција наречена добие позитивен int дека, навистина, има оваа направите додека јамка. И да видиме минатата недела за синтаксата таму, но тоа само изјавува N, и тоа отпечатоци од настава на корисникот. Во него се повикува Земете инт, а потоа го проверува оваа состојба, повторно, и повторно, и повторно се додека корисникот не соработува. Па сега, неколку сигурносни проверки. За оние кои се запознаени можеби со некои програмирање, зошто е прогласена за N, зошто да креирам N надвор од направите додека јамка? Зошто тоа е на линија 29, а не на како 33, на пример. ПУБЛИКАТА: Затоа што кога ќе ја прогласи за надвор, тој вид на повеќе, поголем scope-- ЗВУЧНИЦИ 1: Добро. ПУБЛИКАТА: --and Ако се изјасни тоа во внатрешноста на кругот, [Беззвучен] поради тоа што не знае за тоа. ЗВУЧНИЦИ 1: Токму така. Ако можам да simplify-- тоа е прашање на опсегот. И обемот се однесува на контекстот во која променлива постои или е употреблив. И добро правило е дека обично кога ќе се изјасни или создади променлива може да го користите само во внатрешноста од најблиските прегрнување големите загради. Значи она што значи тоа? Ако јас, наместо тоа, да го вратите ова и да си одат со нешто што се чувствува малку поедноставно. Нели? Линија 32 само изгледа почиста за мене сега. Јас го правам и двете нешта еднаш, а потоа доделување на десната рака на левата рака. Проблемот сега врз основа на дека дефиницијата на обемот е во тоа што N може да се користи во линии 31 и 32, во внатрешноста на овој циклус, но каде што од страна на таа дефиниција не може да се користи? Во согласност што? Је. ПУБЛИКАТА: 35. ЗВУЧНИЦИ 1: 35. Дефинитивно не 35. А исто така и каде на друго место? ПУБЛИКАТА: 34. ЗВУЧНИЦИ 1: Дури 34 е проблематична, бидејќи тоа е надвор од големите загради. И така, всушност, ајде да видиме што се случува. Нели? Ова може да изгледа малку интуитивен или не може, но, ајде да видиме што на компајлерот има да каже кога одиме во денешниот изворниот директориум. Направи една функција. О Боже. Па, јас конечно завршен кои, патем. Во ред. И, што е проблемот тука? Најскриените да се погледне. Но, тука е она што јас typed-- направи една функција. Тука е она што го направи предизвикана, кој е всушност користење на компајлерот ѕвекот со некои од овие знамиња дека ќе видиме повторно пред долго. И повторно, секогаш гледам на првата грешка, поради тоа што само може да има каскадни бесмислено ефект на други линии. Така што тоа значи е дека Проблемот е во функција 1.в. Тоа е на линија 32. И тоа е во колона, или карактер, 13. Значи, кога вашиот текст едитор кој може да ви помогне да се одреди од каде во прашање е. Значи, ако јас се движите нагоре, она што е на линија 32? Тоа е навистина еден тоа е веќе обележана право here-- неискористени променлива n. Но тоа не е неискористен. Јас сум го користите. Но компајлерот е збунет, бидејќи таа постои само во внатрешноста на овој опсег. И затоа не можам да го користам тука. Не можам да го користам тука. И на компајлерот, според тоа, дури и не се грижи дека јас се обидувам. Се чини да биде неискористен во рок од реалните својот делокруг. За да можеме да се прошири опсегот со правење Токму она што го започнавме with-- int n. И иако тоа не го прави тоа изгледаат како домот, можеби, и ние сме преземање дополнителна линија тука, сега тоа е во опсегот насекаде. Значи, да се обидете повторно. Така бидете функција еден. Убаво. И сега, ако јас ако јас се кандидира на функцијата еден, нека си го даде негативни 10, негативни 1, 0, 1, и тоа навистина функционира. Па постои друго решение овде. Знаеш што? Што ако сум навистина сум се борат со ова? Не знам каде n би требало да се оди. Знаеш што? Јас сум само ќе го стави сите начин на врвот на мојата датотека. Што би ова се, мислиш? Да? ПУБЛИКАТА: [Беззвучен]. ЗВУЧНИЦИ 1: Да. Па јас го направив тоа на глобално ниво, така да се каже. Ако имаш променлива која е надвор на сите ваши функции што е дозволено, и кодот треба да ги собере, и n сега ќе бидат достапни не само во стапите позитивен цел број, но, исто така, во која main-- е малку загрижувачки, бидејќи има веќе n во главниот, така се повеќе за тоа во само moment-- но тоа ќе се смета за лош дизајн. Во ред. Ако треба да се прибегне кон нешто како, ох, јас ќе само да го стави до тука, бидејќи кодот чини да се состави генерално не е најдобра пракса. А сакате да се избере најтесниот можниот обем за вашите променливи, што би значело случува со нашата почетна дизајн, кој е во право тука. Сега како настрана, ако немале со идентично име променлива тука, начинот на кој ќе се справува со в this-- иако тоа нема да се случи премногу often-- е дека ова е уште совршено добро тука. Но оваа дефиниција на n, во согласност 22 ќе сенка на глобалната еден. Така што ова ќе работи во рамките Главниот и глобална, всушност, ќе се применуваат и кога сте во добие позитивен int Но повеќе за тоа некое друго време, но само за оние кои се љубопитни. Значи на кратко, ние го надминете овој овде. Сега ајде да ги разграничат две други парчиња Пред да се погледне за последен линија на кодот во оваа програма. Добие позитивен Инт. На левата страна од својот збор е зборот Инт. Што тоа значи мислите? Досега сме најчесто се јавува празнина. Да? ПУБЛИКАТА: Тоа е од типот на променлива која ќе бараме за. ЗВУЧНИЦИ 1: Да тоа е од типот на, дозволете ми Не велат променлива, но од типот на вредноста дека јас барам назад за. И навистина, тоа е интуитивен тука, се надевам. Нели? Ако сакате да се добие позитивен цел број, што е тоа што сакате function-- како нашиот волонтери од минатата недела да ви ги врати парче на кои се испишани на int на неа? И затоа сме наведува дека т.н. врати видот на оваа функција е да се добие позитивен Инт. Ако ние не го сакаат тоа да го врати ништо, велиш неважечки. Ако сакате тоа да се врати стринг, велиш стринг. Ако сакате тоа да се врати плови, велиш плови. Но само оној кој е применлив и тука логично, затоа што јас сум со користење стапите int, иако сум ја ограничи на позитивните вредности, е да се врати int. Па обратно, што значи тоа дека постои празнина во загради? Што прават загради генерално се дефинира? Да? ПУБЛИКАТА: Тоа значи дека на функцијата всушност, не го добива. ЗВУЧНИЦИ 1: Тоа значи дека на функцијата всушност, не се добива она што? ПУБЛИКАТА: влезен. ЗВУЧНИЦИ 1: влез, она. Значи, навистина, ако заграда тука ќе се определи празнина, тоа само значи дека јас не сакам никакви влез. Јас ќе се справи со проблемот себе. И навистина, вие не мора да се кажете добие позитивен int ништо. Можете само да се каже, се надева на позитивен цел број, и дека функција ќе одам и да си ја работи својата работа. Но, таму се е малку трик сум играм тука цело време да бидете сигурни дека овој код компајлира. Забележи дека int-- добие позитивен int void-- е на линија 27. Но, за некои навидум чудни причина тоа е исто така се тука на линијата 16. И само за добра мерка ќе повторам ова, па тоа е совршено идентични. И јас сум рече прототип со еден мал коментар од еден ред. Што се случува ако се избрише тоа, и сега повторување направи функција 1, влезе. Whoops. Почекај минута. Каде е јазиче ми? Нели? Застани. Направи функција 1. Таму ќе одиме. ВО РЕД. Кога не би зачувани правилно. Значи, мислам дека има малку бубачка тука, каде што јас не сум гледање името на јазичето во моментот. Значи она што се случува овде? Имплицитна изјава за функцијата добие позитивен цел број е валиден во C99. Толку збунувачки повторно. Па што е ова укажува на? Па, излегува дека С е прилично глупави. Па, тоа е на програмирање јазик, или подобро кажано, компајлерот е. Тоа го знае само она што го имате таа учи, и тоа е само ќе знаеме нешто ако таа учи порано. Со други зборови, во Главната во моментов, јас сум обидувајќи се да се јавите на функција наречен добие позитивен Инт. Но компајлерот не се случува да се забележи дека се надева на позитивен цел број постои до линијата 26. И така, на компајлерот не е само грешки веднаш штом ќе се добива за да линија 17, велејќи имплицитни декларација за да добијат позитивен цел број, кој е само фенси начин да се каже, јас не знам што се надева на позитивен цел број е уште. Други јазици како Java и Пајтон и Руби може да се погледне напред. Ц не е така. Така и на начинот на кој ние ја поправите ова е еден од два начина. Или еден, ако проблемот е во тоа што се позитивен цел број не е виден досега, Па, дозволете ми да се движи кон врвот. Што ќе го надминете овој проблем. Но, генерално, тоа е сметаат за подобри техниката да се стави вашата главна функција на самиот врвот, така што човек читањето на вашиот код знае што програмата го прави, бидејќи главните не е погребан сите начинот на дното или во средината. Тоа е во самиот врв. Така што не се чувствува идеален. И всушност може да се добијат во ситуации каде што Ако еден функциски повици друг, кој се повикува на друг, може да се добијат во еден проблем, каде што ниту може да оди над друга, логично. Тоа едноставно не е можно. И така на пат кон работа околу ова е да се земе само потпис на функцијата, па да се speak-- првата линија каде што тоа е declared-- и само да го умножувате, ставете го во врвот, но не и со кадрава braces-- само со точка-запирка. Тоа е како малку навестување од она што е да дојде. И всушност, сето ова време кога ние видовме работи како стандард io.h и cs50.h, на сличен начин, во тие точки ж датотеки постојат други прототипи. И ќе видиме дека пред долго. Значи во кратки, кога ќе имаат програма во датотека со повеќе функции Покрај главната, можете речиси секогаш сакаат да ги декларираат само по пат на нивниот прв линија, проследено со точка-запирка, во самиот врв на датотеката. Тоа беше многу на сите одеднаш. Некакви прашања? Некакви прашања? Во ред. Па ајде да се движи, тогаш до нешто како кашлица. Ох. Како монтирање. Во ред. Кашлица. Па овде е в спроведување на програма ние го сторивме пред некој ден во Нула, кои многу едноставно само вели кашлица, кашлица, кашлица. Во ред. И некој вели дека по неколку дена пред дека има начин на чистење на овој код се веќе. Во ред? Штом сте копирање и вметнување веројатно лошиот дизајн. Барем еднаш ние се дојде до четири или пет или 20 кашлање, таа се чувствува лоша пракса. Ние само се задржи копија вметнување. Што е очигледно решение за чистење на оваа програма до? ПУБЛИКАТА: јамка. ЗВУЧНИЦИ 1: Да. Па користат јамка. И ние може да се користи за циклус, време јамка, било кој број на пристапи. И навистина, тоа е она што тоа го правиме во верзија тука. Сум наместо тоа препишуван во верзија еден cough.c да биде само за кашлица во циклус. Во ред, но има една можност сега да се вид на почеток да се дизајнира оваа малку повеќе како Лекцијата што предава пред еден миг, кој е this-- претпоставиме дека сакам за да се создаде функција наречена кашлица, ајде да се разгледа за само еден миг она што се случува да изгледа. Па ако сакам нешто да кашла, јас само треба да се користи за печатење ѓ внатре во функција. И навистина сум. И всушност, сето тоа време, во секое време си печатење нешто да на екранот, програмер би го нарекол дека пропратен ефект. Тоа не е ме предавање назад некој вредност. Тоа е ме водиш некоја акција кои би можеле да бидат визуелно очигледно. Но оваа функција кашлица, дали таа се врати нешто врз основа на својата прва линија? Не, затоа што неговиот тип враќање е празнина, што само значи тоа не е ме предавање ништо назад. Тоа би можело да се прави нешто визуелно, но тоа не ме предавање се врати на парче хартија како и минатата недела. Дали тоа треба секој влез? Бр И така тоа е неважечки тука. Па тоа исто така е вид на над-инженеринг на овој проблем. Нели? Јас го направив на програмата повеќе комплекс, повеќе линии на код, Не сум го направат било какви повеќе функционални, но ова ќе биде отскочна штица, можеби, за поширока контекст со покомплицирана код. Но, што е тоа? Што сум done-- само обѕрне ова без да гледа во коментар во самиот врв на file-- што имаат Јас во основа се направи тука со моите кашлица имплементација која е различно? Да, во грбот? ПУБЛИКАТА: Направете го тоа за да можете да имаат карактер исклучите. ЗВУЧНИЦИ 1: Да. Значи ова се чувствува вид на убаво. Нели? Тоа е како додавање на функција, за да вашиот програма или вашата функција, во овој случај. Тоа сепак се враќа ништо. Тоа би можело да имаат визуелен пропратен ефект, затоа што тоа е повик за печатење f. Но сега можам да parametrized функцијата, која значи дека имаш специфицирано преземени внесување на int тип и го нарекуваат n, но можев да го наречеме се што сакам. Всушност, тоа само може да биде пати да биде уште поексплицитен. И тогаш јас само може да се промени овој овде. Но поентата е дека ова е како јас креирате функција која го влез. И ако се потсетиме нервира можеби преку интернет во една на прошетка низ тие, на Четвртата и последна пример кашлица, ќе забележите тука сум генерализирана код мојот further-- вид на апстрахирани што понатаму. Како кашлање и кивање, и двете се за како да кажеш нешто или да се направат некој вид на звук. Зачувај ќе биде што одговара на гребење блок. И така она што го направив во оваа верзија, која ние само може да се загледувам во, е кашлица е исто како да кажеш, [кашлица], кашла, а во меѓувреме, кивањето е како да кажеш, [ACHOO]. И така јас сум генерализирана спроведувањето на тие од сега ги спроведуваат оваа генеричка функција, велат, што е интересно за денешните потреби само поради тоа што се уште нема врати видот. Но, колку влезови има? ПУБЛИКАТА: Двајца. ЗВУЧНИЦИ 1: Двајца. И така, ако сакате да земе во два аргументи, само одделете ги со запирка. И ако сакате да потоа јавете се на таа функција, известување дека сте само јавете се на пример, цитат, unquote, за прв аргумент, заеднички n, за вториот аргумент. Значи, повторно, ние само треба сега градежни блокови, така што ние всушност може да имплементираат некои од нашите сопствени функции. Во ред. Било какви прашања во врска со тоа? Па сега ајде да лупам назад слој ако е така. И целта, во крајна линија, е следната недела проблем сет ќе биде на cryptogrophy-- уметноста на scrambling информации. И посебно, на информации ќе имаш шифрирате или дешифрирате ќе биде текст. И така тој вид на покани На прашањето како и денес, она што се случува под хаубата со ASCII текст надвор од нула недела И како можеме да всушност да почне да се манипулира со него? Па овде е името Zamyla е. А во текстот, кој може да се внесуваат како и во функција на се стринг. И сега почнува, кога ќе видите жиците како this-- Ш-А-М-Y-Л-A-- да почнат да размислуваат за тоа како секоја на тие ликови во една кутија од своите сопствена. И навистина, во една недела или така е време, секој од овие кутии ќе претставува многу конкретно блок на memory-- залак на меморија. Така што секоја од овие букви, во крајна линија, ќе ја претставуваат 8 бита. И ние, всушност, ќе видите што се случува на под хаубата во мојот компјутер. Но, поради тоа што не е доволно само да се погледне во Zamyla преку овој објектив, при што секој од овие писма е во свој кутија. И доволно убаво во С можеме пристап до секој од овие кутии директно. Значи, ако сакате да ја добие првата буква од нејзиното име, супер лесно во В. Ако сакате да се добие последните писмо, супер лесно, како и со парче нова синтакса. Па јас ќе одам да се оди напред во CS50 IDE и отвори низа нулта точката В. И во овој пример тука, постојат неколку нови работи се случува. Па прв во линија 19, ние сме видел оваа before-- стапите стринг. Па само како брза проверка разумност, дали некој може да им понуди до вербално објаснување на лаик она што се случува во линија 19. Како само преведеме сето ова во Англиски дека не цимер во CS50 може да се разбере. Је. ПУБЛИКАТА: Дали на корисникот внесување на стринг и чувајте го на променлива е. ЗВУЧНИЦИ 1: Добро. Има корисникот влез стринг и чувајте го на променлива е. Тоа е супер. Па на десната рака страна, ние го нарекуваме стапите стринг. Која враќа вредност дека не се доделени од десната страна за левата рака страна во променлива наречена а тоа е дизајниран за складирање низа. Токму така. Па сега се редат 22, по коментар во линија 21, очигледно отпечатоци дека низа по еден знак на линија. Но како? Значи прво на сите, ние I од 0 иницијализира. А потоа како да се добие за да се на крајот од името Zamyla е? Па, на крајот на Име Zamyla е, би можел рачно да напишете во последните карактер нејзиното име некако, или бројот на него. Нели? Ако се вратиме here-- Ш-А-М-L-- Y-Л-A-- па можев да напишете. Што е индексот на Последно писмо Zamyla е? Ако ова е 0-- земено како programmer-- 0, 1, 2, 3, 4, 5, Јас heard-- така навистина, последната буква во име Zamyla е шестата, но ако ние сметаме од 0, тоа се случува да биде број 5. Така да тоа во предвид овде. Излегува има функција во С наречен strlen, и назад во текот на денот и до денешен ден, сепак, Многу програмери да изберат да ги синхронизирате имиња за своите функции кои звучат како зборовите тие се обидуваат да се каже. Па strlen е стринг должина. И така што ќе се стринг должината на С врати кога Zamyla е влез? ПУБЛИКАТА: Пет. ЗВУЧНИЦИ 1: Ш-А-М-Y-L. Шест. Нели? Што е должината на името Zamyla е? Нели? И само во реалноста, шест букви. Нели? И така, што значи тоа за нашата телефонска линија? Ние ќе треба да одат од 0 до шест, што ќе ни даде пет повторувања. Што ќе правиме на секој повторување? Па, проценти C, некој претпоставам пред некој ден, значи случаеви за што? ПУБЛИКАТА: знак. ЗВУЧНИЦИ 1: Само знак. Па еден character-- не повеќе ликови како низа. И потоа, тука е нова линија дека ние го добивме печатење. И потоа, тука е нова синтакса. Ако сакате да испечатите на i-тиот карактер во низа S, така да се каже, можете едноставно да се каже име на стрингот С, и потоа отворете квадратни заграда, и потоа затворена заграда квадратни, со з средината. И тоа е вид на убаво во таа тој вид на личи на плоштадот исто како и на плоштадите во кои е Zamyla постојат знаци на таа слика таму. Значи, ако јас, всушност, ја извршите оваа Сега, ајде да видиме што се случува. Направи низа 0 точка коса црта стринг 0, а потоа сум случува да напишете име Zamyla е. Не постои брза, бидејќи јас не користете печатење ѓ, но тоа е во ред. Јас само знам што да правам. И навистина, отпечатоци од Име Zamyla е, еден на линија. Сега ајде да се биде малку невнимателни. Да претпоставиме дека јас не знам за strlen и јас сфатиле, сите права, никој нема да има именува како поголем од 50 карактери. Ајде да одиме напред и да го прекомпајлирате ова и повторување, и потоа внеси во Zamyla повторно. Логично, што е Програмата ќе се обидат да ги испечатите? Z-A-M-Y-L-A, тогаш како 45 непознати бајти меморија. И навистина, ние ќе се вратам на оваа идеја на меморија. Но, само логично, ако Име Zamyla е толку долго, како на сликата тука, она што си ти што зборуваш се задржи печатење, печатење задржи, да ги задржи печатење, печатење задржи, да ги задржи за печатење, па се до 50-карактер, што кој знае што ќе се случи. Значи, да се, всушност, да ги разгледаме. Ајде да напишете во Zamyla. Интересно. Ние се насмевна. Само еден куп на белиот простор. Ох. Има една фанки карактер. Тоа изгледа како вид на чудно прашање одбележи таму, но постои име Zamyla е. Ајде да се добие навистина невнимателни. Како за ние печати од 500 блокови во непознато? Ајде да одиме напред и да се направи ова како и, а потоа повторно да се кандидира. И ајде цел екран него, затоа што ние треба да видите повеќе простор. Zamyla. Се насмевна повторно. Осмелуваат да добиеме повеќе несовесно? Ајде да се добие повеќе невнимателни. 50.000 карактери. Ова не е повеќето сигурно е добра идеја. Во ред. Направи низа 0. Ова ќе биде нашата последна демо. Zamyla. Ugh. Ugh. ВО РЕД. Значи мојата меморија е навистина празни токму сега, кој е всушност вид на лесен. Она што јас сум се обидува да добие to-- ред. И сега јас сум само ќе се невнимателни. 500.000. Make-- ајде полн екран него. Влезе. Zamyla. Таму ќе одиме. Јас немам идеја што тој е, но тоа звучи лошо. Во ред. И всушност, наскоро, ако сте меѓу среќните неколку во работното време а во еден проблем во собата, можете многу добро може да се судрите со овој. Сегментација на вина всушност не имаат добро дефинирани значење. Тоа значи дека некој вид на грешка кои се однесуваат на еден сегмент на меморија. И во однос на Едноставен, тоа значи дека ние се осврна memory-- ние се користи RAM меморија во мојот компјутер дека не треба да имаат пристап до. И тоа е она што е и двете моќен и исто така опасно за C е дека вие всушност имаат непречен пристап на целокупната меморија вашата програма или бајти или RAM меморија, поточно. Значи иако името е Zamyla е долг само шест карактери, Јас се уште може да оди никаде во меморијата што сакам. И како настрана, ако сте некогаш прочитате некои статија во текот на годините за некои сервер или некоја програма се испукани или пробиени тоа е преземени предност на нешто повика на buffer overflow експлоатира дека ние всушност ќе се зборува за неколку недели, тоа е генерално се однесуваат на некој начин трикови компјутер во одвиваат добро надвор од границите на меморија дека треба да има, и наоѓање на нешто сочно со тоа, што memory-- на лозинка, можеби, на начин за заобиколување на некои сериски број чек, или само генерално во состојба за да го излаже компјутерот е извршување код, кој не е наменет. Но, ајде да се врати на Реалноста за само еден миг каде што оваа програма е спроведува со strlen, и да се воведе една работа тука. Што е ново меѓу овие првите три редови? Па низа точка ч. Излегува има оваа библиотека наречена Стринг Дот Н, или стринг библиотека, чија хедер датотека, така да се каже, е стринг точка ж што ми дава пристап до овој strlen функција. Ако јас ја изостави дека, компајлерот е ќе се развикам на мене во некоја форма. Но знаеш што? Сега ајде да се навистина нијансирана. Во линија 22, има нешто вид на inefficient-- лошо дизајнирани, arguably-- за оваа линија код. Се сетам на тоа како се спроведуваат за циклус и кои чекори да се случи повторно и повторно и again-- иницијализација, состојбата, кодот што добива погубен, а потоа на прираст или промена, тогаш состојбата, а потоа го кодот, а потоа на промена, тогаш состојбата, а потоа го кодот, тогаш промената, и така натаму. Значи она што може да биде малку загрижувачки или лошо направено во оваа ситуација? Да, во сина боја. ПУБЛИКАТА: strlen е наречен многу, многу пати. ЗВУЧНИЦИ 1: Да. Strlen така се нарекува многу пати, но она што е должината на името Zamyla е на прв пат јамка извршува? ПУБЛИКАТА: Шест. ЗВУЧНИЦИ 1: Шест. Па, она што е должината на нејзиното име по втор пат на кодот се извршува? ПУБЛИКАТА: Шест. ЗВУЧНИЦИ 1: Во ред. Тоа е уште шест. Нели? Име Zarla не има менува, дури и ако јас сум во потрага на само дел од писмата во нејзино име. Така и на фактот дека јас сум ефикасно бара ова прашање, што е должината на Zamyla, што е должината на Zamyla, што е должината на Zamyla, шест одделни пати, или дури седум, е само глупаво, затоа што тоа е непроменлива тој одговор. И така, јас всушност би можеле да направите е this-- во еден стринг Имам малку подобра верзија тука. There-- whoops-- стринг две имам маргинално подобар верзија кадешто Правам this-- наместо само иницијализацијата I до 0, јас, исто така, со запирка изјасни за втората променлива наречена n-- јас не мора да се каже int повторно. Јас не би требало, во факт. Но, велам n. И тогаш јас се иницијализира n да на strlen на n, така што сега колку пати се strlen се извршуваат во вкупен? Само еднаш. Па така ова е она што значи порано за подобар дизајн. Всушност, еднаш вашиот код е точен, ќе се вратам и размислувањето, Јас сум со користење на малку меморија или како неколку секунди или милисекунди на компјутерски време како можно да се имплементираат некои проблем? А јас ќе одам да се движите и само се спомене дека има овој споменување на нула во оваа верзија, но ние ќе се вратам на тоа пред долго. Затоа што за сега, ајде да ги разгледаме од каде што ова се случува да не води. Така еден, излегува дека сега дека ние имаме способност да се погледне во индивидуални карактери, можеме да се потпора нешто од недела 0 тоа беше најскриените и вид на неинтересен во тоа време. Но, сега, и особено кога се добијат со криптографија во една недела, тоа се случува да биде прилично моќна. Излегува дека со некои ints и плови податоци types-- и карактери и стрингови и други things-- некои од нив многу лесно може да се конвертира во друг. На пример, кога ние разговаравме за ASCII некое време ago-- еве на големи букви А преку М, точка, точка, dot-- рековме дека има мапирање помеѓу овие букви и броеви. И всушност, тоа важи и за мали букви, како и. Мали букви a е 97, главниот град е 65. И има голем број во ASCII, што е само ова мапирање систем за сите оние други писма. Значи она што значи тоа? Па, јас ќе одам да се оди напред и отворено недвижен брзо нешто што се нарекува ASCII 0, од ​​кои повеќето се коментари. И повторно на интернет може да се секогаш поглед низ коментари. И да погледнам што тоа се случува да се направи. Па тоа е се здобија со главната функција. Сум хард-кодирани броеви само за сега, затоа што знам што правам. Знам дека она што сакам да го видам овде. И јас сум јас иницијализиран на 65. И јас сум со броење до преку 26 букви вкупно. И она што сум јас ќе печати една линија во еден момент ако може да се интерпретираат овој истакнат линија? Што добива печатено? Је. ПУБЛИКАТА: Дали ви се случува да се печати на писмото што одговара на мапа на писмо вредност и целобројна вредност? ЗВУЧНИЦИ 1: Токму така. Одам да се печати на писмото што одговара на вредноста на цел број, и обратно, како што следи. Па ова, некој рече претходно, е само случаеви за знак. Се уште е. Ова, се разбира, е случаеви за да не int-- нова линија. И сега се забележи, мојата прва вредност што Јас сум за приклучување кои случаеви не е само јас сакам да кажам дека, во загради, знак јас, која заграда знак е кажување на компајлерот, третира јас не како што е тоа, што е број. Третирај го како вистински карактер. Додека вториот вредност сум приклучување in-- I-- само треба да биде број. Значи, ако јас ги собере на оваа program-- така што ова е направи ASCII 0, дот коса црта ASCII 0-- јас само се оваа корисна малку шема дека ми покажува сите можни мапирање, без да се размисли преку или да го дознаам на моето. И јас сум исто така, печатење, известување на мали букви, бидејќи неколку линии подоцна, јас исто така се печати ова мапирање како и, што е само за да се велат дека откако ќе се разбере она што се случува во позадината капакот на моторот, може да ви автоматски да се конвертира назад и назад. И всушност, ако некој од вас сторила ова ќе тргнат на училиште или слушнале за некој mythically земајќи белешка и донесување на неговата или нејзиниот пријател во класа, но вие испомешани на писмата на како А станува Б, и Б станува C, или нешто покомплицирано од тоа, добро, како би се обратите за за спроведување на тоа како дете? Па, ти само вид знам A станува B, B станува C, но математички, она што го правев тоа дете? Што бараше додавање на секоја буква? Ефикасно, 1. Па кога ќе се промени А до Б, тоа е како вид на промена на 65-66, кој математички значи само додадете 1. И така, ако сте во ситуација да се имплементира дека малку измамен техника за вашиот учител во кодот, Може да се направи токму тоа само со додавање на една буква заедно. Па пред долго време, ние сме ќе видиме како ќе се може да ги искористат предностите на тоа да се, всушност, вистински трка и разшифровам информации. Во меѓувреме, се знае дека ние сме отворени да се воведе неколку други библиотеки here-- стрингот еден денес. И многу корисен сајт се надевам дека ќе најдете се нарекува reference.cs50.net, која наставниот кадар да се стави заедно, така што, ако сакате да Побарајте Како strlen дела, можете да почнете со пишување името на функцијата, кликнете strlen таму, а потоа толку либерален објаснување ќе се појави. Или ако сакате официјалниот Linux-базиран објаснување, можете да кликнете на повеќе удобен во горниот десен агол, и тоа ќе ги презентираат истите информации, но во посложени услови. Тоа е корисен извор за всушност знаеме што се што прави. Следниот пат кога ние ќе треба да погледнеме Ovaltine и повеќе, и да се воведе во светот на криптографија. Пред тоа, ќе видиме можете подоцна оваа недела. И сега, Колтон Огден. Ќе го видите во средата. [Музички] [Музички] ЗВУЧНИЦИ 1: Што [Bleep] правиш? ЗВУЧНИЦИ 1: Јас јадам мојот десерт? Како ви се јаде? Со вашите раце? [Музички]