[Мусиц плаиинг] Давид Ј. Малан: У реду. То је ЦС50, и ово је почетак недеље две. Па хајде да данас почињу са буг. Буг, наравно, грешка у програму, а ви ћете добити јако упознати са овим концептом ако никада нисте програмирани пре. псет0 и сада псет1. Али хајде да размотримо нешто мало једноставан на први поглед. Овај програм овде да ја бацио заједно унапред, а ја тврдим да би овај принт 10 Звездице на екрану користећи принтф, али је очигледно луд на неки начин. 

Имајући у виду да је спецификација треба да одштампа 10 звезде, али то није тако очигледно, оно да ви тврдите је грешка? Да? Тако да је искључити један грешком, а шта под тим подразумевате? У реду. Одлична. Тако да смо наведен старт вредност нула за И, а ми смо одредили н вредност 10, али смо користили мање од или једнака. А разлог да је ово двоје ликови и не само један симбол, као у књизи математике, је да немате начин изражавања један еквивалент карактер. 

Значи мање од, али ако почнете бројања на нулу, али рачунамо све до краја кроз и једнако 10, ви сте наравно неће Тачка 11 ствари у укупно. Па ти ћеш да одштампате 11 звезде. Дакле, шта може бити исправка за ово? Да? 

Дакле, само подесите мање од или једнака бити само мање од, и ту је, тврдим, можда Друго решење, такође. Шта би друго радите? Да? 

Па почнете да га је једнако 1, и остави мање од или једнако. И искрено бих тврдим да за типичног човека, То је вероватно јаснија. Почети да броји на 1 и цоунт кроз 10. У суштини оно што мислите. 

Али реалност је у програмирање, као што смо видели, компјутерски научници и програмера уопштено почети да броји од нуле. И то је у реду некада се навикнете на то. Ваше стање ће генерално бити нешто као мање него. Тако једноставно логичан грешка која сада могли поправити и на крају рецомпиле ово и добити само 10. 

Па како се о овом буг овде? Ево, опет, ја тврдим да имам циљ штампања 10 старс-- један по линији овог времена, али то није то. Пре него што предлажемо шта поправити, шта то ради принт визуелно да сам да састави и покренете овај програм мислите? Да? 

Звезда. Тако све звезде на иста линија је оно што сам чуо, а затим нова линија карактер. Па хајде да покушамо то. Па будите Бугги-1, ентер, и видим команду цланг о коме смо говорили прошли пут. ./бугги-1, и заиста ја видим све звезде 10 на истој линији, иако тврдим у мом спецификацији само коментар на врху код које сам намеравао да урадим једну по линија. Али ово изгледа у реду. 

Сада ред 15 изгледа да сам штампање звезда, а затим ред 16 изгледа да сам штампа нова линија карактер, а они обојица увучен тако Ја сам унутар петље јасно. Тако да не би требало да да раде звезду, Нови линије, звезда, нова линија, звезда, нова линија? Да? 

Да, за разлику од језика као Питхон, ако сте упознати, удубљење не битно на рачунар. Једино што је важно за човека. Па док сам овде измислили линија 15 и 16-- да изгледа прелепо, али рачунар не мари. Рачунар је стало заправо има витичасте заграде око ових линија кода. 

Тако да је то буде јасно као у Сцратцх-- да те две линије кода Треба бити погубљен. Као један од оних жуте Огреби пуззле комада опет и опет и опет. 

Па сад ако сам поново покренути ово програм-- ./бугги-2-- Хм. Сада имам грешку. Оно што сам заборавио да урадим? Да, па нисам то саставити. Па будите Бугги-2. Нема такве датотеке, јер нисам заправо саставити другу верзију. Тако да сада интересантно Необјављени вариабле-- не 2. Радимо 1. Маке Бугги-1-- ./бугги-1-- и сада сваки од њих је на истој линији. 

Сада постоји изузетак Ова тврдња требало мој да вам је потребна ова витичасте заграде. Када је у ствари ОК-- ако си приметио у одељку или тектбоокс-- да изоставите витичасте заграде? Да? 

Тачно. Када постоји само један линија кода који вас желе да буде повезан са петље као у нашем првом примеру. То је савршено легитимно да изоставите витичасте заграде баш као врста погодност од компајлер за вас. Да? Добро питање. Да ли би се сматрати грешка стил? Ми бисмо промоте-- као ЦС50 стил водич, УРЛ адреса за коју је у псет1-- да увек користе витичасте заграде. Наравно, ако сте нови у програмирању. Реалност је да нисмо да те забрани од чињења тих погодности. Али ако само да постајеш у јеку ствари, апсолутно само увек користите Цурли протезе све док не добијете висе од тога. Добро питање. 

У реду. Тако да је тада била грешка. Барем у нешто прилично једноставан. А ипак можда да ово је прилично неразвијен, зар не? То је врста прве недеље гледања на језику као, видим твоје грешке у њима. Али реалност су заправо представник неких прилично застрашујуће проблема који могу настати у стварном свету. 

Тако да неки од вас можда сетити ако следите Тецх Невс, или можда чак и ухваћен Винд ово у фебруару ове прошле године да је Аппле имао је мало грешка у оба иОС, оперативни систем на њихови телефони, а такође и Мац ОС, оперативни систем на њиховим десктоп и лаптоп рачунаре. И видели сте такве наслове као ово. А након тога, Аппле обећао да ће поправити ову грешку, и врло брзо учинио поправити га иОС, али онда на крају га фиксна у Мац ОС као. 

Сада ниједан од ових наслова сама стварно откривају шта је основни проблем, али је на крају Буг смањен на Буг у ССЛ, Сецуре Соцкетс Лаиер. И скратим причу, ово је софтваре да су наши претраживачи и други софтвер који се користи да уради шта? 

Ако сам рекао да је ССЛ је укључени, кад год посетите УРЛ који почиње са хттпс, шта онда може бити у вези са ССЛ? Енкрипција. Па ћемо говорити о то у наредним данима. Енкрипција, уметност кодирање информација. 

Али скратим причу, Аппле негде пре је погрешио у њиховој имплементацији ССЛ, а софтвер који на крају реализује УРЛ адресе као ХТТПС или мак везе тамо. Резултат тога је да ваш Везе могу потенцијално бити прислушкивање. И ваша везе су не нужно кодиран ако сте имали неке негативца између ви и дестинација веб сајт који је знала како да искористе ово. 

