[Мусиц плаиинг] Давид Ј Малан: У реду. Ово је ЦС50 и ово је почетак недеље 2. А ви се сећате да преко задњих пар недеља, смо увођења рачунара науке и, заузврат, програмирање. И почели смо причу путем Сцратцх, који графички језика од Медиа Лаб МИТ. А онда недавно, прошле недеље, да ли смо увести хигхер-- А језика нижег нивоа познат као Ц, нешто што је чисто текстуални. И, заиста, последњи пут смо истражио у том контексту велики број концепата. Ово, опозив, био је веома Први програм смо гледали. И овај програм, једноставно, исписује, "Хелло, ворлд." Али има толико наизглед магија дешава. Ту је ово #инцлуде са овим угластим заградама. Има Инт. Ту је (празнина). Има заграде, цурли протезе, полу-Црева, и још много тога. И тако, сећам се да увели смо Сцратцх тако да смо могли, идеално, види прошлост да синтакса, ствари које стварно не све је интелектуално Интересантно али рано је, апсолутно, мало зезнуто да ће завршити свој ум око. И, заиста, један од најчешћих ствари рано у класи програмирање, посебно за оне мање удобан, је да се фрустриран и лоше написаног одређеног Синтацтиц грешке, да не помињемо логичке грешке. Па међу нашим циљевима данас, заправо, хоће бити да вас опреми са неким за рјешавање проблема технике о томе како да боље решавају проблеме сами у облику отклањање грешака. А ви се сећате, такође, да је окружење које смо увели последњи пут звао ЦС50 САТА. Ово је веб-базиран софтвер који омогућава да подесите у облаку, да тако кажем, задржавајући све своје фајлове заједно, као што смо поново ће данас. И сећам се да смо ревиситед ове теме овде, међу њима функције и петље, и варијабле, и Боолеан изрази, и услови. И заправо још неколико који смо ми преведено из света Сцратцх на свету Ц. Али основни зграда блокови, да тако кажем, су заиста још увек исти прошле недеље. У ствари, стварно сам имао различит слагалице, ако хоћете. Уместо тога љубичаста саве блок, уместо тога је принтф, која је ова функција у Ц да омогућава вам да одштампате нешто и форматирање га на екрану. Увели смо ЦС50 Библиотека, ти где су сада На располагању гет_цхар, и гет_инт и гет_стринг, и неколико других функција у добро, преко којих можете добити улаз од корисника тастатуре. А такође смо узели погледамо ствари као тхесе- боол, и цхар, и двоструко, пловак, Инт, лонг_лонг низ. И ту је чак и друге врсте података у Ц Другим речима, када се изјасне променљива за чување неку вредност, или када имплементира функције да врати неку вредност, можете одредити шта тип вредности која је. Да ли је то низ, као да је низ знакова? Да ли је то број, као цео број? Да ли је то флоатинг поинт вредности или слично? Дакле, у Ц, за разлику од Сцратцх, ми заправо почео да прецизира које врсте података враћали смо се или коришћењем. Али, наравно, такође смо налетели неке основне границе рачунарства. А посебно, ово језик Ц, опозив да је погледамо цео број прекорачења, реалност да ако имате само коначна количина меморије или специфично, коначан број битова, можете само да рачунате тако високо. И тако смо гледали овај пример овде при чему бројач у авиону, Заправо, ако ради довољно дуго да прелије и доведе до софтвера стварна физички потенцијал грешка. Такође гледали флоатинг тачка непрецизност, реалност да само коначном броју битова, да ли је 32 или 64, можете само навести толико бројева после децималног зареза, након чега почињу да се непрецизан. Тако, на пример, једна трећина у свет овде, у нашем људском свету, знамо да је само бесконачан број од 3с након децималног зареза. Али рачунар не може да обавезно представљају безброј бројева ако само дозволити да неки коначна количина информација. Дакле, не само да смо вас опремити са већом снагом у погледу како можете се изразите на тастатура у смислу програмирања, ми такође ограничен шта заправо можете урадити. И заиста, бубе и грешке могу произилазе из такве врсте питања. И заиста, једна од тема данас ће бити теме као што су отклањање грешака и заправо гледа испод хаубе колико су уведене ствари прошле недеље заправо спроводи тако да боље разумети како су могућности и ограничења језика као што је Ц. И у ствари, ми ћемо ољуштити назад слојева најједноставнији структуре података, нешто што се зове низ, који Сцратцх се дешава да позове "листу." То је мало различити у том контексту. А онда ћемо се представити један од Први од наших проблема Домаин-Специфиц у ЦС50, свет криптографија, уметност кодирање или у аифрирање информације тако да бисте могли да шаљете тајне поруке и декодира тајне поруке између две особе, А и Б. Дакле, пре него што транзиције у том новом свету, хајде да покушамо да вас опреми са неким технике са којима можете елиминисати или смањити барем неки од фрустрација да сте вероватно срели је само током протекле недеље. У ствари, пред вама су неки од суцх-- свој први проблеми у Ц. и квоте су, ако сте попут мене, први пут покушате да унесете из програма, чак и ако мислите логички Програм је прилично једноставан, можда врло добро ударио у зид, и преводилац неће да сарађује. Направите или кланг не иде да стварно раде свој наредбе. И зашто би то могао бити? Па, хајде да погледамо, можда, једноставан програм. Ја идем напред и сачувајте ово фајл намерно се зове бугги0.ц, јер сам знао да да буде погрешна унапред. Али ја не могу схватити да уколико то је први или други или трећи програма да сам стварно што се. Тако да идем напред и откуцати, маин (). И онда унутар мојих заграда, веома познат ( "здраво, ворлд-- обрнуте косе црте, Н ") - и полу-дебелог црева. Спасао сам фајл. Сада ћу да одем доле на мом прозору терминала и тип Марка бугги0, јер, опет, име датотеке данас је бугги0.ц. Па куцам да бугги0, Ентер. И, ох, боже, сећам из последње време да нема порука о грешци је добра ствар. Тако да нема излаз је добра ствар. Али овде сам се јасно неки број грешака. Тако првој линији излаза после куцања направи бугги0, опозив, је цланг је прилично опширан излаз. Испод хаубе, ЦС50 САТА је конфигурисан да користе гомилу Опције са овом компајлер тако да немате да мислим о њима. И то је све што прва линија значи да почиње са цланг. Али после тога, проблеми почињу да дају свој изглед. Бугги0.ц он лине 3, карактер 5, постоји велика, црвена грешка. Шта је то? Имплицитно проглашавајући библиотека функцију принтф са типом инт (цхар *, ...) [-Веррор]. Мислим, да је врло брзо постаје веома волшебни. И наравно, у почетку поглед, не бисмо Очекујем да схвате целина те поруке. И тако једна од лекција за данас иде да да покушате да приметити обрасци, или сличне ствари, грешака можете имати наишао у прошлости. Дакле, да задиркују разликују само те речи које изгледају познато. Велики, црвени грешка је јасно симбол нечега што није у реду. имплицитно изјављујући библиотека Функција принтф. Дакле, чак и ако се не разумем шта имплицитно проглашавајући библиотека функцију средства, проблем сигурно односи се на принтф некако. И извор тог питања има везе са проглашавајући. Проглашавајући функција је га споменути први пут. И ми смо користили терминологију прошле недеље проглашења прототип функција је, или са једном линијом на врху лични фајл или у такозваној заглавља датотеке. И у оно што смо рекли фајл прошле недеље да принтф је цитат, под знацима навода, изјавио? У ком фајл је његов прототип? Дакле, ако се сећате, веома прво што сам откуцани, скоро сваки програм прошле једном-- и случајно је малопре почео куцање себе-- је ово један овде- хасх-- #инцлуде <стио-- за улаз / оутпут-- тачка Х И заиста, ако сам сада спасити ову слику, ја идем да иде напред и разбистрим екран, којима можете урадити куцањем Јасно, или можете држати Цонтрол Л, само да очистите свој прозор терминала само да елиминише неке неред. Ја идем напред и Ре-типа Марка бугги0, Ентер. И ето, ја и даље видим да дуго команда из Цланг, али нема порука о грешци овај пут. И заиста, ако то урадим ./бугги0, баш као и прошли пут, где тачка означава ово директоријум, Сласх само значи, ево име програма и да назив програма је бугги0, Ентер, "Хелло, ворлд." Сада, како би сте прикупити ово решење без обавезно препознавање што више речи као што сам, наравно, да учинио толико година? Па, реализовати по први проблем скуп, ми вас упознати са командом да своје запослене ЦС50 је написао под називом хелп50. И заиста, Ц нема спецификацију за проблем сет како се ово користи. Али хелп50 је у суштини програм који особље ЦС50 је написао да омогућава покретање команда или покренути програм, а ако не разумете свог излаз, да прође свој излаз на хелп50, након чега софтвер да је особље у току је написао ће изгледати на излазу вашег програма ред по ред, знак по знак. И ако, особље, препознати порука о грешци што имате, ми ћемо покушати да вас провоцира са неким реторичка питања, са неким саветима, слично као ТФ или ЦА или себе ће учинити лично у радног времена. Зато погледајте на хелп50 ако не нужно препознати проблем. Али се не ослањају на њега превише као штака. Сигурно покушати да разуме свој излаз, а затим научити од њега тако да те само једном или два пута до увек ради хелп50 за одређену грешку порука. Након тога, требало би да боље се опремљен да схватим шта је то заправо. Хајде да урадимо једну другу овде. Пусти ме само напред, и на други фајл ћемо назвати бугги1.ц. И у овом фајлу сам да делибератели-- али се претварати да не знам разумем шта грешка сам направио. Ја идем напред и до ово-- инцлуде, пошто имам научила своју лекцију од малопре. Маин (), као и раније. А онда овде ћу да до Стринг с - гет_стринг. И сећам из прошлог времена које ово значи, хеј, рачунар, дај ми променљиву, то називају с, и да тип променљиве стринг тако да могу похранити једну или више речи у њему. А онда са десне стране страни знака једнакости се гет_стринг, што је функција у ЦС50 библиотеци да ради управо то. Она добија функцију, а потом руке га са десна на лево. Дакле, ово знак једнакости не значи "Једнако" као што помислити из математике. То значи задатак с десна на лево. Дакле, ово значи, узмите низ од корисник и чувајте га унутар с. Сада ћемо га користити. Пусти ме напред сада и као мало линија, пусти ме напред и рећи "здраво" - не "свет", али "здраво,% успела-- који је наш чувар места, зарез с, што је наша променљива, а затим тачка и зарез. Дакле, ако нисам забрљам превише овде, ово изгледа као исправан код. И моји инстинкти сада да га саставити. Фајл се зове бугги1.ц. Зато ћу да направите бугги1, Ентер. И проклето-то, ако не постоји чак и више грешака него раније. Мислим, има више поруке о грешци да би Изгледа од стварних линија у овом програму. Али је понети овде, чак и ако сте преплављени са два или три или још четири поруке о грешци, фокусирају увек на врло Први од тих порука. Гледајући највише горњем један, сцроллинг натраг према потреби. Дакле, овде сам откуцао маке бугги1. Ево да кланг излаз као што је очекивано. И овде је први црвени грешка. Коришћење црно идентификатора ниска, да ли мислим стандард у? Тако стандард у је заправо нешто друго. То се односи на корисника је тастатура, у суштини. Али то није оно што сам мислио. Мислио сам стринг, а ја мислио гет_стринг. Дакле, шта је то што сам Заборавио сам да овај пут? Оно што недостаје овај пут? Имам свој #инцлуде, тако да имају приступ принтф. Али шта ја немам приступ још увек? Па, баш као и прошли пут, Морам да кажем компајлер Цланг што су ове функције. Гет_стринг не долази са Ц. Конкретно, ит не долази у хеадер филе,. Уместо тога долази у нешто особље је написао, који је другачији фајл наме али пригодно назван. Тако једноставно додајући да једну линију од цоде-- поврат од прошлог пута када кланг ради, иде то лоок ат ми код врха до дна, с лева надесно. То ће приметити, Ох, хоћеш. Пусти ме и сматрају да, где год је на серверу, копирате и налепите га, у суштини, у врху вашег фајл тако да у овом тренутку у причи, линија 1, остатак програма да, заиста, користите неки од функција у њему, међу њима гет_стринг. Па ћу игнорисати остатак тих грешака, јер ја, заиста, сумњају да само први је уствари. И ја идем напред и реприза, након снимања мој досије да бугги1. И ето, то су радили. И ако ја ./бугги1 и укуцајте, за пример, Замила, сада ће добити здраво, Замила, уместо здраво, свет. У реду. Тако су Такеаваис овде онда су се, један, покушати да прикупите колико год можете од само порука о грешци, гледајући неке од препознатљивих речи. Забране да користите хелп50 по проблем сет спецификацију. Али осим тога, такође, увек изгледају у горњем грешци бар у почетку, да видимо шта информације уствари може донети. Али испоставило се да постоји још више функционалности буилт у ЦС50 библиотеку да помогне Ви на почетку семестра и рано у програмирању схватити шта није у реду. Дакле, хајде да урадимо још један пример. Ја ћу назвати бугги2, који, опет, ће да буде погрешна ван капије, по дизајну. И ја идем напред и до #инцлуде. А онда ћу да урадим маин (). А онда ћу да урадите за петљу. Фор (инт И _ 0. и мања од или једнака 10. и ++, а затим у заграда, идем да одштампате само симбол хаштагот овде и нова линија карактера. Дакле, моје намере са овим Програм је једноставно на поновити 10 пута и на сваком итерацији те петље сваки пут кроз циклус, одштампати хеша, хеш-ознаку, ознаку хеша. Један по ред јер ја имају нову линију тамо. И подсјећају да је за петља, по задњи веек-- и добићете више упознат са синтакси да се то користи у пракси пре лонг-- ово ми даје променљива Звао сам и поставља га на 0. Ово повећава И на свака итерација за 1. Па сам иде на 1 до 2 до 3. А онда ово стање у средњи између тачком и зарезом бива проверавати приликом сваке итерацији да сигуран да смо још увек у домету. Дакле, желим да поновити 10 пута, тако да имају неки начин врло интуитивно само пут 10 јер ми је горња граница. А ипак, кад сам покренути ово, након састављање га направити бугги2-- и то не саставити у реду. Тако да немам синтакса грешка овај пут. Пусти ме сада напред и покренути бугги2, Ентер. И сада идите горе. И пусти ме повећање величина прозора. Изгледа да сам 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11. Тако да је 11 ознака хеша, иако Ја сам јасно ставио 10 унутар ове петље. Сада, неки од вас можда видети одмах шта је грешка је јер, заиста, овај није тешко грешка да. Али то је врло често је веома рано. Оно што желим да истакнем, ипак, је, како се ја ово схватим? Па, испоставило се да ЦС50 Библиотека долази са не само гет_стринг и гет_инт и гет_флоат и друге функције. Он такође долази са посебном функцијом зове епринтф, или, грешка принтф. И постоји само да би то мало лакше када отклањање грешака кода за само принт поруку о грешци на екрану и знам одакле је дошао. Тако, на пример, једна ствар могао бих до овде са ова функција је ово-- епринтф, а онда ћу да наставим и саи сада% сам, косих, бр. И ја ћу да прикључите у вредности и. И до врха, јер ово је у ЦС50 библиотеци, Ја идем напред и укључују тако да имају приступ овој функцији. Али, хајде да размотримо шта линија 9 треба да ради. Ја ћу избрисати ово на крају. Ово нема никакве везе са својим општи циљ. Али епринтф, грешка принтф, је само значило да ми дају неке дијагностичке информације. Када сам водим програм, желим да видети на екрану привремено као и само да би разумели шта се дешава. И, заиста, на сваки итерација овде линије 9 Желим да видим, шта је вредност И? Која је вредност И? Која је вредност И? И, надамо се, ја само треба види ту поруку, такође, 10 пута. Па пусти ме само напред, рекомпајлирате мој програм, као што морам да урадим у сваком тренутку Правим промену. ./бугги2. И сада-- реду. Има много више дешава. Па пусти ме дођите у још већи прозор. И видећете да је сваки од хасхтагс још увек штампа. Али између сваке од њих је сада ово дијагностички излаз форматиран на следећи начин. Име мог програма овде је бугги2. Име датотеке је бугги2.ц. Линија број са којег ово је штампан је линија 9. А онда са десне стране то је порука о грешци да сам очекивао. А шта је лепо у вези је то да сада немам да обавезно рачуна у глави оно што је мој програм ради. Видим да на Први итерација и је 0, затим 1, затим 2, па 3, па 4, па 5, затим 6, па 7, па 8, па 9, онда 10. Па цекај мало. Шта се дешава овде? И даље Изгледа да броји као што је предвиђено до 10. Али одакле да почнем? 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 10. Дакле 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10-- 11. прст указује проблема. Изгледа да сам избројао погрешно у мом петљи. Уместо да се иде 10 итерација, Поцињем на 0, Ја сам завршава у и преко 10. Али зато, као и рачунар, Поцињем бројање на 0, Требало би да броји до , али не преко, 10. И тако поправити, на крају сам схватио овде, је једна од две ствари. Могао бих веома једноставно рећи броји до мање од 10. Дакле 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, који је, заиста, исправно, иако то звучи мало погрешно. Или сам могао да урадим мања или једнака до 9, све док почнем на 0. Или, ако стварно не волим то, зар могу да рачунају се кроз 10, али се крећу од 1. Али опет, то једноставно није тако честа појава. У программинг-- додуше не толико у Сцратцх-- али у програмирању у Ц и други језици, као ЈаваСцрипт и Питхон и други, то је само врло уобичајена за наша дискусија о бинарни на само почетак пребројавања на Најмањи број можете, што је 0. У реду. Тако да је епринтф. И опет, сад кад сам схватио мој Проблем, а ја ћу да се вратим на 0 кроз мање од 10, ја идем да иде у и избрисати епринтф. То не би требало да буде тамо када сам брод свој код или достави свој број или га покаже било коме другом. То је заправо само значи да се привремено користе. Али, сада сам фиксни ово Посебан проблем као и. Па, хајде да урадимо још један пример овде да ћу прикупити на следећи начин. Ја идем напред и #инцлуде. $ 50 И ја идем напред и #инцлуде. И ја ћу спасити ову слику као бугги3.ц. И ја идем напред и прогласи маин (). И онда унутар тамо Ја ћу да урадим Инт И _ - Желим да спроведе програм са гет_негативе_инт. Ово није функција која постоји још. Тако да ћемо имплементирати она у само једном тренутку. Али ћемо да видимо зашто то је луд у првом пролазу. И када сам добила инт од корисника, Само ћу да одштампате% и негативна цео број, косих, Н, зарез, ја. Другим речима, све што сам Желим овај програм да ради се добију негативан инт из корисник, а затим одштампати да таква и таква је негативна Инт. Сада треба да спроведе ову функцију. Па касније у мом досијеу, ја идем напред и прогласити функцију која се зове гет_негативе_инт (Воид) - и ми ћемо вратити на оно што та линија опет значи у тренутак-- инт н; Па-- До фолловинг-- принтф н :. А онда ћу да урадим н - гет_инт, и чинити док је н већи од 0. А онда ретурн н ;. Тако да је много дешава у ово али ниједан од којих нисмо погледај прошле недеље, барем на кратко. Дакле, овде лине 10 сам проглашен Функција се зове гет_негативе_инт, и ја сам ставио (празнина), у заграде, разлог је ово не узима улаз. Ја не пролази ништа на ту функцију. Само сам се нешто из ње. А шта ја се надам да вратимо цео број. Нема тип података у Ц зове негативе_инт. То је само инт, тако да ће да се на нас да се уверите да је вредност која је у ствари Враћени није само инт али је такође негативан. Он лине 12 Проглашавам променљиву под називом Н и што га типа инт. А онда у складу 13 до 18 сам ради нешто док нешто је истина. Идем напред и штампање н јест, дебелог црева, а затим размак, као линији за корисника. Тада сам зовем гет_инт и складиштење своју тзв повратну вредност У том променљиве н. Али ја ћу да наставим да радим Истовремено је н већи од 0. Другим речима, ако корисник ме ан даје инт и тај број је већи од 0, Ерго, позитивна, идем да само настави репромптинг корисника, држати репромптинг, тако што их приморава да сарађивати и дај ми негативан инт. И када је н заправо негативе-- Претпостављам корисника на крају типови -50, онда док петља више није истина јер -50 није већи од 0. Тако да изађу из које петља логично и ретурн н. Али има једна ствар коју треба да урадите. И ја једноставно могу да урадим ово од копирања и лепљења једна линија кода на врху фајла. Морам да предајем Цланг, или обећавају да Цланг, експлицитно да ћу, заиста, иди и имплементирати ова функција гет_негативе_инт. То само може бити нижи у датотеци. Опет, сећам се да кланг чита ствари врха до дна, лева на десно, тако да не могу позвати функцију ако цланг не зна да ће постојати. Сада, нажалост, овај програм, као што неки од вас можда приметили, је већ луд. Пусти ме напред и да бугги3. Она саставља, тако да је мој проблем сада није се синтаксна грешка, као грешка текстуалне, Заправо ће бити логичан грешка коју сам намерно сам је као могућност да корак кроз шта се дешава. Ја идем напред Сада и покренути бугги3. И ја идем напред и не сарађују. Ја ћу му дати број 1. То се није допало, па то ме опет довело. Како око 2? 3? 50? Ниједан од оних који раде. Како би било -50? А програм изгледа да ради. Да пробам још једном. Пусти ме да пробам -1, изгледа да ради. Пусти ме да пробам -2, изгледа да ради. Пусти ме да пробам 0. Ха, то је нетачно. Сада смо си мало педантно овде. Али то је, заиста, био случај да 0 није ни позитивно ни негативно. И тако је чињеница да је мој програм је каже да је 0 негативна цео број, то није технички исправна. Е сад, зашто се то ради ово? Па, то би могло бити јасно. И, заиста, програм је требало да буде прилично једноставан тако да морамо нешто да истражују. Али хајде да се уведе трећи отклањање грешака техника овде зове дебуг50. Дакле, ово је програм да смо управо створили ове године под називом дебуг50 који ће вам омогућити да користе оно што се зове уграђени графички отклањање грешака у ЦС50 ИДЕ. А за отклањање грешака је само програм који генерално омогућава да покренете свој програм али корак по корак по корак, ред по ред по ред, паузирање, боде око, гледајући варијабли, тако да програм не само дува поред вас и брзо штампање нешто или не штампају нешто. То вам даје могућност, у хуман спеед, за интеракцију са њом. И за то, ти једноставно урадите следеће. Након састављања код, који сам већ урадио, бугги3, само напред и ради дебуг50 ./бугги. Толико као хелп50 је да покренете хелп50 а онда команда, дебуг50 има покренете дебуг50 и онда име команде. Сада посматрајте шта се дешава на екрану, Са десне стране посебно. Када сам ударио Рун, све од Изненада се десна рука плоча отвара на екрану. И има доста иде на на први поглед. Али нема превише много разлога за бригу још. Ово ми показује све што се дешава у мом програму одмах и преко њих дугмад на врху је тада ми омогућава да се корак по мом коду на крају корак по корак по корак. Али не још увек. Погледајте шта се дешава. У мом прозору терминала Ја сам се затражи за н. И ја идем напред и сарађивати овог пута и унесите -1. И мада мало загонетно, -1 је негативан цео број, као што се очекивало. А онда дете изашао са Статус 0 гдбсервер изласка. ГДЦ, ГНУ Дебуггер, је име софтвера основи који спроводи овај програм за отклањање грешака. Али све то заиста значи, за отклањање грешака отишао јер мој програм отказ и све је било добро. Ако желим да заиста дебуг мој програм, Морам да превентивно рећи дебуг50, где желим да почне степпинг кроз мој код? И можда најједноставнији начин за то је следећи. Ако ја ховер над олук мог уредника овде, тако да заиста само у бочној траци овде, лево од линије број, приметимо да да ако само кликните Једном, ставио сам мало црвену тачку. И та мала црвена тачка, као знак стоп, значи, хеј, дебуг50, извршење пауза од мог кода тамо кад сам покренути овај програм. Дакле, хајде да урадимо то. Пусти ме напред и водим програм опет са дебуг50 ./бугги3, Ентер. А сада, обавештење, нешто разликује се догодило. Ја не буде затражено али у мом прозору терминала за све, јер нисам добила стигли у свом програму. Приметити да он лине 8 који је сада истакнут, и ту је мало стрелица на лево изрека, ви сте овде застао. Ова линија кода, ред 8, још није извршена. А шта је радознао, ако погледам овде са десне стране, приметити да сам је локална променљива, локални у смислу да је у тренутној функцији. И његова вредност, очигледно по дефаулту, и врста повољно, је 0. Али нисам тип 0. То само случајно његов стандардна вредност у овом тренутку. Па пусти ме само напред и уради то сада. Пусти ме само напред и на врх овде, ја сам ићи напред и кликните овај први икону која значи корак више, што значи да не прескачете да али корак преко ове линије кода, извршавање га успут. А сада, приметили, мој брз је управо променио. Зашто је то? Ја сам рекао дебуг50, водим ову линију кода. Шта ова линија кода урадити? Пита ме за инт. ОК. Пусти ме да сарађују. Пусти ме напред сада и тип -1, Ентер. А сада погледајте шта се променило. Са десне стране, мој локални променљива и је означен као -1 сада. И то је још увек типа инт. И обавештење, такође, мој такозвани Цалл Стацк, где сам паусе? Причаћемо више о ово у будућности. Али стек позива само се односи на оно функције су тренутно у покрету. За сада је то само главни. И сада једина локална променљива је сам са вредношћу 1. И када сам коначно корак у овој линији овде, са истом иконом у горњем десном углу, -1 Је негативан цео број. Сада је Зауставимо над тим коврџаве браце. Пустимо то урадио свој посао. Ја корак преко те линије, и воила. Дакле, није све што је ужасно просветљујућа још, али то се пусти ме паусе и да кроз логички шта овај програм ради. Али то није био погрешан случај. Хајде да то поново уради на следећи начин. Ја ћу да напустим тај тачку прекида он лине 8 са црвеном тачком. Ја ћу поново покренути дебуг50. То је аутоматски паузира овде. Али овај пут, уместо гази преко ове линије, пусти ме заправо унутра од гет_негативе_инт и схватити, зашто се то прихвата 0 као валидан одговор? Дакле, уместо кликом прекорачити. Ја идем напред и кликните корак у. И приметио да је то линија 8 Сада је истакао сада изненада постаје линија 17. Сада, није да је за отклањање грешака је прескочио линије 14 и 15 и 16. То је само нема ништа да ти покажем тамо. То су само декларисање променљиве, а онда је реч До а затим отворен коврџава браце. Једини функционални линија која је сочно заиста је ово овдје, 17. И ту имамо застаде аутоматски. Тако принтф ( "н.ис:") ;, тако То се још није десило. Дакле, идемо напред и кликните Степ Овер. Сада ми је брз, заиста, промењено у ( "н:"). Сада гет_инт, ја не идем да смета улази у, јер је функција била маде би ЦС50 у библиотеци. То је вероватно у праву. Тако да идем напред и на неки начин сарађују тако што ћете га даје инт, али не и негативна Инт. Па пусти ме напред и ударио 0. И сада шта се дешава овде кад сам доле на линију 21? Нисам опет понавља. Мени се не чини да се заглави у тој петљи. Другим речима, ова жута Бар не настави около, и око, и око. Сада, зашто је то тако? Па, Н, шта је н сада? Ја Можете погледати на локалном варијабле у отклањање грешака. н је 0. У реду, шта је моје стање? 20-- линија 20 је, добро, 0 је већи од 0. То није истина. 0 није већи од 0. И тако сам побегао из овога. Па зато он лине 21, ако сам заиста настави, Ја ћу се вратити 0, чак иако сам требао одбити 0 као заправо не буде негативан. Тако да сада, не знам стварно ни брига за отклањање грешака. Гот то, не треба да знам шта више се дешава. Тако да идем напред и само кликните на дугме Плаи, и нека овај завршити. Сада сам схватио да мој буг је очигледно на линији 20. То је моја логичка грешка. И оно што желим да уради да се то промени? Ако је проблем у томе нисам хватање 0, то је само логичка грешка. И могу рећи док је н већи или једнак 0, држати изнова и изнова подстицања корисника. Дакле, поново, једноставно грешка, можда чак и очигледно када си ме видео напише само неколико минута пре. Али понети овде је да са дебуг 50, и са дебуггинг софтвер генерално, имате ову нову пронашао снагу на шетња кроз сопствени код, погледајте преко тог десном панелу шта променљиве вредности су. Тако да не мора нужно морају да користе нешто као да епринтф да одштампате те вредности. Заправо можете их видети визуелно на екрану. Сада, иза тога, то је напоменути да постоји још једна техника која је заправо Супер заједнички. И можда се питате зашто ово мало момак овде је седео на сцени. Тако да је ова техника, генерално познат као Руббер Дуцк отклањање грешака, који је заиста само потврда чињенице које често када програмери пишу кода, нису нужно сарадњу са другима, или раде у заједничком окружењу. Они су нека врста код куће. Можда је касно ноћу. Покушавају да слици неке грешке у свом коду. И они једноставно не видим. И нема цимера. Нема ТФ. Нема ЦА около. Све што они имају на својој полици је овај мали гумени Дуцки. И тако Руббер Дуцк отклањање грешака само овај позив да смислим нешто као блесава као ово као прави створење, и заправо проћи кроз кода усмено на овај неживе објекту. Тако, на пример, ако ово је мој пример овде- и сећам се да раније проблем је био то, ако избришем ту прву линију кода, и идем напред и поново направити луд 0, сећам се да сам имао ово поруке о грешци овде. Тако да је идеја овде, смешно мада сам осећају у овом тренутку јавно радим, је то грешка. У реду, тако да је мој проблем је што имам имплицитно проглашен функцију библиотека. И да је функција библиотека је принтф. Децларе-- реду, прогласити подсећа ме на прототипова. То значи да је потребно да ствари реци преводилац унапред шта функција изгледа. Сачекај минут. Нисам имао стандардну ио.х. Много вам хвала. Дакле, само овај процес од-- тебе не морају да заправо имају патку. Али та идеја ходања сами кроз своју шифру тако да ни чуо сами, тако да схватити пропусте у свом примедбе, генерално идеја. И, можда више логички, не тако много са тим, али више укључени Пример смо урадили у бугги 3.Ц, можда се кроз њих као што следи. Дакле, све у реду, гумени Дуцки, ДДБ, ако хоћете. Овде имамо у својој основној функцији, Зовем се негативни инт. И ја сам се повратну вредност. Ја то чување на левој страни он лине 8 у променљивој Звао сам. У реду, али чекај, како је да се ту вредност? Пусти ме да погледамо функцију у реду 12. У линији 12, имамо добити негативну инт. Не предузимати никакве улаза, не врати инт, у реду. Изјављујем он лине 14 променљива н. То ће да сачувате цео број. То је оно што желим. Дакле, урадите следеће а н је-- нека ми поништи оно што је фиксни сам већ направио. Дакле док је н веће 0, одштампати Н јест, у реду. А онда позвати се Инт чува у н. А онда проверите да ли је н 0, н нисам-- то је то. Дакле, опет, не треба стварни патку. Али само ходање кроз себе Ваш код као интелектуалне вежбе Често ће вам помоћи схвате шта се дешава, за разлику од само радимо нешто овако, гледајући у екран, и не говори се кроз то, што искрено није готово као ефикасан технике. Тако да имате то, А број различитих техника за стварно отклањање грешака кода и проналажење грешку, што је све треба да буде алат у својој алата тако да ниси касно ноћу, Посебно, ви сте у дневној хале, или у радног времена, лупа главу против зид, покушавајући да реши неки проблем. Схватити да постоје софтверски алати. Постоје Руббер Дуцк алат. И ту је цела особље подржати чекају да пружи руку. Дакле, сада, реч о проблему сетови, и на оно што смо вам у нади изаћи из њих, и како идемо око процену. По програму курса је, ЦС50 проблем сетови се процењују на четири основне осе, тако на спеак-- обима, исправност, дизајн, и стил. И обим само се односи на колико комада сте загризао? Колико проблема сте пробали? Који ниво напора сте манифестује? Исправност је, да ли је програм рада као то би требало да по ЦС50 спецификацији Када обезбедити одређене улазе или неке излаза враћа? Дизајн је најсубјективнија од њих. А то је онај који ће узети најдужи да науче а најдуже да предаје, у па колико се своди на, колико написан је твој број? То је једна ствар само штампање исправно излаза или врате праве вредности. Али то радиш као ефикасније могуће? Да ли то радите поделу и освајају, или бинарни претраживање као што ћемо ускоро видети да смо урадили Пре две недеље са телефонском именику? Да ли постоје бољи начини да се реши Проблем него што тренутно овде? То је прилика за бољим дизајном. А онда стиле-- како Прилично је ваш број? Приметићете да сам прилично Посебно о увлачењем мој код, и пазећи своје променљиве се разумно имену. н док је кратак, је добро име за број, ја за бројање цео број, а за низ. И можемо да имамо више променљива имена стил. Стил је колико добро ваша шифра изгледа? И како читљив је то? И током времена, шта је ваш тас и поздрав ће учинити у току вас обезбедити са тим врста квалитетне повратне информације тако да ти не буде боље на тим разним аспектима. И у погледу начина на који оцијени сваки од ових праваца, то је обично са врло мало кашике тако да, генерално, добити осећај како добро радиш. И, заиста, ако сте добили резултат на неки од тих акес-- исправности, дизајну и стил еспециалли-- тај број ће генерално бити између 1 и 5. И, буквално, ако се 3 је на почетку семестра, ово је веома добра ствар. То значи још увек постоји простор за побољшање, који би се надају у узимајући класу по први пут. надам се да постоји нека мало плафона на који сте тежи постизању. И тако се 3 о најранији комада, ако не нека 2 је и 4 је, је, заиста, добра ствар. То је добро у домету, добро у очекивањима. И ако је ваш ум јури, чекај минут, три од пет. То је стварно 6 од 10. То је 60%. Мој Боже, то је Ф. Није. Није, у ствари, да. Уместо тога, то је прилика да се побољша у току семестра. А ако се неки Поорс, то су прилика да искористе радног времена, сигурно секције и друге ресурсе. Најбоље је прилика, заиста, да буду поносни на колико далеко сте доћи током семестра. Дакле, да схвате, ако ништа друго, три је добро. И омогућава простор за раст током времена. Како те осе се пондерисана, реално си провести највећи део свог времена се ствари на рад, а камоли правилно. Па исправност тежи се вредновати највише, као и ово мултипликативни фактор три. Дизајн је такође важно, али нешто што не нужно провести све те сати покушава да ствари само на посао. Па то је веигхтед више лагано мало. А онда стил је пондерисан најмање. Иако то није мање важно основи, то је само, можда, Најлакше у праву, опонашајући смо примере до у предавању и делу, са стварима красиво увучени, и коментарисао, и тако даље је међу најлакши ствари које треба урадити и како треба. Дакле, као што су, схватити да су то тачке који су релативно лако схватити. А сада реч о Ово-- академски искреност. Дакле, по курс је Наставни план и програм, видећете да курс има доста Мало језика око тога. И наравно узима питање академски искреност сасвим озбиљно. Имамо разлику, За боље или за горе, да су послати сваке године више студената за дисциплински поступак од већине било који други Наравно, да сам свестан. То није нужно указује на чињеницу да ЦС студената, или ЦС50 студената, аре мање поштени од твојих другова. Али је реалност да у овом свет, електронски, само имају технолошки средства за откривање ово. Важно је да се нама праведност преко класе да радимо то препознаје, и подићи питање када видимо ствари. И само да наслика слику, и стварно да помогне нешто попут овог лавабоа у, то су бројеви студенти у протеклих 10 година који су били укључени у неки таква питања академске поштења, са неким 32 ученика од јесени 2015, који је рећи да ми се ствар веома озбиљно. И, на крају, ови бројеви компонује, недавно, око 3%, 4% или тако класе. Дакле, за супер већину ученика чини се да су линије су јасне. Али треба имати то у смета, нарочито касно ноћу кад се бори са неки решење проблема сет, да постоје механизми за добијање себе боље подршка него што би Мислим, чак и у то време. Схватити да када примимо студент поднеске, прелазимо упореди сваки подношење ове године против сваког подношења прошле године, против сваког подношења из 2007. године, и од, гледајући, као и, код складишта на мрежи, дискусиони форуми, градилишта. И ми споменути ово, стварно, све у циљу потпуног обелодањивања, да ако неко други може наћи на мрежи, свакако, можемо и ми ток. Али, стварно, дух курса своди да ове клаузуле у програму. То је заиста само, буди разуман. И ако смо морали да појасните са само мало више језика, схвате да је суштина свега рад да достави овај курс Мора бити свој. Али у то, сигурно има могућности и подстицање, и педагошки вредност у окретање Остали-- сам је ТФС, ЦАС, ТАС, и други у класи, за подршку, а камоли пријатеље и цимери који су проучавали ЦС и програмирање пре. Па постоји додатак за то. И опште правило је ово-- када тразите помоц, можете показати свој код другима, али не можете да видите њихов. Дакле, чак и ако сте у радног времена, или у Д сали, или негде другде раде на неком комаду сету, радећи заједно са пријатељем, који је потпуно у реду, у крај дана вашег рада треба на крају припадамо једно од вас односно, а не бити неки заједнички напор, осим за финални пројекат где то је дозвољено и охрабрила. Схватите да ако сте бори са нечим и твој пријатељ управо догађа да буде бољи у овоме онда, или боље на том проблему од вас, или мало даље испред од тебе, то је потпуно разумно да се окрену са својим пријатељем и рећи, хеј, да ли би гледајући у мом коду овде, ми помогао да спот који је мој проблем је? И, надамо се, у интерес педагошког вредности да пријатељ не само кажу, па уради то, већ, шта ти недостаје он лине 6, или тако нешто? Али решење није за пријатеља поред тебе да кажем, ох, добро, овде, пусти ме повуци ово, и покажем своју решење за вас. Тако да је линија. Покажеш своју шифру на други, али не може видели њихов, предмет на други ограничења у програму курса је. Дакле, треба имати на уму овом тзв кајање клаузула у програму току као и, да ако почини неку радњу која није разумно, али донесите га пажња глава курса је у року од 72 сата, курс може да наметне санкције локалне да могу укључивати незадовољавајући или неуспеха оцена за рад подноси. Али наравно да не прослеђује битно за даљи дисциплински поступак, осим у случајевима поновљених дела. Другим речима, ако направите неки глуп, нарочито касно ноћу, одлука да следећег јутра или два дана касније, пробудити и схватити, о чему сам размишљао? Ти у ЦС50 има излаз за фиксирање тај проблем и поседовање до њега, тако да смо ће вас на пола пута срести и носити са њом у питању које је и образовни и вредан за тебе, али ипак казнени на неки начин. И сада, да се повратим, ово. [ВИДЕО РЕПРОДУКЦИЈА] [Мусиц плаиинг] [Крај репродукције] Давид Ј Малан: У реду, вратили смо се. А сада да погледамо један од Први од наших стварног света доменима у ЦС50, уметност криптографије, уметност слање и примање тајне поруке, шифриране поруке ако хоћете, који се може дешифровати само ако имате неки кључни састојак који је пошиљалац има такође. Тако да мотивише ово ћемо узети Поглед на овоме овде, што је пример тајна декодер прстен који могу се користити у циљу схватити шта је тајна порука у ствари. У ствари, назад у дан у основној школи, ако сте икада послали тајне поруке неки пријатељ или неко заљубио у класи, сте можда мислили си била паметна од на парчету папира промене, као, А до Б, а Б Ц и Ц до Д, и тако даље. Али сте заправо шифровање Ваша информација, чак и ако је мало безначајно, није било да тешко наставник да оствари, па, ако само промените Б са А и Ц до Б, ви заправо схватити шта је била порука али сте били у шифрирање података. Ви само су то радили једноставно, слично као Ралпхиа овде у чувеном филму који игра прилично Ад Наусеум сваке зиме. [ВИДЕО РЕПРОДУКЦИЈА] Буди се зна да све то Ралф Паркер је овим именован за члана Мали Сироче Ени Вампире Диариес и има право на све почасти и користи се јавља њу. -Сигнед, Литтле Орпхан Анние, контра-потписали Пиерре Андре, мастилом. Почасти и користи, Већ у узрасту од девет. [Схоутинг] -Хајде. Хајде да завршимо са тим. Не треба Алл Тхат Јазз о шверцерима и пиратима. Слушај сутра за завршни авантура црне гусарског брода. Сада је време за Анние тајна порука за вас чланови Сецрет Цирцле. Не заборавите, дјецо, само чланове од Сецрет Цирцле Анние да декодира тајну поруку Анние. Запамтите, Анние зависе од тебе. Поставите своје игле Б2. Овде је порука. 12, 11-- -Ја Сам у, свој први тајни састанак. -14, 11, 18, 16. Пјер је у великој гласовном вечерас. Могао бих рећи да је вечерас да Порука је заиста важно. -3, 25, то је порука од Анние сама. Не заборавите, никоме не говори. -90 Секунди касније, ја сам у једини просторија у кући у којој дечак од девет могао да седи у приватности и декодирањем. Аха, Б! Отишао сам до следећег, Е. Прва реч је бити. С то долази лакше, У., 25-- Ох, хајде, Ралпхие, морам да идем! Одмах се доле, мама! Бого мој! -Т, О, будите сигурни да-- бити сигурни да шта? Шта је било Литтле Орпхан Ени хоћете да кажете? Будите сигурни да шта? -Ралпхие, Енди мора го, молим те изаћи? У реду, мама! Одмах напоље! -Ја Сам ближе сада се. Тензија је била страшна. Шта је то? Судбина планете може држати у равнотежи. -Ралпхие! Анди мора да иде! Одмах се ван, забога! Скоро тамо, моји прсти летели, мој ум је челична замка, сваки пора вибрира. Било је скоро јасно, да, да, да. Буди сигуран да пије свој Овалтине. Овалтине? Бедан комерцијални? Курвин син. [Крај репродукције] Давид Ј Малан: У реду, тако то је био веома дуг пут увођења криптографију, као и Овалтине. У ствари, из овог старог оглас овде, зашто је Овалтине тако добро? То је концентрисана вађење зрео јечам слад, чиста кремаста кравље млеко, и посебно припремљени какао, заједно са природним фосфатида и витамина. Даље обогаћено додатни витамини Б и Д, њам. И даље можете добити, по свему судећи, на Амазон, као што смо овде. Али мотивација је била да увести криптографију, посебно врста криптографије познат као тајне криптографије. И као што име сугерише, цео безбедност тајног кључа крипто система, ако хоћете, методологија за само кодирање информације између двоје људи, јесте да само пошиљалац и прималац само знати тајну кеи-- неку вредност, неки тајна фраза, неки тајни број, који омогућава им да оба Енцрипт и дешифровање података. И криптографија, заиста, је само ово од недеље 0. То је проблем тамо где је инпута, као стварног порука на енглеском језику или било ком језику који вас желите да пошаљете некоме у класи, или преко интернета. Постоји неки излаз, која се одвија да се за кодирани поруку која вас желите да прималац прими. Па чак и ако је неко у средњи га прима превише, да их не желе да мора бити у стању да га дешифрује, због унутрашњости ове црна кутија, или алгоритам, је неки механизам, неки корак по корак упутства, за узимање тог улаза и њено претварање у излаз, у надамо се на сигуран начин. И, у ствари, постоји нека вокабулар у овом свету као што следи. Чист текст је реч компјутерски научник би користе да опишу улаз порука, као на енглеском или било шта у ствари језику који желите да пошаљете на неки други човека. А онда је шифрат је јагма на шифрована, или кодиран, верзија истог. Али постоји један други састојак овде. Постоји још један улаз у тајни кључ криптографија. И да је сама кључ, што је, генерално, као што ћемо видети, број, или слово, или реч, шта год алгоритам је заправо очекује. И како се дешифрује податке? Како се то дешифровати? Па, само преокренути излаза и улаза. Другим речима, када неко прима ваш шифровану поруку, он или она једноставно мора знати да исти кључ. Они су добили шифрат. И укључивањем та два инпути у крипто система, алгоритам, ова црна кутија, од треба да дође оригинални отворени текст. И то је веома висок ниво поглед на оно што криптографија је заправо све о. Дакле, идемо тамо. Хајде да сада погледамо испод аспиратор нечега ми смо узимали здраво за готово за прошле недеље, а за ову сесију овдје-- стринг. Стринг на крају дана је само низ знакова. То би могло бити здраво свет, или здраво Замила, или шта год. Али шта то значи се низ знакова? У ствари, ЦС50 библиотека даје нама тип података под називом низ. Али заправо нема таква ствар као стринг у Ц. То је заиста само низ карактер, карактер, лик, карактер, назад, то бацк, на назад, то бацк, да подржи унутра меморије рачунара, или РАМ. И ми ћемо гледати дубље у то у будућност када погледамо саму меморију, и коришћење, и претњи које су укључене. Али хајде да размотримо низ Замила. Па само име људски овде, Замила, то је низ карактера, З-А-М-М-Л-А. А сада претпоставимо да Замила име се чувају унутар рачунара Програм. Па, то, може се закључити да би требали моћи да погледамо те знакова појединачно. Дакле, ја ћу само да скренем мало бок око назива Замила је овде. И што је случај у Ц када те имају ниску, као Замила-- и можда да низ се вратио из функција као што гет стринг, можете заправо манипулисати то знак по знак. Сада, ово је Германе за разговор при руци, јер у криптографији ако желите да промените А до Б, а Б Ц и Ц до Д, и тако даље, морате бити у стању да погледате појединачних карактера у низу. Морате бити у стању да промени З на нешто друго, А на нешто друго, М до нешто друго, и тако даље. Па да морамо наћи начин, програмски, тако да говори, у Ц да би могли да се промени и поглед на појединим словима. И можемо да урадимо то на следећи начин. Пусти ме да се вратимо у ЦС50 ИДЕ. И пусти ме само напред и створити нову датотеку да ћу звати овај временски стринг0, као наш први такав пример, дот ц. И ја идем напред и вхип га на следећи начин. Тако укључују ЦС50.х, и онда укључују стандардни ио.х, који сам скоро увек ћу требали користити у својим програмима, најмање у почетку. инт празнину, а онда овде сам урадити конце добија се низ. А онда ћу само напред и уради то. Желим да идем напред и, као проверу исправности, само реци, здраво, посто ова, полу-дебелог црева, чини низ 0. Ух, шта сам урадио овде? Ох, нисам га укључите у. Дакле лекција научена, да Није било намерно. Дакле грешка, више процената конверзија од аргумената података. И ту, у линија 7-- реду, тако да имам, под знацима навода, то је мој низ у принтф. Имам знак одсто. Али ми недостаје други аргумент. Ја сам недостаје зарез с, која Ја нисам имао у претходним примерима. Дакле, добра прилика да се поправи још једна грешка, случајно. А сада пусти ме стринг0, тип у Замила. У реду, здраво Замила. Тако смо покренути ову врсту програма неколико различитих пута за сада. Али, хајде да урадимо нешто што мало другачије овај пут. Уместо да само штампање Замила је цело име са принтф, Хајде да то урадимо знак по знак. Идем да користи за петљу. И ја ћу да се предам променљива бројања, звала сам. И ја ћу задржати итератинг, тако док и је мања од дужине с. Испоставило се, нисмо до прошли пут, да в долази са функција зове Стирлинг. Назад у дану, и уопште и даље при имплементацији функције, људи често бирају веома суццинцт имена која врста звука као оно што желите, иако је то недостаје неколико самогласнике или слова. Дакле, Стерлинг је назив функције које узима аргумент између заграде да би требало да буде ниска. И то само враћа цео број, дужина тог низа. Дакле, за петљу он лине 7 иде да почне бројање на сам једнако 0. То ће за повећање И на свакој итерацији од 1, као што смо радили неколико пута. Али да ће само учинити ово до тачке кад је дужина самог стринга. Дакле, ово је начин, на крају, итератинг кроз знакове у низу и јест следи. Идем да одштампате није читав низ, али посто Ц, један лик следи нови ред. А онда ћу само напред, и морам да кажем да желим да одштампате ИТХ карактер с. Па ако и је променљива која указује индекс низа, где сте у томе, треба да буду у стању да кажу, дај ми карактер ИТХ на с. И ц има начина рада ово са заградама. Једноставно рећи Тхе Наме Оф Тхе ниска, што је у овом случају је ова. Онда користите угластим заградама, који су обично само изнад повратак или Ентер тастер на тастатури. И онда сте ставили индекс карактер који желите да одштампате. Тако да је индекс ће бити нумбер-- 0 или 1, или 2, или 3, или дот, тачка, тачка, неки други број. И ми би да иде у бити прави број, јер ја почети да броји на 0. И по дефаулту, први знак у низу је по конвенцији 0. А други лик је носач 1. И трећи лик је држач 2. И не желим да идем сувише далеко, али нећемо јер смо да сам само повећавати до ње једнака дужини стринга. И у том тренутку, ово петља ће престати. Па пусти ме напред и сачувајте ово Програм, и трчање учинити низ 0. Али сам забрљао. Имплицитно проглашавајући библиотека функцију Стирлинг са типом таквим и суцх-- сада, ово звучи познато. Али то није принтф. И није се низ. Нисам забрљам у на исти начин овај пут. Али приметите овде мало доле даље, укључују хеадер стринг.х, експлицитно обезбеди декларација за Стирлинг. Тако да је заправо траг тамо. И заиста се испоставило ту је још један ударац фајл да ми нисмо користили у класи још, али то је међу онима доступан теби, под називом стринг.х. И у том фајлу, стринг.х је Стирлинг проглашен. Па пусти ме само напред, саве то, да стринг 0-- лепо, нема поруке о грешци овај пут. ./стринг0 Замила, и Ја сам спреман да ударим Ентер, на којој тачки гетстринг ће да врати стринг, ставио у с. Онда је то за петљу ће поновити преко С: ликови један по један, и штампати их једну по линији, јер Имао сам ту инверзна коса црта н на крају. Тако да сам могао изоставити ту косу црту Н, а онда само штампање Замила све у истој линији, ефикасно реимплементинг принтф, што и није тако корисно. Али у овом случају, ја сам то радио. Ја сам заправо штампан један карактер у исто време, један по реду, тако да смо заправо видели ефекат. Али морам напоменути једну ствар овде. А ми ћемо се вратити на ово у будућем недељу дана. Испоставило се да је ово код је потенцијално луд. Испоставило се да то стане стринг и неке друге функције у животу не нужно увек врати оно што очекујете. Знамо из класе ласт Време у то да се стринг се требало да се врати стринг. Али шта ако корисник укуца такву дуга реч, или став, или есеј да постоји само није довољно меморија на рачунару да стане. Као, шта ако нешто крене погрешно испод хаубе? Можда неће догодити често, али то би се могло десити једном у време, веома ретко. И испоставило се да то стане стринг и функционише као тим не нужно Увек се врати жице. Они могу вратити неку вредност грешци, неки контролна вредност тако да говори, то указује да нешто није у реду. И ти би знао само то од пошто је сазнао у класи сада, или сте прочитали још неку документацију. Испоставило се да то стане стринг може да врати вредност која се зове нула. Нулл је посебна вредност која ћемо вратити у будућем недељу дана. Али за сада, само знам да ако желим да буде заиста прави у напредовању коришћењем гет стринг, ја не треба само назвати, и слепо користи своју повратну вредност, верујући да је то низ. Први пут сам да кажем, хеј, чекај мало, само наставити ако ова није једнако нула, где нула, опет, само нека посебна вредност. И то је једини Посебна вредност ви треба да бринемо гет стринг. Гет стринг се или иде да врати стринг или нулл. И ово знак узвика знак једнакости можда знате од можда математике да би цртате знак једнакости са линија кроз њу да укаже нису једнаки. То није уопште лик можете уписати на тастатури. И тако у већини програмских језика, када желиш да кажеш нису једнаки, користите узвичник, иначе познат као праска. Дакле, ви кажете прасак једнак, који не значи једнако, логично. То је исто као да нема веће од или једнак или мањи од или једнака на тастатури да ради све у једном симболу. Па зато, у последњих примера, јеси отворену заграду, а затим знак једнакости, како би се до већи или, рецимо, мање од. Дакле, шта је понети овде? То је једноставно начин сада од увођење ове синтаксе, ова функција, итератинг над појединац ликови у низу. И баш као и они квадрат заграде омогућавају да се на њих, размотрити ове квадратних заграда као врста алудирајући на то основни дизајн, при чему сваки карактер унутар низа је врста у кутији у негдје испод аспиратор у меморији рачунара. Али хајде да направимо варијанту овога. Испоставило се да је ово Програм је у праву. Дакле, по ЦС50 је оса за процену код, то је сада исправно. Поготово сада када сам проверу нула, овај програм никада не треба срушити. И ја само знам то из искуства. Али не постоји ништа друго што заиста можемо поћи наопако овде. Али то није добро дизајниран, јер вратимо на основама. Прво, принциплес-- шта фор петљи урадити? А за петљу ради три ствари. То покреће неки вредност, ако га замолити да. Она проверава стање. А онда након сваког понављање, након сваког циклуса, то повећава неки вредност, или вредности, овде. Дакле, шта то значи? Ми иницијализујемо сам до 0. Ми Проверите и уверите се да је мање од дужина с, што је З-А-М-И-Л-А, тако што је мање од 6. И, заиста, 0, када је мање од 6. Ми одштампати З од назива Замила је. Онда смо се повећати И од 0 до 1. Затим смо проверили, је 1 мање од дужине с? Дужина с је 6. Да, јесте. Тако да штампате у име Замила је, ЗА. Ми инцремент И од 0, до 1, до 2. Затим смо проверили, је 2 мање од дужина имена Замила је. 6- па 2 је мање од 6. Да, хајде да одштампате сада М у Замила име, трећи лик. Овде је кључно да на сваки понављање приче, ја проверавам, ис и мање од дужине Замила? Али цака је у томе Стерлинг није власништво. Они од вас који су програмирани пре у Јави или другим језицима можда зна дужину стринг особина, само су неке само за читање вредности. У Ц у овом случају, ако је ово функција која је буквално бројање ликови у Замила сваки пут зовемо ту функцију. Сваки пут питате рачунар да користи Стерлинг, то је бацити поглед на Замила, и говорећи З-А-М-И-Л-А, 6. И враћа 6. Следећи пут када зовем то унутра да за петље, то ће погледати Замила опет кажу З-А-М-И-Л-А, 6. И то ће да се врати 6. Дакле, шта је глупо о овом дизајну? Зашто је мој број није 5 од 5 за дизајн сада, да тако кажем? Па, ја постављам питање непотребно. Радим више посла него што је потребно. Дакле, иако одговор је тачан, ја сам пита рачунар, што је опет дужина Замила, и опет, и опет, и опет? И тај одговор је никада неће променити. То је увек бити 6. Па боље решење од овога бити овако следећа верзија. Пусти ме напред и стави га у посебан фајл који се зове стринг1.ц, само да би га одвојити. И испоставило се да у фор петља, ви заправо могу прогласити више променљивих одједном. Па ћу да задржим и поставите га на 0. Али ја такође да додати зарез, и кажу, дај ми променљиву названу н, чији вредност једнака дужини строковое с. А сада, молим вас да ми стање Докле год је мање од н. Дакле, на овај начин, логика је идентични на крају дана. Али ја Сјећање на вредност 6, у овом случају. Шта је дужина имена Замила је? И ја га ставља на н. А ја увек проверавамо услов сваки пут. Је 0 мање од 6? Да ли је 1 мање од 6? Да ли је 2 мање од 6, и тако даље? Али ја не тражим рачунар опет, и опет, шта је дужина имена Замила је? Шта је дужина имена Замила је? Шта је дужина имена ове Замила је? Буквално сам на уму да прво и одговорити само у овом другом променљивом н. Тако да сада не би било само исправан, али и добро осмишљен. Сада, шта је са стилом? Ја сам именовао своје променљиве добро, ја бих. Они су одмах Супер сажето. И то је сасвим у реду. Ако имате само један стринг у програму, могао би зову и за низ. Ако имате само једну променљиву за бројање у програму, Ви као би то могло назвати и. Ако имате дужину, Н је супер уобичајено и. Али нисам коментарисао ниједан од мог кода. Нисам обавијестио реадер-- да ли је то мој ЕЦ, или ТА, или само цоллеагуе-- оно што би требало да се дешава у овом програму. И тако да се добар стил, оно што бих желео да урадим је ово-- нешто као питати корисника за улаз. И ја могу да реврите ово на разне начине. Уверите се да успела-- се сигурно добију низ вратио стринг. А онда у овдје-- и ово је можда најважнији цоммент-- Итерате над ликовима у с један по један. И ја могао користити било Избор енглеског језика овде да опише сваки од ових комади кода. Приметићете да нисам ставила коментарисати на свакој линији кода, заправо само на занимљив они, оне које има неко значење које сам могао желите да се Супер Цлеар некоме читање мој код. И зашто зовете добити ниска питати корисника за улаз? Чак да једна није нужно све то описни. Али помаже испричати причу, јер је друга линија у причи је, уверите се добити низ вратио стринг. И трећи ред у причи је, вршите итерацију кроз знакове у с једне у време. И сада само за сваки случај, Ја идем напред и додати још један коментар да само каже штампа и-ти карактер у с. Сада, шта сам то урадио на крају дана? Ја сам додао неке енглески речи у виду коментара. Симбол Сласх Сласх значи, хеј, компјутер ово је за човека, није за тебе, рачунар. Дакле, они логично игнорисали. Они су само тамо. И, заиста, ЦС50 САТА их приказује као сива, као корисни, али не кључни програму. Обратите пажњу шта сада може да уради. Да ли знате Ц програмирање или не, ви могу само стајати на све ово Програм, и ским коментаре. Аск корисника за улаз, уверите се добити низ вратио ниску, вршите итерацију кроз знакове у с један по један, принт карактер и-ти знак у успела-- ви не чак ни да погледа код да разуме шта овај програм ради. И, још боље, ако се осврнемо у овом програму у недељу или две, или месец, или годину дана, и ви немате гледао у коду, Покушавам да се сетим, шта сам покушавао да радим са овим кодом? Ви сте сами рекли. Ви сте га описали за себе, или неки колега, или ТА, или ЕЦ. Па то би сада било исправан, и добар дизајн, и коначно добар стил и. Учини то на уму. Дакле, постоји један други што ћу да урадим овде да сада може да открије шта је тачно дешава испод хаубе. Тако да је ова функција у Ц, и другим језицима, под називом типецастинг да ни имплицитно или експлицитно вам омогућује претворити од једне врсте података у други. Ми смо се бавили тако далеко је данас са жицама. И жице су ликови. Али сећам из недеље 0, што су ликови? Ликови су само апстракција на врху нумберс-- децималних бројева, и децимални бројеви су заправо само апстракција на врху бинарних бројева, као што је дефинисано. Дакле, ликови су бројеви. И бројеви су ликови, само у зависности од контекста. И испоставило се да је унутра компјутерског програма, Можете ли навести како желите да погледате на битова унутар тог програма? Подсетимо од недеље 0 које смо имали Асции, који је управо овај код мапирање писма бројевима. И ми смо рекли, главни А је 65. Цапитал Б је 66, и тако даље. И обавештење, ми у суштини карактера на топ ред овде, јер би их, Ц зову, карактера, и онда ИНТС на другом реду. И испоставило се да можете претворити неприметно између та два, типично. И ако желимо да радимо ово намерно, ми можда желети да се позабаве овако нешто. Ми би да претворити горњи случај да смањи случај, и мала слова у великим словима. И испоставило се да постоји заправо образац овде можемо прихватити за који тренутак. Али хајде да прво погледамо један Пример експлицитно ради ово. Ја ћу се вратити у ЦС50 ИДЕ. Идем да се створи фајл под називом АСЦИИ 0.ц. И ја идем напред и додати мој стандардни ио.х на врху, маин празнина на врху моје функције. А онда ћу да урадите фолловинг-- фор петљи од и једнако, рецимо, 65. А онда сам ће бити мање од 65 плус 26 слова у алфабету. Па ћу компјутер до математику за мене тамо. А онда у ову петљу, шта ћу да штампају? % Ц је% и обрнуте косе црте бр. А сада желим да прикључите два вредности. Ја привремено сам ставио питање означава ту да позове питање. Желим да поновити од 65 па надаље за 26 слова абецеде, штампа се на сваке итерације да лика саставни еквивалент. Другим речима, желим да Посматрајте преко 26 бројева штампање шта је АСЦИИ карактер, писмо, и оно што је одговарајући број је- стварно само поновном графикон из тог слајда. Па шта би ови упитници бити? Па, испоставило се да је други треба само да буде променљива и. Хоћу да видим то као број. И средњи расправа овде, ја могу да кажем рачунар за лечење те цео број И као лик, како да га замени овде посто Ц. Другим речима, ако је људски програмер, знам ово су само бројеви на крају дана. И знам да 65 треба мап до неког карактера. Са овим експлицитног цаст, са загради, назив врсте података који желите да претворити, и затвореног заграде, можете рећи рачунар, хеј, рачунар, претворити овај цео број у знак. Дакле, када сам покренути ово програм након прикупљања, Да видимо шта добијам-- да АСЦИИ 0. Проклетство, шта сам урадио погрешно овде? Коришћење црно идентификатора, У реду, не намерно, али хајде да видимо да ли не могу Разлог кроз ово. Дакле, линија фиве-- па нисам добио далеко пре него што зезнути. То је у реду. Дакле, једнако линија 5 за и 65-- видим. Дакле, запамтите да је у Ц, за разлику од неких језици ако имате претходно програмирање искуство, имате рећи рачунар, за разлику од Сцратцх, шта тип променљиве је. И заборавио сам кључну фразу овде. У складу пет, ја сам почео да користим и. Али нисам рекла Ц који подаци тип је. Тако да идем у ту и кажу, ах, чине га цео број. Сада ћу да наставим и компајлирате. То средили. ./асции0 Ентер, то је кул. Не само да је супер брз за упита компјутер ово питање, уместо да гледа га на слајду, то одштампан једну по линији, А је 65, Б 66, скроз довн-- од И ово 26 тимес-- урадила са словима з, што је 90. И, у ствари, благо интелигентнији би су за мене да се не ослањају на рачунару да бисте додали 26. Ја могли обавити 90, тако дуго као што не двапут направити исту грешку. Желим да идем горе кроз З, не само горе кроз год. Дакле, то је експлицитно гипса. Испоставило се да је ово није ни потребно. Пусти ме напред и поновљени ово преводилац, а реприза АСЦИИ 0. Испоставило се да је Ц је паметна. И принтф, конкретно, је паметна. Ако само пролазе ан и два пута за оба држаче, принтф ће схватити, Ох, добро знам те дао ми интегер-- неки број, као 65 или 90, или тако нешто. Али видим да хоћете да формат који број као лик. И тако принтф може имплицитно цаст ИНТ на цхар за вама. Тако да није проблем уопште. Али приметите, због овог еквивалентности можемо да урадимо ово као добро. Пусти ме напред и направити друга верзија ово-Асции 1.ц. И уместо итератинг над цели бројеви, заиста може одувати мозак од итератинг преко карактера. Ако је Чар в добије слово '' А, ја Желим да идем напред и уради ово, докле год Ц је мања или једнака на главном З. И на сваке итерације Желим да повећате Ц, могу сада у мом принтф линији овде рецимо, посто Ц је посто сам опет, зарез Ц А сада, могу да одем у други смер, ливење карактер експлицитно на цео број. Дакле, опет, зашто би то урадио? То је мало чудно да те некако рачунати у смислу карактера. Али, ако разумете шта је дешава испод хаубе, заиста нема магије. То само кажеш, хеј, рачунарски дати ми променљива, Ц типа цхар. Иницијализујемо га капитала А. А приметити апострофе материју. За ликова у Ц, сећам из прошле недеље, користите апострофе. За жице, за речи, фразе, користите наводнике. У реду, компјутер, стално радимо ово, тако док карактеру мања од или једнако з. И ја знам из АСЦИИ табели је све од ових АСЦИИ кодова су суседни. Нема празнине. Тако да је само до З, одвојени један број сваког. И онда могу повећавати цхар, ако заиста желим. На крају дана, то је само број. Знам ово. Тако да могу само да претпостављам да додате 1 до ње. А онда овај пут принт ц, затим интегрални еквивалент. И не треба ни експлицитно цаст. Могу да принтф и рачунар средис ствари, тако да сада, ако трчим да Асции1./асции1, Ја добити исту ствар као и. Бескористан програма, тхоугх-- никога ће заиста писати софтвер како би се открио, што је био број који мапира у А, или Б, или З? Сте само да га гоогле, или погледати га на мрежи, или га потражите на слајду, или слично. Па где то заправо добити користан? Па, говорећи о томе слајд, примећујете да је стварни образац овде између великим словима и мала слова то није било случајно. Приметите да капитал А је 65. Мала слова а је 97. А колико је малим словима а? Дакле, 65 је колико корака од 97? Дакле, 97 минус 65 је 32. Дакле, капитал а је 65. Ако се томе дода 32 на то, ти мала слова а. И, еквивалентно, ако одузмете 32, се вратиш у капиталу А-- исто са Б на мало б, велики Ц до малог ц. Све ове празнине су 32 одвојено. Сада, то би изгледало да нам дозволи да учини нешто попут Мицрософт Ворд, или Гоогле Доцс имају, где сте Можете одабрати све и онда каже, променити све у мала слова, или променити све до великим словима, или променити само прву реч казне за великим словима. Можемо да урадимо нешто тако себе. Пусти ме напред и сачувајте датотеку овде се зове искористи 0.ц. И идемо напред и спремим програм који ради управо то како следи. Тако укључују ЦС50 библиотеку. И укључују Стандардни И / О. И знам да се ускоро. Па ћу га ставити у тамо већ, стринг.х, тако да имају приступ ствари као што су Стирлинг, а затим инт празнину, као и обично. А онда ћу да наставим и до конце добија се низ, само да би добили низ од корисника. А онда ћу до здрав разум чек. Ако низ не једнако нула, онда је сигурно да наставимо. И шта желим да урадим? Ја ћу поновити од и једнако 0, и н до дужине низа с. И ја ћу то урадити све док и је мање од Н, и ја плус плус. До сада, стварно ми је само задуживања идеје од раније. А сада ћу да се уведе грану. Дакле, сетите се да Сцратцх, где имали смо те виле у путу, и прошле недеље у Ц. ћу кажу да, ако карактер и-ти у с већи или једнак малим словима а, и-- у Сцратцх ли би буквално кажу и, али у Ц кажете Амперсанд, амперсанд-- и карактер и-ти у с је мањи од или једнак малим словима з, Хајде да урадимо нешто занимљиво. Хајде да заправо одштампати карактер без нови ред да је лик у низу, карактер и-ти у низу. Али идемо напред и одузмите 32 од њега. Иф карактер у стринг који гледамо није између Литтле А и мало З, само напред и само одштампати непромењена. Зато смо увели ово у заграду нотација наши жице да би дошли до и-ти карактер у низу. Додао сам неке условно логике, као Сцратцх у прошлонедељном недеље један, где Ја само користим мој основни разумевање шта је дешава испод хаубе. Да ли је лик и-ти на с већи или једнак а? Као је 97, или 98, или 99, и тако даље? Али је такође мање од или једнака у вредности од малих з? И ако је тако, шта то значи линија? 14, то је нека врста клица целе идеје, великим словима писмо Једноставно одузимање 32 од тога, у овом случају, јер знам, по то графикон, како се моји бројеви представља. Дакле, идемо напред и покренути ово, након састављања искористи 0.ц, и покренути искористи 0. Хајде да унесете нешто Замила у свим малим словима ући. И сада имамо Замила у свим великим словима. Хајде да унесете Роб у свим малим словима. Хајде да пробамо Јасон у свим малим словима. И држимо извлачи приморан капитализација. Постоји мала буба коју сам врста није предвидео. Приметити мој нови захтев за унос завршавају на истој линији као и њихова имена, који осећа мало неуредан. Тако да идем овде, и заправо на крају овог програма одштампате нови ред карактера. То је све. Са принтф, не треба да пролазе у варијабли или код формату. Буквално можете само штампати нешто као нови ред. Дакле, идемо напред и да искористи 0 поново, поново покренути га, Замила. И сада је то мало лепше. Сада, мој упит је на свом новом линијом. Тако да је све у реду и добро. Дакле, то је добар пример. Али ја ни не нужно Потребно је да хард законика 32. Знаш шта? Могу да говоре-- не знам никад сећате шта је разлика. Али знам да ли сам имају мало слово, Ја у суштини желимо да одузмемо од без обзира на удаљеност између мало а и велика, јер ако претпостављам да сви остали слова су исте, који би требало да добије посао. Али, уместо да то, знаш шта? Постоји још један начин још. Ако је то искористе 1.ц-- да сам ставити да у посебан фајл. Хајде да не искористи 2.Ц на следећи начин. Ја ћу заиста очистити ово овде. И уместо да чак и да знају или брину о тим ниском нивоу Детаљи имплементације, ја сам уместо тога само да одштампате карактер, под знацима навода, посто Ц и онда позвати другу функцију која постоји да узима аргумент, који је лик, овако. Испоставило се да у Ц, ту је други позив функције на горњи, који као своје име предлаже се карактер и чини га у горњи случај еквивалент, а затим га враћа тако да принтф може га укључите у ту. Па за то, ипак, потребно увести још једну датотеку. Испоставило се да постоји неки други фајл да би ти знао само из класе, или уџбеник, или онлине референца, под називом, Ц типе.х. Дакле, ако додам да се међу мојим главом Бр, а сада поново саставити овај програм, цапитализе2, ./цапитализе2 Ентер. Хајде да унесете Замила у свим мала слова, и даље ради исто. Али, знате шта? Испоставило се да је у горњи има и друге функције. И дозволите да се представим ово командује овде, некако неспретно по имену, али човек за употребу. Испоставило се да је већина Линук рачунара, као што се користи овдје-- Линук оперативне систем-- има команду зове човек, који каже, хеј, компјутер, дај ми рачунара упутство. Шта желите да погледати у том приручнику? Желим да потражите функцију позвао на горњи, Ентер. И то је мало загонетан понекад прочита. Али приметити да смо у Линук програмера за употребу. И то је све текст. И приметили да је назив функције овде. Испоставило се да има рођака који се зове да смањи, који ради супротно. И обавештење под синопсис, да користе ово функционишу ман страну, да тако кажем, се ми говори да треба да садрже ц типе.х. И знао сам да из праксе. Овде, то ми показује два прототипови за функцију, тако да ако икада желе да користе ово Знам шта узимају као улаз, и шта се врате као излаз. А онда ако сам прочитао опис, видим детаљније шта функција ради. Али што је још важније, ако Гледам под повратне вредности, пише вредност вратио је да од претворити писма, или Ц, оригинал улаз, ако конверзија није било могуће. Другим речима, да горњи ће покушати да претворити писмо великим словима. И ако је тако, то ће га вратити. Али ако то не може за неке разлога-- можда је већ велика слова, можда је знак узвика или неки други пунцтуатион-- то је само да врати оригинални Ц, што значи да могу да мој код Боље осмишљен како следи. Не треба све ови Дарн линија кода. Све линије сам само истакао цан се срушила у само једном једноставном линија, што је ово-- принтф одсто ц да горњи С носача и. И ово би био Пример бољег дизајна. Зашто имплементирати у 7 или 8 линија кода, шта год да сам био избрисан, када уместо колапса све те логике и одлучивању у једном реду, 13 сада, да ослања на библиотеку фунцтион-- функција која долази са Ц, али да ради управо оно што желите да уради. И, искрено, чак и ако није дошао са Ц, можете га имплементирати сами, као смо видели, са добити негативну инт и добити позитиван Инт прошле недеље као добро. Овај код сада је много читљив. И, заиста, ако се крећите се горе, погледајте колико компактнији ова верзија мог програма је. Сада је мало врх тежак, са свим овим подразумева. Али то је у реду, јер сада стојим на раменима програмера пре мене. И ко год да је ко имплементиран у горњи стварно Учинили сте ми услугу, слично ко год имплементиран Стерлинг стварно Учинили сте ми услугу пре извесног времена. Па сада имамо боље дизајн програма који спроводи потпуно исту логику. Говорећи о Стирлинг, нека ја само напред и уради то. Пусти ме напред и сачувати ову слику као стирлинг.ц. И испоставило се да, можемо ољуштити назад једна слој прилично једноставно сада. Ја идем напред и бич још један програм у главни овде да једноставно поново имплементира ниска дужине као што следи. Дакле, овде је линија кода који добија ми низ од корисника. Стално изнова и изнова користе ово. Дозволите ми да се предам променљиву названу Н типа инт који чува број. И пусти ме напред и урадите следеће логику. Док карактер Н-ог у с ради није једнако косих 0, само напред и повећавати бр. А онда одштампати принтф одсто и н. Ја тврдим да овај програм овде, без позивања дужину стринг, схвати дужину низа. А магија је у потпуности садржана у реду 8 овде са оним што изгледа као нову синтаксу, ово косих 0 у појединачним наводницима. Али зашто је то тако? Па, размислите шта је било дешава све ово време. И успут Пре него што заборавим, схватити такође, да поред ман страницама да долазе са типичан Линук систем као ЦС50 ИДЕ, схватити да ми, службеници, имају такође направио веб верзију ове исте идеје зове референце.цс50.нет, која има све те истом човеку страницама, све то исто документација, као и мало кутија на врху који омогућава да се претворити све од прилично волшебни језика у мање удобан мод, где смо, наставно особље, прошли кроз и покушао да поједностави неки од језика чувања ствари фокусирана на идејама, а не неке аспекте. Дакле, имајте на уму, референце.цс50.нет као још један ресурс и. Али зашто дужине низ рад у начин на који сам предложио пре неколико тренутака? Ево опет име Замила је. И ево Замила име уоквирено, као што сам стално раде, да наслика слику на то је, заиста, само низ знакова. Али Замила не постоји у изолацији у програму. Када сте написали и покренете програм, користите ваш Мац или ПЦ рачунар као меморију, или РАМ тако да говори. И ти падне на памет рачунар као да има много гигабајта меморије ових дана. И свирка значи милијарде, тако милијарде бајтова. Али хајде да уназад у времену. И претпоставимо да користимо стварно стари рачунар који има само 32 бајтова меморије. Сам могао, на екрану мог компјутера, просто нацртао на следећи начин. Могао бих само рећи да мој Рачунар има све ове меморије. И ово је као штап меморије, ако ли се сећате нашу слику из последње време. И ако сам само поделити ово довољно времена, Ја тврдим да имам 32 бајтова меморије на екрану. Сада, у стварности, могу само извући до сада на овом екрану овде. Тако да ћу ићи напред, и само по обичају, драв меморију мог рачунара као мрежа, не само као један равна линија. Конкретно, сада да тврдим ово решетка, овај 8 до 4 решетка, само представља свих 32 бајтова меморије на располагању у мом Мац, или доступан у мом рачунару. И они амбалаже на две линије, само јер то одговара више на екрану. Али ово је први бајт. Ово је други бајт. Ово је трећи бајт. А ово је 32. бајт. Или, ако мислимо као компјутер научник, ово је бите 0, 1, 2, 3, 31. Дакле, имате 0 до 31, ако почнете рачунајући на 0. Дакле, ако користимо програм да позиви се ниска, и ми добили низ од човека као да се зове Замила З-А-М-М-л-А како у свету функционише рачунар пратити који бајт, који комад меморије, припада којој низ? Другим речима, ако наставимо да упишите друго име у рачунар, као што је овај Анди, зове добити низ други пут, А-Н-Д-ја мора да заврши у меморија рачунара као добро. Али како? Па, испоставило се да се испод хауба, шта, Ц ради када складиштења жице да су људске врсте, или да долази из неког другог извора, да ли је оцртава крај њих са посебна цхарацтер-- обрнута коса црта 0, што је само посебан начин да кажемо 80 бита за редом. Тако је-- Ово је број 97 опозив. Дакле, неки образац 8 бита представља децимални број 97. Ово косих 0 је буквално број 0, а.к.а. нул, Н-У-Л, за разлику од раније, Н-У-Л-л, који смо причали. Али за сада, само знам да ово косих 0 је само 80 бита за редом. И то је само та линија у песак који ништа не говори са леве стране припада једном низу, или једне врсте података. И све десно припада нешто друго. Анди је име, у међувремену, који само визуелно деси врап на другој линији, али то је само естетски детаљ, Слично је нула престаје. То је низ А А Н-Д-и карактера, плус пети тајна карактер, све 0 бита, да само разграничава крај имена Анди је као добро. И ако ми зовемо добити Стринг трећи пут у рачунару да бисте добили низ као Мариа М-А-Р-ја-А слично је Мариа је Име нула престаје са обрнуте косе црте 0. Ово је фундаментално различит од како компјутер би типично складиштити цео број, или пловак или други типови података и даље, јер опозива, цео број је обично 32 бита, или 4 бајта, или можда чак и 64 бита, или осам бајтова. Али многи примитиве у рачунару у програмском језику имају фиксни број бајтова испод хоод-- можда 1, мозда 2, мозда 4, можда 8. Али жице, по дизајну, имају динамичан број знакова. Ви не знате унапред, док људска врста у З-А-М-И-Л-А, или М-А-Р-И-А или А-Н-Д-И. Ти не знаш колико пута је корисник ће ударити тастатура. Према томе, не знам како многи ликови у унапред ти требати. И тако, Ц некако оставља се као тајна бреадцрумб испод хаубе на крају стринга. Након складиштење З-А-П-И-Л-А у меморији, такође само ставља еквивалент у периоду. На крају реченице, ставља 80 битова, тако да се сети где Замила почиње и завршава. Дакле, шта је веза, онда, у овом програму? Овај програм овде Стирлинг, је једноставно механизам за добијање низ од стране корисника, линија 6. Лине 7, Изјављујем променљиву назива н и постављен је једнака 0. А онда у реду 8, ја једноставно питао питање, док је н-ти карактер ради није једнако све 0 битс-- Другим речима, не једнак овај посебан карактер, косих 0, што само то посебан нула цхарацтер-- само напред и само повећавати бр. И наставите да радите, и држати то раде, и даље да радиш. И тако, иако у прошлост користили смо и, то је сасвим у реду семантички користити н ако само покушаваш да цоунт овај пут намерно, и само желим да га зову бр. Тако да наставља да поставља питање, је карактер н-ти на с све 0с? Ако не, погледајте у следећем изглед, изгледају на следећи, поглед на следећи, погледамо следећи. Али чим видиш косу црту 0, зауставља ово лооп-- линија 9 до 11--. Ви избијају из вхиле петље, остављајући унутар тог променљивог н укупно Број све од ликови у низу сте видели, чиме се одштампа. Дакле, хајде да пробамо ово. Пусти ме напред и, без користите функцију Стирлинг, али само користећи свој домаћи верзију овде се зове Стирлинг, пусти ме само напред и низ Стирлинг, тип у нешто као Замила, који знам унапред је шест знакова. Да видимо да ли ради. Заиста, то је шест. Хајде да покушамо са Роб, три карактера, три лика као, и тако даље. То је све што се дешава на испод хаубе. И приметио везе, затим, са прве недеље класе, где смо разговарали о нешто попут апстракције, који је управо ово слојевито идеја, или сложеност, на врху основних принципа. Овде, ми смо на неки начин гледа испод хаубе Стирлинг, да тако кажем, да схватим, како би се спроводи? И могли смо то поново имплементирати себе. Али ми никад више иде да се поново спроведе Стирлинг. Ми ћемо да користе Стирлинг како да заиста мало дужине жице. Али нема магије испод хаубе. да испод ако знате је хауба, стринг је само низ знакова. И да низ знакова све се може нумерички упућен са носачем 0, носач 1, носач 2, и ви знају да на крају низа је Специјални карактер, можете схватити како се то највише ништа у Програм, јер све се своди на је читање и писање меморије. То је, мења и гледа у меморију, или се креће ствари око у меморији, штампање ствари на екрану, и тако даље. Тако да се сада користи се новонастала разумевање онога што стрингс заправо су испод хаубе, и огулити леђа још једну слој да до сада имамо игнорисала у потпуности. Посебно, свако доба смо имплементирали програм, имали смо ову линију кода при врху проглашавајући главни. И ми смо наведено инт маин празнину. И да празнина у заградама је био све ово време говори да је главни Сама не узима никакве аргументе. Сваки улаз је главни је ће добити од корисника мора да дође из неке друге механизам, као и гет инт или да плута, или се стринг, или неке друге функције. Али се испоставило да када пишете програм, заправо можете одредити да овај програм ће се улази из људског на самом командној линији. Другим речима, иако смо до сада има се приказују само ./хелло здраво или слични програми, све од друге програме који смо користили, да ми сами нисте написали, узимали, чини се, командна линија аргументс-- ствари као што су марке. Ви кажете нешто направити, а затим друга реч. Или јек, ви кажете Цланг, а затим други реч, име датотеке. Или чак РМ или ЦП, као што можете да Видели или већ користе да уклоне или копирати датотеке. Сви они се тзв командна линија аргументс-- додатне речи на терминалу линији. Али до сада, сами нису имали ово луксуз узимање улаз из корисник када он или она заправо ради Сам програм на командној линији. Али можемо да урадимо да ће поново изјављујући Главни иде напред, а не као што воид у загради, али ова два аргумента инстеад-- први цео број, а други нешто ново, нешто што ћемо звати низ, нешто слично у духу на оно што смо видели у Сцратцх као листу, али низ жица, као што ћемо ускоро видети. Али да видимо то по На пример, пре него што разликовати шта то значи. Дакле, ако одем у ЦС50 ИДЕ овде, ја сам отишао напред и прогласио у фајлу названом аргв0.ц следећи образац. И приметио да је једина ствар то је другачије до сада се да сам променио празнина у инт аргц, аргв низ отворен брацкет, близу носач. И приметио за сада, нема ништа унутар тих заграда. Нема број. И нема ја, или н, или било који други писмо. Само помоћу квадратних носачи за сада, из разлога ћемо доћи назад у само тренутак. А сада оно што ћу да урадим је то. Ако аргц једнако једнако 2-- и сећам се да износи једнаки је оператор једнакост у односу лева и десна за једнакост. То није задатак оператор, што је једини знак једнакости, што значи копију од права на лево неку вредност. Ако аргц! Једнак једнако 2, хоћу да рецимо, принтф, здраво, проценти, нова линија, а затим прикључите у-- и ту је нова трицк--, аргв носач 1, из разлога да ћемо се вратити за тренутак. Иф аргц не једнак 2, знаш шта? Хајде само напред и, као и обично, принт од здраво свет без замене. Па се чини да ако аргц, који означава аргумент тачку, једнако 2, Идем да одштампате здраво или нешто друго. У супротном, по дефаулту, сам штампања здраво свет. Дакле, шта то значи? Па, пусти ме само напред и сачувати ову слику, а затим направите аргв0, и онда ./аргв0, Ентер. И каже здраво свет. Сада, зашто је то тако? Па, испоставило се кад год покренути програм на командној линији, ви попуњавате шта ћемо обично зову аргумент вектор. Другим речима, аутоматски и рачунар, оперативни систем, ће се предати у вашем програму Сама листа свих речи да је људски откуцан на промпт, у случају да програмер желите да урадите нешто са том информацијом. И у овом случају, једина реч Ја сам откуцао на линији је ./аргв0. И тако је број аргумената које је се прослеђује свом програму је само један. Другим речима, аргумент цоунт, иначе познат као аргц овде као цео број, је само један. Један, наравно, није исто што и два. И то је оно што штампа, здраво свет. Али дозволите ми да искористим ову негде. Дозволите ми да кажем, аргв0. И онда шта је са Маријом? А затим притисните Ентер. А погледајте шта магично се дешава овде. Сада, уместо хелло света, имам променио понашање овог програма узимајући улаз не од гет стринг или неке друге функције, али од, наводно, мојом командом Сам, оно што сам првобитно унесе. И ја могу опет играти ову игру мењајући га у Стелиос, на пример. И сада видим друго име још. И овде, можда рећи Анди. И ја могу рећи Замила. И можемо да играмо ову игру током целог дана, само укључивања у различите вредности, све док сам обезбеди тачно Две речи на брз, тако да аргц, мој аргумент рачуна, је 2. Видим да име укључен у принтф, по том стању овде? Дакле, чини ми се да сада имамо изражени способност узимања улаз из неког другог механизма, из такозване командне линије, уместо чекања док корисник ради програм, и њега или њу онда питати користећи нешто попут гет низу. Дакле, шта је ово? Аргц, опет, само цео број, број вордс-- аргументс-- да корисник датим у брз, у прозору терминала, укључујући и име програма. Дакле, наш ./аргв0 је, практично, име програма, или како сам покренути програм. То се рачуна као реч. Па аргц ће бити 1. Али кад пишем Стелиос, или Анди, или Замила, или Марија, то значи аргумент датотека је два. И сада постоје две речи прошло у. И обавештење, можемо да наставимо ову логику. Ако сам заправо рећи нешто као Замила Цхан, пуно име, тако пролази три аргумента укупно, Сада се поново пише дефаулт, јер, наравно, 3 није једнако 2. Па на тај начин, имам приступ преко аргв ово нови аргумент да смо могли технички позвати све што желимо. Али по обичају, то је , аргв и аргц, респективно. Аргв, расправа вектор, је љубазан од синоним за програмирање Функција у Ц зове низ. Низ је списак сличних вредности назад, то бацк, то бацк, на леђима. Другим речима, ако је овде у РАМ-а, следећи је поред њега, и одмах поред њега. Нису свуда. И да други сценарио, где ствари су свуда у меморији, заправо може бити моћно оружје. Али ћемо се вратити на то када говоримо о луксузнијих структуре података. За сада, низ је само комад целовите меморије, сваки од чији су елементи назад, то бацк, да подржи, да подржи, и генерално исти тип. Дакле, ако размислите, од А Пре тренутак, што је стринг? Па, низ, као Замила, З-А-М-М-л-А је, технички, само низ. То је низ знакова. Па ако стварно ово нацртао, као што сам урадила раније, као комад меморије, испада да сваки од њих карактера заузима један бајт. А онда је то посебан Сентинел карактер, косих 0, или свих осам бита 0, да разграничава крај тог низа. Дакле низ, испоставило од, под знацима навода стринг, је само низ цхара-- цхар је стварна тип података. А сада, аргв, меанвхиле-- Вратимо се на програму. Аргв, иако видимо реч ниска овде, није сама по себи низ. Аргв, расправа вектор, је низ од низова. Дакле, као што можете имати низ карактера, можете имати виши ниво, низ стрингс-- тако, на пример, кад сам куцао малочас ./аргв0 аргв0, простор је З-А-М-М-л-А тврди да је , аргв имао два конце у То-- ./аргв0, и З-А-М-И-Л-А. у Другим речима, аргц! је 2. Зашто је то? Па, ефикасно, шта се дешава јесте да сваки од ових низова је, наравно, низ знакова Као и раније, сваки од чијег карактера заузима један бајт. И не мешај стварни 0 у име програма са 0, што значи да све 80 бита. И Замила, у међувремену, још увек Такође низ знакова. Дакле, на крају крајева, то стварно изгледа овако испод хаубе. Али, аргв, по природи како главни радови, ми омогућава да заврши све ово горе у, ако хоћете, а већи низ да, ако се нешто више од поједноставимо како слика изгледа и не сасвим је нацртати да смањи тамо, овај низ је само величине 2, први елемент који садржи низ, Други елемент који садржи низ. И, заузврат, ако ви мало зумира свакој тих стрингс, шта види испод хаубе је да сваки низ је само низ знакова. Сада, као и код жице, били смо у могућности да добију приступ карактеру и-тог у низу користећи тај квадратни конзоле запис. Слично, са низовима уопште, можемо користе средња заграда запис да на било који број низова у низу? На пример, нека ме само напред и уради то. Пусти ме напред и створити аргв1.ц, који је мало другачији овај пут. Уместо провере за аргц2, Ја ћу уместо тога ово. За Инт добијем 0, ја је мање него аргц, ја плус плус, а потом одштампати унутар ове, посто ова, нова линија, а затим , аргв носач ја. Другим речима, ја не бавимо појединачни ликови у овом тренутку. Аргв, као што указује овим празним квадратом се припрема за десно од имена аргв, значи, аргв је низ жице. И аргц је само инт. Ова линија овде, 6, је каже Кренуо сам једнак 0. Тачка скроз до, али не укључујући, аргц. А онда на свакој итерацији, одштампате стринг. Шта низ? И-те низ у аргв. Према томе, док пре него што сам био користеци квадратни носач нотација да се на ити лик у серији, сада Ја користим квадрат носач запис да се на-тог низа у низ. Дакле, то је врста једног слоја горе, концептуално. Па шта је згодно о томе Програм сада, ако сам саставити аргв1, а онда ./аргв1, а затим укуцајте у нешто слично Фоо Бар баз, који су три стандардне речи које а компјутерски научник посеже за било које време он или она треба неке речи као чувари места, и притисните Ентер, сваки од тих речи, укључујући име програма, који је аргв на првој локацији, завршава се штампа један по један. И ако променим ово, и ја кажем нешто као аргв1 Замила Цхан, добијамо све три оних речи, што је аргв0, аргв1, аргв2, јер у овом Случај аргц, гроф, је 3. Али, оно што је лепо је ако разумете да, аргв је само низ жице, и ви разумете да је низ је низ знакова, можемо некако од користи ово средња заграда нотатион више пута изабрати стринг, а затим изаберите карактер у низу, роњење у дубље на следећи начин. У овом примеру, пусти ме напред и зову аргв2.ц. И у овом примеру, пусти ме само напред и урадити фолловинг-- за ИНТ И гет 0, и је мање од аргц, и плус Плус, као и пре. Дакле, у другој вордс-- и сада ово постаје довољно компликован. Онда ћу рећи Посматрајте преко жице у аргв, као коментар на себи. А онда ћу имати угнијежђена за петље, који вам вероватно учинио, или се сматра ради, у Сцратцх, где Ја ћу рећи да сам инт-- неће поново користити, јер не желим да сенке, или некако преко постојећег и. Ја ћу, уместо тога, кажу ј, јер то је мој иди на променљиву после И, када Ја само покушавам да рачунати једноставне бројеве. За Ј добија 0-- и такође, н ће добити оштро дужину аргв носача и, докле год ј мањи од м, Ј плус, плус, урадите следеће. И овде је занимљив део. Одштампати карактер и нову линију, укључивања у аргв носач И, конзола ј. У реду, па да додам неке коментаре овде. Посматрајте преко знакова у тренутном низу, штампа ј-ти лик у и-том низу. Дакле, сада, хајде да размотримо Шта значе ови коментари. Посматрајте преко жице у аргв-- колико жице су у аргв, који је низ? Аргц многи, па сам итератинг од ја једнака 0 до аргц. У међувремену, колико знакова у и-том низу у аргв? Па, да се тај одговор, И јуст цалл дужину стринг на И Царе струје стринг о, што је, аргв носач ја. И ја ћу да привремено складишти да вредност у Н, само за потребе кеширању, да га се сетите за ефикасност. А онда ћу иницијализирати ј 0, Настави тако дуго док ј мање од Н, и на сваком итерација прираста ј. А онда овде, по мој коментар на линији 12, одштампати карактер, затим нове линије, посебно аргв носач И ми даје и-тог стринг у аргв-- па је прво речи, друга реч, трећа реч, шта год. И онда ј зарони у дубље, и добија ми карактер ј-ти те речи. И тако, у ствари, можете лечити , аргв као мулти-димензионални, као дводимензионални, низ, при чему свака реч некако изгледа овако у ваш ум је око, и сваки карактер је врста састоји у колона, ако то помаже. У стварности, када задиркују ово осим у наредним недељама, то ће бити мало софистициранији од тога. Али ти можеш стварно мислим о томе, за сада, као што је управо овај дводимензионални низ, при чему један ниво од њега је све жице. И ако ронити у дубље, могу добити на појединим ликовима је у њима користећи ову запис овде. Дакле, шта је нето ефекат? Пусти ме напред и да аргв2-- Проклетство. Направио сам грешку. Имплицитно прогласити библиотека функција Стирлинг. Дакле, све ово време, то је можда прикладно да смо на неки начин завршетка тачно где смо почели. Зезнуо сам, имплицитно изјављујући библиотека функција Стирлинг. У реду, чекај мало. Сећам се да је, посебно јер је овде. Морам да укључи стринг.х у ова верзија програма. Пусти ме напред и укључују стринг.х, осим што, само напред и рецомпиле аргв2. А сада, идемо, да аргв2, Ентер. И мада је мало Цриптиц на први поглед, приметити да, заиста, шта је одштампан је тачка аргв2. Али ако укуцам неке речи након што је брз, као аргв2 Замила Цхан, Унесите, такође мало Цриптиц на први поглед. Али ако се померите назад, ./аргв2 З-А-М-И-Л-А Ц-Х-А-Н. Тако смо поновио преко сваке речи. И заузврат смо итератед овер сваки лик у речи. Сада, након свега овога, схватити да постоји један други детаљ смо били љубазни игнорисања све време. Управо смо задиркивали, осим што улази главни може бити? Шта је са излаз главни је? Све ово време, били смо само копирање и лепљење Реч Инт испред главног, мада можете видети на мрежи, понекад погрешно у старијим верзијама од Ц и компајлера, да кажу празнина, или ништа. Али, заиста, за верзија од Ц да користимо, Ц 11, или 2011, схватити да треба да буде Инт. И то ни требало да буде празнина или аргц и аргв овде. Али зашто маин? Шта је то заправо враћа? Па, испоставило се да све ово време, сваки пут када сам написао програм маин увек враћа нешто. Али то је радио тако тајно. То нешто је Инт, као линија 5 сугерише. Али шта Инт? Па, ту је ово конвенција у програмирању, при чему ако ништа има кренуло наопако и све је добро, програми и функције генерално ретурн-- нешто цоунтеринтуитивели-- 0. 0 обично означава све је добро. Дакле, иако мислиш о она као лажна у многим контекстима, заправо уопште значи добру ствар У међувремену, ако програм врати 1, или негативна 1 или 5, или негативно 42, или било који не-0 вредност, да генерално означава да нешто није у реду. У ствари, на свом Мац или ПЦ, можда су уствари једини видели порука о грешци, при чему је каже нешто или друге, грешка код негативан 42, или грешка код 23, или нешто слично. Тај број је обично само наговештај за програмера или компаније који је софтвер, шта је пошло наопако и зашто, тако да могу да гледају кроз њихова документација или код, и схватити шта Грешка у ствари значи. То је генерално не корисно за нас крајњим корисницима. Али када главни враћа 0, све је добро. А ако не наведете шта главни треба да се врати, то ће само аутоматски ретурн 0 за тебе. Али повратак нешто друго је заправо корисно. У овом последњем програму, пусти ме само напред и зову екит.ц, и увести последњи данашње тема, познати као код грешке. Пусти ме напред и укључују наш познати фајлова до врха, до маин. И овога пута, урадимо инт аргц, жица, аргв, и са мојим заградама имплицира да је у низу. А онда дозволите ми да уради проверу исправности. Овај пут, ако аргц не једнак 2, онда знате шта? Заборави. Ја ћу рећи да, хеј, корисник, вам недостају командне линије аргумент обрнута коса црта бр. И то је то. Желим да изађете. Ја ћу да превентивно, и прерано стварно, повратак нешто друго од броја 1. Го То вредности за први грешка која се може десити је 1. Ако имате неки други погрешан што би могло доћи, могло би се рећи повратак 2 или да се врате 3, или можда чак и негативан 1 или негативна 2. Ово су само излазне кодови који су, генерално, само корисно за програмера, или компанија која испоручује софтвер. Али је чињеница да је Не 0 је оно што је важно. Дакле, ако у овом програму, желим да гарантује да овај програм само ради ако ме корисник обезбеђује свађом тачки два, назив програма, и неки други реч, могу применити колико следи, викати на корисника са принтф изрека, недостаје линијски аргумент, ретурн 1. То ће само одмах отказ програм. Само ако аргц! Једнака 2 ћемо добити доле овде, на којој тачки ћу рећи, здраво посто ова, косих н аргв1. Другим речима, ја сам Не иде после аргв 0, који је само име програма. Желим да одштампате здраво, зарез, друга реч да је човек откуца. И у овом случају на линија 13, све је добро. Знам да аргц је 2 логички из овог програма. Ја идем напред и врати 0. Као страну, имајте на уму да то је тачно у Огреби и. Логично, ја то могу и обухвати ове редове кода у овом другом клаузуле овде. Али то је нека врста непотребно увлачењем мој код. И желим да се супер јасно да без обзира на све, подразумевано, здраво нешто ће се штампати, све док корисник сарађује. Зато је веома уобичајено да се користе услов, само ако, ухватити неки погрешан ситуација, а онда излаз. И онда, толико дуго све је добро, немају друго, али само код ван ако, јер је то еквивалент у овом конкретном случају, логично. Па Враћам 0, да би експлицитно означавају све је добро. Ако сам пропустио повратак 0, било би се аутоматски претпоставити за мене. Али сада да се враћам један у бар овом случају, Ја ћу, за сваки случај и јасноћа, ретурн 0 у овом случају. Дакле, сада пусти ме напред и да излаз, који је савршен Сегуе да само оду. Али да излаз, и пусти ме напред и до ./екит, Ентер. И програм викао на мене, недостаје командне линије аргумент. ОК, да сарађују. Пусти ме уместо тога ./екит, Дејвид, Ентер. И сада се каже, здраво Дејвид. И не би нормално види ово. Али испоставило се да постоји Посебан начин у Линук заправо видети са оним чекера програм изашао. Понекад у графичком свет као Мац ОС или Виндовс, ви само видите ове бројеве када је порука о грешци се појављује на екрану и програмер показује вам тај број. Али, ако желимо да видимо каква је грешка Порука је, можемо то овде- тако ./екит, Ентер, штампа недостаје командне линије аргумент. Ако ја сада ецхо ?, који је смешно загонетан гледа. Али $? је магичан бајање да каже, хеј, рачунар, реци ми шта је претходна програма чекера је. И притисните Ентер. Видим 1, јер то је оно што ја рекао мом основну функцију да се врати. У међувремену, ако ја ./екит Давид, и притисните Ентер, видим, хелло Давид. И ако ја сад да радим ецхо ?, видим здраво 0. И то ће заправо бити драгоцене информације у контексту отклањање грешака, не тако много да ви, људска би стало. Али за отклањање грешака и други програми које ћемо користити овај семестар Често ће изгледати тај број, иако је некако скривена осим ако то траже, да утврдити да ли програм је или није извршење је тачно или нетачно. И тако то нас доводи до то, на крају дана. Почели смо данас гледајући отклањање грешака, а заузврат у току Сама, а затим још интересантније, технички испод хаубе на шта жице су, који траје недеља смо узели здраво за готово, и сигурно их је здраво за готово у Сцратцх. Затим смо гледали како можемо да приступимо поједини ликови у низу, а онда опет узео виши ниво поглед на ствари, гледајући како па-- ако желимо да се на појединца елементи на листи као што је структура, Не можемо то са вишеструким жице? И можемо са аргументе командне линије. Али ово слика овде на само кутија је демонстративни ове опште идеје једног низа или листе, или вектор. И у зависности од контекст, све ове речи значи мало различите ствари. Дакле, у Ц, ми само идемо да говори о низу. Као и низ је комад меморије, од којих је свако је елементи су суседни, назад, да подрже, да подржи, на леђима. И ти елементи су, углавном, истог типа података, карактер, карактер, карактер, лик, или Стринг, Стринг, Стринг, Стринг, или инт Инт, Инт, шта год да је покушавамо да продавници. Али на крају крајева, ово је како изгледа концептуално. Узимаш своје рачунара меморија или РАМ. И ти то резбарење напоље у исте величине кутије, што све су се вратили, то бацк, на назад, то бацк на овај начин. А шта је лепо у вези ова идеја, као и чињеница да можемо изразити вредности на овај начин са првим наших структура података у класи, значи можемо да почнемо за решавање проблема са кодом да је тако интуитивно у недељи 0. Ви се сећате телефон књига пример, где користили смо завади па владај, или бинарна претрага, да претура по целини гомила имена и бројева. Али смо претпоставили, опозив, да је телефонски именик је већ поредани, да је неко други већ фигуред оут-- дат списак имена и нумберс-- како их азбучним. И сада је у Ц ми, такође имају способност да постави ствари, не физички у телефонском именику али практично у рачунар је меморија, ћемо моћи следеће недеље да поново уведе ово-- први наших структура података у једној арраи-- али што је још важније, стварна рачунар сциенце алгоритми имплементиран у коду, са којима можемо похранити подаци у структурама као што је овај, и онда почну да га манипулишу, и у ствари решавају проблеме са њим, и да се изгради поврх тога, на крају, програми у Ц, у Питхон, у ЈаваСцрипт, упита базе података са СКЛ? Па да видимо да сви ови различите идеје фази. Али за сада, сећам се да је домен који смо данас представио је ово овде, и свет криптографије. И међу наредних проблема које сте сами ће решити је уметност криптографије, кодирање и де-кодирање информације, и закривање и дешифровање текста, и под претпоставком да на крају да сада знате шта је испод хаубе тако да када видите или примате порука овако, те сами могу да дешифрује. Све ово, и више следећи пут. [ВИДЕО РЕПРОДУКЦИЈА] -Мовер Управо стигао. Идем да одем у посету његов професор високе школе. Да. Хи. То си ти. Чекати! Давид. Ја само покушавам да схватим шта се догодило. Молим вас, било шта може помоћи. Ви сте били његов колеџ цимер, зар не? Били сте тамо са њим када је је завршио пројекат ЦС50? [Мусиц плаиинг] То је било ЦС50. Волим ово место. -Појести. Излазимо из посла. [Крај репродукције]