[Powered by Google Translate] [Недеља 3] [Давид Ј. Малан - Универзитет Харвард] [Ово је ЦС50. - ЦС50.ТВ] Дозволите ми да нас усмери у правцу где смо стали прошли пут, који је почео да размишља о томе нешто више од синтаксе и покушава да мисли мало мање о свим ситницама који узима мало времена да аццлимате да је до сада у смислу зарезом и заграда и заграда, да почнете да ствари мало вишем концептуалном нивоу тако да су проблеми сада почети решавање у наредних неколико недеља ће укључити много више у вишим концептуалних проблема а мало мање у синтаксичких као ти ноге мокро а руке прљаве са неким од синтаксе из ових последњих неколико недеља. Тако подсетити да је прошле недеље увео овај појам низа. И низ у енглеском могу описати као шта? >> [Нечујан ученик одговор] Извини? Збирка? >> [Нечујан ученик одговор] >> Добро, добро. Збирка предмета. Тако смо видели низове у нуле. Ако се десило да користите за псет 0 једну од огребу о листама које можете вући ствари као поморанџе и банане у, инвентара врста, То је нешто као што је низ. А онда више технички, у контексту актуелне рачунара, низ је једноставно суседни комад меморије. Другим речима, имате бајт, а затим још један бајт, а затим још један бајт, а затим још један бајт, а ако сте били да нацртате те бајтове у слици, они ће се вратити да подрже враћа се назад. То је оно што подразумевамо под заразне. Дакле, то је бајт број 1, затим 2, а затим 3. То не значи да се овде, овде, овде, овде. Низ је суседни комад од 0 или више бајтова. Па шта су они корисни за? Рецалл смо имали ову врсту вештачком пример чувања људи квиз разреда у програму да израчуна свој просек квиз за неке, наравно, и сећам се да смо могли да започнете писање тог програма изјављујући променљиву куиз1. Онда бисмо могли имати још једну променљиву зове куиз2. Али онда, ако је било 3 квизова у овој класи, куиз4. Или ако постоји недељни квиз, било би куиз5, куиз6, куиз7. Тако да би све ове променљиве прогласила унутар главних или негде другде у свом програму, и проблем са тим приступом, лако иако је само да копирате и налепите, је то само врло брзо постаје гломазан. Боже сачувај заправо имају 30 или 50 квизове квизове. Ако је као гимназијски стилу дневног поп квизу, онда само имате смешно дугу листу варијабли декларисања, и то само врло брзо добија ван контроле. То је ружно, то је тешко одржавати, то је много лакше направити словну грешку ако добијете број 1 неисправно унео негде у вашем програму. Зато смо увели уместо појам низа. И сећам се да смо реализовали овај програм радећи нешто мало овако. Пусти ме да идем у Извор данашњем 3 понедељак директоријум и отворити низ, који смо видели последњи пут. И мада овде било пар нових трикова Ц, међу њима појам константа, Подсећамо да смо прогласили више Флоатс суштини помоћу ове синтаксе: плутају, онда име променљиве, па смо користили квадратних протезу заиста по први пут, и шта смо радили унутар тих квадратних заграда је ефективно ставио број. Али, уместо да ставимо број, ставио сам ту реч капитализован, квизове. А шта је био мотив за стављање капитализован ријеч као КВИЗОВИ а затим помоћу трик линији 17 је овде заиста дати број? Шта је мотивација тамо? Да. [Нечујан ученик одговор] >> Тачно. Ако желимо да променимо ту вредност 2, можемо само да га промените у 1 месту јер сматрају - Ја чак и не сећам се шта је тачно урадио овај програм, али ако га само прелистам видиш квизове, квизове. Видиш КВИЗОВИ, овде доле више КВИЗОВИ. Дакле, ако нисмо имали ова стална, та употреба оштро дефинишу, би смо уписали 2, затим 2, а затим 2, затим 2, што је у реду. То би било исто као тачна. Али претпоставимо да ће идуће године имамо 3 квизова у ЦС50. Тако да морам да одем и ажурирате код, морам да га компајлирате, али проблем је ако сам нешто глупо, као што сам поменуо превидети 1 2 и заборавите да прикључите на 3, цео програм могао врло добро сломити. Дакле, ми само тражимо невољу. Дакле, појам константа је све о факторингу од неког дела података, да ли је стринг или карактер, или плутају или шта год, и декларисање је 1 место тако да можете лакше да у будућности променити. И то је такође, искрено, мало лакше за читање, јер ако само помислите на ово сада, је КВИЗОВИ, или чак смо могли то преименовали нешто НУМБЕР_ОФ_КУИЗЗЕС или нешто јасније. Код само постаје мало више очигледно да оно што ради, а ви питате мало мање онога што број 2 се може десити да значи. Дакле, константа није имао никакве везе са фундаментално низова. Потез је уведен путем ових квадратних заграда. Дакле, приметићете да у складу 23 питамо корисника, "Шта су ваши резултати квиз?" Онда имамо само ову петљу која очигледно пита корисника за њихове оцене. Како? Он понавља од 0 до 2. А ја кажем 2 зато КВИЗОВИ у свим капе тренутно 2. Дакле, то понавља од 0 до 2, а онда је штампа Квиз # нешто нешто, а онда користи ГетФлоат добити вредност од корисника. Дакле, приметите ово је једини нови део синтаксе од прошле среде. Ако желите да сачувате нешто у одређеној локацији у том низу, поново користите угласте заграде. Дакле, овде је мало дихотомије. Први пут када користите угласте заграде користите да одредите колико желите да буде низ. Али овај следећи контекст овде где смо поново запослити угласте заграде значи када у том низу желиш да ставим неку вредност? А разлика овде може се закључити из контекста. Приметимо овде имамо тип података, онда имамо име променљиве, онда имамо квадратних протезу са бројем унутар, зарезом. То је то. Дакле, то је декларација. То је само као да смо урадили нешто слично пловка Граде1; плутају граде2; али опет, то врло брзо преноси на начин превише цопи, пасте, па уместо да га само поједностављено, као што су, што значи да убудуће имамо резултат који може да се складишти на носачу 0, имамо још једну оцену која може да се складишти на носач 1, али шта ако ја глупан и, на пример, мој петља иде тако далеко - на пример, ја да ово мање или једнако, који је био опозив извор претходне грешке - што практично значи да на неком трећем случајног итерацији ове петље Ја користим конзолу 2. Ефективно, шта би могло да се деси овде? Извини? [Ученик] То ће бити замењен. >> Да ли ће да буде замењен? Шта ће бити замењен? Ово дословно каже замени оно што је на локацији 2 са повратном вредношћу ГетФлоат. Али проблем је колики је низ у овом тренутку у причи? [Нечујан ученик одговор] >> низ је још увек само на величину 2 зато низа, као и било који променљиве, први пут је изјавио, пре него што смо га користе, а ми смо овде навели због тога константа која имам 2 оцене које ћу да ставим. Али запамтите, рачунар научници бројати од 0. Дакле, прво место у тој низу је носач 0. Следећи локација је 1. Ова ствар је икада тако нешто предалеко са стране. Другим речима, ако сам заиста имао овај низ - и пусти ме да видим како добро овај сарађује овде за нас - ако имам низ да ја једноставно нисам извући следећи и ја сам издвојила простор за 2 елемената, могао бих извући ово овако у меморији где је овај велики бело платно је. То је само РАМ имам у рачунару, свирка РАМ, 2 свирке РАМ, свеједно, али ови 2 кутије сада појединачно представљају пловак, 32 бита. Дакле, ако сам ставио 1 број овде као 1.0, онда сам ставио други број овде као 3,2 али онда ја носач 2, то је као стављање нешто овде. И као што је слика сугерише, нема ничега. То је нешто као ничијој земљи, јер нисам питао оперативни систем да ми дају овај трећи квизу. Ако сам желео да се трећи квиз, требао сам имао размишљања унапред да питам оперативни систем за њу прогласио КВИЗОВИ да не буде 2 већ да уместо тога једнак 3. Другим речима, слика коју смо ефективно имати при руци изгледа овако овде. Ово је опет ничија земља. Ми не и боље пробати писање вредности овде. Али опет, јер компјутерски научници рачунају од 0, када говоримо о овој локацији у низу, који је требало да буде локација 0, ово је требало да буде локација 1, и то чак и не постоји јер смо само питао оперативни систем за 2 таквим местима. Дакле, оне од вас са претходним искуством из програмирања другим језицима можда знате да то није увек случај са низовима или ствари називају вектори. Уместо тога, можете једноставно да задржи додавање и додавање и додавање ствари низовима, које, искрено, ми смо имали ту способност у Огреби и још изгледа да смо га дали овде јер са Ц сте програмирања много више експлицитно. То је само ви и рачунар сада, а компјутер је само да уради оно што не кажете да уради. Дакле, ако сте га само реци да ти дам 2 Флоатс путем линије 22 овде, то је све што ћеш добити назад од оперативног система: простор за 2. Дакле, све су ваши програми ће повремено бити луд у вези са низовима. Ово је само нека врста природе звери којој сви греше, и у неком тренутку ћете врло вероватно индекса изван граница вашег низа. А то је само фенси начин да се каже да је отишао у заграде нешто и нешто је једноставно превелики број. Ви сте отишли ​​ван граница ваше низа. Али сада је то наопако. Остатак овог програма заиста нема ништа суштински везе са низовима. То је све само неке једноставне аритметичке за рачунарске просека. Дакле, имамо овде у ово за петљу овде први променљива зове суму да покрене на 0. Онда смо прелазили од 0 до 2 поново додамо на то сума променљиву ИТХ разред, па носач 0 онда носач 1. И онда као што ће учинити у основној школи да израчуна просек, ми једноставно узети ту суму, га поделити са укупним бројем квизове, и онда за добру меру зовемо функцију овде зове круг. Сада, као и на страну, шта је ствар са овим загради интег на линији 34? Можда су дошли већ у одељку, нису баш причали о томе званично овде, али шта је то инт у паренс вероватно ради? >> [Нечујан ученик одговор] Да, то се односи на кастинг или типецастинг, што значи узимање 1 тип података и претвара у другу. Ви не можете да урадите са свим типовима података јер понекад би било мало чудно. Али у овом случају, ако повратна вредност кругу је пловак јер, на крају крајева, ја узимам пловак и дељењем га више као 2, Идем да се вратим на пловак. Али разреда школске људи не воле да знају да је њихов просек је 93,4 јер ће схватити они икада били толико близу тог 95 заокруживањем тачке. Зато желимо да се уместо инт да заокружи све до најближег инт, која је у овом случају ће бити 94 и ни у једном тренутку после тога. Дакле, то је само мали математички трик. А ми ћемо се вратити на овај појам ливење, јер ће имати импликације, ако већ нисте открили, јер проблем сет 2. Па онда низ, можете мислити - то ће да ме осмех цео дан. То изгледа овако, ако нацртате слику о томе, али кључно је да је величина је такође изабран од вас када га затражи од оперативног система. Сва питања онда о низовима? Да. [Нечујан ученик питање] Ах, добро питање. Питање је шта се дешава са нултим 0 у низу? То не постоји у овом контексту. То постоји само у контексту жицама, које ћемо ускоро доћи у само једном тренутку. Али низа, као у овом случају, све што добијамо је оно што тражите оперативни систем. И као по страни, да то буде јасно, Стално говорим да питате оперативни систем, питајте оперативни систем. Оперативни систем, као што вероватно знате, Мац ОС, Виндовс, Линук. Када зовете функције као ГетФлоат или сте декларисање променљиве као разреда, на крају дана можете ефикасно питате неког другог да вам дам ту меморију јер ми смо као тежи програмере Немам појма како да се заиста добије физички приступ меморији. Али неко ради: оперативни систем. Дакле, поред нас представља са лепим иконама и меније и фасцикли и као коју видите на радној површини, било Мац или ПЦ, оперативни системи такође не ниском нивоу мунданој ствари, високо техничке ствари управљања гигабајт или 2 гигабајта меморије који имате, управљање процесор који имате, и тако даље. Дакле, када пишете код, стварно сте скопчавање на ваш оперативни систем у том смислу. Ја ћу морати да минимизира то. У реду. Остала питања у вези низа? Не? Ок. Дакле, транзиција природно из низовима је заправо на теми која је мало позната. И ми смо икада гледали тако кратко у овом последњем тренутку превише. Ово је стринг пример од среде. Овај низ примера је прилично једноставан програм, и ја сам га заправо поједностављена неколико линија за потребе данашњице. Све је то у реду 19 је добио стринг од корисника, складишти га у променљиву зове с. Онда је у реду 22 па надаље очигледно је да штампа стринг 1 карактер по линији. Али како се то ради ово? Ми проглашења променљиве ја, да га једнако 0, и то сада постаје стара навика. Нисмо видели до среде, али можете некако закључити из његовог имена стрлен само враћа оно кад с обзиром? Дужина стринга. Дакле, ако сам га прође низ, цитирам-завршити цитат Давид, надамо се ће да се врати да ми се број 5 јер Давидов. Дакле, то је њена сврха у животу је да се стринг, да ли је тешко кодирана од вас или у овом случају прикључен као променљиву као аргумент, и схвати шта је дужина тог стринга је. Дакле, овде сада смо позајмљујући неку ознаку из претходног квиза пример. Ово нема никакве везе са сплавова, нема никакве везе са квизова, али се испоставило да је мали бели лажемо сам вам од недељу 1 је да је ниска заправо не постоји у Ц. Ниска на крају дана је заиста само низ. То је низ бајтова, па бајт, бајт, бајт, бајт, што је присећање само 8 бита, па комад сећања, комад сећања, комад сећања, комад меморије. И начин на који се спроводи стринг је стављањем овде први карактер, па овде, па овде, па овде, поново враћа се назад у меморију рачунара. Дакле, ако сте желели да срицати реч као ЗДРАВО, ти би ставио 1 х карактера, онда је Е, онда сам онда Л, а затим О - 5 знакова укупно - негде у РАМ рачунара. Али кључни детаљ овде је да ћемо се вратити на Бацк то да леђа, Право један поред другог. Кад кад кажем с [и], што на енглеском је ово ми даје? Шта с [и] представља у овом случају? Да. [Ученик] Тхе ИТХ лик у низу. >> Тачно. И-ти карактер у стрингу. Сада сам ће почети на 0 по мом за петљу овде, али то је добро, јер све почиње бројање од 0. Дакле, с [0] ће представљати Х слово у речи попут ЗДРАВО, с [1] ће представљати писмо као Е у речи попут ЗДРАВО, и тако даље. А оно што ми изгледа да раде на свакој итерацији ове петље привремено складиштење ИТХ карактер у променљивој под називом Ц, што је само знак, и онда смо штампање ц тако да на крају дана шта овај програм ради је следећи. Ако одем у изворни директоријум и ја да стринг1 и ићи напред и покрените стринг1, и онда укуцамо реч као ЗДРАВО, Ентер, све што ради је одштампате ову 1 карактер на време. Дакле, овде је прилика за прецизирање. Некако сам радећи више посла, иако је можда јасније овај начин, него што је потребно. Која линија кода овде могу вероватно бацити укупно? Да. Линија 24. У складу 24 Ја проглашења променљиве ц. Ја чување ИТХ карактер с у томе, али онда ја користим ц овде. Дакле, ја користим ц, тако да се осећам као да не могу само бацити линију 24 даље. [Нечујан ученик коментар] >> Тачно. Дакле, када је у питању прича о дизајну програма, приметити благи поједностављење кода, што је исто као читљиви, али схвата да је само је променљива, његов тип података је низ, па с [и] је само ће одмах вратити вама ИТХ карактер у том низу. А ако желите да га одштампате, то је у реду. Ви само морате да користите Ц% јер не штампате низ, да ли штампате карактер у низу, и ово има ефекат штампања ИТХ карактер. И сећам се једина разлика заиста од прошле недеље са коришћењем принтф је да, док у недељама прошлости би ми нешто супер једноставно као чувар места% с онда је име у низу овде, Сада смо роњење у мало дубље испод хаубе и каже, не штампају жицу, одштампали њој једну карактер. Тако да можемо да урадимо нешто мало другачије овде, јер постоји још 1 - није буг јер овај програм је у праву, али ја радим нешто глупо које сам укратко поменуо у среду. Али мислим се, како је овај програм дизајн побољшати чак и даље? Да. [Нечујан ученик одговор] >> О, добро. Тако се сећате да смо увели други променљиву зове н последњи пут, што се чини да се противречи, јер је мој циљ пре другог био је само да баци променљиву као непотребно, али подсетимо да је у среду смо заправо урадили. Променио сам за петљу да заиста имамо овде зарез, а затим н = стрлен, и онда овамо сам и <н, онда сам урадио своје корацима. Шта је основни добитак који сам постизање променом мог иницијализацију ово и мој услов да ово сада? >> [Нечујан ученик одговор] >> Тачно. Нећу подсјећајући стрлен опет и опет и опет, јер сећам како за петље радова. Чак и ако почну да се више компликовано изгледа, Подсећамо да је ствар пре првог зареза је иницијализација, што се дешава једном. Услов је, међутим, у средини, а ово добија проверава сваки пут када иде кроз петљу. Дакле, то је мало глупо да се пита рачунар из исто питање поново и поново - Шта је дужина ЗДРАВО? Шта је дужина ЗДРАВО? Шта је дужина ЗДРАВО? - јер као што ћемо видети данас и у среду, ово је дефинитивно ће потрајати и није баш добра употреба времена, јер да схватим дужину стринга стварно потребно мало труда. То није тренутна, као што је у неким језицима. Дакле, мењањем то н, цена ја плацам је шта? Ми овде видимо траде-офф. Ја могу уштедети време тако што не постављам исто питање проклети поново и поново, али то ће ме коштати нешто, што је оно? [Ученик] Ти изгубити одређену количину меморије. >> Тачно. То ће ми коштати мало меморије. Дакле, у овом случају то кошта ме шта? Још 32 бита јер је Н само инт, као подразумева под речју инт овде. Али да ли је то у реду? Искрено, то је вероватно у реду, јер ако мислите о томе, дуже стринг, више времена ћу се троши јер стрлен ће се зове опет и опет и опет за сваку итерација петље. И ових дана, мој Мац има 2 свирке РАМ, ових дана 4 свирки РАМ понекад. Мислим да могу да приуштим 4 од тих бајтова да заправо убрза ствари. Али ово ће бити компромис и тема заиста у програмирању и информатике се никад заиста се ништа бесплатно. Ако желите да побољшате нешто овде, морате да платите за то са друге стране некако. Простор у односу на време у овом случају. Дакле, ово је све довело до према нечему најстрозије овако, који је, као што вероватно схватили до сада, у ствари каже? [Нечујан ученик одговор] >> Да, па ово је Будите сигурни да пијете своју Овалтине, заправо користи алгоритам зове РОТ13, Рот 1-3, што само значи ротира свих слова 13 места, што значи узети, а затим додајте 13 до ње и тачка, тачка, тачка све начин да 13. слово гостима, урадите исту ствар за БиХ и за Ц и за Д и тако даље. И тако, ако смо заиста претворити ово овде користи помак од 13 места, ћемо вратити оно мало Ралпхие имао, који је, Будите сигурни да пију своју Овалтине. Али сада проблем сет 2, у стандардном издању најмање, морате врсте не ово сами кифарска, и морамо некако да се узме у улаз овако и шифровање то или га дешифровали. Дакле, који од ове претпоставке врсте нас доводи до тог прилику? Хајде да погледамо на овом трећем примеру овде. Пре свега, то се зове АСЦИИ. Шта АСЦИИ позивају на? Америцан Стандард Цоде фор Информатион Интерцханге, што је заиста дуг пут да се каже шта? Шта је АСЦИИ? [Нечујан ученик одговор] >> Шта је то? >> [Ученик] карактер карта. >> Карактер карта. То је само пресликава бројева словима, јер свет има стандардизовани шта бројеви ће представљати која слова, тако да свако од нас може да користи рачунаре а наши програми су сви само компатибилни када је у питању штампање ствари на екрану. Тако се сећате да 65 се дешава да представљају, 97 дешава да представљају мала. И тако овај једноставан програм овде АСЦИИ се искористи ту чињеницу - да свет зна да је капитал је 65 - и то је само штампање мапирање. Дакле, пре него што ускочите у овом шифром, дозволите ми да уместо отворим терминал прозор. Дозволите ми да иде напред и да АСЦИИ, а онда хајде да покренете ову ствар само да поквари излаз. И то само ради ово: заиста велики графикон који ми само говори све од различитих кодова за све различите слова. Дакле, супер једноставан програм, али ја нисам имао на хард код оних 52 линија излаза: 26 великих, 26 мала. Уместо тога, ја сам ово урадио програмски са неколико петљи. Приметите шта сам овде урадио. Ја сам поновио у је 65 на до 65 + 26, јер сам желео да одштампате 26 слова У енглеског алфабета, и + + на свакој итерацији, а сада приметите ово поново. То је понављање нашем пријатељу типецастинг чиме можете конвертовати 1 тип података у други зато што желим да урадим у овом конкретном програму? Желим да бројчано рачунају јер то је како сам ја одрастао бројање - 65, 66, 67, и тако даље - али ја не желим да одштампате само бројеве. Желим да одштампате писмо затим броја. Желим да одштампате А: број, Б: број, али ја могу да урадим ово са истим тачним променљиву. Тако сам штампати% Ц као чувар места за карактер, % Д као чувар места за цифру или број. Онда шта сам прикључите оних 2 чувара места? Први пут сам прикључите карактера противвредности и, и онда сам одштампате да сам себе. Дакле, приметите ово превише једноставно ради. Баш као што ја могу да баци од плуте на инт како да одем из реалног броја на цео број, Овде сам да одем из инт у цхар, што је мало чудно - не сасвим мап на стварном свету - али у компјутерима цхар је само број испод хаубе, тако да смо икада тако што изричито овде на рачунар, говорећи принтф, одштампајте не ја као 65, одштампајте га као свог нумеричког еквивалента. И испоставило се да сам технички ни не треба ми ово. Оно што сам радила пре тренутак изричито ливење одређивањем тип података желим да одем из и ка. Али приметио да сам већ имају ову чувара места% Ц а ово друго% ц плацехолдер овде. Иако ово није инт рачунар схвата да знак, то је само инт испод хаубе. Дакле, ако сам стварно рекомпајлирате ово и поново покренете АСЦИИ програм, приметити да само и даље ради зато што је рачунар схвата да је ова преписка. Сада је важније да експлицитно ливење у свету сплавова на Интс јер ви заправо правите израчунату одлуку: баци све после децималног зареза. Овде је заиста ништа да баците, јер лик је само број, а стринг је само низ карактера. Дакле, када дође време да се примени неки шифровање и дешифровање, како то да ми заправо можемо превести нешто попут овог на глупости, Будите сигурни да пијете своју Овалтине? Шта ако знамо сада - хајде да узмемо као претпоставку - да је кључ, број који смо ротирајуће свих ових писама, је број 13? Тако смо отишли ​​са словом Б све до Ø на почетку реченице, Будите сигурни да пијете своју Овалтине, јер ако то урадим Б и онда идем Ц, Д, Е, Ф, Г, Х, И, Ј, К, Л, М, Н, О, зато је енкрипција слова Б постаје О зато сам додао 13 до њега. Дакле, ако желим да дешифрујете ово, у суштини морају да преузму О, а затим одузмите 13 од њега. Или, искрено, јер има 26 слова у алфабету, ово је предивно симетричан, можемо само да додам 13 и ми ћемо вратити на слово Б. Али, како идете о имплементацији нешто слично овоме Цезара или стварно манипулације конце у целини? Ако слово Б је оно број? Шта је слово Б? Дакле, то је 66, зар не? Дакле, ако је писмо је 65, а слово Б је 66, па 66, све што треба да урадите је да додате 13 до њега, и то ми даје 79. И ако одемо на нашу малу листу преварити, 79 заиста мапе на О. Али, овде је мало угла случају. Оно што је, рецимо, слово З? Ако то урадимо 66 + 25 да се све до краја азбуке, ми смо на 91. 91 + 13 ми даје 104, и погодите шта? 104 не буде једнак велико слово. Хајде да се вратимо на мало лист преварити овде. Ако сам реприза овај програм у апарата, најаве да 104, ако се вратимо на терминалу, 104 је очигледно мала х. Зато нам је потребно нешто кључну трик овде како би били сигурни да када почнемо у З а ми додајемо 13 до ње не желимо само да задржи ковања напред за веће и веће бројеве. Шта заиста желимо да урадимо? Хоћеш на око замотајте. Тако испада, као што сте вероватно видели у одељку сада или у спец проблема сет самом схватио да је тај други оператор у Ц који је такође знак за проценат, али док смо користили% овде да одредите чувар места, Знам то, посебно за проблем сет 2, постоји нешто овако: инт к = и% з. Дозволите ми да представи то као веома генеричке форме тога. Проценат значи оно у програмском језику? >> [Ученик] Модуло. Модуло, што је фенси начин да се каже остатак. Иако постоји мала разлика у дефиницији тамо, ово значи поделити год са з, али не врати резултат те поделе; уместо тога, вратите остатак. Дакле, ако је и ствари 3 и з је заправо 2, 3 подељено са 2 је 1 са остатком 1, па шта заправо к једнак у овом сценарију? 1. Ово је тако једноставна, ниског нивоа идеја. Потребно је мало времена да се ваш ум замотан око ње зато што је вероватно био док пошто сте чак морали да брину о остатака и заправо их користити за нешто смислено, али у овом случају једноставна чињеница да можете ићи од великог броја попут 3 на релативно малом броју као 2, а затим обмотана ефикасно помоћу остатак на мање вредности попут 1 ће бити непроцењива трик које можемо да користимо и за тако нешто Цезара и овом другом ствар Вигенере у решавању сет 2, али ово ће бити понавља трик током семестра. Ова једноставна, једноставна идеја само узимајући остатак у целини ће нам омогућити да завршимо око. И као што смо почели да играте више са низовима, као што смо почели да играте више са меморијом самој ово ће постати све више и више моћне трик. Дакле, сва питања онда на АСЦИИ или заступљеност стрингова као матрице? И ми ћемо то узети 1 нотцх даље. Да. [Нечујан ученик питање] >> Добро питање. Шта значи када променљива има звездицу испред њега? Дозволите ми да одложи одговор да у сваком детаљу, али да се односи на тему познат као показивач. Показивачи има везе са меморијом, а ми заправо данас узимајући први корак ка том разговору, али за сада, дозволите ми да се претварамо да је звезда не постоји и ми ћемо наставити позивајући жице жице уместо коришћења цхар *, које сте вероватно већ видели, а ја ћу ставити на екрану у само једном тренутку, као тизер. Тако ћемо се вратити на то у тако ближе него што су многи од вас ће се вероватно свиђа. На крају, не данас. Да. [Нечујан ученик питање] У ком контексту не треба да обезбеди знак за карактер? >> [Ученик] Да. Дакле, по дефаулту, кад не стави +, само позитивни бројеви се претпоставља. Дакле, ако само написати број 1, то је позитивна 1. Ако заиста желите да наведете негацију вредности, буквално треба да урадите -1 на тастатури. Али то вероватно није питање. >> [Нечујан ученик одговор] Добро питање. Ок. Дакле, ово мора да уради, ја окупљају, са неком врстом грешке сте налетели јер сте били конвертовање цео до карактера, али некако негативност умешали, па лик управо изашли мунгед некако. Дакле, за сада, дозволите ми да поједностављују мало док се не вратите на ову врсту теми. За сада, мислим на ствари на овај начин - а то је упрошћавање. Али у свету цео број, имате колико бита на располагању? Имате 32 бита. И до сада смо говорили о укупном броју целих можете стога могу да представљају је отприлике 4 милијарде укупно, јер имате 32 бита, тако да је то 2 до 32, тако да је то отприлике 4 милијарде. Али видели смо пре недељу дана или 2 да стварно не имати низ бројева од 0 на до 4 милијарде. Опсег уместо иде од отприлике 2 милијарде евра до негативног позитивно 2 милијарде. Али то онда намеће питање, како сте представник појам негативног 2 милијарде а камоли негативна 1? За сада, можемо да поједностављују и само да кажем да ћемо користити крајњој левој бит од тих 32 бита, а ако је 1 је негативан број, а ако је 0 то је позитиван број. Проблем са том поједностављено представљање негативних бројева је да ако сте били намерно бити паметан и покушава да конвертује из једног карактера у број или обрнуто, не постоји таква ствар као негативан лик. У свету АСЦИИ, који користи само 8 битова, све 8 од оних ствари бита, и крајње лево мало нема никакве везе са негативности. И само да буде јасно, кад кажем крајње лево бита, Подсећамо да када смо радили наше мало везане примере у првој недељи Подсећамо да смо нацртао ствари као 1001101, овако нешто. Када кажем са леве стране мало, само сам дословно значи 1 да пишете скроз на леву. Дакле, у свету знакова постоји појам негативности, тако да крајње лево мало ствари има везе са АСЦИИ, нема никакве везе са негативности. Дакле, то звучи као - и из контекста да је тешко тачно одговорити - али некако, ваш код је збуњујуће да леве стране мало, као што представља негативну вредност када је заиста био део карактера је у питању. И опет, ја сам упрошћена, јер компјутери заиста нешто мало одгајивача него само мења ту леве стране мало на 1 за негативним предзнаком у односу на 0. Они уместо тога, ако сте радознали да Гоогле, користите нешто обично зове 2 комплементна, што је мало софистициранији од приступа али идеја је на крају исти. Дакле укратко, имао је везе са чињеницом да сте масирање један број карактера или обрнуто, али ваш код није био свестан чињенице да је 1 од тих битова имала значај у нумеричком свету. То није случај у свету знакова. Али звучи као да фиксна, у ком случају споран сада. Остала питања. Ок. До сада, сви програми које смо узели писаних улаз можда од корисника у форми функција као што ГетИнт, ГетСтринг, или ако сте били испред читање у различитим књигама или онлине референци, ви сами можда користили функције као што сцанф, искрено, ми користимо у ЦС50 библиотеци. Али у недељу или 2, заправо ћемо вам показати како ЦС50 библиотека спроводи тако да можемо узети те точкове обуке ван заједно. Али испоставило се да постоји и други начин да се унос од корисника. У ствари, ми сами смо користили аргументе командне линије За сада неколико недеља. Сваки пут смо покренули кланг или смо покренули направи, нисмо само откуцано кланг, Ентер, нисмо уписали направити, Ентер. Шта смо обично написан после речи кланг на нашем терминалу виндовс промпт? [Ученик] име датотеке. >> Назив фајла, зар не? Хелло.ц или марио.ц или било релевантно име датотеке. И у том смислу, оно што стварно сте урадили је да сте утицали на понашање кланг јер свакако су људи који су писали кланг имао појма да мало имас година је требало да напише програм који се зове касније марио.ц година. Дакле, морали сте да некако утичу на понашање тог програма, а тај програм кланг морао да буде написан на такав начин да може да прихвати унос од тебе додавањем речи на линији пре него што корисник притисне Ентер. Тако испада да за неко време смо декларисање готово све наше програме почети овако - маин (воид) - и онда смо отишли ​​напред и почео да пише свој код. А можда имамо неке оштре укључује на врху фајла, али готово сви наши програми до сада су почели са овим иако сте можда видели у одељку, у књигама, онлајн референце да то не у ствари морају бити ништаван. Други легитиман облик за то да је инт аргц, а затим стринг аргв []. Дакле, сада шта је то имплицира? Испоставило се да је аргц, што је људско конвенција - можете да позовете овај фоо, али само би много мање јасна читаоцима - аргц је само аргумент за функцију зове главни који представља шта? Шта аргц стоје за оне који су упознати? [Нечујан ученик одговор] >> Да, број аргумената или аргумената тачки. То је једноставно тако. Колико аргументи су усвојени у овом програму? Шта то значи? Ако на командној линији сам покренути овако нешто - кланг марио.ц-- аргц када сам ударио Ентер ће да преузме вредности, помало збуњујуће, 2. Тако испада да је аргц аргумент бројање, али због историјских разлога, име самог програма је укључено у тој тачки. Дакле аргц је 2 кад сам писао зазвечати марио.ц. Шта аргв садржи? Пре свега, аргв личи на ниске, али не баш јер је од прошле среде, а све више и данас, ови квадратних заграде означавају шта? То је низ. Нема број у низу, и да би имало смисла интуитивно јер су људи који су писали пре кланг година свакако није имао појма Колико речи људи попут нас би откуцајте на линији пре удара Ентер. Дакле, у овом случају овде су проглашена функција главни узимање низ аргумената, 0 или више аргумената. Они не знају унапред колико постоје, па намерно не постоји број унутар ових угластим заградама. Али чињеница да је квадрат заграде су ту говоре рачунар, очекивати низ. Аргв је само скраћеница нотација за аргумент вектора. Вектор фенси начин да се каже низ, а низ је фенси начин да се каже листу или колекцију. Дакле, ово само значи да ако пишете главни овако уместо као како смо то радили у протеклих неколико недеља, Ваш програм сада има моћ да прихвати аргументе командне линије тако да више не морате да пишете марио, а затим притисните Ентер, затим укуцајте број за колико блокови висок желите пирамида да буде, затим притисните Ентер поново. Ми чак не морате да користите ГетСтринг више или ГетИнт или ГетФлоат по том питању. Ми само можемо очекивати да корисник упишите те речи на линији себе као аутори кланг одлучила да би стварно досадна емисија ако да састави свој код прво куцани зазвечати, притисните Ентер, онда смо рекли корисника, унесите име датотеке коју желите да састави, онда укуцате марио.ц и ударио Ентер. Али то је управо оно што смо радили са нашим корисницима последњих неколико недеља. Ми користимо ГетСтринг и чекамо док програм ради да их подстакне за унос. То не мора да буде случај. Дакле, у овом примеру овде, сада имамо ниску аргв, и ово је поједностављено, обуке точкови се да ће врло брзо отпасти. То је више правилан начин писања овај алтернативни изјаву главног јер испада да оно што држимо позивајући ниску заправо има звезду, звездица, у свом стварном дефиницији, али то само изгледа компликовано, то је збуњујуће на први, тако да смо поједноставили за само стварањем синоним сорти У библиотеци која ЦС50 мапе цхар овом више усер-фриендли речи стринг. Дакле, хајде да пробамо ово стварно онда. Дозволите ми да иде напред и отворити гедит овде. Дозволите ми да иде напред и отворити аргв од 1. Овај програм је очигледно штампа аргументе, али у енглеском смислу, гледајући овај кода, шта то уради конкретно? Ако сам тип у командној линији а.оут фоо, шта бива штампан у мојој црној и белој прозора? А.оут фоо-бар, Ентер. Само напред. Да. >> [Нечујан ученик одговор] Добро. Дакле а.оут, нова линија, фоо, нова линија, бар, нова линија. Зашто је ово? Ми свакако можемо потврдити само тренутак. То је нека врста паперјаст линије кода.  То је само штампа нову линију само да би се ствари лепше на екрану. Ово је петља која је итератинг од 0 о до аргц, и то је увецава на сваком итерацији + +. Дакле, ово је сада кажете штампа стринг, што подразумева то% с. Аргв [и] је прилично иста идеја из претходног примера. Звали смо променљиву с, а сада се то зове, произвољно, аргв. То значи да одштампате ИТХ аргумент који је откуцан на командној линији, и онда после тога цела ствар ради, само за добру меру одштампали још једну нову линију. Па хајде да видимо ово. Дозволите ми да отворим прозор терминала. Дозволите ми да састави аргв од 1, а сада пусти ме покренути аргв од 1, Ентер. Хмм. Ок. Хајде да покренемо фоо бар. Занимљиво. Баз. И ако сте икада запитали зашто куцам ово, ово је само и глупи информатика конвенција. Свет често потребно само вербалне чуваре места за речи. Дакле, ако желите да разговарате о неком општем ниске, компјутерски научници само склони да кажу фоо када треба случајни реч, онда кажу бар ако је потребан други рандом реч, онда кажу баз ако им треба трећи реч, онда они кажу кук ако треба и четврту реч, а онда је велики верски расправа онлине као да оно што долази после кук, тако да можете Гоогле-у да се схвати шта друге произвољне реч треба да буде. Али то не значи ништа уопште, Иако фоо-бар, ако Гоогле то, да ли су смисао, која је део етимологију овде. Дакле, све ово се онда ради штампа 1 од ових жица по реду. Дакле, ако сам уместо тога, међутим, хтео да се мало одгајивача, Претпостављам да ја нисам хтео да штампа сваки стринг по линији; Желео сам да одштампате сваки лик из сваке жице по реду. Како сам могао да, уместо да урадим? Шта ми је потребно да промените о овом програму, ако желим да одштампате не сваку реч али желим да одштампате свако слово речи које слово по слово, затим следећа реч слово по слово по слово? Како ћемо комбиновати ове идеје тако далеко? Да. [Ученик]% ц. >> Реду. Дакле, негде је потребан% Ц. Добро, јер ја не желим да одштампате целу конце, желим да одштампате знакове. Шта друго? [Нечујан ученик одговор] >> Занимљиво. Дакле, сада треба својеврсну другој димензији овде јер мислим аргв као низ, али то је низ жице. Али, као, као, пре 15 минута, што је ниска? То је низ знакова. Па стварно, аргв је низ низа знакова, низ низова знакова. Тако испада да можемо користити само више квадратних ознаке носач. Дакле, хајде да урадимо то. У врху ове петље на линији 19, ја ћу да прелазили од И до аргц, али онда ћу да урадим ово: за - Ја не могу да користим сада. Морам још променљиву јер желим да прелазили преко речи али онда и над слова у речима па сам некако имам вертикалну осу и хоризонталној оси, врстом концептуално. Дакле, Ј добија 0, онда желим да радим ј док ј мање него - и ја ћу очистити ово у мало. Како прелазили преко слова у низу? Ми смо то урадили пре тренутак. Стрлен од аргв [и]. Добро. И опет, ја правим мало неефикасност овде не ствара Н или било шта друго, али ћемо се вратити на то. Дакле, сада ј + +. Сада морам да се даље увлачење овде. Шта ја сада желим да одштампате на сваком итерацији? [Нечујан ученик одговор] >> Дакле, [и] ће ми дати реч. [И] [ј], нешто као матрицу. Они од вас са матх-и порекла, смо некако индексирање дубље у ову матрицу или овај низ од низова, овај 2-тродимензионална структура. Дакле, хајде да видимо шта се дешава овде. Дозволите ми да отворим своју већи прозор терминала. Дозволите ми да реприза од аргв од 1. И ја сам зезнуо овде, што је добра лекција, јер ја заборавио да се то уради. Имплицитно проглашава 'стрлен' Ц библиотека функција са непотписани типа '- Ја чак и не знам шта остатак тог средства, али сам видео ово раније, имплицитно декларисање. Кад год видите ову грешку, шта то обично значи? [Нечујан ученик одговор] >> Заборавио сам библиотеку до врха. Али чекај мало. Обично сам зезнуо јер сам заборавио ЦС50 библиотеку, али то је тамо. Обично сам зезнуо, јер сам заборавио стандардне И / О. И искрено, не знам ни требати ово. Ми не користимо ГетСтринг данас. Па шта ја недостаје? Постоји још једна библиотека која сада треба да користите повремено зове стринг.х, а ово је само још један библиотека која има више функција које се не налазе у стандардној И / О. Дакле, хајде да се вратимо на моје велико прозор терминала. Ок. Сада, дођавола, мислим да сам погрешио. Ја сам помоћу ЦС50 библиотеку. Дакле, можемо поправити ово један од 2 начина. Можемо узети точкове обуке ван сада и само уради то, или хајде мало да се задржи само за поједностављење сада, пренеси овај назад, реши тај проблем, а сада се вратите на прозор терминала. Дакле, да буде јасно, у ЦС50 библиотеци није само функција, то је такође кључна ниска, због чега ова грешка се управо догодило. Дакле, идемо. Поправио сам оба библиотеке питања. Ентер. Добро. Аргв од 1, Фоо Бар, Ентер. Одлично. Дакле, сада имамо свако слово сваке речи штампане 1 по линији, који не чине веома занимљив програм, али обавештење сада имамо способност не само итератинг преко речи али и преко појединих слова у речима, што звучи ужасно познато изједначи најједноставније апликације као што отимају слова у низу овако. Идемо напред и преузме овде 5-минутни одмор. А када се вратимо, ми ћемо почети разговор о ефикасности са којима можемо боље раде ове ствари. У реду. Вратили смо се. Захваљујући једном од наших поздрав који игра доста бананаграмс, ми заправо имамо гомилу карактера са нама овде данас физички инкарнирани са овим малим пластичним деловима, и пусти ме да предложи да овај празан бели шкриљац овде представља РАМ у мом рачунару - лаптоп, десктоп, шта год - и тамо изгледа као много тога јер ако почнемо сецкања ову меморију у малим бајт величине комада, хајде произвољно рећи да нешто да величина и да представља замућене - тамо идемо, и идемо умањили мало овде - хајде да кажем нешто да величина представља један бајт. Тако да заиста може да стане гомилу бајтова или знакова унутар ове меморије, као што је предложено од стране релативне величине овде. Дакле, претпоставимо сада да је циљ да издвоји меморију за ниске. Како се то заправо ради? У програмима смо писали, обично смо користили ГетСтринг, али сада, јасно, ту је тај други канал преко кога можемо добити унос корисника у аргв преко аргумената командне линије. Али шта се заиста дешава испод хаубе? Испада да ми зовемо - хајдемо назад дођите до ГетСтринг - функцијски ГетСтринг у ЦС50 библиотеци, корисник је затражено за ниске, корисник врсте у неком речју - назовимо га ЗДРАВО. И ми смо говорили у протеклих неколико недеља да се повратна вредност ГетСтринг је у ствари стринг, као реч ЗДРАВО. Али оно што је заиста ГетСтринг ради? Као корисник уноси у ЗДРАВО, Ентер, ГетСтринг се откривањем, ок, колико карактера је ово? Ово је Х-Е-Л-Л-О. Дакле, треба да издвоји, треба да питате оперативни систем - Линук у овом случају - најмање 5 бајта за складиштење ЗДРАВО. И шта је онда наставља да уради када се једном врати оних 5 бајта из оперативног система је да изнесе ЗДРАВО бацк то бацк враћа се назад. И шта се стварно вратио из ГетСтринг је комад података који изгледа овако. Али ово је мало непрецизан, јер се испоставило да то није тако једноставно као само складиштење ЗДРАВО у меморији рачунара јер претпостављам да мој програм који сам писао у Ц затим позива ГетСтринг опет, а следећа реч се корисник упише је ћао, ћао. Па, морам да стане ту збогом реч негде у сећању. Ја не могу да цлоббер ЗДРАВО. На пример, ја не желим да рачунар само почети преписивање овако оригинал реч, јер сам још увек може да се користи реч ЗДРАВО у променљива негде другде у мом програму. Дакле, Б-И-Е има да заврши негде другде у меморији. Али конвенција обично је да је следећи низ знакова можете доделити Вероватно, али не увек, ће завршити на следећи доступан меморијској локацији. А ако нисам питао оперативни систем за све меморије јер последњи пут сам позвао ГетСтринг, шансе су реч БИЕ ће завршити одмах након речи ЗДРАВО у меморији. Али у овом тренутку, можда можете видети где потенцијални проблем настаје. Зато следећи комади меморије, следећи бајтова који су само слободни - очистите белу шкриљац - у меморији рачунара су поред ЗДРАВО, се осећа као први стрингу сам тражио могао изненада да промени јер сам у суштини сам променио да ХЕЛЛОБИЕ уместо некако демарцинг почетак ћао и крај ЗДРАВО. Тако испада да је оно што се заиста дешава испод хаубе, које сте можда осврнуо на онлајн референце или секција или књига или уопште још увек јесте да заправо постоји намерна демаркација између речи у меморији рачунара. А у ствари, у овом случају овде, него само стави Бие поред ЗДРАВО, уместо тога, рачунар ставља посебан карактер, специјална нулл карактер, да тако кажем, која је заступљена са маркером са обрнуте косе црте 0. Дакле, дуга прича кратка, сетити да ликови су представљени у АСЦИИ. АСЦИИ је само пресликавање између бројева и слова, а већина тих писама почне отприлике 65 за капиталне А, али испоставило се свакако може представљати 0 Број као цео број, или у бинарном, и испоставило се да је свет одлучио давно, "Знаш шта?" "Хајде резерва број 0 како не представљају никакве знакове на тастатури - "Нема слова, нема бројеве, без интерпункције. 0 је посебна." "То ће бити посебан ништаван карактер, а ми ћемо да се пише као \ 0". Разлика што ако смо Управо сам написао 0, 0 је карактер. Подсетимо се да постоје АСЦИИ кодови за 0, за 1, за 2, за 3 јер је лик 0 разликује од броја 0. И можете видети да ли се осврнете из недеље 1 када смо први пут причали о АСЦИИ, 0 и 1 и 2 и 3 све начин до 9 имали своје АСЦИИ кодове. Они нису, случајно, 0 до 9. Они су веома различити. Дакле 0 само значи: "Ја сам посебан", а \ 0 значи, буквално, "Ја нисам 0 карактер." "Ја сам ово посебна вредност, нулл карактер." Тако да сам заиста треба још један од ових, јер ја не могу два пута направити исту грешку. Дакле, након речи Бие такође ћемо морати још један од тих знакова нулл. Дозволите ми да узмем оловку и овде пусти ме брзо извући још један \ 0 тако да после сам питао оперативни систем за 2 жице преко ГетСтринг следи други позив на ГетСтринг, то је оно што је заправо у сећању. Дакле, када сам се вратио низ, стварно сам се вратим да, и када сам добио следећи стринг, стварно сам да се вратим томе. Дакле, ово намеће питање, стрлен, пре свега, шта би требало да се врати? Када зовем стрлен на стринг С и С је реч ЗДРАВО да корисник откуцао у, шта смо рекли очигледно дужина Добро је било пре неколико минута? То је 5, зар не? Х-Е-Л-Л-О. И то је заиста колико стрлен ради. То враћа оно што нормално људско биће очекивати дужину стринга да буде. Али у стварности, колики је низ знакова који се здраво чување? То је заправо 6. Дакле, стрлен не помиње ту чињеницу са вама. Али испод хаубе рачунар заиста користи 6 бајта за складиштење 5-слово речи, и то је истина без обзира колико дуго је реч. Увек постоји ће бити специјални нула укида знак на крају стринга да демарка своју укупну дужину. Дакле, ако сте сада лице спроводи стрлен 20, пре 30 година, како идете о имплементацији стрлен себе? Ми узимамо здраво за готово да она постоји, баш као што узимамо здраво за готово да принтф постоји, али ако ЗДРАВО је реч у питању и шта имам у сећању је нешто што изгледа овако, ако сте морали да реимплемент стрлен јер сте били замољени да или зато што, искрено, ти ниси знао стрлен постојала - морали сте да котрља ово на своју руку - како си могао да спроведе стрлен када је добио нешто што личи на ово? Сада када знамо стринг арраи, можемо прелазили преко сваке од појединачних карактера користите нешто слично - Идемо покушати да уради у лету. Пусти ме да идем у апарату. Дозволите ми да креирате нову датотеку, стрлен.ц. Пусти ме напред сада и не укључују стдио.х, тако да имамо приступ принтф. Пусти ме да радим маин (воид). О. Ја ћу само ово на своју руку за сада онда. [Цхуцклес] Тханк вам. То је оно што ја радим. У реду. Дакле, пре него сам се окренуо на екрану, сам откуцао све то. И сад шта ћу да урадим је следеће: принтф ("Дајте ми ниску:") То је само флуффи инструкције. Сада пусти ме да радим Стринг с = ГетСтринг. Већ сада треба да направи промену. Ја користим ЦС50 библиотеку одједном, па ћу ићи напред и укуца цс50.х. А сада хајде да урадимо ово: принтф ("Дужина је:% д, стрлен [с] - а ја нисам готова. Шта још морам да додам да овај програм? [Ученик] стринг.х. >> Стринг.х. Дакле, за сада, користимо стрлен, па хајде да се уверите компајлер зна где је, па мало разум провери. Идем низ у линији 8, а у складу 9 Ја штампање дужину са% д. Зато идемо напред и отвори ово. Ми смо направити стрлен - саставља у реду - стрлен - дозволите ми да увећате - Унесите Х-Е-Л-Л-О, Ентер. Дужина је 5. Ок, па стрлен изгледа да ради, али свет је то знао. Дакле, хајде да се сада имплементира стрлен себе као следи. Дозволите ми да узму ову библиотеку. Ми више не морају приступ стринг.х јер нисам ни знао да постоји. Али то је у реду, јер ја могу имплементирати стрлен себе и да га узме ниску зове улаз, и сада морам да схватим дужину овог низа. Па како могу да урадим ово? Шта ако ја - хајде да видимо како се то ради - Шта желиш да радиш? [Нечујан ученик одговор] >> реду. Дакле, можемо да урадимо то на гомилу начина. Дозволите ми да покушам да искористим ову приступ. Дозволите ми да себи дам инт променљиву, тако да сам почиње у 0. И дозволите ми да кажем ово: док улаз [и] није једнак за шта? \ 0. Тако испада, као иу случају са свим карактера, када их је писао буквално у програму, морате да користите апострофе, а не наводницима. Дакле, ако сам је писао писмо, ја бих то урадио, Б писмо, ја бих то урадио. То је, с друге стране, била би ниска, а не индивидуални карактер. Дакле, желим \ 0 буквално. Шта желим да урадим у овој петљи? Заправо, треба ми још променљиву, тако инт добија 0. Чак и ако нисте били сигурни зашто смо почели онако како смо радили, сад да идемо тим путем, шта желим да радим на линији 9? Дужина + + и онда овде доле на линији 10, повратак дужине. Па како је стрлен спроводи? То је заправо реализован вероватно овако. Можда особа користи за петље, можда радите док петља - ко зна? Ми заиста бих да погледам испод хаубе на самом изворном коду у неком фајлу назива стринг.ц вероватно. Али овде хајде да размишљам о томе шта ја радим. Ја декларисање променљиве Позвао сам, постављајући га једнака 0. Онда сам ја проглашења другу променљиву зове дужину, постављајући га једнака 0. Онда ја кажем, док ИТХ лик у улазу није једнака посебног карактера нулл, \ 0, повећавати дужину. Али чим ИТХ лик је ово посебан карактер, шта се дешава са петље? То кратке спојеве. Она се зауставља, што значи да одмах затим вратили дужину. Дакле, ако нисам неред, идемо напред и вратите се свом терминалу. Дозволите ми да компајлирате. А ја нисам зајебеш. Некомпатибилан поновна библиотечког функције стрлен. Тако сам покушавао да се превише паметан за моје добро овде. Компајлер заправо зна да постоји функција зове стрлен иако нисмо укључени у библиотеку. То је у реду. Год. Само ћемо онда сарађују. Хајде да преименујете дужину. Дозволите ми да промените коришћење ње дужине овде, а то ће учинити кланг срећнији. Као на страну, јер су неке од ових функција су тако проклето заједничко - стрлен, принф - они заправо имају неку врсту специјалног статуса. И тако цланг једноставно зна несто посебно о њима. То није увек случај са већином функција, тако да је то зато смо се драо на. Дозволите ми да поново покушам. Срећом, она је радила то време. Дакле, сада пусти ме покренути сопствени стрлен програм. Дај ми ниску Х-Е-Л-Л-О, Ентер. И ја сам зезнуо. Зашто? >> [Нечујан ученик одговор] >> Тачно. Дакле, ја сам овде веома леп изглед бесконачну петља јер иако сам увецава дужину на свакој итерацији, шта ја радим није јасно? Ја Нисам увецава. Ок. Лако поправити. Да? Ок. Но сада бисмо увреди неког другог заједничког грешком где треба заграде. И искрено, овај код почиње да изгледа ружно, па ћемо узети нож на чишћењу ово у овом тренутку. Али сада сам увецава како дужину и ја. Искрено, ја сам вец видим овде прилику за побољшање, али ћемо се вратити на то. Дакле, сада хајде да будемо сигурни да смо барем напредује. То се десило неколико вас, и ја сам заборавио да поменем унапред. Када немате несрећу сценарио као што је овај, како ово поправити кратко рестартовања апарата или вашем рачунару или затварање прозора? То је заправо лако. Контрола Ц ће послати ову малу шаргарепу симбол Ц, и то управо завршава већину програма. Ако имате стварно лош бесконачну петљу која се штампа стуфф бесконачно много пута, Понекад можда ћете морати да притиснете Цонтрол Ц хиљаду пута да га чине уствари га чујем. Дакле, само схвати сада, јер нисам ништа штампа, која је била прилично лако. И технички, једном је довољно, али сам се нестрпљиви и ја обично ударио га то много пута. Тако стрлен. Дај ми ниску: ЗДРАВО. Да ли ће успети овај пут? Ок. Још једна честа грешка. Морам да рекомпајлирате. То је било намерно, да је један. У реду. Дакле стрлен, В-Е-Л-Л-О, Ентер. Одлично. Дакле, сада имамо стрлен за 5. Тако смо буквално реимплементед тај точак. Дакле, хајде да средимо ово горе, јер то не терај ме импресионирала са дизајном мог кода. Шта можемо јасно елиминисати у том програму да очисти ово? [Нечујан ученик одговор] >> Да. Буквално, ми смо ја и лечење дужину идентично. Па зашто не бисмо се паметан и рећи, а дужина? Уместо тога, хајде да га зову дужине за почетак, покрените га на 0 јер по дефаулту жица нема дужину док не схватимо шта је то. Сада смо то урадили, а сада је то прилично елегантан програм. Једна променљива. Ја га очистио, стезали га. Дакле, хајде да се вратимо на моју прозор терминала. Идемо напред и покрените ово. Направите стрлен. Изгледа добро. Покрени поново стрлен, Ентер. Дај ми ниску: ЗДРАВО, Ентер. И изгледа да ради као 5. Сада, да буде јасно, да нисам написао, на пример, ЗДРАВО у 1 стрингу а онда БИЕ у другом, можемо свакако имати више речи. Ако израз сам заправо хтео да откуцате није ЗДРАВО, али, на пример, ЗДРАВО право СВЕТ, обавештење да је оно што не би овде ова ситуација,? То би значило да је то 2 жице. Сигурно да има знакова размакницу, па ако ми заправо откуцан у дужем фразу као Хелло Ворлд, шта ми заиста имати у меморији изгледа мало нешто да постоји. У реду. Сва питања затим о заступљености овде стрингова? Не? У реду. Зато сам раније рекао да позивање стрлен опет и опет намерно тако вероватно није најбоља идеја јер идете да радите цео много посла опет и опет и опет. Заиста, каква посла је неопходно за откривањем дужину стринга, очигледно? Морате да почнете од почетка и онда гледај, гледај, гледај, гледај, гледај док се коначно види да је посебан карактер, на којој тачка, ах, сад знам дужину. Дакле, раније кад смо стрлен се поново позвао и опет и опет, разлог зашто сам предложио да је мало глупо, јер је опет, да стринг изгледа овако. То неће променити сваки пут када прелазите преко неког петље, тако радиш непотребан посао. У исто време треба да знате, као у страну, да преводиоци попут кланг ових дана развијени су током много година, и преводилац писаца, програмери, су прилично паметни. И тако испада да се јека и други компајлери заправо схватим да, ок, да сте написали стрлен у стању, што значи да технички ћемо га звати опет и опет и опет. Али паметни компајлери заиста могу оптимизовати оне врсте лоших одлука корисника из вашег кода да исправи ствари. Дакле, да ли једноставно схватити да је понекад компајлер је паметнији од нас и да ће некако сакрити сопствене грешке. Али свакако, када је у питању проблема скупова и слично, Не треба размишљати о оним суштински погрешне одлуке о дизајну потенцијално из простог разлога што би ми се ради много више посла него што заиста треба да урадите. Али, колико још посла? У случају Хелло Ворлд, почнимо да генерализујемо величину овог проблема. Шта је дужина проблему или величину проблема када реч корисник откуцао у је ЗДРАВО? То очигледно је 5, можда 6. Плус или минус 1. Год. То је тако близу само ћемо назвати 5. Дакле, шта је величина проблема овде кад покушавам да схватим дужину ЗДРАВО? То је 1, 2, 3, 4, 5, а можда и 6 за последњи карактер, али будимо генерализовати да је н. Дакле н, само променљива н шта би рачунарски научници обично користе да опише величину проблема, а проблем при руци је колико дуго је ЗДРАВО? Колико времена стрлен узети? Потребно је по налогу н корака, где је сваки корак значи поглед на карактер, погледај лика, гледај карактера. И ми смо имали ову расправу назад, док је број операција траје нешто. Већ први дан класе смо сви неспретно устане, и онда су сви поцели упаривање са сваким другим у циљу да се заиста броји идеално колико је људи било у соби. И ми смо такође урадили нешто друго чиме ли сам то урадио уместо старе школе начин да само покретање 1, 2, 3, 4, 5, 6 и тако даље, и то, величина тог проблема био величине н. Било је н људи у соби. Али сам могао убрзати све то, зар не? Граде школу стил сам могао да почне бројање у 2с. 2, 4, 6, 8, 10, 12. И то је тако много брже, и заиста јесте. То је буквално дупло брже, али опет, ако је још 400 људи ушао у ову собу одједном, ти алгоритми би узети још 400 или можда 200 корака. Али са друге стране, ако смо заиста добити паметни а ми уместо да све вас сами рачунају, подсетити како је алгоритам радио. Ви сви устали. Дозволите ми да брзо напред ово. Ви сви су устали, ви упарени искључени, онда половина од вас сео, пола од вас седе, половина од вас сео, и на свакој итерацији ове петље из недеље 0, ми смо преполовљен проблем при руци и отишао у Н / 2, затим н / 4, затим н / 8. А импликација тога је да, ако још 400 људи ходају у собу, но биг деал, Требаће нам још 1 круг, а не 400 више метака, а не 200 више комада. И тако прича нам рекли вратити мало морао да уради нешто мало са овим. Ова црвена линија овде је линеарно, то је равно, и то је означено као н јер као величина проблема расте, ако ваш алгоритам или програм са којим сте решавање је потребно н корака, можемо цртати као правој линији где је потребно више времена већа и на величину проблема. А твосиес приступ, рачунајући 2, 4, 6, 8, и даље права линија, само мало боље. Потребно мало мање времена, тако да жута линија испод црвене линије тачку за тачку. Али, чак и боље је овај свети грал од онога што се зове логаритамска време где чак и ако смо поново удвостручи број људи у соби, ми смо дупло величину тог телефонског именика од првог дана класе, Ништа страшно, то траје још 1 страна сузу траје 1 више седе у циљу решавања проблема који је дупло већи. И тако смо сада добили разговор почети да се како ми заправо решавамо проблеме ефикасно ако узмемо у обзир најједноставнији проблема као што је овај? Претпоставимо да имамо 8 врата иза којих су неки бројеви, и свака од ових бројева се не сортира на било који начин, они су само случајни целих иза ових врата, и ми постављамо питање како идете о проналажењу број - Ко зна - 7 иза ових врата? Шта би ти, човек, да ли би се ми нашли број 7 ако опет свака од њих су врата и да види вредност морате да отворите врата? Шта би ваш алгоритам се можда? [Нечујан ученик одговор] >> Дакле, почети са леве и отвори врата, отвори врата, отвори врата. А у најгорем случају, колико ће то нас да пронађе број 7? А опет, они не сортира, тако да није лако као, добро, ја ћу отворити 7. врата. Могло би нас, максимално, 8 корака. У најгорем случају, 7 је случајно на самом крају линије врата, тако да ћете морати да испробате све н врата. Дакле, опет овде, изгледа да имамо линеарну алгоритам. У ствари, ми смо то урадили пре само пар година. Један од ваших претходника је стављен управо ово где ми нисмо имали дигиталну верзију, уместо тога имали таблу са неким папирићима на њој. И оно што сам мислио да ћу урадити јесте да брзо погледамо уназад на то како је то ишло, један од најбољих, а можда највише чудних прилика на сцени да имају демонстрације овде на Сандерс. Имали смо 2 реда бројева. Ми само ћемо да погледамо шта се дешава овде, са Шон за сам врх ове редове. Осим нико никада добровољци у ЦС50, имали смо Сеан благослов да задржи ово камером, па зна да су стотине људи гледали ово сада већ годинама. Али Шон урадио изузетан посао - или да ли је он - у ствари нам проналажења одређеног броја. Дакле, хајде да видимо како је решио овај алгоритам, тако да ћемо наставити овај разговор пре него што дуго како смо пронашли ствари ефикасно. [Малан на видео] ја сам скривен иза ових врата број 7, али ушушкан у неким од тих врата, као и других не-негативни бројеви, и ваш циљ је да мислите о овом горњем реду бројева само као низ или само низ комада папира са бројевима иза њих, и ваш циљ је коришћење само овде врхунски низ, ми пронашли број 7. А онда ћемо критици како идете о томе ради. >> Реду. [Малан] Пронађи нам број 7, молим вас. [Смех] [Малан] Но [смех] 5, 19, 13, [смех]. То није трик питање. 1. [Смех] У овом тренутку ваш резултат није добар, па можда и даље. [Смех] 3. Хајде. Искрено, ја не могу помоћи, али питам се шта сте чак размишљао о томе. [Смех] Само горњи ред, па ти имаш 3 лево. Тако ми је 7. [Студенти мрмља] [Малан] 17. [Студенти мрмља] [Малан] 7! [Аплауз] Тако је у среду ћемо зароните у ово и софистицираних алгоритама за проналажење ствари. За сада ћемо вас оставити са Сеан и видимо се у среду. [ЦС50.ТВ]