Сада Аппле коначно постављен фик за ово коначно, и опис њиховог Исправка је ово. Безбједан саобраћај није проверу аутентичност везе. Питање се обратили враћање недостајуће валидације кораке. 

Дакле, ово је веома рука таласаста објашњење за само кажем да смо забрљали. Буквално Постоји једна линија кода који је луд у њиховој имплементацији ССЛ, и ако идете на мрежи и тражи за то ви у ствари можете наћи оригинални изворни код. На пример, ово је снимак екрана само део прилично велики фајл, али ово је функција очигледно зове ССЛ проверите знак Кеи Екцханге сервера. И потребно је гомилу аргументи и улаза. И нећемо да се фокусира превише на минутиа тамо, али ако се фокусирате на кода унутар те највиши фунцтион-- Хајде зумирате на то. Можда већ сумњају шта би могао грешка бити чак и ако немате појма на крају оно што гледате. Постоји нека врста аномалије овде, што је шта? 

Да, ја стварно не волим изглед два Гото успе. Искрено, ја стварно не знам шта гото не средства, али која има две од њих Назад на леђима. То ме је некако трља интелектуално погрешан начин, и заиста, ако ми у зумирања на Управо у том смислу, ово је Ц. 

Па доста Аппле кода је сама написан у Ц, и то очигледно је заиста екуивалент-- Не тој лепој увлачења верзија, али ако препознајете чињеница да нема витичасте заграде, што Аппле заиста написао је код који изгледа овако. Па сам умањен и сам фиксне увлачења у смислу да ако нема витичасте заграде, да Други Гото фаил то је у жуто ће да изврши без обзира на све. Није повезан са ако стање изнад њега. 

Дакле, чак и опет, ако не баш разумеју шта то може да евентуално то радим, знам да је сваки од ових цондитионс-- сваки од ових линија је веома важан корак у процесу провере Ако је ваш подаци заправо шифрована. Па прескакање један од ових корака, није најбоља идеја. 

Већ зато што ми имамо ово Други Гото не у жуто, и због тога што када смо врста естетски преместите га на лево, где га логично је у овом тренутку, што то значи за линију кода испод тог другог Гото не би ти мислиш? Увек је ће бити прескочене. Тако да су генерално готос намршти на из разлога нећемо баш иду у, и заиста у ЦС50 нисмо склони научити ову изјаву Гото, али могу да се сетим Гото не као значење го јумп на неком другом делу кода. 

Другим речима јумп овер Овај последњи ред у потпуности, па резултат ове глупо Једноставна грешка то је било само резултат Вероватно неко копирање и налепите једну превише много пута је то цела безбедност иОС и Мац ОС рањив до хватања од лоших момака за неко време. Док Аппле коначно фиксна ово. 

Сада, ако неки од вас су заправо руннинг старе верзије иОС или Мац ОС, можете да одете на којој готофаил.цом сајт да неко подешавање да суштински одредити програмски Ако је ваш рачунар је и даље рањива. И искрено, ако је, то је вероватно добра идеја да ажурирате свој телефон или Ваш Мац у овом тренутку. Али постоји, само потврда колико уважавање ових нижег нивоа Детаљи и поштено једноставне идеје заиста могу превести на одлуке и проблеми који аффецтед-- у овом цасе-- милиони људи. 

Сада реч о администрацији. Секција почеће ове недеље долази. Ви ћете добити емаил од викенд о делу, на којој тачки процес ресецтионинг ће почети ако немаш схватио да сада имате неке нове сукобе. Дакле, ово се дешава сваке године, а ми смо ће угостити у данима који долазе. 

Канцеларија хоурс-- не држати Еие на овом распоред. Мења мало ове недеље, посебно Старт Тиме и локација, тако да консултују да пре него што стигну до радног времена Свака од наредне четири ноћи. И сада реч о процени, посебно као што зароните у проблему поставља један и шире. 

Дакле, по спецификацији, су генерално осе дуж којих оцењујемо свој рад. Обим односи на оно што мери свој код справе потребно карактеристике наш спецификацији. Другим речима, колико Пиеце Сет ли сте одгристи. Да ли сте урадили једну трећину од тога, пола од тога, 100% од тога. Чак и ако то није тачно, колико сте покушате? Тако да снима ниво труда и износа на коју одгризао Проблем сет је. 

Цоррецтнесс-- овај, да се Колико је ваш код у складу са нашим спецификације и без грешака. Па то ради исправно? Ако га дати неки улаз, зар не дај нам излаз да очекујемо? Десигн-- сада ово је први а посебно квалитативних, или оне које захтевају људску пресуду. И заиста, то је зато имамо особље толиког броја наставних сарадницима и наравно асистенти. У којој мери је ваше Код написан добро? 

И опет то је веома квалитативну процену који ће радити са вама на двосмерно у недељама које долазе. Тако да када не добијете само бројчане оцене, али и писмени резултати, или откуцан повратне информације, или писане повратне у енглеских речи. То је оно што ћемо користити да вас одвезем ка заправо писање боље код. А у предавању и делу, ми ћемо пробати да се укаже оут-- подједнако често као што могу-- оно што чини програм, не само исправан и функционално добро, али и добро осмишљен. Најефикаснији би могао бити или чак најлепше може да буде. 

Што нас доводи до стила. Стил на крају је естетски пресуда. Да ли сте изабрали добар називи за ваше варијабли? Јеси ли увучен свој код правилно? Да ли то изгледа добро, и због тога, је лако за другом људском бићу да читају ваш одговарајућим њене исправности. 

Сада углавном по програму, ми гол ове ствари на пет тачака скала. И дозволите ми да закуца кући Поинт то је три заиста добро. Врло брзо се људи почну да раде аритметика. Када добију три од пет на коректности за неку псет и они проклети мисле, ја ћу 60% који је у суштини Д или Е. 

То није начин на који ми Мислим од ових бројева. Три је заиста добро, а шта ми генерално очекују на почетку овог термина је да ако сте добијате гомила тхрее'с-- можда пар сајмова, пар фоурс-- или пар Твос, пар фоурс-- То је добро место за почетак. И све док видимо узлазној путањи током времена, сте у посебно добром месту. 

