[Мусиц плаиинг]
>> Давид Ј Малан: У реду, то је ЦС50.
И ово је један недеље.
Тако се сећате тог последњи пут у недељу нула, смо се фокусирали на рачунарску размишљања.
И ми транситионед од тога до Сцратцх, графичко програмирање
језика од наших пријатеља у Медиа Лаб МИТ.
>> И са Сцратцх, смо истражити идеје попут функције и услови,
и петље, и променљиве, па чак и догађаје и теме, и још много тога.
И данас, идемо у наставите да користите ове идеје,
и да их стварно узимање за одобрено, али превести их
на другом језику познат као Ц. Нов, Ц је више традиционални говор.
То је нижи ниво језик, ако хоћете.
>> То је чисто текстуални.
И тако на први поглед, то је све ће изгледати прилично загонетан
ако никада нисте програмирали раније.
Ми ћемо имати полу-Црева и заграда,
и цурли протеза, и још много тога.
Али схватите да чак иако синтакса је
о да изгледа мало непознат да већина вас, погледајте преко тога.
И покушати да видимо идеје да су, заиста, познато,
јер овде у недељи један који ћемо почети да радимо је да се упореди,
у почетку, Сцратцх против Ц.
>> Тако, на пример, сећам се када смо имплементиран први од наших програма
Последњи пут смо имали блок који је изгледао нешто мало овако-- када је
зелена застава кликнули, а онда смо имали један или више пуззле пиецес испод њега,
у овом случају, кажу, здраво свет.
Дакле, заиста, у Сцратцх, када кликнем на ту зелену заставу
да водим програм, тако да говоре, то су
блокови који се извршава, или трчање.
И, посебно, Огреби рекао је, здраво, свет.
>> Сада, могао сам да наведена различите речи овде.
Али видећемо да, заиста, многи ових блоцкс-- и штавише,
у Ц многи фунцтионс-- може бити параметризед или прилагођено
да раде различите ствари.
У ствари, у Ц ако ми Желим да претворити, сада,
ово Огреби програма у овом другом језику,
ћемо написати мало нешто овако.
>> Одобрена, постоји нека непозната синтакса тамо највероватније, Инт,
и заграде, и празнина.
Али принтф-- иако би Мислим да би било штампа.
Али штампање значи штампање форматиран, као што ћемо ускоро видети.
Ово ће буквално штампање на екрану год
је унутар тих заграда, који наравно у овом случају, здраво свет.
>> Али ћете приметити неки други синтакса, неки двоструки наводници,
да су заграде на крају, полу-колона и слично.
Тако да је мало изнад главе, да тако кажем, и спознаје
и синтактички, да идемо морати да се сетим пре дуго.
Али схватите да са праксом, ово ће почети да скочи на вас.
>> У ствари, хајде да се фокусирају на оног Функција специфицалли-- у овом случају,
Саи Хелло ворлд.
Па тврде да је функција.
Здраво свет је њена параметар, или аргумент, његово прилагођавање.
>> И једнакост у Ц само Биће ту једну линију овде,
где принтф је једнако, рецимо, двострука наводи низ, здраво
свет је еквивалент, наравно, за шта је у белој кутији.
И обрнуте косе црте Н, мада мало чудно и одсутни од нуле,
једноставно ће имати ефекат ћемо види на компјутеру, као мој Мац или ПЦ,
да само помера цурсор до следеће линије.
То је као ударање Ентер на тастатури.
>> Па ћемо опет видети да је пре дуго.
Али прво, хајде да погледамо ово други пример у случају петљи.
Последњи пут када смо имали ту заувек петље, која је била серија слагалице
то урадили нешто буквално форевер-- у овом случају,
кажу, здраво свет, здраво свет, здраво свет, здраво свет.
Дакле, то је бесконачна петља по дизајну.
>> У Ц, ако желимо да спроведе ово Иста идеја, могли би једноставно урадити.
Док истина, принтф здраво ворлд-- сада док, само семантички, некако
дочарава идеју да урадим Опет нешто, и опет, и опет,
и колико дуго?
Па, труе-- опозив да истина је само на један или.
>> И истина је, наравно, увек истина.
Дакле, то је нека врста бесмисленом изјава само да кажем тачно.
Али заиста, ово је намерно, јер ако истина је само увек истина,
него док истина само подразумева, ако мало индиректно,
да следећих линија кода између тих заграда
треба само извршава опет, и опет, и опет, и никада није зауставити.
>> Али, ако желите да ваш петља да се заустави, као и ми
прошли пут са тако нешто ово, поновите следеће 50 пута,
у Ц можемо да урадимо исто са оним што је назива за лооп-- кључну реч
не бити док се, али за.
И онда имамо неку нову синтаксу, са инт и једнако 0, и мање од 50,
и ++.
Па ћемо се вратити на то.
Али то је једноставно како би превести скуп Греб блокова
на скуп Ц линија кода.
>> У међувремену, у обзир променљиве.
И, у ствари, само Видео сам једну малопре.
А у случају Сцратцх, ако ми желео да прогласи променљиву Звао сам
за и као цео број, само број, и желимо да га поставите на неку вредност,
да би користили ову оранге блок овдје-- и поставља на 0.
>> Па да видимо данас и даље, баш као и прошле недеље,
програмери до скоро увек почети да броји од нуле, стварно
по Конвенцији.
Већ и због тога што повлачење из наша дискусија о бинарни,
најмањи број можете представљају са било којим бројем бита
тек ће бити 0 себе.
Па ћемо уопште почети инитиализинг чак наше променљиве на 0.
>> И у Ц да учине исто, ћемо рећи инт
за цео број, само по конвенцији.
Могао сам да се зове ова варијабла шта хоћу, баш као у Сцратцх.
А онда је једнако 0 само додељује вредност 0 са десне стране
и ставља га у променљиву, или контејнер за складиштење тамо, са леве стране.
И полу-дебелог црева, као што ћемо видим-- и видели смо неке од ових алреади--
само значи крај мисли.
Наставите да уради нешто друго на линије које следе.
>> Сада, шта је са Боолеан изрази?
Подсетимо се да је у Сцратцх, то су изрази
који су или истина или фалсе-- питања,
стварно, да су или истинита или лажна.
Дакле, у случају Сцратцх, могли бисмо Поставио сам једноставно питање овако,
ис и мање од 50?
Па сам, опет, је цео број.
Можда смо га користите у Сцратцх програму
у пратити резултатом или нешто слично.
Дакле, ово синтакса овде у Сцратцх само значи, је да мање од 50?
Па, на срећу, нешто је једноставно у Ц. И да преведе,
ово би једноставно рећи ја мање од 50, користећи познату тастера
на тастатури.
>> У међувремену, ако желите да реци нешто општији,
као, добро, је к мање од И где је сваки за Кс и И су саме варијабле?
Можемо да урадимо исту ствар ин Ц, све док имамо
створена већ ове променљиве.
Па да видимо како то убрзо.
Ми бисмо једноставно рећи х мање од год.
>> Тако да сте почели да види неке сличности.
И они људи који су направили Сцратцх је сигурно
инспирисан неки од ових основних идеја.
И видећете ову врсту синтакса у многим лангуагес--
не само Сцратцх, не само Ц, али Питхон
и ЈаваСцрипт, и други језици и даље.
>> Размотримо још један конструкт из Ц, појам стања,
раде нешто условно.
Ако је нешто истина, зар ово.
Ако је нешто друго је истина, то.
То је нека врста програмирања еквивалент раскршћу.
Можда је двосмерни виљушка, три-пут рачва, или више.
И у Сцратцх, да имамо видео нешто овако.
>> Дакле, ова је велика.
Али сматра да је релативна једноставност логике.
Ако је к мање од и, онда рећи к је мање него и, иф к је веће од и,
онда кажу к је веће од и.
А онда, логично, ако мислите назад на нуле
или само свој људској интуицији, Па, ако к није веће од и и к
није мања од и, онда наравно х ће бити једнака и.
Дакле, у овом случају, гнијездо те Сцратцх блокови,
можемо постићи три начин Форк ин тхе Роад?
>> У међувремену, ако желимо да то у Ц, то дискутабилно
Изгледа мало симплер-- најмање када се упознате са синтакси.
Ако је к мања од и, принтф к је мања од год.
Иф к је веће од и, принтф к је веће од и.
Елсе принтф к једнако и-- и, Опет, са онима који су косих завршава само
за те нове линије, тако да ако заправо водио ову врсту програма
то би само кретање курсор на крају
у следећи ред на екрану.
>> Сада, у међувремену Огреби је имао други софистициране функције, само
од којих су неки ћемо да у почетку предју на свету Ц.
А један од њих је био назива листа у Сцратцх.
А ово је посебан тип променљиве који
Дозволили сте да чувате више ствари у то назад, да подржи, да подржи, да подржи.
>> У Ц, то нема листе, само по себи, али нешто
који су генерално зове низови, иако ћемо
вратити касније овај семестар да гледате у нешто
назива листе или стварно повезану листу.
Али за сада, најближи еквивалент у Ц за нас
ће бити нешто назива низ.
Као и низ је једноставно посебна врста променљиве
који вам омогућава да складишти податке назад, то бацк, то бацк, на леђима.
>> И, заиста, у Сцратцх, ако желимо да приступе
први елемент низа или лист-- и ја ћу га звати,
По конвенцији, аргв, аргумент вектор, али више о томе убрзо.
Ако желим да се на првом елементу од аргв, у свету Сцратцх
ви заправо до типично почети да броји од 1.
>> И тако сам могао добити тачка 1 аргв.
То је само колико МИТ-имплементиран појам листе.
Али у Ц, идем да више једноставно само рећи, аргв,
што опет је име мог лист-- или да буде јасно, низ.
И ако желим први елементи, идем
да користе квадратних заграда, који вас не могу често користи под тастатуре.
>> Али 0 само значи, да ми је први.
Дакле, приликом и као Време пролази, идемо
да почне да се ове дихотомије између Сцратцх и Ц,
при чему Огреби користи.
Ми смо у Ц користимо 0 овде.
Али ћете брзо видети кад схватите
темељи сваком језику, да те ствари почињу да се све више
упознати кроз праксу и праксу.
>> Дакле, да заправо Погледајмо сада програма.
Овде ће бити први од наших Ц изворни код за комплетне програме.
А програм ћемо да понуди за разматрање
је онај који је еквивалент у том ранијем Сцратцх комаду.
>> Дакле овде имамо шта је вероватно најједноставнији Ц програм
можете писати да заправо ради нешто.
Сада ћемо гледати прошлост, за сада, није укључују,
Стандардни ио.х, и то угао носачи, и инт и празнина,
и великих заграда, и слично.
>> И хајде да се фокусирамо на шта, макар интуитивно,
Можда скок на вас већ.
У ствари, главни, не знам знати шта је ово,
али баш као Сцратцх имала када зелена застава кликнули пуззле комад,
тако се Ц као програмски језик имају главну део кода који
бива погубљен по дефаулту. И, заиста, То је буквално ће да се зове главни.
>> Дакле основна је функција.
И то је посебна функција која постоји у Ц да када покренете програм,
то је главни да се води од Уобичајено. У свету Сцратцх,
то је обично када зелена застава кликнули који је добио активирати по.
>> У међувремену, ми смо ово и раније, принтф или штампање форматиран, то је
Биће то функција која долази са Ц заједно са хрпом других,
да ће с времена и времена поново ради таино
као што јој име сугерише, принт нешто.
Шта желимо да штампају?
Па, видећемо да ставити знакова
као тхесе-- хелло свету, обрнуте косе црте Н двоструким наводницима,
можемо рећи принтф тачно шта да одштампате на екрану.
>> Али да би до да, ми, нажалост,
треба да предузму нешто што је већ загонетан на нас људе,
али барем је нешто реадабле-- оштар укључују, стандардни ио.х, Инт,
главни, празнина, принтф, све чаробни бајалице смо управо видели на екрану.
Али ми заправо треба да го више волшебни још.
Треба прво да преведе код да пишемо у машински код.
И сећам се од прошле недеље да машина, барем оне знамо овдје,
на крају дана само разумети нула и јединица.
>> И мој Боже, ако смо морали да напише ово нуле и јединице да заправо програма,
било би веома, веома брзо узети забаву из свега.
Али испоставило се, по прошле недеље, да су ови обрасци нула и јединица
Само треба посебно значење.
У неким контекстима, они могу значити бројева.
>> У неким контекстима, они могу значити писма, или боје, или било који број
других апстракција тамо на.
Али, баш као ваш рачунар има ЦПУ, централну процесорску јединицу,
или мозак унутар рачунара.
То је обично АМД унутра, јер је то
једна од највећих компанија који чини ЦПУ за рачунаре.
>> Па, АМД процесори и други једноставно су одлучили унапред
да неки обрасци нула и Они ће значити конкретне ствари.
Неки обрасци нула и јединица ће значити, принт тхис на екран,
или додати ове две бројеве, или одузети ова два броја,
или се овај податак из меморија мог компјутера овде,
или било који број других веома ниском нивоу, али на крају користан, операције.
Али, на срећу, ми људи не иду да треба да знају овај ниво детаља.
Заиста, баш као и прошли пут, где смо захваћене опет, и опет, и опет,
Зграда са веома ниском нивоу примитиве као што су нула и јединица
на концептима вишег нивоа као што бројева и слова,
и боје, и још, Дакле, можемо ли као програмери
стајати на раменима други који су дошли пре нас
и користе софтвер који други људи су написали пре нас--
наиме програма под називом преводиоце.
>> Ц је језик који је обично састављен,
што значи претворити из изворни код за машине код.
Посебно, шта то значи је да ако имате свој извор
код које сте ви напишете, као и ми ускоро ће за тренутак на екрану,
и желите да га претворити на крају са машином цоде--
те нуле и јединице које само ваш Мац или ваш рачунар
ундерстандс-- имате први нахрани изворног кода как
улаз у посебан Програм се зове преводилац,
излаз чији смо ћемо видети је машина код.
И, заиста, последњи пут смо причали о, заиста, на крају дана,
Решавање проблема.
Имаш улаза.
И имаш излаза.
А ти имаш неку врсту алгоритма у средини.
>> Алгоритми могу сигурно бити имплементиран у софтверу,
као што смо видели са псеудокоду прошле недеље и као што ћемо видети са стварним код
ове недеље.
И тако је преводилац стварно само има низ алгоритама унутра
од тога да знају како да претворити посебне кључне речи,
као главни, и принтф, и други који смо
Видио у обрасцима нула и оне који Интел Инсиде и други процесори
заправо разуме.
Како то радимо?
Где ћемо добити преводилац?
>> Већина нас овде има Мац или ПЦ.
А ви користите Мац ОС, или Виндовс, или Линук, или Соларис,
или било који број другог оперативни системи.
И, заиста, можемо излазе на Интернету
и преузмите преводилац за Мац или ПЦ рачунар
за ваш оперативни систем.
Али сви ће бити на различите стране, да се тако изразим.
Ми би мало имамо различите конфигурације.
И ствари не би радили сви исти.
И заиста, ових дана многи од нас не користе
софтвер који ради само на нашим лаптоп рачунаре.
Уместо тога, ми користимо нешто као бровсер који
омогућава нам да приступ веб-басед апликације у облаку.
А касније овог семестра, ћемо учинити управо то.
Ми ћемо писати апликације или софтвер цоде-- користећи не Ц,
али и други језици као што су Питхон и ЈаваСцрипт-- који раде у облаку.
>> И за то, ми сами током семестра
ће заправо користи облак-басед средина позната као ЦС50 ИДЕ.
Ово је веб-басед програмирање животну средину, или интегрисани развој
окружење, ИДЕ, који је уграђен на врху неке опен соурце софтвер под називом Цлоуд 9.
И ми смо направили неке педагошки поједностављења на њу
тако да се сакрију одређене функције у Прве недеље да нам не треба,
након чега можете откривају их и до највише
шта год хоћеш са околином.
>> И то нам омогућава, такође, да инсталирате унапред одређени софтвер.
Ствари као тзв ЦС50 библиотека, који ћемо ускоро видети
пружа нам у Ц са неким додатна функционалност.
Дакле, ако одете у, на крају, ЦС50.ио, вас ће бити затражено да се пријавите,
и када ти и створити рачун за бесплатно,
моћи ћете да приступите окружење које изгледа прилично овако.
>> Сада, ово је подразумевани режим.
Све је лепо и светло на екрану.
Многи од нас имају навику да ради на ЦС50 комад који је
доста касно у ноћ.
И тако неки од вас можда радије претворити га у ноћном режиму, да се тако изразим.
>> Али, на крају, шта си да види у ЦС50 ИДЕ
је три различита ареас-- област на остави тамо где
датотеке ће бити у облак, област у горњем десном углу
где је ваш код ће бити уређивати.
Моћи ћете да отворите појединачне табс фор било који програм
који сте ви написали овај семестар унутра те горњем десном углу.
А онда највише арцанели, и још снажно,
ће бити ово ствар на доњи познат као терминал прозор.
>> Ово је стара школа Командна линија интерфејс,
или ПГ, која омогућава да извршава команде
на цомпутер-- у овом предмету, рачунар у цлоуд--
да раде ствари као што су саставити свој код из изворног кода у машински код,
за покретање своје програме, или да бисте започели веб сервер, или да приступи бази података,
и било који број других техника да ћемо почети да користе убрзо.
Али да стигнемо тамо, ми смо да заправо имају
да иде на мрежи и почните да играте.
И за то, хајде да прво старт петљао са главном,
и написати главни део програма.
И да користимо ту функцију принтф, који смо раније користили,
само да кажем нешто.
>> Дакле, овде сам већ унутар ЦС50 ИДЕ.
Ја сам пријављен унапред.
И пун приказан прозор.
И тако, на крају, ви превише у наредним проблема
ће пратити сличне кораке да ће обезбедити онлине документацију.
Тако да не морате да бринете о апсорбује сваки мали технички корак
да ја овде данас.
>> Али ћете добити екран овако.
Слуцајно сам у ноћном режиму.
И можете уљепшати све од стране онемогућава ноћни режим.
И на крају овог дан, идете да видите
ова три главна ареас-- датотеке браузер на левој страни, код табс до врха,
и терминал прозор на дну.
>> Пусти ме напред и писати свој први програм.
Идем да превентивно идите на Филе, Саве, и сачувати мој досије као хелло.ц.
Заиста, по обичају, било који програм ми пишу да је написан у Ц језику
Треба навести нешто тачка Ц, по конвенцији.
Тако да ћу дати име хелло.ц, јер Само желим да поздравим свету.
Сада ћу за увећање напоље и притисните Саве.
И све што сада имамо таб у који могу почети писање кода.
>> Ово се неће саставити.
Ово не значи ништа.
Па чак и да конвертује ово нула и јединица,
ЦПУ ће имати никакав Идеја шта се дешава около.
Али ако пишем линије које не одговарају са Ц је цонвентионс-- Ц бића,
Опет, ово лангуаге-- са синтакса као ово, принтф здраво ворлд-- и ја сам
стечен угодно радим током времена.
Тако да не мислим да сам направио какве правописне грешке.
>> Али, увек, на самом почетку пут кад то урадите, хоћеш.
А шта сам ја да урадим могло веома добро не ради за вас први пут.
И то је сасвим у реду, јер управо сада
Можда само видети пуно новине, али током времена када се упознате
са оваквом окружењу, и тај језик, и други,
Ви ћете почети да видите ствари које су или тачна или нетачна.
>> И то је оно што наставне момци и наравно
асистенти се тако добро током времена, је уочавања грешке или грешке у коду.
Али тврдим да нема грешке у овом коду.
Тако да сада желите да покренете овај програм.
>> Сада на свом Мац или ПЦ, ја сам навика двоструких икона клика
када желим да тече неки програм.
Али то није модел овде.
У таквом окружењу, што је ЦС50 САТА.
Ми користимо функционалног систем под називом ДОС.
Линук је подсећа на још један оперативни систем, опште позната
као Уник.
А Линук је посебно познат по има командне линије заштите животне средине, ЦЛИ.
Дакле, ми смо се користе одређене укус Линук Убунту зове.
И Убунту је једноставно сигурно верзија Линука.
>> Али ови Линук је ових дана до ствари долази са графичким корисничким интерфејсом.
И онај ми се деси користити овде је веб-басед.
Дакле, ово може изгледати чак и мало разликује од нечега
Ви сами можда има види или раде у прошлости.
>> Па ћу ићи напред сада и урадите следеће.
Спасао сам ову слику као хелло.ц.
Ја идем напред и Тип цлангхелло.ц Тако цланг
за Ц језик је преводилац.
То је унапред инсталиран у ЦС50 ИДЕ.
И апсолутно можете преузети и инсталирати ово на свом Мац или ПЦ.
>> Али, опет, не би имао све пре-конфигурација учинио за вас.
Дакле, за сада, ја сам ће покренути цлангхелло.ц.
И сада приметити ову синтаксу Овде ће на крају
схватити само значи да сам у фолдер или директоријум се зове радни простор.
Овај знак долар је само конвенција за смислом, унесите своје команде овде.
>> То је оно што се зове брз, само конвенцијом је знак за долар.
И ако одем напред сада и кликните Ентер, изгледа да ништа догодило.
Али то је заправо добра ствар.
Што мање што се дешава на екран, то је већа вероватноћа
Ваш код треба да буде тачан, најмање синтаксически.
>> Дакле, ако желим да тече ово Програм, шта да радим?
Па, испоставило се да је подразумевано име по конвенцији
за програме када не наведете наме фор ваш програм је само а.оут.
И ово синтакса такође, ви ћете упознати са убрзо.
>> Дот сласх само значи, хеј, ЦС50 САТА, покрените програм под називом а.оут
то је у мом тренутном директоријуму.
То тачка знаци тренутни директоријум.
Па ћемо видети шта други такве секвенце карактера значи пре дуго.
>> Дакле, идемо, Ентер, здраво свет.
И приметићете, да је оно што се догодило?
Не само да се штампају Хелло ворлд.
Такође помера цурсор до следеће линије.
>> А зашто је то било?
Шта је код који смо написали пре да осигурава да се курсор би
иде на наредни ред?
Смешна ствар о рачунар иде само
да буквално ради шта ти ја кажем.
>> Дакле, ако је рећи да принтф здраво, зарез, размак, свет, близу цитат,
То је буквално само иде штампање тих ликова.
Али сам имала посебан карактер на крају, опозив, обрнуте косе н.
И то је оно што осигурава да је лик отишао
у следећи ред на екрану.
>> У ствари, пусти ме и ово.
Пусти ме напред и избрисати ово.
Сада, приметите да је врх екрану нема
мало црвено светло у картицу указује,
хеј, нисте сачували датотеку.
Тако да ћу наставити са контролом С или команда Н, сачувајте датотеку.
Сада је гоес-- је за тренутак-- зелене.
И сада је вратио у само да буде икона близу.
>> Ако сада покренути цлангхелло.ц опет, Ентер, тачка коса црта, а.оут, Ентер,
видећете да је још радио.
Али то је вероватно мало луд.
Сада, мој промпт-- радни простор, а затим да знак за долар,
а онда мој стварни промпт-- Све је на истој линији.
Дакле, ово свакако естетски буба, чак и ако то није баш логично буба.
>> Зато ћу да поништи оно што сам урадио.
Ја ћу поново покренути а.оут.
Приметимо да сам додао нови ред карактера назад.
Спасао сам фајл.
>> Тако да ћу поново покренути а.оут, и-- дођавола, буба, буба значи грешку.
Тако да је грешка је да иако Ја додао косу црту Н тамо,
Ре-спасен, поново водио програм, понашање је био исти.
Зашто би то било?
>> Недостаје ми корак, зар не?
Да је кључни корак је раније било да имате да-- када промените изворни код,
Испоставило се да је покретање то кроз компајлер
опет тако да добијете нову шифру машина.
И код машина, нуле и јединице,
ће бити готово идентичан, али није савршено тако, јер нам је потребно,
наравно, да нова линија.
>> Тако да поправим ово, ја ћу требати поново покренути цлангхелло.ц, унесите, дот
сласх, а.оут.
А сада, здраво свет се вратио где сам очекивао да ће бити.
Дакле, ово је све у реду и добро.
Али а.оут је прилично глупо име за Програм, мада се дешава да буде,
из историјских разлога, подразумевани значи монтажу излаза.
>> Али, дозволите ми само напред овде и ово другачије.
Желим свој Хелло Ворлд да стварно се зове здраво.
Дакле, ако би било икона на мој Десктоп, не би било а.оут.
То би се могло назвати здраво.
>> Дакле, за то, испоставило се да Цланг, као и многи програми,
подржава аргументе командне линије, или заставе, или прекидачи,
који једноставно утиче на његово понашање.
Наиме, кланг подржава дасх ои застава, која затим узима другу реч.
У том случају, ја ћу произвољно, али разумно, назовимо га здраво.
Али ја би се могло назвати било шта Хоћу, осим а.оут, који
ће бити прилично поред тачке.
>> И онда само навести име датотеке Желим да састави.
Дакле, сада, иако на почетку команде и сада имам Цланг,
на крају команде Још увек имам име датотеке,
Сада имам ове командну линију аргументи, те заставе које се говоре,
Ох, успут, излаз-О, фајл зове здраво, а не подразумевани а.оут.
>> Дакле, ако сам погодио Ентер сада, ништа Изгледа да се деси.
И, ипак, сада могу да урадим дот косом цртом здраво.
Тако да је исти програм.
Нуле и јединице су идентични на крају дана.
>> Али, они су у два различит филес-- а.оут,
која је прва верзија и само будаласто по имену,
и сада здраво, што је много више убедљив назив за програм.
Али, искрено, никада нисам ће опет запамтите ово,
и опет, и опет.
И, у ствари, као што пишемо сложеније програме,
команде које ћете морати написати
ће добити још више компликовано и даље.
>> И тако да се не брине.
Испоставило се да су људи пре нама су они схватили превише
имао баш тај исти проблем.
Они нису уживају потребе да тип прилично дуге, арканске команде,
а камоли запамтите их.
Па људи пред нама су направили друге програме који олакшавају
саставити свој софтвер.
>> И заиста, један овакав Програм се зове Марка.
Тако да идем напред и уради то.
Идем да поништи све што управо урадио на следећи начин.
Пусти ме тип ЛС.
И приметићете три ствари-- а.оут, и звезда, здраво
и звезда, и хелло.ц.
Надамо се, ово би требало бити мало интуитиван,
утолико што је раније било ништа у овом радном простору.
Није било ничега што сам имао створили док нисмо почели класу.
>> И ја створио хелло.ц.
онда сам га саставио, и назвао га а.оут.
И онда сам га опет саставио мало другачије и назвао га здраво.
Дакле, имам три датотеке у овом директоријуму, у овом фолдеру који се зове радни простор.
Сада, видим да је добро ако умањили ствари.
>> Ако сам зоом овде и погледај ту горњем десном руком
угао, као што је обећано леви стране екрана
увек ће вам показати шта је на вашем налогу, што је
унутар ЦС50 ИДЕ.
И ту је три фајла тамо.
>> Дакле, желим да се отарасим а.оут и здраво.
И као што можда замислите интуитивно, те
могао врсту контроле клик или десни клик на ово.
И ово мало мени појави.
Можете преузети фајл, покрените то, прегледате, рефресх, преименовати,
или шта не.
>> И само да обрисати, и да ће нестати.
Али хајде да радимо ствари са командом линија за сада, како би се удобно
са овим, и урадите следеће.
Ја идем напред и уклонити а.оут уписивањем буквално рма.оут.
Испоставило се, наредбу за уклањање или брисање нешто,
није уклонити или избрисати.
>> То је више језгровито, РМ, само да спаси ти неки кеистрокес, и притисните Ентер.
Сада ћемо бити нешто загонетно уклонити обичну датотеку а.оут.
Ја стварно не знам шта је неправилан фајл ће бити још.
Али ја не желим да га уклонили.
>> Па ћу И Тип за потврдно.
Или сам могао откуцати, и притисните Ентер.
И, опет, ништа се не чини да се догоди.
Али то је, генерално, добра ствар.
>> Ако сам тип ЛС овај пут, шта да видим?
Надамо се, само здраво и хелло.ц.
Сада, као успут, ви ћете приметити ову звезду, звездицу,
То је на крају мојих програма.
И они такође појављују у зелено.
То је само ЦС50 ИДЕ је начин од цлуинг вас у томе
да то није изворни код.
То је извршна, а Руннабле програм који заправо можете покренути
радећи дот сласх, а онда је име.
>> Сада, пусти ме само напред и уклонити ово, РМ здраво, Ентер, уклонити редовно
филе здраво, да.
А сада ако сам тип ЛС, вратили смо се у хелло.ц.
Покушајте да се не избрише стварна изворни код.
Иако постоје функције уграђен у ЦС50 ИДЕ где
можете ићи кроз историју ревизија и уназад у времену, ако слуцајно
обрисати нешто, до имати на уму према овим упутстава Да или не,
шта ви заправо желите да урадите.
И ако одем до врха левом углу овде,
све што остаје је хелло.ц.
Тако да гомиле остале команде које сте
може извршити у свету Линука, од којих је, опет, Маке.
И ми ћемо направити мој програм сада на следећи начин.
>> Уместо да раде Цланг, уместо да Цланг-о,
Ја ћу једноставно буквално тип, да здраво.
И сада приметио, ја сам не куцање да хелло.ц.
Куцам да здраво.
>> И овај програм Нека буде долази са ЦС50 ИДЕ, и још много тога
углавном са Линук, је програм који је
ће направити програм који се зове Здраво.
И то ће претпоставити, по обичају, да, ако могу бити овај програм,
то ће бити направљен од извора Код фајл завршава у дот ц, хелло.ц.
>> Дакле, ако сам погодио Ентер сада, обавештење да команда да буде погубљен
заправо чак и дуже пре него раније.
А то је зато што имамо предподешен ЦС50 ИДЕ имати
неке додатне функције уграђене у томе не треба нам само још, али ускоро ће.
Али кључна ствар да схвате је сада имам Хелло програм.
>> Ако сам тип ЛС опет, ја има хелло програм.
И ја могу да га покренете тачка сласх а.оут, не,
јер поента овог вежба била тачка Сласх здраво.
И сада имам Хелло Ворлд.
Тако напријед, ми смо скоро увек само
ће саставити наше програме коришћењем команде Марка.
А онда ћемо да их воде тачка сласх, а име овог програма.
Али схватите оно што чини ради за ви, да ли је сама није преводилац.
То је само програм погодност који зна како да изазове компајлер
да покренете тако да сами могу да га користе.
>> Које друге команде постоје у Линук, а за узврат, ЦС50 ИДЕ?
Ускоро ћемо видети да постоји ЦД-команда, Промени Директоријум.
Ово вам омогућава у ваш командне линије
да се крене напред и назад, и отворити различите мапе
без употребе миша.
>> ЛС смо видели, што значи листу датотеке у текућем директоријуму.
Маке Дир, можете вероватно почети да се закључити
шта је ово значи сада-- да директоријум, ако желите да креирате фолдер.
РМ за ремове РМ Смер за уклонити дирецтори-- и то,
Поново су командне линије еквиваленти онога што сте
могао у ЦС50 ИДЕ са миша.
Али ћете ускоро наћи да понекад је само
много брже да ради ствари са тастатуром,
и на крају много моћнији.
>> Али тешко је тврдити да шта смо радили до сада
Све је то моћан, када све смо говорио јест, здраво свет.
И, у ствари, ја хардцодед речи хало света у мом програму.
Још нема динамика.
Сцратцх био је ред величине више занимљив прошле недеље.
>> И тако идемо тамо.
Узмимо корак ка да је начин неке од ових функција.
Дакле, не само да, Ц долази са принтф, и гомиле других функција
од којих ћемо видети временом, није тако
да је све тако лако одмах капије у добијању уноса корисника.
>> Заправо, једна од слабости језика као што су Ц,
па чак и Јава и још други, да се то не догоди
олакшавају само да ствари као што су цели бројеви од корисника или жице, речи,
и фразе, а камоли ствари као што су покретном зарезу или реалне бројеве
са децимална места, и стварно дуге бројева, као што ћемо ускоро видети.
Дакле, овај списак функција овде, ово су попут других Огреби слагалице
да смо унапред инсталиран у ЦС50 ИДЕ који ћемо користити за неколико недеља
као помоћним точковима свих врста, и на крају их скинути, и гледај
испод хаубе, можда, у како се ове ствари спроводе.
>> Али, да би то, хајде да заправо написати програм.
Пусти ме сада напред.
И ја ћу створити нова филе кликом на овај мали плус,
и кликнете на Нев Филе.
>> Ја ћу ово да сачувам следећи један као, рецимо, стринг.ц,
јер желим да се играм са жицама.
И стринг у Ц само низ знакова.
Дакле, сада идемо напред и урадите следеће.
>> Укључују стандардне ИО.х-- и Испоставило се да стандардни ИО,
ИО само значи улаз и излаз.
Тако испада да ова линија овде је шта
је нас суседне да користи принтф.
Принтф, наравно, производи излаз.
Дакле, да би се користио принтф, испоставило од морате да имате ову линију кода
на врху фајла.
>> Па ћемо се вратити на оно што то заиста значи убрзо.
Испоставило се да у сваки Ц програм пишем,
Морам да га покренете са код који изгледа овако.
И приметићете ЦС50 ИДЕ, и други интегрисано развојно
окружења воле, ће покушати што боље
они могу да заврше своје мисли.
У ствари, малопре да ли ундо шта сам урадио, ја притисните Ентер.
>> онда сам ударио отворен Цурли заграда, хит опет Ентер.
И завршио мисао.
То ми је дало нову линију, увучен ништа мање за лепе стилских разлога ћемо видети.
И онда ме аутоматски дала да коврџава стезник да завршим мисао.
Сада, то не увек погодите шта желите да урадите.
Али у великој мери, зар не саве ти неке типке.
Дакле, малопре, налетели смо ову програм-- здраво, свет, а затим га саставио,
а затим га је водио.
Али нема динамику овде.
Шта ако желимо да уради нешто другачије?
Па, шта ако сам хтео да стварно добили низ од корисника?
Ја ћу користити слагалицу комад зове тачно то-- добити низ.
>> Испоставило се у Ц када не желите да дају допринос у слагалици комад,
или више исправно на функцију, ви буквално само до отвореног заграду,
близу заграда.
Дакле, то је као да има не бела кутија да куцате у.
РЕЦИ блок пре имала малу белу кутију.
Ми немамо ту белу кутију сада.
>> Али кад зовем гет стринг, ја желимо да ставимо резултат негде.
Дакле, веома чест парадигма у Ц је позвати функцију, као што гет стринг овде,
а затим смешта повратну вредност.
То је резултат њеног напор у нешто.
>> А шта је изградити у програмирању,
било у Сцратцх или сада Ц, да смо ми могу користити за стварно складишти нешто?
Назива се променљива, зар не?
И у Сцратцх, ми не стварно брига шта се дешава у варијабли.
>> Али у овом случају, ми заправо радимо.
Ја ћу рећи стринг.
И онда сам могао назвати ово шта хоћу.
Ја ћу га звати име, добија се низ.
>> А сада чак и ако сте мало нови у овоме,
приметити да сам недостаје неки детаљ.
Ја сам заборавио полу-дебело црево.
Морам да завршим мисао.
Зато ћу да померим курсор, и ударио тачка зарез тамо.
И шта сам управо урадио?
У овој линији кода, број 5 у овом тренутку,
Зовем гет низ без икаквих улаза.
Тако да нема мали бели бок попут Саве блок има.
>> Само кажем, хеј, рачунар, дај ми низ.
Знак једнакости није стварно знак једнакости, по себи.
То је задатак оператер, што значи,
хеј, компјутер, померите вредност са десне стране преко са леве стране.
И на левој страни, имам следеће.
>> Хеј, компјутер, дај ми стринг-- низ знакова.
И то зовемо стринг наме.
И ја чак не морају да га зову Име.
>> Ја би се могло назвати, конвенционално, нешто као С,
баш као што сам се звати је променљива и.
Али сада морам да урадим нешто са њим.
Било би веома глупо пробајте изради овај код, трчање
овај програм, иако Идем низ,
јер то је само да се поздравим свет.
>> Али шта ако желим да се то промени.
Зашто не радим ово?
Посто ова, зарез а.
А ово је мало загонетан и даље.
>> Дакле, дозволите ми да ми варијабле јасније.
Дозволите ми име ове променљиве име.
Па да видимо да ли можемо да задиркује Осим што се дешава овде.
>> Дакле, он лине пет, Идем низ.
И ја чување ту серију, без обзира корисник откуца
у свом тастатуре, у променљивој под називом Име.
И испоставило се да принтф не само
узети један аргумент у двоструко цитати, један улаз у наводнике.
>> То може да потраје два, или три, или више, што је да је други, или трећи, или четврти,
су све имена варијабли, или специфично вредности,
да желите да укључите у, динамички, који низ у наводницима.
Другим речима, шта би било у реду са овим?
Ако сам рекао здраво име, косих Н, спасио свој досије, састављен мој код,
и ран то, шта би се десило?
>> То је само хтео да кажем, здраво наме, буквално Н-А-М-Е
који је мало глупо, јер то не разликује од света.
Дакле, било под наводницима је шта буквално бива одштампан.
Дакле, ако желим да имам чувар места тамо,
Заправо потребно да користите неки посебан синтакса.
И испоставило се да сте прочитали документација за функцију принтф,
он ће вам рећи да ако користите процената с,
можете заменити вредност на следећи начин.
>> Након зарезом после тога наводници, једноставно
напишите назив варијабла коју желите
прикључити у том формату код, или формата спецификатор,
посто а за гудаче.
А сада ако сам спасио мој досије, Ја се вратим у моју терминала.
И куцам Маке Стринг, јер, опет, име ово
фајл који сам раније изабрао је стринг.ц.
>> Па ћу рећи Маке Стринг, ентер.
О мој боже, погледај све грешке које смо направили већ.
И то је- шта је ово стварно као шест, седам линија програма?
Дакле, ово је место где је веома може брзо се огромна.
>> Овај терминал прозор има сада само отрцаних
велики број порука о грешци.
Сигурно, немам више грешку порука него што сам линија кода.
Дакле, шта се дешава?
>> Па, најбоља стратегија да у свако доба до вас
не наилазе огромна Списак грешака, као што су то,
је кретање уназад, тражити команде само ран, који је у мом случају
је направити низ.
Погледајте шта марки урадио, и то је то дуго кланг команда, није велика ствар тамо.
>> Али црвени је лоше.
Зелени се труди да буде нежан и корисно.
Али је и даље лоше, у овом случају.
Али где је то лоше?
>> Стринг.ц, линија пет, карактер пет.
Тако да је ово само уобичајена конвенција.
Нешто дебело црево нешто значи број линија и број карактера.
Грешка, употреба непријављени идентификатор низ.
Да ли сте мислили стандард у?
>> Дакле, нажалост, кланг покушава да буде од помоћи.
Али то није у реду, у овом случају.
Не, кланг, нисам мислио стандард ИО.
Мислио сам да на линији један, да.
>> Али линија пет је овај овде.
И кланг не разуме С-Т-Р-И-Н-Г.
То је необјављен идентификатор, Реч је само још није видео.
А то је зато Ц, језик пишемо код у сада,
нема варијабле називају жице.
>> Не мора, по дефаулту, подршком нешто што се зове стринг.
То је ЦС50 комад жаргон, али врло конвенционална.
Али могу да поправим ово на следећи начин.
>> Ако додам једну линију кода на врх овог програма,
укључују ЦС50.х, што је још један фајл негде у ЦС50 ИДЕ, негде
на чврстом диску, да тако кажем, оперативног система Убунту
да трчим, да је датотека која је
ће научити радом Систем који стринг је, само
као стандардне ио.х је фајл У оперативном систему који је
ће то научити шта принтф је.
>> Заиста, ми би добили веома слична порука
ако ИО признао стандард Ио.х и покушао да искористи принтф.
Тако да идем напред и само Таке Цонтрол Л да разбистрим екран.
Или можете уписати јасно и то ће само јасно прозор терминала.
Али и даље можете дођите на време.
>> И ја ћу поново покренути Маке Стринг.
Цросс прсте овај пут, Ентер.
О мој Боже, успело је.
то ми показује дугу шифровану команду То је оно што чини генерисана преко Цланг,
али нема поруке о грешци.
Тако схватити, иако можете добити потпуно
преплављени са Број порука о грешци,
то може бити то смета каскадни Ефекат, где кланг не разуме
једна ствар, што је значи онда не разуме нове речи,
или следећи ред.
Па то само угуши на вашем коду.
Али поправити може бити једноставно.
И тако увек фокусира на први ред излаза.
А ако не разуме се, само погледај
за кључне речи које могу бити трагови, и број линија,
и карактер, где да грешка може бити.
>> Сад ме пусти напред и тип тачка сласх, стринг, унесите.
Хм, то не говори здраво ништа.
Зашто?
Па, сећам се, где је то ради?
>> То је вероватно заглавио у овом тренутку у петљи, ако хоћете, на линији шест,
јер Гет Стринг по дизајну, написан од стране особља ЦС50,
је буквално значи да само седим тамо чека, и чека,
и чека низ.
Све што подразумевамо под низом је људски улаз.
Дакле, знате шта?
Пусти ме напред.
И само на хира, пусти ме тип моје име, Давид, унесите.
Сада имам више динамичан програм.
То је рекао, здраво Дејвид.
>> Ако сам напред и поново покренути ово, Дозволите ми да покушам рећи Замила име, унесите.
И сада имамо динамичан програм.
Нисам фиксирани свет.
Нисам фиксирани име, или Давид, или Замила.
>> Сада је много као и програми знамо, где ако се узме улаз,
производи мало другачији излаз.
Сада, ово није најбољи кориснички доживљај, или УКС.
Ја водим програм.
>> Не знам шта бих требала да уради, осим ако заправо погледате
или запамтити изворни код.
Дакле, хајде да корисник доживите мало боље
са најједноставније ствари.
Да се ​​вратим у ово Програм, и једноставно кажу принтф.
>> И пусти ме напред и рећи име, дебелог црева, и простор, а затим и полу-дебелог црева.
И само из зезања, нема померања бр.
И то је намерна, јер не желим
упит да бисте прешли на следећи ред.
>> Желим да, уместо тога, ово, да стринг да рекомпајлирате мој код у нове машине
Код тачка сласх низ.
Ах, ово је много лепши.
Сада сам заправо знао шта рачунар жели да уради, дајте јој име.
>> Тако да идем напред и тип у Роб, унесите, и здраво, Роб.
Дакле, схватити, ово је ипак, на крају дана, само девет линија програма.
Али узели смо ове бебе кораке.
>> Написали смо једну линију са којима смо били упознати, принтф, здраво свет.
Онда смо ундид мало тога.
И ми смо заправо користи гет стринг.
И ми баци ту вредност у променљивој.
А онда смо отишли ​​напред и побољшан она даље са трећем реду.
И овај учестали процес писање софтвера је заиста кључ.
У ЦС50, као иу животу уопште, требало би да уопште не седнемо,
има програм у виду, и покушати писање цела проклета ствар одједном.
>> То ће, неминовно, довести до начин више грешака него ми сами видели овде.
Чак и ја, до данас, стално да друге глупе грешке,
заправо теже грешке које су теже схватити.
Али ви ћете бити више грешака више линија кода пишете одједном.
Па ова пракса, написати мало кода
да сте задовољни са, саставити то, покрените га, тестирати га више уопште,
затим померите ајде-- тако као да стално слојеви и слојеви прошле недеље,
зграда из нечега веома једноставно нешто сложенији,
учине исто овде.
Не седи, и покушати да напише цео проблем.
Заправо се ове бебе кораке.
>> Сада, жице нису сви да би корисније за себе.
заправо би нам, идеално, као да још нешто у нашој алата.
Дакле, хајде да ствари раде управо то.
>> Пусти ме напред сада и прикупити мало другачије програма.
И ми ћемо назвати инт.ц, за цео број.
Ја ћу, слично, укључују ЦС550.х.
Ја ћу укључити стандард ИО.
И то ће бити прилично уобичајено у ових првих неколико дана класе.
>> И ја ћу спреман ја са главним функцијама.
И сада уместо да стринг, идемо напред и да се инт.
Назовимо га ја, и назвати то гет Инт, блиски заграда, полу-дебелог црева.
А сада да радимо нешто са њим, принтф.
>> Рецимо нешто здраво, косих н зарез сам.
Па сам прилично имитира шта сам урадила пре неколико тренутака.
Имам чувар места овде.
Ја сам зарез сам овде, јер хоћу за прикључивање сам у том плејсхолдер.
>> Дакле, идемо напред и покушајте изради овог програма.
Фајл се зове инт.ц.
Па ћу рећи, да инт, унесите.
О мој Боже, али није велика ствар, зар не?
Дошло је до грешке.
>> Ту је синтактичка грешка Овде тако да програм не може
бити састављен у инт.ц, ред седам, карактер 27, грешка формату
прецизира тип цхар стар, шта год да је.
Али тип аргумент Инт.
>> Тако и овде, нећемо да-- иако је данас много материјала,
ми ћемо вас преплавити апсолутно сваки аспект Ц,
и програмирање уопште, у само ових првих неколико недеља.
Тако да се често ће бити жаргон са којима нисте упознати.
И, у ствари, цхар звезда је нешто ћемо се вратити на
у недељу или две дана.
>> Али за сада, да видимо да ли можемо парсе речи које су позната.
Форматс-- тако да смо чули формат Спецификатор, Код формата пре.
То је познато.
Типе-- али аргумент је тип инт.
Чекај мало, ја је инт.
>> Можда посто је заправо има дефинисано значење.
И, заиста, јесте.
Цео број, ако желите принтф да га замени,
заправо да се користи различит формат спецификатор.
И не би знао ово осим ако ти је неко рекао,
или си то раније.
Али посто сам је шта могу обично користи
у принтф за прикључивање цео број.
Такође можете да користите одсто д за децимални цео број.
Али ја је лепо и једноставно овде.
Па ћемо ићи са тим.
>> Пусти ме само напред, реприза Марка Инт, Ентер.
То је добро, нема грешке.
Дот сласх инт-- ОК, лоше корисничко искуство, јер нисам ја рекао
шта да радим.
Али то је у реду.
Хватам на брзо.
>> А сада пусти ме напред и укуцајте Давид, ОК, Замила, Роб.
У реду, тако да је ово добра ствар.
Овај пут, ја сам користећи функцију, слагалицу комад, назван гет Инт.
И испоставило оут-- и ми ћемо види касније у терм--
ЦС50 особље је реализовала гет стринг на такав начин
да ће само физички добили низ за вас.
>> То је спровела гет инт у такав начин да само хоће
добити цео број за вас.
И ако је људски, не сарађују, то је
буквално само да кажу ретри, ретри, ретри,
буквално седи петље, до ви обавезати са неким магичним бројем,
као 50, и хелло 50.
>> Или ако се поново покренути ово и тип у 42, здраво 42.
И тако гет Инт функција унутар тог Пуззле Пиеце
довољно је логика, довољно мисао, да схватим, шта је реч?
А шта је број?
Само прихватање, коначно, бројеве.
>> Тако испада да је ово није толико изражајан.
до сада.
Дакле, ура, последњи пут смо је врло брзо
у имплементацији игре и анимација, и уметничких дела у нуле.
И ево, ми смо као садржај са Хелло Ворлд, и хелло 50.
>> То није све тако инспиративно.
И, заиста, ових првих неколико примери ће потрајати
да појача у узбуђења.
Али имамо много више контролише сада, у ствари.
И ми ћемо у врло брзо почети лаиеринг
на врху ових основних примитивних.
>> Али прво, да се разумемо шта су ограничења.
У ствари, једна од ствари Сцратцх не лако
пусти нас да се заиста изгледа испод хаубе,
и разуме шта је рачунар, шта може да уради,
и шта су њени ограничења.
И, заиста, да недостатак разумевање, потенцијално, дугорочна
може довести до нашег мистакес-- писања бубе, писање небезбедан софтвер који
хакерише на неки начин.
>> Дакле, узмимо кораке у правцу разумевање ово мало боље
начин, кажу, следећи пример.
Ја идем напред и имплементирати брзо програм који се зове Аддер.
Као, хајде да додамо неке бројеве заједно.
И ја ћу да кодира неке углове овде, и само копирање и лепљење
где сам био пре, само тако да можемо да идемо раније.
Тако да сада имам основне почетке програма под називом Аддер.
>> И идемо напред и уради то.
Ја идем напред и рецимо, ИНТКС добија се инт.
И знаш шта?
Хајде да направимо боље корисничко искуство.
>> Тако рецимо к је, и ефикасно навести корисника да нам дају к.
А онда ме пусти напред и рећи, принтф како би било да је и, овај пут очекује
две вредности од стране корисника.
И онда идемо напред и рецимо, принтф, збир к и и је.
А сада не желим да радим посто с.
Желим да радим посто и, косих Н, а затим прикључите сум вредности.
>> Па како могу ићи око радиш?
Знаш шта?
Знам како да користите променљиве.
Дозволите ми да прогласи нову, инт з.
>> И ја ћу да претпоставите овде.
Ако постоје једнаке знаци у ово језика, можда сам само да урадим Кс плус И,
све док сам на крају мој Мислио са полу-дебелог црева?
Сада могу да се вратим овде, прикључите з, завршити ову мисао са полу-дебелог црева.
Па да видимо сада, ако су секвенце линес-- к је добити инт.
И је добити инт.
>> Додај Кс и И, чувајте вредност у з-- тако, опет, сећам се знак једнакости
није једнака.
То је задатак од десна на лево.
И да одштампа да суме к и и није буквално з,
али оно што је унутар з.
Дакле, хајде да Аддер - лепо, нема грешака овај пут.
Дот сласх Аддер, унесите, х ће бити 1.
>> И ће бити 2.
И збир к и и је 3.
Тако да је све у реду и добро.
>> Тако да претпостављам да математика треба да ради у програму као што је овај.
Али, знате шта?
Да ли је то променљива, линија 12, чак и неопходно?
Не морате да се у навику да само чување ствари у варијабли
само зато што можете.
И, у ствари, то је генерално сматра се лошим дизајн
ако се ствара променљиву, под називом З у овом случају, складиштење нешто у њој,
и онда одмах користећи, али никада више.
Зашто дати нешто име као з ако сте буквално
ће користити да ствар само једном, и тако
проксимално где сте креирали она на првом месту,
тако близу у погледу линија кода?
Дакле, знате шта?
Испоставило се да је Ц је прилично флексибилан.
Ако ја заправо желим да плуг-ин вредности овде,
Не треба да прогласи нову променљиву.
Могао бих плуг-ин к плус И, јер, Ц разуме
аритметика, и математички оператори.
>> Па само могу да кажем, да ову математику, Кс Плус И, без обзира те вредности су,
плуг добијени цео број у том низу.
Дакле, ово може бити, иако само једна линија краћи,
бољи дизајн, боља програма, јер има мање код, дакле
мање ми је да схватим.
И то је такође само чистији, утолико што нисмо
увођење нових речи, нови симболи, као З,
иако не баш послужити много сврхе.
>> На жалост, математика није Све што поуздана понекад.
Идемо напред и уради то.
Ја идем напред сада и урадите следеће.
>> Хајде да урадимо принтф, посто сам, плус одсто И, мора бити посто сам, косих бр.
И ја ћу учинити ово-- КСИКС плус и.
Дакле, ја ћу само да преправим ово мало другачије овде.
Пусти ме да урадим на брзину проверу исправности.
Опет, немојмо се пред руду.
Направи Аддер, тачка Сласх гуја.
к је 1, и 2, 1 плус 2 је 3.
Па то је добро.
Али да се сада компликује ово мало, и створити нову датотеку.
>> Ја ћу да позовем овај, кажу, Интс, плурал за целих бројева.
Почећу где сам био малопре.
Али сада урадимо још пар редова.
Пусти ме напред и урадите следеће, принтф, посто сам минус посто сам,
је проценат сам, зарез х, зарез ик минус год.
Па сам мало радим другачије математике тамо.
Хајде да урадимо још једну.
Дакле, посто та времена посто и је проценат сам, косих бр.
Да плуг-ин к, и и и к пута и.
Ми ћемо користити звездицу на рачунар за време.
>> Не користите к. к је променљиви име овде.
Користите звезду за умножавање.
Хајде да урадимо још један.
Принтф посто сам, подељена по одсто И, је проценат ја,
обрнута коса црта бр. КСИ подељен и-- тако да користите косу црту у Ц
да ураде поделу.
И хајде да један другом.
Остатак одсто и, подељена по одсто И, је проценат ја.
ки-- и сада остатак је оно што је остало.
Када покушате поделу именитељ у бројник,
колико је остало преко тога ниси могао поделити напоље?
>> Дакле, не постоји стварно, обавезно, симбол
користили смо у основној школи за то.
Али има у Ц. Можете кажу х модулу и, где
тај проценат знак у овом цонтект-- збуњује кад си унутра
од знакова навода, унутар принтф, посто
се користи као формат спецификатором.
>> Када користите посто изван да у математички израз,
то је оператер модулу за модуларни аритхметиц-- за наше потребе
овде, само значи, шта је Остатак к подељено са и?
Дакле, к подељено са и је к Сласх год.
Шта је остатак к подељено са И?
То је х мод и, како би програмер рећи.
>> Дакле, ако сам направио без грешке овде, пусти ме само напред и да интс, плурал, лепо,
и дот Сласх Интс.
И идемо напред и до, рецимо, 1, 10.
У реду, 1 плус 10 је 11, провера.
1 минус 10 је негативан 9, провери.
>> 1 пута 10 је 10, провера.
1 подељено са 10 је- У реду, ми ћемо прескочити ону.
Остатак 1 подељено са 10 је 1.
Тако је.
Али ту је грешка овде.
>> Па онај који сам ставио мој преда, није тачно.
Мислим, то је близу 0.
1 подељено са 10, знате, ако смо укидања углова, наравно, то је нула.
Али заиста би требало да буде 1/10, 0.1, или 0,10, 0.1000, или тако даље.
>> То не би требало да буде нула.
Па, испоставило се да је рачунар ради буквално оно што је речено.
Ми радимо математику као к подељен са и.
И Кс и И, по линијама кода раније, су цели бројеви.
>> Осим тога, он лине 15, ми смо говори принтф, хеј, принтф плуг-ин-
цео број, плуг-ин целим бројем, плуг-у интегер-- посебно
к, а онда је и, а затим к подељено са и. Кс и И су интс.
Ми смо тамо добро.
>> Али шта је х подељено са к?
х подељен И би требало да буде, математички, 1/10, или 0,1,
који је прави број, прави број да, потенцијално, децималну тачку.
То није цео број.
>> Али оно што је најближи интегер до 1/10 или 0.1?
Да, некако је нула.
0.1 је овако много.
И 1 је то много.
Дакле, 1/10 ближи 0 него једном.
>> Па шта, Ц ради за нас-- врста јер смо то рекли да--
је скраћивања да цео.
То је узимање вредности, што је опет требало да буде нешто попут 0.1000,
0 и тако даље.
И то је скраћивање све после децималног зареза
тако да све ово ствари, јер се не ради
уклапају у појму цео број, који је само број као негативан 1, 0, 1,
горе и доле, то баца све после децималног зареза, јер сте
не могу да се уклопе децимални зарез у цео број по дефиницији.
>> Дакле, одговор овде је нула.
Како ћемо поправити ово?
Требамо друго решење сви заједно.
И можемо да урадимо ово, на следећи начин.
>> Пусти ме напред и створити нова фајл, ово се зове флоатс.ц.
И сачувајте га овде у исти директоријум, флоат.ц.
И пусти ме напред и копирање нешто од тог кода из раније.
>> Али уместо да инт, урадимо то.
Дај ми плутајући вредност тачке зове х. где флоатинг поинт
вредност није само буквално нешто са покретним зарезом.
То може да се креће на лево, десно.
То је прави број.
>> И пусти ме не зову гет инт, али да флоат,
који је такође био међу мени опција у библиотеци Ц250.
Хајде да и мења на сплаву.
Дакле, ово постаје добити флоат.
>> И сада, не желимо да прикључите интс.
Испоставило се да морамо да користимо одсто Ф пловак, посто е за пловак,
и сада га сачувате.
А сада, фиге, да сплавова, лепе, дот сласх плута.
х ће бити један 1. година Ће поново бити 10.
>> И, лепо, добро ми је додатак је тачна.
Надао сам се више, али сам заборавио да напишем.
Дакле, идемо и поправити ову логичку грешку.
>> Идемо напред и ухватите следеће.
Само ћемо мало да копирате и налепите.
И ја ћу рећи минус.
>> И ја ћу рећи пута.
И ја ћу рећи подељена.
И ја нећу да радим по модулу, која није толико германе овдје,
подељен ф, и пута плус-- У реду, нека ово опет уради.
>> Маке сплавова, дот сласх плута, и 1, 10, и-- лепо, не, у реду.
Тако да сам идиот.
Дакле, ово је веома честа у компјутерској науци
да глупе грешке попут ове.
>> За педагошке сврхе, оно што сам желео да урадим
је променити науку овде у плусу, у минусу, на време,
и да деле, као и ти надам се Приметио током ове вежбе.
Дакле, сада ћемо поново саставити ово Програм, до дот сласх плута.
>> И по трећи пут, хајдемо видим да испуњава моја очекивања.
1, 10, улазе, да, у реду, 1.000, подељено са 10.000, је 0,100000.
И испоставило се да можемо да контролишемо колико Бројеви су после тих децималне тачке.
Ми смо у ствари хоће.
Ми ћемо се вратити на то.
>> Али сада, у ствари, математика је тачно.
Дакле, опет, шта је понети овде?
Испоставило се да је у Ц, постоје не тек стрингс-- и, у ствари,
не постоје стварно, јер смо ми додати оне са библиотеком ЦС50.
Али не постоје само интс.
>> Постоје и плута.
И испоставило се да гомила других података Врсте такође, да ћемо користити пре дуго.
Испоставило се да, ако желите један карактер, а не низ знакова,
можете користити само цхар.
>> Испада да ако желите боол, Логичка вредност, тачно или нетачно само,
захваљујући библиотеци ЦС50, имамо додат Ц тип података боол као добро.
Али то је такође представити у многи други језици као добро.
И испоставило се да понекад треба веће бројеве затим долазе по дефаулту
са интс и пловак.
>> И, у ствари, двоструки је број који користи не 32 бита, али 64 бита.
И много, много је број који користи не 32, битова али 64 бита,
односно, за покретним зарезом вредности и целих, респективно.
Дакле, хајде да ствари сада види ово у акцији.
>> Ја ћу да наставим овде и спремим један други програм.
Ево, ја ћу да идем напред и не укључују ЦС50.х.
И пусти ме, укључују стандардну ИО.х.
>> И приметићете нешто Функи се дешава овде.
Није боју кодирање ствари у на исти начин као и раније.
И испоставило се да, то је зато што нису дали ствар име датотеке.
>> Ја ћу да позовем овај сизеоф.ц, и ударио Саве.
А погледајте шта се дешава на мој веома бело код против тог црној подлози.
Сада, барем ту је неки љубичаста тамо.
И то је синтакса истакнут.
>> То је зато што, једноставно, ја сам рекао ИДЕ шта тип датотеке
то је по дајући му име, и посебно екстензија фајла.
Сада, идемо напред и уради то.
Ја идем напред и веома једноставно одштампати фолловинг-- боол
је проценат ЛУ.
>> Ми ћемо се вратити на само који тренутак.
А онда ћу величина штампе од боол.
И сада, само да спаси ја неко време, ја сам
урадити целину гомила њих одједном.
И, посебно, ја ћу промени у цхар и знак.
Овај, ја ћу променити за двоструки и двоструки.
>> Овај, ја ћу променити на сплаву и флоат.
Овај, ја ћу мењају на инт и инт.
И овај, ја идем за прелазак на много, много.
И то је и даље у току дуго времена, дуго дуго.
>> А онда, на крају, дао сам ја један превише, ниска.
Испоставило се да је у Ц, ту је посебан оператер зове
Величина то је буквално да, када покренете,
реците нам величину свака од ових варијабли.
И ово је један од начина, сада, можемо повезати назад
на прошлонедељној расправи података и репрезентације.
>> Пусти ме напред и саставити величина дот величине сласх од.
Па да видимо.
Испоставило се да је у Ц, посебно на ЦС50 ИДЕ,
посебно на Убунту оперативног система,
који је 64-битни оперативни систем у овом случају,
инт ће користити један бајт простора.
Тако се мери величина, не бита, али у бајтова.
И сећам се да је један бајт има осам битова.
Дакле, инт, иако вас Технички само треба 0 или 1,
мало је расипан како смо га спроводи.
У ствари ће користити целину бите-- тако све нуле, су можда
сви они, или нешто слично, или само један 1 међу осам бита.
>> Цхар, у међувремену, користи се за лика као лик Асции по прошле недеље,
ће бити један лик.
И да синцхс се са нашом идејом то је не више од 256 битс-- а,
синцхс корак са њим да нема дуже од 8 бита, који
даје нам чак 256 вредности.
Двоструки ће бити 8 бајтова или 64 бита.
>> Флоат је 4.
Инт је 4.
Дуго, дуго је 8.
А низ је 8.
Али не брините о томе.
Идемо да љушти вратити ту слој.
Испоставило се, жице могу бити дужи од 8 бајтова.
>> И, заиста, ми смо написали жице већ, здраво свет,
дуже од 8 бајтова.
Али ћемо се вратити у само који тренутак.
Али одузети овде је следећи.
>> Сваки рачунар има само ограничен количина меморије и простора.
Можете да чувате толико датотеке на Мац или ПЦ.
Можете да чувате толико програма у РАМ-ради одједном, обавезно, чак
са виртуелном меморијом, јер имате коначан износ од РАМ-а.
>> И само да ну слику ако никад ниси отворио лаптоп
или наредио додатне меморије за компјутер, ви
Можда не знају да унутар рачунара
је нешто што изгледа мало овако.
Тако да је ово само уобичајена компанија по имену Кључно је да прави меморију за рачунаре.
И РАМ је где програми ливе док они раде.
>> Дакле, на сваком Мац или ПЦ, када двапут кликните на програм, а то отвара,
и отвара неке Ворд документ или нешто слично,
да га чува привремено у РАМ-а, јер РАМ је бржи
од хард диска, или ваш Солид Стате Диск.
Дакле, то је само где програми го да живе када су у употреби,
или када се користе фајлови.
>> Тако да имате ствари које изгледају као што је овај унутрашњости лаптоп,
или мало веће ствари унутар вашег десктопа.
Али је кључ имате само коначан број ових ствари.
И ту је само ограничен количина хардвер седи на том столу у праву
овде.
>> Дакле, сигурно, не можемо похранити бескрајно дуге бројеви.
И, ипак, ако мислите вратити Граде Сцхоол, колико цифара могу
имате са десне стране од децималног зареза?
Што се тога тиче, колико цифара могу имате са леве стране децимални зарез?
Стварно, бескрајно много.
>> Сада, ми људи би могло само ли како да изговорите милиона,
и милијарди, билиона, и квадрилиона, и трилиона.
И ја померају границе мој ундерстандинг-- или мој-- Разумем
бројеви, али мој изговор бројева.
Али они могу добити бескрајно велики са бесконачно много Знаменке лијево
или десно од децималног зареза.
>> Али рачунари имају само коначна количина меморије,
коначан број транзистора, А коначан број сијалица унутра.
Шта се дешава када вам понестане простора?
Другим речима, ако вама сетите се просле недеље
када смо говорили о бројевима сами су представљени у бинарном,
Претпостављам да имамо овај 8-битна вредност овде.
>> И имамо седам 1 је и једна 0.
И претпоставимо да желимо додати 1 до ове вредности.
Ово је заиста велики број сада.
>> То је 254, ако се добро сећам математика од прошле недеље десне стране.
Али шта ако променим да десни 0 до А 1?
Цео број, од Наравно, постаје осам 1-а.
Тако да смо и даље добри.
>> И то вероватно представља 255, мада у зависности од контекста
заправо могао да представља негативан број.
Али о томе други пут.
Ово изгледа као да се ради о чак могу рачунати.
>> Сада, то је само 8 бита.
И мој Мац сигурно, има пут више од 8 бита меморије.
Али нема коначан.
Тако да исти аргумент важи, чак и ако се имају више од ових оних на екрану.
>> Али шта се дешава ако сте складиштење овај број, 255,
и желите да рачунају 1 мало више?
Хоћеш да идеш од 255 до 256.
Проблем је, наравно, је да ако почети да броји од нуле као и прошле недеље,
Ви не можете рачунати као висок као 256, а камоли 257,
а камоли 258, м јер шта деси када додате 1?
Уколико школу стари разред приступ, ставите 1 овде,
а затим 1 плус 1 је 2, али то је стварно нула, ти носе 1,
носе 1, носе 1.
Све ове ствари, ови 1, идите на нулу.
И ви завршити, да, као неко истакао, на 1 на левој страни.
Али све што могу заправо видети и стане у меморију
је само осам 0 је, што ће рећи у једном тренутку ако ти, рачунар,
покушао рачунајући довољно високо, ти си ће да заврши око, рекло би се,
на нулу, или можда чак и негативног бројеви, који су чак и ниже од нуле.
>> И можемо некако види ово.
Пусти ме напред и писати прави брзо програм овде.
Пусти ме напред и писати програм који се зове поплаве.
Укључују ЦС50.х, укључују Стандардни ИО.х-- Ох,
Стварно пропустио синтаксе.
Дакле, да спаси ово као оверфлов.ц.
>> И сада маин воид-- и убрзо, ми ћемо
вратити у објашњењу зашто држимо писање инт маин празнину.
Али за сада, хајде да одрадимо то, то узимање здраво за готово.
Хајде да себи дају инт, и иницијализујемо га 0.
>> Хајде онда да урадимо за инт и гет зеро-- Заправо, хајде да бесконачну петљу
и види шта се дешава.
Док истина, онда хајде да одштампате Н је проценат сам, косих Н, плуг-ин н.
Али, сада, хајде да урадимо Н добија Н плус 1.
>> Другим речима, на сваком итерација ове бесконачне петље,
узмимо Вредност Н је, и додати 1 до њега, па затим
складишти резултат вратити у Н са леве стране.
И, у ствари, видели смо синтакса мало овако, укратко.
Кул трик је уместо тога писања све ово,
заправо можете кажу да је Н плус једнако 1.
>> Или ако заиста желите да буде фенси, можете рећи Н плус плус полу-дебелог црева.
Али ово последње две су само оно што бисмо назвати синтактичка шећер
за прву ствар.
>> Прва ствар је више експлицитно, потпуно у реду, потпуно у праву.
Али ово је чешћи, ја ћу рећи.
Тако ћемо и то само на тренутак.
>> Хајде сада да прелив, што звучи а злослутно, тачка коса црта прелива.
Да видимо, Н постаје прилично велика.
Али да мислим, колико могу добити Н?
>> н је инт.
Видели смо малопре са величином пример да је инт је четири бајта.
Знамо из прошле недеље, четири бајта је 32 бита, јер 8 пута 4, то је 32.
То ће бити 4 милијарде.
>> И ми смо до 800.000.
Ово ће заувек одвести рачунати као висок као ја могу.
Тако да ћу ићи напред, Као што се може раније дуго,
и ударио Цонтрол ц-- искрено, Цонтрол Ц пуно, где Контрола Ц углавном
средства отказати.
На жалост, јер је ово ради у облаку,
понекад облак је пљује се толико ствари,
толико излаз, то ће мало потрајати за мој улаз
да се у облак.
Дакле, иако сам погодио Цонтрол-а Ц пре неколико секунди,
ово је дефинитивно страна Ефекат бесконачну петљу.
>> Па у таквим случајевима, ми смо ће оставити да буде.
И ми ћемо додати још прозор терминала овде
са плус, који, наравно, не тако, јер још увек размишља.
И идемо напред и бити мало више разуман.
>> Ја идем напред и уради ово само конацно много пута.
Хајде да користи за петље, који алудирао сам раније.
Урадимо то.
Дај ми још променљиву инт и добија 0.
и је мање од, рецимо, 64 и ++.
А сада пусти ме напред и штампа од н посто сам, зарез бр.
А онда н-- ово је још увек ће трајати заувек.
Урадимо то.
>> Н добија н пута 2.
Или би могли бити фенси и до пута износи 2.
Али рецимо Н једнако сама, пута 2.
Другим речима, у овом нова верзија програма,
Не желим да чекам заувек од попут 800.000 до 4 милијарде.
Хајде да заврсимо са овим.
>> Хајде да заправо Доубле Н сваки пут.
Који, опозив, дуплирање је супротност има, наравно.
И док је прошле недеље имамо Опет нешто, и опет,
и опет, супер брз, дуплирања ће сигурно
води нас од 1 до највеће могуће вредност да можемо рачунати да са инт.
>> Дакле, хајде да урадимо управо то.
Па ћемо се вратити на ово убрзо.
Али ово, опет, није баш као реприза блок у Сцратцх.
А ви ћете користити ово убрзо.
>> Ово само значи цоунт од нуле до, али не једнако, на 64.
И на сваком итерацији овог петља, само настави инцрементинг и.
Тако и ++ - а то уопште конструкција он лине 7 је само супер уобичајен начин
понављања неке редове код, одређени број пута.
Које линије кода?
Ове витичасте заграде, као и ти можда прикупити од сада,
значи, урадите следеће.
>> То је на сличан Сцратцх, када има жуте блокова
и друге боје које врсте прихватити или загрли друге блокове.
То је оно што те коврџава протеза радимо овде.
Дакле, ако сам добио синтаксу ригхт-- вас може да види симбол шаргарепе у Ц средства
То је колико сам пута био покушава да реши овај проблем.
Па хајде да се отараси оног Све у свему, и затворите тај прозор.
И ми ћемо користити нови.
Направи Оверфлов, дот косу црту преливање, Ентер, у реду,
изгледа лоше на почетку.
Али да се кретање уназад кроз време, јер сам ове 64 пута.
>> И приметио први пут, н је 1.
Други пут, н је 2, онда 4, затим 8, онда 16.
И изгледа да чим Могу да око 1 милијарду,
ако га поново дупло, да треба ми дати 2 милијарде.
Али се испоставило, то је право на врхунцу.
>> И тако се заправо прелива инт од 1 милијарде
на око негативан 2 милијарде, јер је цео број,
за разлику од бројева и ми су под претпоставком прошле недеље,
може бити и позитивна и негативна у стварности и у рачунару.
Па најмање један од оних битова се ефикасно украден.
Тако да стварно имамо само 31 бита, или 2 милијарде могућих вредности.
>> Али за сада је понети је прилично једноставно, без обзира ови бројеви су
и без обзира на математика, нешто лоше деси на крају,
јер на крају ви покушавате да пермуте битови једном превише пута.
И да ефикасно иде од свега 1 да можда све 0 је, или можда
само су неки други образац који њега Јасно, у зависности од контекста,
може да се тумачи као негативан број.
И тако, чини се да највећу И може да рачуна у овом програму
је само око 1 милијарду.
Али ту је делимично решење овде.
Знаш шта?
>> Пусти ме да промене из инт да дуго дуго.
И пусти ме напред овде и говоре-- ћу имати
да се то променити у непотписани дуго.
Или, да видимо, ја сам никад се сетим.
>> Идемо напред и да преливање.
Не, то није то, доктор права, хвала.
Тако да понекад кланг може бити од помоћи.
Ја не сјећа шта формат Спецификатор је за дуго дуго.
>> Али, заиста, кланг ми је рекао.
Зелена је нека врста добро, ипак значи да си погрешио.
То је Претпостављам да сам мислио ЛЛД.
>> Па дај да је то савет, дуго дуго децимални број, осим што.
И пусти ме да поновљени, дот сласх преливање, Ентер.
А сада оно што је кул је ово.
>> Ако сам дођите на време, још увек старт рачунајући на истој место-- 1, 2, 4,
8, 16.
Обавештење, добијамо све начин до 1 милијарде.
Али онда смо безбедно стигли до 2 милијарде.
>> Онда долазимо до 4 милијарде, онда 8 милијарди, 17 милијарди.
И идемо више, и више, и више.
На крају, овај, такође, паузе.
>> На крају, са много, много, који је 64-битна вредност, а не
32-битна вредност, ако рачунаш превисока, можете замотати око 0.
И у овом случају, ми се деси завршити са негативним бројем.
>> Дакле, ово је проблем.
И испоставило се да је ово Проблем није толико волшебни.
Иако сам намерно индуцед је са тих грешака,
Испоставило се да смо га некако видимо од свега око нас, или бар неки од нас не зна.
>> Дакле, у Лего Стар Варс, ако сте икада играли игру,
Испоставило се да можеш ићи около разбијање ствари у ЛЕГО свету,
и прикупљање новчиће, у суштини.
И ако сте икада играли ова игра превише времена,
као овај неименовани појединца овде урадио, укупан број
кованица које може да сакупи је, чини се, 4 милијарде.
>> Сада, са њим је заправо заобљен.
Па Лего је покушавао да држати ствари корисника пријатељски.
Нису то тачно 2 у је 32 моћ, по прошле недеље.
Али 4 милијарде је разлог.
Чини се, на основу тих информација, да ЛЕГО, а компанија која је
направио овај стварни софтвера, одлучио да је максималан број кованица
корисник може да акумулира је, заиста, 4 милијарде,
јер су тако одлучили у свом коду да користи не много, много, очигледно,
али само цео број, неозначена интегер, само позитиван цео број чија
максимална вредност је око тога.
Па, ево још смешно један.
Тако је у игру Цивилизација, која неки од вас можда бити упознат, са
испоставља се да пре неколико година тамо је грешка у овој игри где
ако си одиграла улогу Гандија у игри,
уместо њега је веома пацифиста, уместо тога је невероватно, невероватно
агресиван, у неким околностима.
Посебно, начин на који Цивилизација Радови се да ако је играч,
усвојити демократије, ваш агресивност резултат добија
умањен за два, тако минус минус, а затим минус минус.
>> Тако да одузима 2 од Ваша тренутна итератинг.
На жалост, ако је ваш итератинг је у почетку 1, а ти одузети 2 из њега
након усвајања демократије као Ганди овде могао
учинио, јер је био веома пассиве-- 1 на скали од агресивности.
Али, ако он усвоји демократију, онда он иде од 1 до негативног 1.
>> На жалост, они су били користећи непотписане бројева,
што значи да третира чак негативан Бројеви као да су позитивни.
И испоставило се да је позитиван еквивалент негативна 1,
у типичним компјутерским програмима, је 255.
Дакле, ако Ганди доноси демократија, и самим тим има
његова агресивност резултат смањен, заправо котрља око до 255
и чини га највише агресиван карактер у игри.
Тако да Гоогле може да се на ово.
И то је, заиста, један случајно програмирање буба,
али то је сасвим ушао знање од тада.
>> То је све забавно и слатко.
Више застрашујуће је када актуелан стварног живота уређаја, а не игре,
има те исте грешке.
У ствари, пре само годину дана чланак је више о Боеинг 787 Дреамлинер.
>> И чланак у први поглед чита мало волшебни.
Али рекао, софтвер рањивост у Боеинг
нови 787 Дреамлинер авион има потенцијал да изазове пилоте
да изгуби контролу над авион, евентуално
средином лета, ФАА званичници упозорио авио-компаније недавно.
То је био утврђивање да модел 787
авион који је поверед континуирано 248 дана
може да изгуби све наизменичне струје, АЦ, електричне енергије због генератора
контролне јединице, ГЦУс, истовремено иде у Сафе моде.
То је некако ме изгубити.
Али у допису наводи, у реду, сада сам схватио, услов је узроковано софтвером
цоунтер интерни до контрола генератора
јединице које ће преплавити после 248 дана непрекидног напајања.
Ми се издаје ово приметите да се спречи губитак
од свих АЦ електричне моћ, што би могло довести
губитак контроле над авионом.
>> Дакле, буквално, постоји нека цео број, или неки еквивалент тип података,
се користи у софтверу у стварном авиону
да ако држите авион довољно дуго, који очигледно
може да буде случај ако само користите их стално и никад извући
ваш авион, чини се, или остављајући своје батерије умре,
ће на крају бројати горе, и горе, и горе, и горе, и горе, и горе.
>> И, по природи, коначна количина меморије
ће преплавити, враћање у нула или неке негативне вредности,
нуспојава која је застрашујуће стварни реалност
да је авион можда је потребно да се поново покрене, ефикасно,
или можда пасти, горе, као што лети.
Дакле такве врсте питања још увек с нама,
евен-- ово је 2015 чланак, све више застрашујуће
кад не нужно разумети, ценити, или предвидети
оне врсте грешака.
>> Тако испада постоји један други Лоша представљања података.
Испоставило се да чак и плута су врста погрешна, јер сплавова, такође,
предложио сам се 32 бита, или можда 64 ако користите дупло.
Али то је ипак ограничен.
>> А цака је у томе ако можеш ставити безброј бројева
после децималног зареза, нема ти пут
може да представља све могуће бројке које смо учили
у разреду школа може да постоји у свету.
Рачунар, у суштини, треба да изабрати подскуп тих бројева
да тачно представља.
>> Сада, рачунар може округли можда мало,
и може вам омогућити да приближно продавнице било који број који би евентуално желите.
Али само интуитивно, ако вас имају ограничен број битова,
можете само да их пермуте на много начина коначних.
Тако да не може да користите коначан број
од пермутација битова, обрасци нула и јединица,
да представља бескрајни број бројева,
што сугерише да су рачунари можда врло добро бити нас лаже понекад.
>> У ствари, хајде да урадимо то.
Да се ​​вратим у ЦС50 ИДЕ.
Пусти ме напред и створити малу програм
позвао непрецизности, да покаже да рачунари су, заиста, непрецизан.
>> И пусти ме напред и почети са нешто од тог кода од раније,
а сада само урадите следеће.
Пусти ме напред и до принтф, посто Ф, косих н 1 подељено са 10.
Другим речима, да зарони дубље до 1/10, као што су 1 и подељено са 10.
Наравно, рачунар може представљати 1/10.
>> Дакле, идемо напред и да непрецизност.
Хајде да видимо.
Формат одређује тип дупло.
Али аргумент је тип инт.
Шта се дешава?
>> Ох, занимљиви, тако да је лекција научена од раније.
Кажем, хеј, рачунарски шоу ми пловак са процената ф.
Али Дајем 2 Интс.
Тако испада, ја могу да поправим ово неколико начина.
>> Могу само да се један у 1.0, и 10 у 10.0, који би, заиста,
имају ефекат претварања их у флоатс-- даље, надамо се,
исти број.
Или Испоставило се да постоји нешто ћемо поново видети пре дуго.
Могао би да баци бројеве.
>> Можете, користећи ову у загради израз, можете рећи,
хеј, компјутер, узми ово 10, који знам да је инт.
Али чувајте га, молим те, као да је то пловак.
Али ово изгледа непотребно комплекс.
>> За наше потребе данас, хајде само буквално
маке их покретном зарезу са децимални зарез, овако.
Пусти ме напред и реприза, да непрецизност, добро, тачка коса црта
непрецизност, унесите.
У реду, ми тражимо добро.
>> 1 подељено са 10, према мом Мац овде, је, заиста, 0,100000.
Сада, ја сам учио у основној школи тамо треба да буде бесконачан број 0-их.
Дакле, хајде да барем покушамо да видимо неке од њих.
Испоставило се да принтф је мало одгајивач и даље него смо користили.
Испоставило се да не треба да наведете само проценат Ф, или само посто сам.
Можете заправо одредити Неке опције контроле.
>> Конкретно, ја идем да кажем, хеј, принтф,
заправо ми показати 10 децимале.
Тако да изгледа мало чудно.
Али ви кажете одсто, дот, колико бројева
желите да видите после децималне тачке, а тада је ф
за стан, само зато што је то шта каже документација.
Пусти ме напред и спасити да.
>> И приметио сам, ја сам се уморан од прекуцавања ствари.
Тако да сам само ја постављање горе и Довн Арров на колена овде.
И ако сам стално удара, ти може видети све команде
да сам направио, или погрешно је.
>> И ја ћу да идем напред и заправо не користе то, очигледно.
Направи непрецизности, дот сласх импрецисион-- тако
оно што сам научио у Граде Сцхоол проверава се.
Чак и ако га одштампати до 10 децимале ставља га, заиста, је 0,10000.
Али, знате шта?
>> Хајде да се мало похлепан.
Рецимо, као, покажи ми 55 указује после децимале.
Хајде да заиста узети ово Програм оут тхере.
Пусти ме да римејк са шминком непрецизност, тачка коса црта, непрецизности.
>> И идемо.
Ваше детињство је била лаж.
Очигледно, 1 подељено са 10 је заиста 0.100000000000000005551115123--
>> Шта се догађа?
Па, испоставило се, ако се мало изгледа довољно далеко у основи
приказ ово број, заправо
није баш 1/10, или 0,1 и бесконачан број нула.
Сада, зашто је то тако?
>> Па, иако ово је једноставан број на нама људима, 1 подељено са 10,
ипак је један од бесконачно много бројеви који би могли смислити.
Али компјутер само могу представљати конацно много тако бројева.
И тако, практично, оно што је рачунар показује нам је његова најближи
приближавање на број желимо да верујемо да је 1/10,
или стварно 0,10000 ад инфинитум.
>> Уместо тога, међутим, ово је као блиски као што могу добити.
И, заиста, ако погледате испод хаубе,
као што смо овде у потрази 55 цифара после децималног,
ми у ствари видимо ту реалност.
Сада као страну, ако сте икад видела мовие--
већина вас вероватно хавен'т-- али пре Супермен 3 неколико година,
Рицхард Приор у суштини је искористио ово реалност у његовој компанији да украде много
фракција и фракција пенија, јер компанији-- колико се сећам,
ово је био вхиле-- је у суштини бацање било шта што се не уклапа
у појам центи.
>> Али ако се саберу сви ови малени, малени, ситни поново бројеве,
и опет, и опет, можете, као у његов случај, направити добру суму новца.
>> Исте идеја је покрао од новије, али ипак сада старији
Филм, назван Пословни простор, где су момци у том филму,
урадио исту ствар, зезнуо га потпуно, завршио са превише
новац у свом банковном рачуну.
Све је било веома сумњиво.
Али на крају дана, непрецизност је свуда око нас.
>> И да, такође, може бити застрашујуће случај.
Испоставило се да Супермен 3 и пословни простор у страну, тамо
може бити неки веома реална ворлд последице
од реалности непрецизних представљање података
да чак и ми људи то овај дан не нужно
схватити као би требало, или запамтити онолико често колико би требало.
И, заиста, следећи снимак из погледамо неке врло стварном свету
последице онога што ће се десити ако не ценимо непрецизности да
може да се деси у представљању бројева.
>> [ВИДЕО РЕПРОДУКЦИЈА]
>> -Цомпутерс, Сви смо дошли да прихвати су често фрустрирајуће проблеми који
иди са њих-- грешака, вирусе, и софтвер Глитцхес,
за мале цене да плати за погодности.
Али у високе технологије и великом брзином војне и програм простор апликације,
најмањи проблем може бити увећане у катастрофу.
>> 4. јуна 1996. године, научници припремају да покрене беспилотну Ариане 5 ракета.
Она је носила научна сателити дизајнирани
прецизно утврдити како је Земљино магнетно поље у интеракцији
са соларних ветрова.
Ракета је направљен за Европска свемирска агенција,
и скинут из свог објекта на обали Француска Гвајана.
>> -На Око 37 секунди у лет, они прво
Приметио је нешто кренуло наопако.
Млазнице су окретање у начин они заиста не би требало.
Око 40 секунди у лету, јасно, возило је у невољи.
>> И тада су направили одлука да се униште.
Повереник за заштиту опсег, са огромне црева, притиснуо дугме,
дигли ракету, пре него што је могла постати опасност за јавну безбедност.
>> Ово је била лепотица Воиаге оф тхе Ариане 5.
И њено уништење је плаце због грешке
уграђен у софтверу ракете.
-Проблем На Ариане био да постоји број који
потребно 64 бита да изразе.
И они су хтели да га претвори то на 16-битни број.
Они претпоставља да број никада неће
да буде веома велика, да је већина оних који су цифре у 64-битни број био нула.
Они су били у праву.
>> -У Неспособност једног софтверски програм да прихвати
врста броја генерише друга је била у корену неуспеха.
развој софтвера постао веома скуп део нове технологије.
Ариане ракета су били веома успешни, толико софтвера
створен за то је био користи у Ариане 5.
>> -У Основни проблем је да је Аријана 5 је био бржи, убрзан брже.
И софтвер није имала чини то.
>> -У Уништавање ракета је огроман финансијски катастрофа,
све због грешке минут софтвера.
Али ово није био први време проблеми конверзије података
је долазило модерне ракетне технологије.
>> -У 1991, са почетком првог Заливског рата,
Патриотски ракета доживели сличну врсту
проблема број конверзије.
И као резултат тога, 28 људи, 28 амерички војници,
убијено, а око 100 рањено,
када Патриотски, који је требало за заштиту од долазеће Сцудс,
није успео да испали пројектил.
>> Када Ирак напао Кувајт, и Америку лансиран Десерт Сторм почетком 1991. године,
Патриот ракетне батерије су биле распоређене за заштиту Саудијску Арабију и Израел
из ирачких СЦУД ракетних напада.
Патриота је амерички средњег домета Подлога за ваздух система, произведен
од стране компаније Раитхеон.
>> -У Величина Патриот интерцептор Сама је дуга око отприлике 20 метара.
А тежак је око 2.000 килограма.
И то носи бојеву главу од око, Мислим да је отприлике 150 фунти.
И сама бојева глава је висок експлозив, који
има фрагмената око њега.
Кућиште бојеве главе је пројектована да делују као сачме.
>> -Тхе Ракете врши по четири у контејнеру,
и транспортују полу приколицу.
>> -Тхе Патриот антиракетни систем датира најмање 20 година.
Првобитно је пројектована као одбрану ракета ваздух
да оборе непријатељске авионе.
У првом Заливског рата, када је тај рат заједно,
Војска желео да га користите за оборе Сцудс, а не авионе.
>> Ирачки ваздухопловство је не толико проблем.
Али војска је бринуо Сцудс.
Па су покушали да надоградња Патриот.
>> -Интерцептинг Непријатеља ракета путује Мацх 5
је требало да буде довољно изазован.
Али када Патриотски је улетео у службу,
Војска није био упознат са Ирачки модификација које је
њихови СКАД готово немогуће погодити.
>> Шта се десило је да СКАД да су долазили су нестабилни.
Они су брбљао.
Разлог за то је Ирачани, како би
да се 600 километара Од 300 километра
домета, је тежина из предњег бојеве главе.
Они су извршена бојева глава упаљач.
>> Тако је сада Патриота је покушавајући да дођу у Сцуд.
И највећи део времена, Огромна већина времена,
то би само лети од стране Сцуд.
Када оператора Патриот система схватио Патриотски промашила циљ,
они активирао патриота је бојеву главу како би се избегла жртве ако се
било дозвољено да падне на земљу.
>> То је оно што већина људи видели, те велике ватрене лопте на небу,
и разумео као пресретнути Сцуд бојевих глава.
>> -Али Ипак у ноћи небо, Патриоте појавио
да се успешно уништавање Сцудс, на Дахрану,
није могло бити грешка о свом раду.
Ту, у Патриот радарски систем изгубио траг на долазни Сцуд,
и никада није покренута због на софтверски грешке.
То је Израелце који је први откривени да што је дуже систем био укључен,
већи је време неслагање постао, због сат ембеддед
у компјутеру система.
>> Око две недеље пре трагедија у Дхахрану,
Израелци пријављен Министарство одбране
да је систем губи време.
После око осам сати или трчања, су приметили да је систем
постаје приметно мање прецизна.
Министарство одбране је одговорио говори све Патриот батерија
да не остави система на дуже време.
Нису рекли који је дуго времена је- осам сати, 10 сати, 1.000 сати.
Нико није знао.
>> -Тхе Патриот батерија стациониране у касарни
на Дхахрана и његова погрешна унутрашња сат је био на више од 100 сати
у ноћи 25. фебруара.
>> Багер -ит времена са тачношћу од око једне десетине секунде.
Сада, десетину секунде је занимљив број,
јер се не може исказати у бинарном тачно, који
значи да се не може изразити тачно у сваком модерног дигиталног рачунара.
Тешко је поверовати.
>> Али користе као пример.
Узмимо број једну трећину.
Једна трећина не може бити изражена у децималама тачно.
Једна трећина је 0.333 дешава за бесконачност.
>> Не постоји начин да се то са апсолутна тачност у децимале.
То је управо врста проблема што се десило у Патриот.
Што дуже систем ран је горе грешка време постао.
>> -После 100 сати рада, грешка у време била само око једне трећине
секунде.
Али у смислу циљања ракета путује Мацх 5,
то је резултирало у праћењу грешка преко 600 метара.
Било би фатална грешка за војнике на шта
догодило је Скад лансирање је било детектован од раних сателита упозорења
и они су знали да је Скад је долазак у њиховом правцу.
Они нису знали одакле долази.
>> -То Сада је до радара компонента Патриот система
брани ДХАХРАН да лоцира и задржати стаза долазног непријатеља ракете.
>> -У Радара је био веома паметан.
То би заправо трацк положај Сцуд,
а онда предвиђа где се вероватно ће бити следећи пут радар послао
пулс се.
То се зове капија опсег.
>> Онда, некада Патриот одлучује довољно времена има
прошло да се врати и проверите следеће локација за откривени објекат,
иде уназад.
Дакле, када се вратио у погрешно место, онда не види објекат.
И одлучује да није било објекат, то је била лажна детекција,
и капи траг.
>> -У Долазни Скад нестао са екрана радара.
И секунде касније, то ударио у касарни.
Скад убио 28, а био последњи један испаљен током првог Заливског рата.
>> Трагично је ажуриран софтвер стигао у Дхахрана наредног дана.
Софтвер мана је имао био фиксни, затварање
једно поглавље у невољи Историја Патриот ракете.
>> [ВИДЕО РЕПРОДУКЦИЈА]
Давид Ј Малан: Дакле, ово је све у кажу да овим питањима преливом
и непрецизност су сви превише реално.
Како смо стигли овде?
Почели смо са само говори о принтф.
Опет, ова функција је исписује несто на екран,
а ми након тога увели неколико других функција
из тзв ЦС50 библиотеци.
И ми ћемо наставити да види ово у догледно време.
И ми, нарочито, користе гет стринг, и да инт, а сада добијају флоат,
и још увек остали ће и даље наилазимо и користе се убрзо.
>> Али понекад, има смо већ видели потребу
да сачувате оно што те функције руку назад?
Они предају нас назад стринг, или инт, или пловак.
И понекад морамо ставити да низ, или инт или флоат, негде.
>> И за чување тих ствари, сећам се само као у Сцратцх, имамо променљиве.
Али за разлику од Сцратцх, у Ц имамо стварне врсте
од вариаблес-- података врсте, више генералли--
међу њима, стринг, инт, А флоат, а ови остали и даље.
>> И тако, када смо прогласити променљиве у Ц, ћемо морати да прогласи наше врсте података.
То није нешто што ћемо треба да ураде касније у семестру
као што пређу на другим језицима.
Али за сада, ми морамо да а приори унапред,
објаснити на рачунар који тип варијабилних желимо да нам дају.
>> Сада, у међувремену, за штампање оне врсте типова података,
морамо рећи принтф шта да очекујемо.
И видели смо одсто а за жице, и посто сам за целих бројева,
и неколико других већ.
И они су једноставно захтеви за визуелну презентацију
те информације.
>> И сваки од њих може заправо бити параметризед или подешени на неки начин,
ако желите да даље контроле тип излаза који сте добили.
И, у ствари, испада да не само постоји обрнута коса црта н за нове линије.
Има још нешто зове обрнута коса црта Р за повратак превозу, који
више слично као у стара школа писаћа машина,
а и Виндовс користи за много година.
>> Ту је обрнута коса црта Т картицама.
Испоставило се, да ако желите да наводници унутар низа,
Подсетимо се да смо користили наводници двоструко
цитат са леве и са десне стране завршава наш низова до сада.
То се чини да збуни ствари.
>> Ако желите да поставите двоструки цитат у сред стринг-- и, заиста,
је збуњујуће да видимо.
Па морате да побегне, тако да говоре, двоструки цитат са нечим
као, буквално, БацкСласх двоструки цитат.
А ту је и неколико других још.
Па да видимо више оних у стварној употреби пре дуго.
>> Тако да се сада транзицију из података, и представљање,
и аритметичке операторе, све од којих су нам дали неке зграде
блокови са којима се играју.
Али сада хајде да заправо дати нас остатак речника
да смо већ имали прошле недеље Сцратцх
узимајући поглед на неки други конструкције у ц-- не све њих.
Али идеје смо о да виде заиста само
да нагласи превод са један језик, Огреби, на други, Ц
>> И током времена, ми ћемо покупити више алати за наше алата,
да тако кажем, синтаксно.
И, заиста, видећете да су идеје сада прилично познат од прошле недеље.
Хајде да урадимо ово.
>> Идемо напред и спремим програм да заправо користи неке изразе,
Логичка израз.
Пусти ме напред овде и створити нову датотеку.
Ја ћу назвати цондитион.ц.
>> Пусти ме напред и укључују ЦС50 библиотеку.
И пусти ме напред и укључују Стандардни ио.х за наше функције,
и принтф, и респективно.
Дозволите ми да се предам да ове стандардне о инт празнина, чији објашњење ћемо
вратити у будућности.
>> Сад ме пусти напред и дати ја инт преко гет инт.
Онда ме пусти напред и уради то.
Хоћу да кажем да сам је лесс-- хајдемо разликовати позитивни, негативни,
или нула вредности.
>> Па ако и је мање од нуле, пусти ме само да овај програм једноставно рећи,
негативан, косих Н, друго ако ја већа од нуле.
Сада сам, наравно, да кажем принтф позитиван, инверзна коса црта н.
А онда још Ако-- сам могао да урадим ово.
>> Могао бих да сам једнако 0.
Али ја бих одлука на најмање једна грешка већ.
Подсетимо се да је знак једнакости је није једнако, као што смо ми људи то знају.
>> Али то је оператер задатак.
И ми не желимо да се на 0 десно и стави га у сам на левој страни.
Тако да се избегне конфузија, или можда злоупотреба знак једнакости,
људи одлучили пре неколико година да у многим програмским језицима
када желите да проверите за равноправност између леве и десне стране,
се заиста користити једнако једнаки.
Тако да погоди знак једнакости два пута.
Када желите да доделите с десна на лево, користите једну знак једнакости.
Тако да би могли да урадимо ово-- друго ако сам једнако једнака нули.
>> онда бих могао да одем и отвори ми витичасте,
и кажу, принтф 0, косих н урађено.
Али запамтите како се то виљушке на путу може да ради.
И заиста, само размисли о логици.
и је број.
То је цео број, посебно.
А то значи да ће бити мање од 0 или већи од 0 или 0.
Тако да је мало ово имплицитно подразумевани случај.
>> И тако смо могли, баш као и Огреботина, изоставити са иф,
и само да друго.
Логично, ако би сте програмер Знам да има само
три кашике у којој је сценарио може фалл-- први,
други, или трећи у овом цасе-- не
смета додавање додатне прецизност и додатни логика тамо.
Само напред са Уобичајено овде случај од другог.
>> Сада, идемо напред након снимања ова,
Услови дот сласх цондитионс-- није велики кориснички интерфејс,
јер нисам због чега је корисник, као што сам раније поменуо.
Али то је у реду.
Ми ћемо то буде једноставно.
Хајде да пробамо број 42.
И то је позитивно.
Хајде да покушамо број негативан 42, негативан.
>> Хајде да пробамо вредност 0.
И, заиста, ради.
Сада ћете видети са проблемима пре дуге, испитивање ствари три пута,
вероватно није довољно.
Вероватно желите да тестирате неке веће бројеве, неки мањи
бројеви, неком углу случајевима, као ми ћемо доћи да их опише.
>> Али за сада, ово је прилично једноставан програм.
И ја сам сигуран, логично, да пада у три случаја.
И, заиста, иако смо само фокусирана на потенцијалне мане
непрецизности и преливања, у реалност у којој су многи од проблема ЦС50 је,
ми нећемо бринути о, све време,
та питања преливом и непрецизност, јер, у ствари, у Ц,
заправо није све лако да се избегне те ствари.
Ако желите да изброји већи, и већи, и већи,
Испоставило се да постоје технике ви могу да користе, често укључује ствари које се зову
библиотеке, збирке кода, да други људи писали да можете користити,
и други језици као што су Јава и други, заправо
да је много лакше да рачунају још већи.
Тако да заиста неке од тих опасности функција језика који користите.
И у наредним недељама, ми ћемо види колико је опасна Ц стварно
може бити ако се не користе правилно.
Али одатле, и са Питхон и ЈаваСцрипт, неће
смо слој на неке додатне заштите, и покренути мање од тих ризика.
>> Дакле, хајде да мало више Занимљиво логика у нашем програму.
Па пусти ме напред и створити програм који се зове Логички
само тако да могу да играм са неким Стварна логика, логицал.ц.
Само ћу да копирате неки Код од раније па се вратим
на овом лепом почетну тачку.
>> Нека ми овај пут до кар Ц и ми ће му дати име Ц
само зато што је конвенционално, добити карактер од корисника.
И рецимо да је као Ја сам имплементацију део
те Рм програма, ремове Програм пре тога затражено корисника
уклонити фајл.
Како смо могли ово?
>> Хоћу да кажем, ако, Ц једнако једнако, под знацима навода,
И, онда ћу претпоставити да је корисник изабрао да.
Само ћу да одштампате да.
Ако би се заиста писање Програм за уклањање,
можемо уклонити фајл са више линија кода.
Али ћемо то буде једноставно.
>> Иф Ц једнако једнако н-- и сада овде, ја ћу рећи,
корисник мора да значи ништа.
И онда још, знате шта?
Ја не знам шта друго корисник ће тип.
Дакле, ја ћу само рећи да то је грешка, шта год
он или она заправо откуцане.
>> Дакле, шта се овде дешава?
Постоји фундаментална разлика против што сам урадио у прошлости.
Двоструки наводници, двоструким наводницима, двоструко цитати, и, ипак, сингле цитати,
сингле цитати.
Испоставило се да у Ц, када желите написати стринг,
користите наводнике, баш као што смо Користим све ово време са принтф.
>> Али, ако желите да се баве само један лик, такозвани знак,
онда се заиста користити апострофе.
Они од вас који нисте програмирали пре, можда немате
морале да брину о томе разлика у неким језицима.
У Ц, то ствар чини.
Па кад добијем цхар и ја желим да поредимо цхар користећи једнаки
једнака неком писму као што је и или н, ја, Заиста, потребно је да имате апострофе.
>> Сада, идемо напред и уради то.
Идемо напред и правимо логичке тачка сласх логично.
И сада се то буде затражено.
Дакле, вероватно, бољи кориснички доживљај заправо би ми шта да радим овде.
Али ћу само слепо кажу и за да, у реду, лепо.
>> Хајде да се поново кандидовати, н за не, лепо.
Претпостављам да неким људима које познајем, ми Цапс Лоцк ис он пречесто.
Па ја главни И, ентер, грешка.
У реду, то није оно што сам очекивао.
Заиста, рачунар ради буквално оно
Рекао сам му да урадиш-- проверите мала слова И и мала слова бр.
Ово не изгледа као добро корисничко искуство, мада.
Пусти ме да траже и прихватају или мала слова или велика слова.
Тако испада, можда ћете желети да кажем нешто као у Сцратцх,
као буквално или Ц једнако једнако капитала јединствен цитирао год.
Испоставило се да, Ц нема ово буквално кључне речи или.
>> Али има два вертикалне линије.
Треба да држите Схифт обично, ако користите УС тастатуру,
и погодио пречку вертикалну Кључ изнад тастера повратка.
Али ово вертикална црта Вертикални бар значи или.
>> Ако, с друге стране, желели смо рећи и, као у Сцратцх,
можемо да урадимо амперсанд амперсанд.
То нема логично овде, јер човек не би било могуће
куцања и и и мала слова И и капитал И као истог карактера.
Дакле, или је оно што желимо овде.
>> Дакле, ако урадим ово на оба места, или ц једнако једнако капитал Н, сада поновљени,
маке логично, поновљени логично.
Сада, могу тип год.
И ја могу то да урадим поново са капитал И или капитал С.
И да додам на додатни комбинације даље.
>> Дакле, ово је логичан Програм утолико што сада
Гледам логично за ова вредност или ова вредност.
И не треба да, нужно, доћи до још два ИФС иначе ИФС.
Могу уствари комбинујте неке од релатед логику заједно на овај начин.
Тако да би било боље десигнед него једноставно
говорећи, ако, Ц једнако малим словима и, принт да, иф Ц износи капитала И,
принт да, иф Ц једнако ловер-- другим речима,
не морате имати све више и више грана.
Можете комбиновати неки од еквивалента гране логично, јер на тај начин.
>> Дакле, хајде да погледамо само један коначна састојак, један финални конструкт,
да Ц дозвољава.
Па ћемо се вратити у будући да други и даље.
А онда ћемо завршити гледајући у не исправност цоде--
узимајући код за послу-- али дизајн кода, и засадити те семе рано.
>> Па пусти ме само напред, отворити нову датотеку овде.
Знаш шта?
Идем да поново спроведе да исти програм,
али користећи другачију конструкт.
>> Па ме пусти брзо дати себи приступ укључује ЦС50.х
за библиотеку ЦС50, Стандардни ио.х за принтф.
Дај ми инт маин празнину.
А онда овде, нека ја само напред и уради то.
>> Цхар ц добија се цхар, баш као и пре.
И ја ћу да користите нови конструкт Сад-- прекидач, на ком карактеру?
Дакле, прекидач је нешто попут Пребацивање пруге.
Или, заиста, то је нека врста иф друго, ако иф,
али написано нешто другачије.
>> Прекидач изгледа овако.
Имате прекидач, и шта онда карактер или број који желите да погледате,
онда неки цурли протезе као у Сцратцх, само да ради са овим стварима.
И онда имају различите случајеве.
>> Не користите ако и друго.
Ви буквално да користите кућиште реч.
А ви би рекли овако нешто.
>> Дакле, у случају малих слова и, или у случају капитала И,
само напред и одштампати да.
А онда избијају из прекидача.
То је то.
Су урадили.
>> Иф, да тако кажем, мала слова Н, или капитала Н,
само напред и штампа се не, а затим разбити.
Елсе-- и ова врста је Уобичајено случај индеед-- принтф еррор--
и само за сваки случај, иако логично је овај раскид није потребно
јер смо на крају прекидача у сваком случају,
Сада сам избијања прекидача.
Дакле, ово изгледа мало другачије.
>> Али, логично, то је заправо еквивалент.
А зашто би користите један преко другог?
Понекад, само лични приоритет, понекад естетика,
ако погледаш у ово Сада, постоји нешто
да се каже за читљивост овог кода.
Мислим, никада виду чињеницу да ово код је ново за многе од нас у соби.
>> Али некако је прилично.
Видиш мала слова И, капитала И, мала слова Н, капитал; Дефаулт,
то је тако и скокова на вас на неки начин
да, вероватно, можда претходни пример
са ИФС, и вертикалне линије, и друго ИФС, можда неће имати.
Дакле, ово је заиста питање личног избор, заиста, или читљивост,
кода.
>> Међутим, у смислу функционалности, пусти ме само напред и направити прекидач, Дот косу црту
прекидач, а сада куцали малим словима и, капитал И, мала слова Н, капитал Н,
Давид, понови јер је то ни један лик.
Хајде да урадимо к, грешка, као што се очекивало.
И, логицалли-- и то је нешто Ја бих охрабрити у генерал-- чак
иако смо само гребања површина неке од ових функција.
>> И то не би било очигледно када вас сами сести на тастатури,
Како ово ради?
Шта би то урадио?
Дивна ствар о томе да лаптоп, или десктоп, или приступ
са рачунаром са компајлер, и са уредником код овако,
се можете готово увек одговори на ова питања за себе само покушавам.
>> На пример, ако је реторички Питање при руци су,
шта се дешава ако заборавим паузи изјаве?
Који је заправо веома честа ствар,
јер не изгледа као да их је заиста потребно.
Они стварно не заврши свој Мислио као загради или коврџавом
браце ради.
Идемо напред и рекомпајлирајте код и види.
Тако да прекидач, тачка Сласх прекидач.
Хајде да унесете мала слова И, горњи случај, Ентер.
Па сам куцао год.
>> Програм је рекао да, не, грешка, као да је мењао свој ум.
Али је некако било, јер оно што се дешава са прекидачем је први случај да
Меч у суштини значи, хеј рачунар, извршава све кода испод ње.
И ако не кажеш пауза, или не говори паузу, или не говори паузу,
рачунар ће експлодирати кроз све те линије
и извршава их све до она стигне до тог коврџаве браце.
Тако да су кочнице, заиста, неопходно.
Али понети ту је, када у недоумици, пробајте нешто.
Можда сачували прво свој код, или га сместите у додатном фајлу
ако сте заиста забринути упропастила и да се опорави
рад да знате ради.
>> Али, покушајте ствари.
И не буди као плаши, можда, шта је компјутер може да уради,
или да можда сломити нешто.
Увек се можете вратити ранијим верзију.
>> Дакле, да завршимо гледајући у дизајну кода.
Ми имамо ту способност сада написати услови и напиши петље,
и варијабле и функције позива.
Дакле, искрено, ми смо некако вратио у где смо били пре недељу дана са Сцратцх,
иако са мање убедљив текстуалном животна средина од Сцратцх дозвољава.
>> Не приметим колико брзо смо стекли да вокабулар, чак и ако је
Биће потребно мало времена да потоне у, тако да сада могу да користе ову терминологију
писати занимљивих програма.
И узмимо корак бебу ка да, како следи.
Пусти ме напред и створити нову датотеку овде.
>> Ја ћу назвати прототипе.ц, и увести
по први пут, способност да своје функције.
Неки од вас можда има урадио са Сцратцх,
при чему можете да направите сопствени цустом блокови у Сцратцх,
а затим их превуците на своје место где год желите у Ц.
И у већини програма језика, можете да урадите тачно
да-- да своје функције, ако већ не постоје.
>> Тако, на пример, пусти ме само напред и укључују ЦС50.х, и укључују
Стандардни ио.х, маин празнина.
И сада имамо плејсхолдера спреман да иде.
Стално штампање ствари као имена људи данас.
И да се осећа као-- Не би било лепо ако постоји
били функцију која се зове име штампа?
Не морате да користите принтф.
Не морају да памте све формат кодови.
Зашто не ја, или зашто није неко пре мене,
створити неку функцију под називом принт назив, да, с обзиром неко име,
једноставно исписује?
>> Другим речима, ако кажем, хеј, рачунар, дај ми низ
питајући корисника за што, преко фунцтион гет гудачки ЦС50 је.
Хеј, компјутер, стави ту серију у променљиви на левој страни,
и назвати то с.
А онда, хеј рачунар, само напред и принт то име особе, урађено.
>> Сада, то би било лепо, јер овај програм, пригодно назван,
говори ми шта би требало да уради путем имена тих функција је.
Пусти ме и да прототип, Ентер.
И, нажалост, ово неће да лети.
>> Прототипе.ц, линија 7, карактер 5, грешка, имплицитно декларација
функције име принт је неважећи у Ц99, Ц99
што значи верзију Ц која је изашла 1999. године.
То је све.
>> Тако да не знам шта Све ово значи још.
Али препознајем грешку у црвено.
То је очигледно.
>> И чини се да са зелени лик овде,
питање је са именом принт, отворен парен с, блиски парен, полу-дебелог црева.
Али имплицитно декларација Функција смо кратко раније видети.
То значи, једноставно, да кланг не знаш на шта мислим.
>> Ја сам користила вокабулар речи да је никад није видео или није раније учили.
Па морам да предајем шта ова функција значи.
Тако да идем напред и то.
>> Ја идем напред и имплементирати моја функција зове Штампа Име.
И ја ћу рећи, као што следи, да То се чини, принтф, Хелло, посто
е, косих Н, име, полу-дебелог црева.
Па шта сам урадио?
>> Тако испада, да имплементира свој функције,
смо некако позајмимо мало исту структуру као главни
да смо управо били узима здраво за готово, и ја
знам само копирање и лијепити управо оно што
Писао сам у прошлости.
Али приметите образац овде.
Инт, Главни, Празнина, ми ћемо зафркавати осим убрзо шта то заправо значи.
>> Али данас, само приметити паралелизам.
Воид, име штампа, стринг наме, тако да је
љубичасте кључна реч, која ћемо почети
позивање повратни тип, име функција, а затим улаз.
Дакле, у ствари, можемо дестилирати ова врста као што су прошле недеље
ас, то је име или алгоритам кода где смо сада
да врите-- алгоритам основни
код ћемо писати.
>> Ово је његов улаз.
Ово је његов излаз.
Ова функција, име штампа је дизајнирана за ниску под називом име,
или шта год, као улаз, а затим празнина.
То не врати ништа, као да стринг или добити Инт ради.
Тако да ће ми предати нешто за узврат.
То је само да имају сиде еффецтс, да тако кажем,
штампе име особе.
Дакле приметите, ред 7, ја може да позове име штампача.
Линија 10, могу дефинисати или спроведе име за штампање.
Али, нажалост, то није довољно.
>> Пусти ме напред и рецомпиле то након снимања.
Опа, сад, ја сам га направио горе, рекло би се.
Тако имплицитно декларација Име функција за штампање је неважећи.
И, опет, има више грешака.
Али као што сам упозорио раније, чак ако се преплављен,
или мало тужно видети толико грешке, фокусирају само на први
у почетку, јер може само имали ефекат каскадни.
Дакле Ц или Цланг прецизније, још увек не признаје назив за штампање.
>> А то је зато што кланг, по дизајну, је некако глупо.
То само ради оно што му реци да уради.
И то не само тако у циљу у којој је рећи да уради.
>> Тако да су дефинисали главни на линији четири, као да смо радили прилично често.
Ја сам дефинисано име за штампање на линији 10.
Али ја покушавам да користим Име штампа на линији седам.
>> То је прерано, још увек не постоји.
Тако да сам могао бити паметан, и бити као, У реду, па хајде да играмо заједно,
и померите име штампање горе овде, и поново саставити.
О Боже.
Успело је.
То је тако једноставно.
>> Али логика је управо то.
Мораш научити цланг шта је је дефинисањем први функцију.
Онда можете га користити.
Али, искрено, ово се осећа као клизав терен.
>> Дакле, сваки пут кад покренете у проблем, ја сам
да истакне и копирање код Писао сам, престани и налепите га овде.
И, свакако, можемо цонтриве неке сценарије
где једна функција можда Морам да позовем други.
А ви једноставно не могу ставити сваки Функција изнад сваке друге.
>> Тако испада ту је боље решење.
Можемо оставити ово бити.
И, искрено, то је углавном лепо, и згодан, и добар дизајн
да стави главни прво, зато што, опет, Главни баш као кад зелена застава кликне,
то је функција која бива погубљен по дефаулту.
Дакле, можда и пут то на врху датотеке
тако да када или било друго људско гледа датотеке
знате шта се дешава само читајући главни прво.
Тако испада, можемо рећи цланг проактивно, хеј, кланг, на линији четири,
Обећавам да спроведу функција се зове Штампа
Име које узима стринг под називом име као улаз, и ништа повратка, воид.
И ја ћу ту да њено спровођење касније.
>> Ево долази Главни.
Главни сада он лине 9 могу користити Принт име јер кланг
је веровати да, на крају, да ће наићи на дефиницију
спровођења Принт Наме.
Дакле, након снимања мој досије, нека ја само напред и да прототип,
изгледа добро овај пут.
Дот сласх, прототип, пусти ме само напред и укуцајте име.
Давид, здраво давид, Замила, здраво Замила, и, заиста, сада ради.
>> Тако да је састојак јесте да имамо је прилагођену функцију, као обичају
Сцратцх блок зовемо га.
Али за разлику од нуле, где можете само стварају и почну да га користите,
Сада морамо бити мало више педантан,
и заправо тренирају цланг да користе, или да га очекујемо.
Сада, као успут, зашто све ово време има смо били само слепо на вери, укључујући
ЦС50.х, укључујући и стандардне ио.х?
>> Па, испоставило се, међу неколико других ствари,
све што је у тим дот х Бр, који се дешавају досијеа које се.
Они хеадер фајлова, тако да говори.
Они још увек написан на Ц. Али, они су другачији тип датотеке.
>> За сада, можете прилично претпоставити да је све што је унутар ЦС50.х
је неко-облоге лике тхис, а не за функције под називом Штампа име,
али за Гет Стринг, Гет Флоат, и неколико других.
И постоје слични прототипови, један облоге, унутар стандардног ио.х
за принтф, који је сада у моја Штампа Име функција.
Другим речима, све ово време имамо Управо је слепо копирање и налепите
укљући, инцлуде да, шта се дешава?
То су само нека од трагова да цланг као којим функцијама
су, заиста, реализован, само другде у различитим фајловима
другде на систему.
>> Тако смо спроводи име штампача.
Она има тај споредни ефекат штампање нешто на екрану.
Али то не заправо дај ми нешто за узврат.
Како идемо око спроводи програм који
не ми додати нешто за узврат?
>> Па, хајде да пробамо ово.
Пусти ме напред и имплементирати фајл под називом ретурн.ц
тако да може да покаже како нешто као Гет Стринг, или Гет Инт,
заправо повратак нешто натраг кориснику.
Идемо напред и дефинисати инт маин празнину.
>> И, опет, у будућности, ми ћемо објаснити шта то инт и ту празнину
је заправо ради.
Али данас, ми ћемо узети здраво за готово.
Ја идем напред и принтф, за добар корисничко искуство, к је.
А онда ћу да сачекам за корисник да ми х са гет инт.
>> А онда ћу да наставим и одштампа к на квадрат.
Дакле, када имате само тастатура, људи уобичајено
користити мало шаргарепу Симбол на тастатури
да представља на власти оф, или експонент.
Дакле, к квадрат је присутан сам.
>> А сада ћу да урадим ово.
Ја само могу да урадиш-- шта је х квадрат? к на квадрат је к пута х.
>> И ми смо то неки Време пре већ данас.
Ово не изгледа као све то велики напредак.
Знаш шта?
Хајде да искористе неке од те идеје од прошлог пута апстракције.
>> Не би било лепо да постоји функција зове
квадрат који ради управо то?
То је још увек, на крају овог дан, чини исту математику.
Али хајде да апстрактно далеко идеја преузимања
један број множи други, и само му дати име,
као квадратни ову вредност.
>> И, другим речима, у Ц хајде да креирамо функцију
зове квадрат који ради управо то.
То ће се звати трг.
То ће узети инт.
А ми ћемо ће само зову га н подразумевано.
>> Али можемо га назвати било шта желимо.
И све што иде у до, буквално, није повратак
резултат н пута н.
Већ зато што је враћа нешто, што
је кључна реч у љубичасте имамо невиђен, ја, он лине 11,
Не могу само рећи празнина овај пут.
>> Воид, у примеру смо управо видели а имена принт, само значи,
Уради нешто.
Али немој да ми дајеш нешто за узврат.
У овом случају, желим да се врате н пута н
или шта год да је, тај број.
>> Тако да не могу рећи, хеј, рачунар, Враћам ништа, празнина.
То ће да се врате, по својој природи, инт.
И то је све што се дешава овде.
>> Улаз на квадрат ће бити инт.
И тако да можемо да га користимо, мора имају име, С. То ће излаз
инт да не треба име.
Можемо га оставити да се главни, или ко год је ме користи да се ове вредности ако ми
Желим са сопственим променљиве.
>> И, опет, једини нови кључна реч овде је повратак.
А ја само радим мало математике.
Ако сам заиста желео да буде непотребно, Могу да кажем Инт производ добија н пута н.
>> И онда бих могао рећи, врати производ.
Али, опет, до поенте раније од ово једноставно није добра десигн--
као, зашто увести име, симбол, као производ,
само да га одмах вратити?
Мало је чистач, мало чвршће, тако
да говори, само да кажем повратак н пута Н, добили ослободити од ове линије заједно.
>> И то је само мање код за читање, мање прилика за грешке.
Па да видимо да ли ово заправо сада ради.
Сада, ја идем напред и да повратак.
>> Ух-ох, имплицитно декларација функције.
Сам направио ту грешку пре, није велика ствар.
Пусти ме само укуцајте, или означите и цопи, тачно иста функција прототип,
или потпис, функције до овде.
Или сам могао да се померим цео функцију.
>> Али то је мало лењ.
Тако да то неће учинити.
Сада, дозволите ми да врати Опет, дот сласх повратак.
>> к је 2. Кс на квадрат је 4. к је 3. х на квадрат је 9.
И ова функција делује сада да ради.
Дакле, у чему је разлика овде?
Имам функцију која се зове квадрат, у овом случају, који сам ставио у улаз.
И да се вратим излаз.
А ипак, раније, ако Отворим други пример
од раније, која је позвао прототипе.ц,
Имао сам име штампе, који вратио празнина, да тако кажем,
Или је ништа вратио, и једноставно имала споредне ефекте.
>> Дакле, шта се овде дешава?
Па, размислите функцију гет стринг само на тренутак.
Ми смо помоћу функције добити низ на следећи начин.
>> Ми смо имали функцију да жица, као укључују ЦС50.х,
укључују стандардну ио.х, инт, главни, празнину.
А онда сваки пут кад сам под називом Гет низ до сада,
Ја сам рекао нешто слично, Стринг добија се низ, јер гет стринг--
Назовимо овај гет.ц-- гет стринг Сама враћа низ који могу тада
користи, и кажу, здраво, зарез, посто ова, косих Н, С.
>> Дакле, ово је исти пример, Заиста, да смо имали раније.
Зато се низ враћа вредност.
Али малопре, штампа низ не враћа вредност.
То једноставно има споредне ефекте.
Дакле, ово је суштинска разлика.
Видели смо другачији врсте функција сада,
од којих су неки вратили вредности, од којих не.
Дакле, можда је низ, или Инт, или пловак.
Или је то само празнина.
>> А разлика је да ове функције које
добити податке и вратити вредност у ствари доносећи нешто заузврат за сто,
такорећи.
Дакле, идемо напред и погледај једном последњем сету
примера који даје смисао, сада, од како бисмо могли, заиста, апстрактно боље,
и боље, и боље, или више, и више, и више, како
да пише, на крају, боље код.
Идемо напред, а у духу од нуле, урадите следеће.
>> Пусти ме напред и укључују ЦС50.х и стандардни ИО.х.
Пусти ме напред и дати ја инт, главни, празнина.
И пусти ме само напред, зову цоугх.ц.
>> И пусти ме само напред и само као Сцратцх, одштампајте кашаљ / н.
И ја желим да радим то три пута.
Тако сам, наравно, само иде да копирате и налепите три пута.
Сада ћу направити кашаљ дот сласх кашаљ.
Хајде да себи дају мало више простора овде, Ентер, кашаљ, кашаљ, кашаљ.
>> Ту је, очигледно, већ био прилика за побољшање.
Ја сам копирати и неколико пута данас.
Али то је било само толико да нисам морате да куцате што више знакова.
И даље променио шта те линије кода су.
>> Ове три линије су идентични, који осећа лењ и заиста је,
и вероватно није прави приступ.
Дакле, са оним што састојак можемо побољшати овај код?
Не морамо да копирате и налепите код.
>> И, заиста, сваки пут када осећате се копирање и лепљење,
па ни промена код, шансе су да постоји бољи начин.
И, заиста, постоји.
Пусти ме напред и урадите за петљу, иако синтакса можда не
стигли природно.
>> Да ли то три пута, једноставно радећи фолловинг--
и ја се ово знам из праксе.
Али имамо велики број примера сада.
И видећете на мрежи више референци даље.
>> Ово је синтакса он лине 6, да налик Сцратцх који се понавља
блок, поновите следеће три пута.
Мало је магичан за сада.
Али то ће добити више, и више познато.
>> И да ће поновити линија осам три пута,
тако да ако поново саставити остварите кашаљ, тачка сласх кашаљ, кашаљ, кашаљ, кашаљ.
То је још увек функционише на исти начин.
Тако да је све у реду и добро.
Али, то није врло замишљен.
>> То је савршено у праву.
Али се чини као да може бити прилика,
као у свету Сцратцх, врсти старт
да додате неке семантику овде, тако да Не само неке за петљу,
и функција која каже кашаљ, или не кашље.
Знаш шта?
Дозволите ми да покушам да будем мало боље од тога,
и заправо написати функцију која има неке нежељене ефекте, зовемо кашаљ.
>> И он не узима улаз, и враћа никакву вредност као излаз.
Али, знате шта ради?
То се ово-- принтф, под знацима навода, кашаљ.
>> И сада овде, ја идем да иде напред и за инт,
И добија нула, ја мање од 3, и плус плус.
Идем да не принтф, која је вероватно за имплементацију низак ниво
детаљ.
Не занима ме како да кашље.
Само желим да користите функцију кашља.
И само ћу да позовем кашаљ.
>> Сада, приметите дихотомију.
Када позовете функцију, ако не Желим да дам да улази, потпуно у реду.
Само уради Отворена заграда, близу парен, и готови сте.
>> Када дефинисати функцију, или изјавити прототип функцију је,
ако унапред знате да није ће предузети све аргументе,
кажу празнина у тим загради тамо.
И да се осигурава да се ти неће случајно злоупотребе.
Пусти ме напред и да кашаљ.
И, наравно, ја сам направио грешку.
>> Проклетство, то је то имплицитно декларација.
Али то је у реду.
То је лако поправити.
Само ми треба прототип вишем у мом досијеу него што сам заправо да га користите.
>> Па пусти ме да кашаљ опет, лепо.
Сада, ради.
Направи кашаљ, кашаљ, кашаљ, кашаљ.
Дакле, можда мислите да смо стварно само преко инжењеринг овај проблем.
И, заиста, ми смо.
Ово није добро Кандидат програма
у овом тренутку за Рефакторисање, и ради оно што је
назван хијерархијски разлагање, где се неки код, а затим
Некако фактор ствари од, како приписати више семантику њима,
и поново га на крају дужи рок.
Али то је градивни елемент према софистицираније програме
да ћемо почети писање пре дуго да
омогућава нам да имамо речник са којима се писати боље код.
И, заиста, хајде да видимо да ли можемо не могу даље генерализовати ово.
>> Изгледа да је мало хром да сам, главни, треба да бринете о овом проклето за петљу,
и опет и опет зове кашаљ.
Зашто не могу само рећи кашаљ, молим кашаљ три пута?
Другим речима, зашто не могу сам дати допринос да кашље и уради ово?
>> Зашто не могу само да кажем, у Главни кашаљ три пута.
И сада, ово је некако магично.
То је веома понавља овде.
И то је, заиста, корак беба.
>> Али само могућност да каже о линија осам, кашаљ три пута,
то је много више од тога читљив.
И плус, ја не морам да знам или брига колико кашаљ се реализује.
И, заиста, касније у термин и за коначних пројеката,
ако се позабави пројекат са сколски друг или два колеге,
схватићете да ћеш да се, или желе да, поделити посао.
>> И ти ћеш желети да одлучи унапред, ко ће да ради шта,
и у којој комада?
И не би било лепо ако вас, на пример,
преузме одговорност за писање маин, урадио.
И цимер, или ваш Партнер генерално,
брине о спровођењу кашаљ.
>> А ова подела, ово Зидови апстракције,
или слојева апстракције ако Ви ћете, су супер моћан,
јер посебно за веће, сложенији програми и системи,
омогућава више људи да се изгради ствари заједно, и на крају
ститцх свој рад заједно на овај начин.
Али, наравно, ми Потребно је да сада поправити кашаљ.
Морамо реци кашаљ да, хеј, знаш шта?
Ти ћеш морати да преузме инпут-- тако не празнина, али Инт и сада.
Идемо напред и ставити у кашаљ ИНТ. И добија нула.
>> и је мање од колико пута.
Рекао сам три раније.
Али то није оно што желим.
Ја желе кашљем да се генерализовати на подржати било који број итерација.
>> Дакле, заиста, то је Н да хоћу, без обзира корисник ми говори.
Сада, могу ићи напријед и рећи штампе кашаљ.
И без обзира што број корисник пролази,
Ја ћу поновити да много пута.
>> Тако на крају дана, Програм је идентичан.
Али приметите све ове ствари могао да буде у другом фајлу.
Заиста, не знам На моменат како принтф спроводи.
>> Ја не знам у овом тренутку како добити ниска, или се инт, или да плива
се спроводе.
И ја не желим да види их на свом екрану.
Као што је, ја почињем да се фокусира на мој програм, не те функције.
>> И тако, заиста, чим старт факторинг код овако напоље,
можемо да се макнем кашаљ у посебан фајл?
Неко други би могао да спроведе.
И ви и ваш програм постати врло лепа, и врло читљив,
вероватно, стварно четири линија програма тамо.
>> Идемо сада напред и да још једну промену.
Приметити да је мој прототип мора да се промени одозго.
Дакле, дозволите ми да поправим тако Ја не галамити на.
>> Направи кашаљ, пусти ме кашаљ једном више, још увек раде исту ствар.
Али сада, приметили смо имати састојак за једну коначну верзију.
Знаш шта?
Не желим да се кашаљ, обавезно.
Желим да имам нешто опште.
Дакле, знате шта?
Желим да радим ово.
Желим да имам, слично као Сцратцх догоди, рецимо блок, али не само
Реци нешто мало више пута.
Желим да кажем врло специфичан низ.
И, према томе, не знам желим да се само рећи кашаљ.
Ја желим да кажем било шта стринг усвојен у.
>> Тако приметио, ја сам генерализовати то тако да сада
рецимо изгледа као добром имену за ово, као Сцратцх,
узима два аргумента, за разлику од нуле.
Један је стринг.
Један је инт.
>> И ја могао да их пребацити.
Ја некако као идеје кажу жицу, а затим
колико пута касније.
Воид то значи још не врати ништа.
Ово су само визуелне стране ефекти, као што је са [? Јордан,?]
вербална нуспојава виче.
Још увек ради нешто н пута, 0 до, али не једнако н.
То значи Н Укупно пута.
И онда само исписати шта год да низ је.
Тако сам стварно генерализовати ова линија кода.
Тако да сада, како могу да применим функција кашаљ?
>> Ја могу воид кашаљ.
И још увек могу да у колико много пута желите да кашље.
Али, знате шта?
Ја сада могу пунт да каже.
>> Могу да позовем рећи са Реч кашаљ, пролазе у н.
И ако желим да се спроведе, само за забаву, кијање функција,
Могу да кијам неки број пута.
И ја могу задржати поновна употреба н, јер приметити да је м у овом контексту или обима
постоји само у оквиру ове функције.
>> И н у том контексту само постоји у овој функцији овде.
Па ћемо се вратити на ова питања обима.
И овде, ја ћу рећи, Ацхоо, а затим н пута, полу-дебелог црева.
>> А сада, само треба да позајмим Ове функције потписи овде.
Дакле, кашаљ је тачно.
Воид кијање је сада у праву.
>> И још само треба рећи.
Па ћу рећи, рецимо Стринг с, инт, полу-дебелог црева.
Па сам преко-конструисао ђавола из овог програма.
>> И то не мора да значи да је ово
шта треба да урадите приликом писања чак и најједноставнији програма.
Узети нешто што је очигледно веома једноставан, заиста кратко,
и поновно имплементира користећи превише код.
Али ћете заиста видети, и у Време осврнем на овим примерима,
и схватити, о, то су кораци узели смо у ствари генерализовати,
фактору нешто, све док на крају дана
мој код је заправо прилично разумно.
Јер ако желим да кашљем три а онда кијам три пута,
Једноставно ћу поново покренути ово, Програм се кашаљ, и покрените кашаљ.
И ја имам три кашља и три кија.
>> И то је основни парадигма, ако хоћете,
колико бисмо могли ићи у вези заправо спроводи програм.
Али хајде да видимо шта је то смо радили све ово време,
а шта неки од коначних комада стоје иза овог једноставном командом.
На крају дана, имамо био користећи цланг као наш преводилац.
Ми смо писали извор код, то претварање
преко цланг у машински код.
>> И смо користили Маке само да олакша наше типке тако
да не морамо да се сетим те бајалице од самог цланг.
Али оно што је Маке заправо ради?
И, заузврат, што је Цланг заправо ради?
>> Испоставило се да, иако смо поједностављени данашњи разговор речима,
узмете изворног кода, проћи га као улаз у компајлер, који вам даје
излаз машине код, Испоставило се да постоји
неколико различитих корака унутра.
И састављање деси да буде кишобран термин за гомила корака.
Али хајде да задиркују ово стварно брзо.
>> Испоставило се да смо радили више ствари сваки пут кад покренем програм,
или сваки пут кад састави програм данас.
Тако Препроцесирање се односи на Ово-- ништа у Ц програму,
као што ћемо опет и опет, који почиње са овим хасх симболом,
или хаштагот симбол овде, значи то је директива препроцессор.
То значи, у овом случају, хеј компјутер, уради нешто са овом фајлу
пре него што заправо саставити свој код.
>> У овом случају, хасх укључују јест, у суштини, Ц начин да каже,
хеј рачунар, иди садржај од ЦС50.х и налепите их овде.
Хеј рачунар, ићи добити Садржај стандардног ио.х,
где год да је на хард диск, налепите га овде.
Тако те ствари Први током предпроцесирања.
>> И кланг ли све ово за нас.
И то ради тако проклето брзо, нећеш ни
видети четири различите ствари које се дешавају.
Али то је први такав корак.
>> Шта се заправо дешава следеће?
Па, следећи званични корак је састављање.
И испоставило се да састављање програма
техницки знаци иде од изворни код, ствари имамо
писали данас, нешто зове скупштина код, нешто
да изгледа мало другачије.
>> И, у ствари, можемо то брзо видети.
Пусти ме заправо иде у моју ИДЕ.
Пусти ме напред и отворен хелло.ц, који је веома први програм са којим
почела је данас.
И пусти ме напред и покренути цланг А мало другачије, кланг-а, хелло.ц,
који се заправо догађа на дај ми још датотека хелло.с.
>> И онда ћемо вероватно никада поново видети ову врсту кода.
Ако узмете нижи ниво системи класа као ЦС61,
видећете много више ове врсте код.
Али ово је скупштина језика.
Ово је асемблер к86 да процесор који је у основи
ЦС50 САТА заправо разуме.
>> И загонетан као што је то види, то је нешто
рачунар прилично добро разуме.
Суб К, ово је одузимање.
Има покрета.
>> Има зове функција овде, х оринг, покрет, додатак, поп,
повратак.
Дакле, постоји нека веома инструкције ниског нивоа
да процесори разумеју да алудирао сам раније.
То је оно што Интел Инсиде.
>> Постоје обрасци нуле и јединице које
мап овима арцанели формулисана, али нешто добро по имену, упутства,
такорећи.
То је оно што се дешава када преводите свој код.
Добијате монтажа језика од тога, који
значи да је Трећи корак је да се окупе да скупштина код у, на крају,
машине цоде-- нуле и јединице, а не Текст који смо управо видели пре неколико тренутака.
>> Дакле, претходна обрада то финд и заменити, и неколико других ствари.
Састављање узима свој извор код из Ц, изворни код
да смо писали, у скупштини Код који смо управо погледао.
Монтажа потребно да Скупштина код на нула и јединица
да ЦПУ заиста ће разумеју на крају дана.
И повезивање је последњи корак што се дешава за нас-- опет,
тако брзо да ни не нотице-- да каже,
хеј рачунар, узети све нуле и они који
резултат састављање Давидов код, и његова основна функција у овом случају.
>> И хеј рачунар, иди све нула и јединица
да је особље ЦС50 написао у библиотеци ЦС50.
Мик оних у са Давид је.
И хеј рачунар, иди све нуле и оне које је неко други написао година
пре за принтф.
И додати су Инто тхе Цела ствар, тако да имамо
Имам своје нула и јединица, Тхе нуле и јединице ЦС50 особља,
принтф нуле и јединице, и све остало користимо.
>> сви они се заједно спојени у један програм који се зове, у овом случају, здраво.
Па надаље, ми ћемо само користим реч састављања.
И ми ћемо узети здраво за готово када кажемо, саставити свој програм, то значи,
хеј до пред-обраду, монтажу и повезивање.
Али заправо постоји нека сочна ствари тамо дешавало испод хаубе.
А нарочито ако вас гет цуриоус мало времена,
можете почети боде ароунд на овом нижем нивоу.
Али за сада, схватамо да међу Такеаваис за данас
су прилично једноставно почетак процеса,
добијања угодно нешто попут Хелло ворлд.
Заиста, већина онога што смо урадили данас сигурно неће потонути у супер брзо.
И биће потребно мало време, а неки пракса.
И шансе су, ви ће сортирати хтео само да удари тастатуру
или викати на екрану.
И све то је у реду.
Мада, можда покушати да не то раде у библиотеци толико.
>> И на крају, ви ћете бити у стању иако, за почетак
види обрасце, како у добром коду да сте написали и грешкама
да сте направили.
И слично процесу постаје ЕЦ или ЦА је као,
Ви ћете почети да боље и боље види ове обрасце,
и само решавању ваших сопствени проблеми коначно.
У међувремену, биће доста од нас да пружи вам подршку, и да те
кроз ово.
И у отписа-уп за све проблеме
ћете бити вођени кроз све команде
да ја сигурно знам из много пракси до сада,
али могу да лети над главом за сада.
И то је сасвим у реду.
>> Али, на крају, идеш да почне да види настају шеме.
И кад прођеш све од глупи детаљи, као заграда,
и цурли протезе, и полу-Црева, и ствари, искрено,
да није уопште интелектуално занимљива.
И то није циљ предузимање било уводна класу.
То су идеје које ће битно.
>> То су петље, а услови и функције,
и снажније апстракција, и факторинг кода,
и добар дизајн, а добро стил, и на крају исправност
од кода, то је на крају ће највише битно.
Тако следеће недеље, ми ћемо узети ово идеје које смо први пут видели у Сцратцх
и сада преведени на Ц. И ми ћемо почети
увести првог од Наравно реални света домаинс.
>> Ми ћемо се фокусирати на свету безбедности, и конкретније криптографије,
уметност кодирање информација.
И међу првима Проблеми Ви сами
ће доћи до писати даље играње са неким од синтаксе
и решавању неких логично Проблеми, на крају пре дуго,
је да заправо пењање, или шифрирање, и на крају дешифровање података.
И све што смо урадили данас, ће прилично ниска
ниво, само да омогући да се једног, један,
и још један корак ка горе писање још најзанимљивију код.
>> Дакле, више на тој следеће недеље.
>> [ВИДЕО РЕПРОДУКЦИЈА]
>> Шта можете ли ми рећи о задњи пут сте га видели?
Шта да ти кажем, стварно?
Мислим, то је као и свака друга пре производња проба,
осим што је нешто рекао на самом крају да заглављен са мном.
>> Ово је ЦС50.
>> То је рез сви, велики посао на пробу.
>> -То Је ручак?
>> Да, ти и ја могу зграбите сендвич у мало.
Дозволите ми да испитам са Давид стварно брзо.
Дејвид?
>> [Крај репродукције]