Формула користимо за Тежина је у суштини ствари Овај по програму, што само значи да смо даје већу тежину исправност. Јер је то веома често исправност који узима највише времена. Веруј ми сада. Ви ћете финд-- најмање у једном псет-- које вас троше 90% свог времена ради на 10% проблема. 

И све врсте радова осим за једну или две бубе, а то су грешке које да вас до касно у ноћ. То су они који некако ти побегне. Али после спавања на њему, или похађају радно време или постављају питања на мрежи, је када дођете до тог циља 100%, и зато смо тежина исправност највише. Дизајнирати мало мање, и стил мало мање од тога. Али имајте на минд-- стилу је можда најлакше од њих да одгризе по водич стила. 

А сада, још озбиљнији ноте на академском искрености. ЦС50 има несрећна разлику од као највећи произвођач Ад Боард случајевима готово сваке године историјски. То није због тога што студенти варају у ЦС50 ништа више него било које друге класе, већ зато што по природи посла, чињеница да је електронски, чињеница да тражимо за њу, и чињеница да су рачунарски научници, Могу да кажем да смо, нажалост, веома добар у томе откривање. 

Дакле, шта то значи у реалним условима? Тако да, по програму, филозофија курса у заиста своде да буде разуман. Постоји та линија између раде свој посао на своје и добијање мало разуман помоћ од пријатеља, и отворено раде тај посао за ваш пријатељ, или њега или њу свој код слања тако да он или она једноставно могу узети или позајмите га право. Као и да прелази линију да смо нацртана у класи. 

Види, градиво на крају за линије да цртамо као разуман и неразуман понашање, али то заиста чир до суштини вашег рада потребе за бити свој на крају. Сада са тим, рекао је, постоји хеуристички. Јер као што можете да имагине-- од радног времена и визуелни и видео ми смо показала чиме фар-- ЦС50 заиста требало да буде као за сарадњу и као кооперативан и као социјална могуће. Као Цоллаборативе као што је ригорозна. 

Али са овим рекао, хеуристичка, као што ћете видети у програму, је да када имате неки проблем. Имаш грешку у вашем коду који вас не може да реши, то је разумно за вас да покаже свој код неком другом. Пријатељ чак иу класи, пријатељ седи поред вас у радног времена, или члан особља. Али они не могу да покажу своју шифру за вас. 

Другим речима, мој одговор на ваше куестион-- Треба хелп-- не ох, ево мој код. Баците поглед на ове и закључити из тога шта хоћете. Сада, наравно, ту је начин јасно да се у игри Овај систем у коме ћу вам показати Мој број пре него што питање. Можете ли ми показати моју ваш код пре него што питање. Али види градиво поново остале детаље где је линија. 

Само да сада сликају слику и деле што транспарентније могуће где смо у последњих година, То је број случајева Ад Боард да је ЦС50 има више протеклих седам година. Са 14 случајева ово најновије јесени. У погледу студената који су укључени, било је 20 неке чудне ученици прошлог јесени. Било је врх 33 студенти пре неколико година. Многи од њих су, нажалост, не овде на кампусу. 

Студенти су укључени као проценат класа историјски кретао од 0% на 5,3%, што је само да кажем То је на годишњем нивоу изазов. И према том циљу, што желимо да урадимо је да пренесем једну да смо управо дд-- ФИИ-- упоредите у правичност оним студентима који су слиједеће сходно томе линију. Ми радимо упоредите свим актуелним поднесци против свих претходних мисија из протеклих много година. 

И ми знамо како то Гоогле око и наћи кода репозиторијума онлајн, дискусионе форуме онлајн, градилиштима онлине. Уколико студент може наћи, свакако можемо сматрају да је чак са жаљењем урадимо. Дакле, шта ћете видети у програму мада је ова клаузула кајање. Свакако могу цене, и сви смо се Особље учинивши курс као ово, или ово сама један током времена, сигурно знате како је то кад живот добија на путу, када имате неки Лате Нигхт деадлине-- не само у овој класи, али анотхер-- када сте потпуно исцрпљени, нагласио, имају прекомерна број других ствари да уради. Ви ћете направити у неком тренутку у Живот свакако лоша, можда касно Ноћ одлуке. 

Па по програму, постоји та клаузула, тако да ако се у року од 72 сата од доношења неке лоше одлуке, имате за то и допре до мене и један од шефова курса у и ми ћемо имати разговор. Ми ћемо руковати ствари интерно у нади ИТ постане више настава тренутак или живот лекцију, а не нешто са посебно драстичне последице као што можете да видите на овим листама овде. 

Дакле, то је веома озбиљан тон. Хајде да застанемо за само неколико секунди да разбијем напетост. 

[Мусиц плаиинг] 

Давид Ј. Малан: У реду, Па како је то за СЕГУЕ? Данашњим примарних тема. Први од којих је апстракција. Још једна од којих ће бити представљање података, који искрено је заиста сува начин да се каже како можемо иде о решавању проблема и размишљања о решавању проблема? Тако да сте видели у нуле, а ти си види можда већ у псет1 са Ц да не само да можете да користите функције, као и принтф, да други људи у године прошло је написао за вас. Такође можете да пишете своје функције. 

И иако можда нећете имати то учинио у Ц, а искрено се псет1 ти стварно не треба да напишете сопствене функције јер је мали проблем док је можда застрашујуће у Прво гланце-- видећете може на крају бити решен са нису сви да многи линија кода. Али је са тим, рекао је, у погледу писања своју функцију, схватите да не даје Ц ти ову могућност. 

Идем да иде у данашњем изворног кода, који је доступан већ на мрежи, и ја ћу ићи напред и отворени уп програм под називом функција 0.Ц, и у функцији нула ћемо видети неколико ствари. У првим редовима од 18 до 23 је мој главни функција. И сада да смо почињу да читају код да ми не пишете на лету, већ сам написао унапред или да сте у проблему сет може да добије што написан у унапред. Добар начин да започнете читање код туђе је изгледа за главну функцију. Схватим где је унос Поента је да се ради програм, а затим га следе логично одатле. 

Дакле, ово програм очигледно Принтс Ваше име праћено двотачком. Онда користимо ГетСтринг из ЦС50 библиотеке да се стринг, или реч или фразу од корисника на тастатури. И онда је ово ствар овде-- ПринтНаме. 

Сада ПринтНаме није функција која долази са Ц. То није у стандардном ио.х. То није у ЦС50.х. То прилично је у истом фајлу. Приметити ако ја идите доле А бит-- линија 25 до 27-- то је само прилично начин коментарисање шифру помоћу звезде и косе црте. То је мулти-линија коментар, а то је само Мој опис у плаветнило шта ова функција ради. 

Јер у редовима 28 до 31, Написао сам супер једноставан функцију чије име је ПринтНаме. Потребно је колико аргументи би ти рекао? Тако да се аргумент-- јер постоји један Аргумент наведени унутар заграда. Тип који је Стринг. Што ће рећи ПринтНаме је овако црне кутије или функцију која узима као улаз стринг. 

А име тог Стринг повољно ће бити име. Не ради, не Н, али име. Дакле, шта ПринтНаме радим? Лепо је једноставно. Баш као што једна линија кода за принтф, али изгледа да га Принтс оут "Здраво", тако и тако. Где тако и тако долази из аргумента. 

Сада то није велика иновација овде. Заиста, узео сам програм који би могао су написани са једном линијом кода стављањем ово овде, и променио га на нешто који укључује неких шест или седам, или тако линија кода скроз овде. 

Али то је бављење Принцип познат као апстракција. Врста енцапсулатинг унутар нова функција која има назив, и боље али то име буквално каже шта то ради. Мислим да то није принтф-- посебно описни. Ако желим да се створи Пуззле комад, или ако сам желимо да створимо неку функцију да је штампа нечије име, лепота то уради је да сам заиста могу дајте ту функцију име који описује шта ради. 

Сада је потребно у улаз који Ја сам звао произвољно име, али и то је предивно описно уместо да буде мало више Генериц као С. и празнина, за сада, само значи да ова функција не предајте ме ништа. Није као да је ГетСтринг Буквално ми предаје назад стринг као што смо урадили са папирићима са својим друговима прошле недеље, већ само има споредне ефекте. То штампа нешто на екрану. 

Дакле, на крају дана, ако правимо функција-0, ./фунцтион-0, ћемо видети да је пита за моје име. Куцам Давида, а врсте се моје име. Ако ја то поново са Робом, то ће рећи "Здраво, Роб." Тако једноставна идеја, али можда екстраполирамо од овога ментално да као ваши програми се мало компликованије, и желите да напишете комад број и позив који бројеве-- инвоке да бројеве-- неки описни именом као ПринтНаме, Ц не приушти нам ову могућност. 

Ево још једног примера једноставно. На пример, ако се отвори филе од данас зове ретурн.ц, приметили шта сам овде урадио. Већи део овог је главна функција принтф. Прво сам произвољно иницијализирате променљива звао к на број 2. Онда одштампате "к је сада % И "пролази у вредности од к. Тако да сам само кажем шта је то. 

Сада сам само храбро тврдећи са принтф. Ја цубинг ту вредност к, и ја сам Чинећи то позивом функције зове коцка пассинг у Кс као аргумент, а затим сачувате излаз у самом променљиве, к. Тако да сам цлобберинг вредност к. Ја сам највеце вредност к са год резултат позивања Ова функција је коцка. И онда сам само одштампате неке паперјаст ствари овде каже оно што сам урадио. 

Дакле, шта је онда коцка? Приметити шта је у основи другачије. Ја сам дао функцију име као и раније. Ја сам наведено име аргумента. Овај пут то се зове н уместо имена, али сам могао назвати шта хоћу. Али ово је другачије. Ово са леве стране. Раније је то било оно што кључне речи? Момци. Сада је очигледно Инт. 

Дакле, шта је, можда узети? Док неважећих означава врста ништавило, а то је био случај. ПринтНаме ништа вратио. Јесте нешто, али није ми вратити нешто што сам могао да стави на левој страни знаком једнакости као да сам овде урадио на линији 22. 

Дакле, ако ја кажем на он лине 30, шта је то вероватно подразумева о томе шта ради Цубе за мене? Да? Враћа цео број. Тако да ми руке назад, за пример, парче папира на којој је написао одговор. 2 Цубед, или 3 на куб, или 4 цубед-- год сам прошао у, и како сам спроведе ово? Па, само н пута н пута н Тако сам могао коцке вредност. Дакле, поново, Супер Симпле идеја, али демонстративни Сада како можемо писати функције које нас заправо имао Назад вредности које могу бити од интереса. 

Погледајмо Последњи пример Овде се зове функција Оне. У овом примеру, почиње да добијете више убедљив. Дакле, у једну функцију, ово програм-- Нотице крају позива функција зове ГетПоситивеИнт. ГетПоситивеИнт није функција у ЦС50 библиотеци, али ми смо се одлучили бих волео да постоји. 

Дакле, ако се померите надоле касније у датотеци, приметили како сам о спровођењу добије позитиван ИНТ, и ја кажу да је више убедљив јер је ово пристојно број линија кода. То није само глупо мала играчка програма. То је заправо има неку проверу грешака и радите нешто корисно. 

Дакле, ако нисте видели проход видео да смо уграђене у псет1, знају да је ово врста петља у Ц, слична по духу са врстама ствари Сцратцх може да уради. И уради каже ово. Одштампати ово. Онда само напред и да н-- добити инт и чувајте га у Н, и имајте то опет и опет и раде опет докле год н је мање од једног. 

Па н ће бити мање од једне само ако човек не сарађује. Ако он или она куцање у 0 или -1 или -50, Ова петља ће се задржати поново и поново извршава. И на крају приметио сам једноставно вратити вредност. Тако да сада имамо функцију то би било лепо ако ЦС50 ће спровести у ЦС50.х и ЦС50.ц за вас, али овде сада можемо примену овог сами. 

Али два коментара о неким кључним детаљима. --виберите-- Зашто сам изјављујем инт н, мислиш, на линији 29 уместо да само ради ово овде, који је више у складу са оно што смо урадили прошле недеље? Да? Добра мисао. Дакле, ако смо били да га стави Овде, то је као да смо чувајте га опет и опет декларисање. То само по себи није није проблематично, по себи, јер нам је потребно само вриједност једном и онда ћемо ионако добити нову. Али добар мисао. Да? 

Близу. Зато што сам проглашен н о линија 29 изван петље, је доступан у целој цела ова функција. Не друге функције, јер н је и даље унутар ових Цурли протезе овде. Па-- сигуран. 

Тачно. Дакле, ово је још до тачке. Ако смо уместо тога прогласили Н овде на линији 32, то је проблематично што гуесс Где другде треба да јој приступе? Он лине 34 и једноставно правило је да можете користити само променљива унутар најновијих заграда у којој сте га прогласили. 

Нажалост, линија 34 је једна линија прекасно, јер сам већ затворио Цурли Браце на линији 33 да одговара Цурли Браце он лине 30. И тако да је ово начин да се каже да је ова променљива инт се сцопед, да тако кажем, да само унутра тих заграда. То једноставно не постоји ван њих. 

Дакле заиста, ако урадим ово погрешно, дозволите ми да спаси код као што погрешно је-- написано. Пусти ме само напред и правимо функција-1, и нотице-- грешка. Употреба необјављеног идентификатора Н он лине 35, што је овде. И ако ми крећите се горе Даље, још један. Употреба непријављеног идентификатор н он лине 34. 

Тако компајлер, Цланг, уочава да је то само не постоји иако Јасно је да има визуелно. Тако једноставно поправити је прогласивши тамо. 

Сад ме пустите да дођете до врх датотеке. Оно што скаче на вас као бити мало другачији од ствари које смо гледали прошле недеље? Не само да имам име, не само да Имам неке оштар обухвата Уп Топ, Имам нешто што сам називајући прототип. Сад изгледа ужасно слично ономе што смо видели пре неколико тренутака на линији 27. 

Па хајде да закључити из другачије порука о грешци Зашто сам урадио ово. Пусти ме само напред и постоји избришите ове редове. И тако смо ништа о прототипу знам. Ремаке овај фајл. Направите једну функцију. А сада, проклетство, четири грешке. Хајде дођите до првог. 

Имплицитна декларација функције добити позитивно инт је неважећи у Ц99. Ц99 само значи 1999 верзија језика Ц, што је оно што ми заиста користите. Дакле, шта то значи? Добро Ц-- и конкретније Ц цомпилерс-- су прилично глупи програми. Они само знаш шта си рекао им, и то је заправо тематски од прошле недеље. 

Проблем је у томе да ако одем О спровођењу име овде, и ја позовем функцију која се зове ГетПоситивеИнт овде на линији 20, та функција је технички не постоје све компајлер види линију 27. На жалост, компајлер је раде ствари топ, доле, лево, десно, зато што није видео имплементација ГетПоситивеИнт, али види ти то покушаваш да га користи овде, само ће баил-- викати на си са грешком можда Мессаге-- загонетан, а не ствари саставити фајл. 

Тако тзв прототип уп овде је додуше сувишан. Дословно, отишао сам овде и ја копирао и залепио то, а ја ставио га овде. Воид би било правилно, па ћемо буквално копирајте и налепите га овај пут. Ја буквално копирали и налепили га. Заиста само као као презла. 

Мали траг на компајлер. Ја не знам шта је ово ради још, али ја обећавам теби да ће постојати на крају. И зато овај лине-- у линија 16-- завршава зарезом. То је сувишан по дизајну. Да? 

Ако нисте повежете библиотеку до то-- Ох, добро питање. СХАРП укључује заглавље датотеке инклузије. Потребно је да бити-- треба скоро увек бити на самом врху датотеке за симилар-- за потпуно истог разлога, да. Јер у стандард ио.х је буквално линија овако, али са речи принтф, и са својим аргументима и његов тип повратка. Па тиме оштра укључују горе овде, шта си буквално радите је копирате и налепите садржај од неко други написао горе. Тиме цлуинг свој код, да Чињеница да те функције постоје. Да? 

Апсолутно. Тако да веома паметан и исправна решење би било, знаш шта? Ја не знам шта прототип, али знам ако сам разумео да је Ц је само глуп и ретхинкс врха до дна. Па хајде да дамо оно што жели. Хајде да смањи тај број, налепите га врх, а сада гурните главни доле. То такође ће решити проблем. 

Али ти би могао врло лако доћи до сценарио у коме треба да позовете Б, а можда Б позива назад на А. Тхис је нешто што се зове рецурсион, а ми ћемо се вратити на то. И може или не може бити добар ствар, али се дефинитивно може разбити ово решење. 

И штавише, ја бих тврде стилски, посебно када програме постају толико дуго и тако дуго, то је само супер згодно да стави главни на врху зато што је ствар највише Програмери ће да брину о томе. И тако је мало чистији, вероватно, да то на начин Првобитно сам то урадио са прототип још мада изгледа мало сувишан на први поглед. Да? Жао нам је, да ли пише гласније? 

Ако пребаците локације имплементацију и прототип? Дакле, то је добро питање. Ако сте поново прогласи ово доле овде, хајде да видимо шта се дешава. Дакле, ако сам ставио ово доле Овде, кажете. Ох, извини. Гласније? Још гласније. Ох, добро питање. Да ли би то поништити функцију? Знате, после свих ових година, никада после тога стави прототип. Па хајде да урадимо да фунцтион-1 После тога. 

[Мрмљање] Давид Ј. Малан: О, чекај. Ми још увек морамо да све стави горе. Па хајде да урадимо ово овде, ако сам разумевање питање исправно. Стављам све, укључујући и прототип изнад главни, али ја постављам прототип испод имплементације. 

Дакле, ако направим један, ја добијам Назад еррор-- неискоришћена променљива н. Ох, ево. Хвала вам. Да видимо, да се отарасимо овога. То је другачији Буг, Дакле, хајде да то игнорисати. Хајде да веома брзо ремаке ово. 

У реду, тако да се подаци не аргумент користи формат стринг н-- Ох, то је зато што Променио сам се ово овде. У реду, ми знамо шта је одговор иде да-- реду, идемо. Ах, хвала за позитиван. У реду, ја ћу поправити овај код афтер-- игноришу ову конкретну грешку јер ово сам-- то ради је одговор. 

Тако да не препишете оно што сте управо урадили. Сумњам компајлер је написан на такав начин да је игнорисање свој прототип јер тело, да тако кажем, функције је већ спроведен већи горе. Ја бих да се заиста консултују приручник компајлер да разумем ако постоји било који други импликације, али на први поглед само покушавам и експериментисање, изгледа да нема утицаја. Добро питање. 

Па хајде да испред фалсификује сада, креће далеко од нежељених ефеката који су функције које тако нешто визуелно на екрану са принтф, али не врати вредност. И функције које су повратак Вредности као што смо управо видели неколико. Ми смо већ видели овај појам обима, па ћемо видети опет и опет. Али за сада, опет, користити правило да променљива може се користити само унутар недавно отворио и затворене цурли протезе Ас Ве видела у том примеру. 

И као што сте истакли, постоји абилити-- можете да решите неке од ових проблема стављањем променљиву глобално на самом врху датотеке. Али у скоро свим случајевима бисмо мршти на то, и заиста не чак иду у том решењу за сада. Дакле, за сада, да Такеаваи променљиве имају овај појам обима. 

Али сада хајде да погледамо другу сува начин заправо гледа неке прилично интересантне Детаљи имплементације. Како бисмо могли представљати информације. И ми смо већ гледали ово у првој недељи класе. Гледајући у бинарне, и подсећамо на децимала. 

Али сећам из прошле недеље да је Ц има различите врсте података и Бунцхес море, али су најкорисније оне за сада може бити ово. Чар, или карактер, што се дешава да буде један бајт, или осам бита Тотал. А то је да се каже да је величина од Цхар је само један бајт. Бајт је осам битова, па то значи да можемо представљати колико карактера. Колико писама или симболи на тастатури ако имамо један бајт или осам бита. Сетите се недељу нула. Ако имате осам бита, Колико укупне вредности можете представљати са обрасци нула и јединица? --виберите-- Више од тога. Па 256 Укупно Ако вам почети да броји од нуле. Дакле, ако имате осам битс-- Дакле, ако имали наше бинарне сијалице овде опет, могли бисмо да се оне сијалице на а у сваком од 256 јединствених образаца. 

Сада је то мало проблематично. Не толико за енглески и Романски језици, али сигурно када увести, за Рецимо, азијске језике, који имају далеко више симбола него као 26 слова азбуке. Ми смо заправо можда ће бити потребно више од једног бајта. И на срећу у последњих година друштво усвојени други стандарди који користе више од један бајт по наплате. 

Али за сада у Ц, подразумевани је само један бајт или осам бита. Цео број, у међувремену, је четири бајтова, иначе познат као 32 бита. Што значи да оно што је највећи могући број можемо представљати са инт очигледно? Са милијарду. Тако да је четири милијарде дати или узети. 2. до 32тх власт, ако преузима никакву негативних бројева и само користите све позитивне бројеве, то је четири милијарде дати или узети могућности. Плутају, у међувремену, је другачији тип типа података у Ц. То је још увек број, али је реалан број. Нешто са децимални зарез. И испоставило се да Ц такође користи четири бајта да представља покретном зарезу. 

Нажалост, колико плутајући Вредности Поинт постоје у свету? Колико има реалних бројева постоје? Постоји бесконачан број, а за то питање постоји бесконачан број целих бројева. Дакле, ми смо већ некако копање себи рупу овде. При чему очигледно у цомпутерс-- у Најмање програма писаних у Ц на њих-- могу само да рачунају као висок као Четири милијарде дати или узети, и покретном зарезу могу само наизглед има неки коначан износ од прецизности. Само толико цифара после њихова децималне тачке. 

Због, наравно, ако имате само 32 бита, Не знам како ћемо да идемо Абоут представља прави нумберс-- вероватно са различитим врстама образаца. Али сигурно постоји коначан број таквих образаца, Па ево, такође, ово је проблематично. 

Сада можемо избећи проблем мало. Ако не користите флоат, можете да користите двоструки у Ц, што вам даје осам бајтова, што је много више могуће обрасци нула и оне. Али је још увек коначан, који ће да буде проблематично ако пишете софтвер за графику или за фенси математичким формулама. Дакле, ви у ствари можда ћете желети да рачунају се већи од тога. Дуго лонг-- глупо намед-- је осам бајтова или 64 бита, и то је дупло дуже као инт, и то је за дуго целобројну вредност. 

Забава фацт-- ако инт је четири бајта, Колико дуго је дуго Ц типично? Такодје четири бајта, али дуго дуго је осам бајтова, а то је из историјских разлога. 

Али сада Такеаваи је само да су подаци да буду заступљене у цомпутер-- који је физички уређај са електричном енергијом, то је углавном вози Те нуле и онес-- са ограниченим количинама прецизности. Па шта је онда проблем? 

Па постоји проблем целобројног преливања. Не само у Ц, али у Рачунари уопште. На пример, ако је ово је бајт вреди бит-- Дакле, ако је то осам бит-- све од којих су број један. Који број је ово представља ако претпоставимо то је све позитивне вредности у бинарном? 

255, и то није 256, јер нула је најмањи број. Дакле, 255 је највиши један, али проблем се претпоставити да сам желео да повећавати ову променљиву да користи осам битова тотал ако желим да га прираста. 

И чим додам један до свих ових оних, можете можда да замислите тек висуалли-- као што носи онај помоћу децималс-- нешто ће да тече улево. И заиста, ако додам број један до тога, шта се дешава у бинарном је да врати на нулу прелива. 

Дакле, ако сте само Користи, не ИНТ, али једнобајтни бројати целе бројеве у програму, тако подразумевани чим дођете до 250, 251, 252, 253, 254, 255-- 0 долази после 255, што је вероватно није шта корисник ће очекивати. 

У међувремену, у сада плутајући тачке света, такође имају сличан проблем. Не толико са највећим нумбер-- мада је то још увек проблем. Али са количином прецизности да можете да представљају. Дакле, хајде да погледамо у овом примеру Овде такође из данашње изворног бројеве-- флоат-0.ц. 

И приметите да је супер једноставан програм који очигледно треба да одштампате коју вредност? Шта које зарадите ово ће да штампа иако има мало нових синтаксе овде? Тако надам 0.1. Па еквивалент једну десетину јер ја радим 1 подељено са 10. Ја складиштење одговор у променљивој под називом Ф. То је променљива типа флоат, која је кључна реч сам предложио постојала. 

Не смо видели раније, али То је врста уредан начин у принтф да одредите Колико цифара си Желим да видим после децималне тачке. Дакле, ово нотација само значи да овде је чувар места. То је за плутајуће тачке вредност, и ох, успут, показују га децималног зареза са један број после децималне тачке. Тако да је број значајних цифара, да тако кажем, да би желите. 

Дакле, дозволите ми само напред и урадите да плутају-0, ./флоат-0, и очигледно 1 подељено са 10 је 0,0. Зашто је ово? 

Па опет, рачунар је узимање ја буквално, а ја сам написао 1 и ја написао 10, а узети погодите шта је преузела тип података та два вредности? Инт, је технички нешто мало другачије. То обично је дуг, али је коначно саставни вредност. Не флоатинг поинт вредност. 

Што ће рећи да ако је то је инт и ово је инт, Проблем је у томе рачунару нема способност чак бележимо децимални зарез. Дакле, када то урадите 1 подељено од 10 Употреба целих и за бројилац и именитељ, одговор би требало да буде 0,1. Већ зато што цомпутер-- то су интегерс-- не зна шта да ради са 0.1. 

Дакле, шта је то јасно ради? То је само то бацање, И шта сам на крају видим је 0.0 само зато што сам инсистирао да принтф ми покажи један децимални зарез. Али проблем је да ако поделити цео број од стране цео број, ћете добијам-- по дефиницији од Ц-- цео број. И то неће да уради нешто лепо и удобно попут Роунд га до најближа горе или доле. То ће скратити све после децимала. 

Дакле, само интуитивно, шта је вероватно поправити? Шта је најједноставнији поправити овде? Да? Тачно. Зашто не бисмо третирамо их као ефикасно покретном зарезу претварајући их у сплавова или парова. А сада, ако ја да плута-0, или ако сам састави плута-1, који је идентичан са оно што је управо предложен. И сад ја плута-0, сад узмем 0.1. 

Сада ово је невероватно. Али сада ћу да радим нешто мало другачије. Радознао сам да видим шта је заиста дешава испод хаубе, а ја ћу да одштампате ову се да 28 децимале. Желим да видим стварно 0.1000-- инфините-- [Неразумљиво] 27 нуле после тог 0.1. 

Па хајде да видимо да ли је то оно што сам заиста добити. Направите плута-0 исти фајл. ./флоатс-0. Хајде да зумирате на драматичном одговор. Све ово време, био си мислила 1 подељено са 10 је 10%, или 0.1. То није. Бар тако далеко компјутер је забринут. 

Сада зашто-- ОК, то је потпуна лаж 1 подељено са 10 је 0,1. Али зашто-- то није Такеаваи данас. Па зашто компјутер мисли, За разлику од свих нас у соби, да је 1 подељено са 10 је заправо толико луд вредност? Шта је компјутер ради очигледно? Шта је то? 

Није Оверфлов, по себи. Прекорачење обично када ви обмотана вредност. То је ово питање непрецизности у покретним зарезом вредности где имате само 32 или можда чак и 64 бита. Али ако постоји бесконачан Број реалног нумберс-- бројеви са децимале и бројеви тхереафтер-- сигурно не могу представљати све њих. Тако да рачунар је дао САД најближи меч за вредност може представљати користи да многе бит на вредност ја заправо желим, што је 0,1. 

Нажалост, ако је почнемо да радимо математику, или ти старт укључивања ових врста флоатинг Поинт вредности у важним програмс-- финансијског софтвера, војни софтваре-- ништа где је перцепција је Вероватно врло важно. И почнете додавањем бројева као што је овај, и почети руннинг тај софтвер са заиста великим улаза или за много сати, или парцела дана или много година, Ови мали Литтле грешке сигурно може додати током времена. 

Сада као страну, ако сте икада Видео Суперман 3 или пословни простор а можда сећате како ти момци украли много новца од њиховог рачунара помоћу покретном зарезу и сабирање мало остаци, надамо се да филм Сада има више смисла. То је оно што су били алудирајући на у том филму. Чињеница да већина компаније не би изгледала после одређеног броја децималних места, али они су фракције центи. Тако да почнете да их сабирањем, почнете да направите много новца на ваш банковни рачун. Дакле, то је Пословни простор објаснио. 

Сада, нажалост, изван Канцеларијски простор, ту су неки легитимно узнемиравајуће и значајних утицаја ових врста основне одлуке дизајн, и заиста један од разлога користимо Ц у току је, тако да заиста имају ову земљу до разумевање како рачунари раде, како софтвер ради, и не узети ништа здраво за готово. 

И заиста, нажалост, чак и са то основно разумевање, ми људи правимо грешке. И оно што сам мислио да ћу поделити је Ова осам минута видео овде предузети из Модерн Марвелс епизоду, која је Едукативни шоу како ствари функционишу да боје две слике од када Неправилна употреба и разумевање покретном зарезу довело до неке значајне несрећни резултата. Хајде да погледамо. [ВИДЕО РЕПРОДУКЦИЈА] -Ми Сада се врати на "Енгинееринг Катастрофа "на савременим чуда. Компјутери. Сви смо дошли да прихвати често фрустрирајуће проблеми који Имам са њих-- бубе, вируса, и Софтвер глитцхес-- за мале цене да плати за практичност. Али у високе технологије и високе брзине војних и свемирског програма апликације, најмањи проблем може бити увећане у катастрофу. 

4. јуна 1996, научници припремљен да покрене беспилотну Аријана 5 ракета. Је носио научна сателити дизајниран прецизно како успоставити Земљино магнетно поље у интеракцији са соларним ветровима. Роцкет је изграђена за Европска свемирска агенција, и подигне из свог објекта на обали Француска Гвајана. 

-На Око 37 секунди у лет, прво Приметио нешто кренуло наопако. Да су млазнице су свивелинг на неки начин они стварно не би требало. Око 40 секунди у лету, очигледно возило је у невољи, а то је, када су направили Одлука да га уништи. Безбедност РО, уз огромни Гутс, притиснуо дугме и дигли у ваздух ракету пре него што је постане опасност за јавну безбедност. 

Ово је била лепотица Воиаге оф тхе Ариане 5, и њено уништење узео место због мана уграђен у софтверу ракету екипе. -Проблем На Аријана је да постоји је број који је потребно 64 бита да изразе, и они су желели да конвертујете је на 16-битни број. Претпоставили су да је број никада неће бити велики. Да је већина тих цифара у 64-битни број је нула. Били су у праву. 

-тхе Неспособност једног софтверски програм да прихвати врста броја генерише друга је била у корену неуспеха. Развој софтвера је постала врло скупо део нове технологије. Ариане 4 Роцкет имао била веома успешна. Толико софтвера створене за је такође коришћен у Ариане 5. 

-тхе Основни проблем је да Аријана 5. Је фастер-- убрзан брже, и Софтвер није рачуноводствено за то. 

-тхе Уништавање ракете била огромна финансијска катастрофа. Све због минут софтверска грешка. Али то није био први тиме проблеми Конверзија података је долазило модерну ракетне технологије. 

-у 1991 са почетка првог Заливског рата, Патриот ракета доживели сличну врсту проблема конверзија број. И као резултат 28 људи-- 28 Америцан солдиерс-- убијено, и око стотину рањено. Када Патриот, који је требало за заштиту од долазеће СКАД-ови, није успео да испали пројектил. 

Кад Ирак напао Кувајт, а Америка покренута Десерт Сторм почетком 1991, Патриот ракета батерије су распоређене да штити Саудијску Арабију и Израел од ирачких Сцуд ракетних напада. Патриот је САД средњег домета Сурфаце-ваздух систем произведен од стране компаније Раитхеон. 

-тхе Величина Патриот интерцептор итселф-- то је дуга око око 20 метара, и тежак око 2.000 килограма. И она носи бојеву главу од око, Мислим да је то отприлике 150 фунти. И сама бојева глава је Хигх Екплосиве, која има фрагмената око њега. Тако да кућиште бојеве главе је дизајниран да се понашају као сачме. 

-Тхе Ракете спроводе по четири у контејнеру, и транспортује од стране полуприколица. 

-тхе Патриот Анти-ракетни систем сеже најмање 20 година. Првобитно је пројектован као ваздушна одбрана ракета да оборе непријатељске авионе. У првом Заливском рату када се то рат дошао, Војска је желео да га користите за оборе СКАД-ови, а не авионе. Ирачки ваздухопловство је Није толико проблем, али војска била забринута за СКАД-ови. И тако су покушали да надоградили Патриот. 

-Интерцептинг Непријатеља пројектил путује Мацх 5 је требало да буде довољно изазован. Али када Патриот је пожурио у сервис, Војска није био упознат са Ирачки модификација која данас СКАД-ови скоро немогуће. 

Шта се десило је СКАД-ови које су долазили у били нестабилни. Били су климаво. Разлог за то је био Иракис-- како би се 600 километара од од 300 километара домета миссиле-- узео тежину из предњег бојеве главе, и направио бојева глава упаљач. Тако да сада Патриот покушава да дође на Сцуд, и већина тиме-- огромна већина тиме-- То би лети од Сцуд. 

-Након Система оператора Патриот схватио Патриот промашила циљ, они активирао Патриот бојеву главу да се избегну могуће жртве ако се било дозвољено да падне на земљу. 

То је оно што већина људи видели као велики ватрене лопте на небу, и разумео као пресретнути Сцуд бојевих глава. 

-Али Ипак у ноћним небом, Патриотс изгледа да се успешно уништава СКАД-ови, у Дхахрана није могло бити нема грешке о свом раду. Ту радарски систем у Патриот изгубио појам о долазном Сцуд и никада није покренута због до неког софтверског ману. 

То је био први пут откривен Израелаца који да дуже систем био на, већа време неслагање постао. Због сат ембеддед у рачунару система. 

Око две недеље пре трагедија у Дхахран, Израелци пријавио Министарство одбране да је систем губи време. После око осам сати трчања, они су приметили да систем је постао приметно мање прецизна. Министарство одбране је одговорио говори све Патриот батерија да не остављају системе на за дуго времена. Никада нису рекли шта је било дуго времена. 8 сати, 10 сати, хиљаду сати. Нико није знао. 

-тхе Патриот батерије стационирани у касарни на Дхахрана и његова погрешна унутрашња сат је био преко 100 сати у ноћи 25. фебруара. 

-То Багер времена са тачношћу од око једне десетине секунде. Сада десетину секунде је занимљив број јер се не може се изразити у бинарни тачно, што значи да се не може тачно изражена у сваком савременом дигиталном рачунару. Тешко је поверовати, али користите ово као пример. 

Узмимо број један трећину. Једна трећина не може бити изражен у децимала тачно. Једна трећина је 0.333 траје бесконачно. Не постоји начин да то урадите са апсолутна прецизност у децимала. То је тачно врста проблема то се десило у Патриот. Дуже систем водио, горе време грешка је постао. 

-после 100 сати рада, грешка у време била само једна трећина секунде. Али у смислу циљања пројектил путује Мацх 5, је резултирало у трацкинг Грешка од преко 600 метара. Било би фатална грешка за војнике у Дхахрана. 

Шта се десило је Сцуд лансирање је било детектован сателита раног упозорења, и они су знали Сцуд долази у њиховом правцу. Они нису знали одакле долази. Је сада до радара компонента система Патриот бранећи Дхахран да лоцира и задржати Трацк долазног непријатеља ракете. 

-тхе Радар је био веома паметан. То би заправо прате положај Сцуд а онда предвиђа где вероватно ће бити следећи пут Радар послао импулса. То се зове капија опсег. 

Онда једном Тхе Патриот одлучује има довољно времена прошло да се вратим и проверим следећа локација за ову откривени објекат иде назад. Дакле, када се вратила у наопако место, онда не види објекат. И одлучи да није било предмет. Да је лажна детекција и капи нумеру. 

-тхе Инцоминг Сцуд нестао са радара, и секунди касније, ударио у касарну. Скад убио 28. То је био последњи отказ током првог Заливског рата. Трагично, ажуриран софтвер стигао у зору наредног дана. Софтвер мана је имала су исправљене, затварање једно поглавље у невољи историја Патриот ракете. 

[ЕНД ВИДЕО РЕПРОДУКЦИЈА] 

Давид Ј. Малан: То је то за ЦС50. Видимо се у среду. 

[Мусиц плаиинг]