[Powered by Google Translate] Дејвид Џ MALAN: Сите во право.
Ова е CS50, и ова е крајот на недела две.
Ако очекувате да бидат гладни за околу ова време утре, знам дека ние ќе
да свика како мала група утре, четврток 01:15.
Има овој URL тука ако сакате да RSVP.
Просторот е ограничен, па молам прости ако форма е исполнета од страна на пат кога ќе
пополни оваа надвор.
Друга рачно иако тоа може да биде од интерес е ова.
>> Значи во само за времето еден месец, курсот ќе бидат ставени на располагање
сите пошироко преку edx, преку која луѓето на интернет ќе биде
можност да го следат заедно, се вклучи во текот доста активно, во факт.
Тие ќе биде со користење на CS50 апарати и CS50 дискутираат и поголем дел од
различни софтверски алатки, кои веќе биле со користење на овој семестар.
И една од иницијативите ние би сакале да ја преземат како експеримент оваа година
е да се види колку содржина можеме да ги претвориме во други зборуваат и
напишано јазици.
Па ако има интерес за учество во овој проект, при што
ние ќе обезбедиме Македонски записници и преводи за на курсот
предавања и шорцеви, семинари и делови и слично -
ако зборувате течно или пишувам течно некој друг јазик, ние би
сакаат да се вклучат во овој проект, при што ќе ги преземат една или повеќе од
видеа, преведувајќи ги во јазикот знаеш доста добро.
Да ви даде чувство на интерфејс, постои овој веб-базиран кориснички интерфејс
дека ние ќе биде со користење дека ќе создаде основа на графичката околина како оваа.
Ова ме настава некои Ноќта на вештерките пред.
И на десната страна има во црно до овие временски поштенски марки,
ќе видите разни нешта кои излегоа од устата тој ден.
А потоа под неа, ќе бидете во можност да се преведат на друг јазик.
Токму она што мапирање е меѓу нив, во овој случај, Англиски
и, да речеме, шпански.
Значи тоа е всушност многу лесен алатка.
Можете да ја премотам касетата и брзо напред многу лесно со кратенки на тастатурата.
Значи, ако би сакале да земат учество во овој експеримент и да имаат вашите зборови
види и прочита од потенцијално илјадници луѓе таму, Ве молиме да се чувствуваат
слободни да учествуваат.
>> Сега еден збор за маче од понеделник, да не би да се испрати премногу
страшно порака.
Сфаќаат дека работното време сугерираат и како делови предложат, на
Дизајнот на курсот е многу да се студенти соработка и
зборува да работат преку проблемот поставува и проблеми заедно.
И навистина линија само се сведува на, повторно, работа што во крајна линија
треба да ги достават треба да биде свој.
И така тоа е, сосема искрено - во работното време, тоа е сосема нормално -
Тоа е целосно да се очекува, дури и - да бидат во разговор со некои
пријатели до тебе.
Ако тој или таа се бори со некоја тема, а ти си како, ох, и нека
ми да ви даде увид во некои линија на кодот кој го напишав.
Тоа е во ред.
Што се случува.
И тоа е многу погодна, мислам, со процесот на учење.
Каде што линијата, пак, добива преминал е кога главата е вид на навалена над
тука за премногу секунди или минути за тоа навистина да има само
беше деблокира можност за твојот пријател.
И, секако, кога работите се разменуваат преку е-мејл и Dropbox и
слично, таму е на линија.
Па со сите средства, се чувствуваат удобно и се чувствуваат охрабрени да разговарате со пријателите
и соучениците за psets и многу повеќе.
И само сфатат дека она што на крајот ги достават навистина треба да биде
производ на вашата креација, а не некој друг.
>> Значи во иста насока на cuddly суштества, може да
знаат за овој човек овде.
Значи ова е horrifically вулгарен филм од пред неколку години.
Секој тука се гледа Spaceballs?
Во ред.
Па добар број тука.
Значи ова е нашата прекрасно академски начин на воведување денес конечно
идејата за криптографија.
И така една од доменот специфични проблеми за 2 pset, кои ќе дојдат
надвор доцна утре вечер, е да се нурне во светот на криптографијата, кои
е уметност на енкрипција или scrambling информации.
И овој на крајот се однесува на светот на безбедноста.
>> Сега безбедност за повеќето нас доаѓа во форма на прилично досаден механизми.
Сите од нас имаат кориснички имиња и лозинки.
И сите од нас имаат многу лоша кориснички имиња и лозинки, најверојатно.
Ако вашата лозинка е иста на повеќе веб-сајтови, кои веројатно не
најдобрата идеја, како ние ќе разговараме кон крајот семестар.
Ако вашата лозинка е напишано на леплива белешка - не е шега - на вашиот
монитор, и тоа не е секогаш најдобар дизајн но прилично честа
феномен.
И ако не сте го користите криптографија за да го криптирате вашите лозинки, тие се
особено ранливи.
Значи, ако мислите дека сте се супер паметни со еден скриени Word
документира некаде на вашиот хард диск кој ги има сите на вашите лозинки, но
тоа е во папката каде што никој нема да се погледне во, и тоа не е многу
безбедна механизам.
И уште па што pset 2 ќе се воведе е оваа уметност на криптографијата и
scrambling информации, така што работи како лозинки се
сите посигурни.
Па како да се мотивираат овој реалниот свет проблем со многу не-реалниот свет
сценарио, дозволете ми да ве запознаам со една од нашите омилени клипови тука од овој
филм, Spaceballs.
>> [Видео репродукција]
-Шлем, можете демон, што се случува?
Што ви се прави во мојата ќерка?
-Дозволете ми да се воведе брилијантен млад пластичен хирург, д-р Филип
Schlotkin, најголемиот нос работа човек во целиот
универзумот и Беверли Хилс.
-Твојата височество.
-Нос работа?
Јас не ги разбирам.
Таа веќе имаше нос работа.
Тоа беше слатко 16 присутни.
-Не, тоа не е она што мислите.
Тоа е многу, многу полошо.
Ако не ми даде комбинација на штит воздух, д-р Schlotkin ќе
даде вашата ќерка назад нејзината стара носот.
-Не!
Каде ти е тоа?
-Во ред.
Јас ќе кажам.
-Не, тато, бр.
Вие не мора.
-Ти си во право, драги мои.
Јас ќе го изгубиле Вашиот нов нос.
Но, јас не ќе им ја кажам комбинација без разлика што.
-Многу добро.
Д-р Schlotkin, дали вашето најлошото.
-Мојот задоволство.
-Не!
Чекај, чекај.
Јас ќе кажам.
-Знаев дека тоа ќе работат.
Добро, го даде на мене.
-Во комбинација е еден.
-Еден.
-Два.
-Три
-Три.
-Четири.
-Петка
-Пет.
-Значи комбинација е еден, два, три, четири, пет.
Тоа е stupidest комбинација што некогаш сум го слушнал во мојот живот.
Тоа е вид на работа идиот ќе мора на својот багаж.
Ти-благодариме, твојот височество.
-Што направи?
-Го исклучив ѕид.
-Не, не.
Можете исклучен целиот филм.
-Јас мора да притисне погрешна копче.
-Па, го стави назад.
Стави филмот назад.
-Да, г-дине.
Да, господине.
-Ајде да одиме, Erna.
Дојди, Гречен.
Се разбира дека знам дека сеуште ќе мора да ви сметка за ова.
-Па, таа функционира?
Каде е портата?
-Тој работел, господине.
Имаме комбинација.
-Велики.
Сега можеме да ги преземат сите последниот здив на свеж воздух од планетата Druidia.
Што е комбинација?
-Еден, два, три, четири, пет.
-Еден, два, три, четири, пет?
-Да.
-Тоа е неверојатно.
Јас имам истата комбинација на мојот багаж.
Подгответе Spaceball 1 за итно заминување.
-Да, г-дине.
-А промена на комбинација на мојот багаж.
-Ow!
[END видео репродукција]
>> Дејвид Џ MALAN: Еден зачудувачки филм треба сега сите се види.
Значи контекст тука е дека со несигурни податоци доаѓа можност да
шифрира и да се трка.
Па така ова, на пример, е пример на шифрирана порака.
Ова всушност кажува нешто на англиски јазик.
Но тоа не е јасно целосно очигледни.
И ние ќе доаѓаат полн круг денес да ги разграничат што оваа тајна
порака тука е.
Но, во реалниот свет на компјутери, работите дури и не изгледа како тие би можеле да
биде англиски фрази.
На пример, тоа е она што може да се најдат на стандарден Linux или Mac или
UNIX компјутер во датотека која беше еднаш едно време се нарекува лозинка датотека.
Денес, тоа е се пресели во други места.
Но, ако погледнете во право место на системот, ќе видите не само вашиот
корисничко име или дека други луѓе на системот, но ќе видите
шифрирана верзија на нивните лозинка.
Всушност, зборот криптата има сугерира дека следните работи е криптирана.
И оваа серија на навидум случајни букви и карактери и броеви и
итн може да се декриптира само со обично знае некои тајни -
тајна збор, тајна број.
И така, навистина, уметноста на криптографија на крајот се сведува на довербата на некои
сортирање и знаејќи нешто што некој друг го прави тоа.
Ние ќе се истражуваат оваа во малку повеќе детали денес и во pset да дојде.
>> И сега еден збор на Поминете / не.
Значи особено, како што некои од вас имаат нурна во 1 pset, апаратот и
многу нов свет за себе, сфати дека фрустрации и
конфузија и само технички тешкотии треба да се очекува.
Особено со првиот pset, каде што има толку многу нови, само добивање
запознаени со ls и CD и сите овие таинствени команди во нова средина.
И тоа е одделен од вистинските материјал и програмирање себе.
Па се реализира, исто така, дека постојат секако работното време кои постојат како
поддршка структура.
Делови започне ова доаѓа недела.
Но што е најважно, ако сте чувство само дека ова не е
светот за вас, сфаќаат дека тоа навистина само треба време.
И не беа за оваа можност години за мене за преземање на една класа
Поминете / не, искрено, јас никогаш не би се ни стапнал во училница.
И можете да го промените овој до, да речеме, на петтиот понеделник на курсот.
Значи, ако сте на работ сега, сфати дека наместо главата во некои други
води заедно, не сигурно сметаат дека само промена на Поминете / не.
Повторно, не е навистина оваа култура тука на Харвард за преземање на работите
Поминете / не бидејќи сите навистина сака да се постигне или overachieve.
Но, искрено, ова е прекрасен начин се обидува нешто што можеби не
бидат запознаени за вас.
И ќе заврши тоа во повеќето случаи сосема во ред, можеби
многу да ги изненади.
И во повеќе конкретни смисла, она што мислам дека Поминете / не генерално не,
особено како што можеби сте искусни со pset 0, ако сте се стави
во 10 часа, 15 часа, 25 часа во некои pset - и вие сте само удира
главата на ѕидот,
и станува супер доцна во ноќта,
но сте донесени во pset како 90% од патот,
знаете дека едноставно не можат да дознаам една работа -
Поминете / не навистина се на работ надвор од класа како оваа, каде што може да се најде
на среќно се каже во ред, знам дека тоа не е совршена.
Но јас работев мојот газ надвор од ова.
Јас сум прилично задоволен со тоа заврши.
И дека ќе одговори на очекувањата за Поминете / не.
Значи се задржи дека во умот.
>> Во ред.
Значи оние од вас кои се борат да го користите Универзитетот Харвард Wi-Fi знаете
дека има CS50 SSID, Wi-Fi конекција лебдат околу што ќе
би можеле да имаат подобра среќа за.
Тоа е малку ироничен дека лозинката за тоа - ако би сакал да се обиде
поврзување на овој за подобра брзина и ги споделите со нас, ако тоа не е подобро -
е еден, два, три, четири, пет, па сè до осум бидејќи осум е
посигурни од пет.
Значи, ако ви треба за Wi-Fi лозинка, поврзете се CS50 безжично тука.
Еден, два, три, четири, пет, шест, седум, осум.
И пост на CS50 Дискутирај ако сеуште имаш наизменичното поврзување прашања,
и ние ќе нека сили, кои се знаат за овој простор.
>> Во ред.
Значи брз закачка, особено за оние од вас кои се вентилатор момчиња или девојки
на сите нешта на Apple.
Она што јас откопани од неколку години назад беше оваа датотека тука, ilock.c, само за да
вид на направи повеќе конкретни и посложени некои од повеќе основни C
програми ние сме пишување.
Па јас отвори оваа датотека, ilock.c.
Тоа е на располагање на предавања страница за денес.
На левата страна, ќе видите долга листа на функции.
Значи колеги, кои го е создал овој напиша до голем број на функции,
повеќе од само главните.
Тој се користи целиот куп на библиотеки тука.
И ако почнеме лизгање низ, што е ова всушност е е многу
Прво, верувам, се бори за оригиналниот iPhone.
Кога си сакал да jailbreak оригиналниот iPhone, што значи untether
тоа од AT & T и всушност инсталирате посебен софтвер на него и прават работи
дека Apple не сака луѓето да прават -
добро, некој малку време да дознаам како точно тие би можеле да ги искористат
софтвер пропусти, грешки, грешки во софтверот на Apple.
И така се роди ilock.c.
Дека ако тоа Составувач на компјутер и инсталиран со излез на iPhone што
е поврзан со вашиот компјутер преку, на пример, USB кабел, ова ќе ви даде
административни или root привилегии на вашиот iPhone и да го направите доста
она што го сакате.
>> И така не беше оваа фасцинантна мачка и глушец игра помеѓу Apple и
на остатокот од светот, особено како тие, како и многу компании, обидете се да се заклучи
своите работи надолу така што само може да прави со него што тие имаат намера.
Но, благодарение на луѓе како овој и на нивното разбирање на ниско ниво
детали и, во овој случај, C програмирање и многу од познатите конструкции
дека ние сме почнале да играат со, вие сте во можност да навистина потпора на
хардвер на начин што ви одговара и не мора да значи некои правно лице.
Така на пример, немам поим што сето ова се прави.
Но GetVersion звучи прилично јасна.
И тоа изгледа како тоа е функција која овој човек напишал.
Земете некој вид на број како аргумент, не враќа ништо, но
се чини дека јамка со за јамка тука и ако состојба, ако состојба,
се скрши, и некако се однесува на верзијата на броеви.
Ако ние движете надолу -
иако многу од овие клучни зборови се случува да бидат нови, и има
едночудо функции тука ние никогаш не сум видел и може да не некогаш се види над
текот на семестарот -
на крајот на денот, ја следи истите правила и логиката дека ние сме
игра со досега.
Значи ова е премногу стари за да попуштат вашиот iPhone 3s или 4S или наскоро 5s, овие денови,
но знам дека сето тоа е многу произлегуваат од овој свет дека ние сме
нурна во.
>> Па ајде да ги разгледаме во малку повеќе едноставен пример.
Ова, само да се загрее со некои синтакса и некои други податоци
типот дека ние сме зборуваше за, но навистина не гледа во C. Значи ова е
фајл наречен positive1.c.
И по забелешките на врвот, тоа само бара корисникот да обезбеди
позитивен број.
Така, тоа е пример на не-додека јамка, што е убаво за корисникот интерактивни
програми, каде што треба да им кажам на корисникот да се направи нешто.
И ако тие не соработуваат, ќе се развикам нив или одбие нивниот придонес.
Случај во точка, јас идам да се направи линии 19 преку 24 се додека корисникот има
не ми даде позитивен број.
Сега ова детали тука on-line 18, зошто Изјавувам n над целата оваа
looping конструкција наспроти веднаш до линијата 22 каде што
всушност се грижи да се добие n?
Да?
[Беззвучен]
>> Дејвид Џ MALAN: Да, па ова прашање од опсегот.
И во рок лаик, што значи обемот однесуваат?
Да?
[Беззвучен]
Дејвид Џ MALAN: Можете ли да зборува малку погласно?
ЗВУЧНИК 1: Каде може да пристапите до одредена променлива.
Дејвид Џ MALAN: Совршен.
Каде можете да пристапите одредена променлива.
И генерално правило досега е дека обемот на некои
променливата е дефинирана од страна на најновите кадрави загради дека сте виделе.
И така во овој случај, ако сум направил грешка на прогласување n on-line 22,
таа линија ќе работат.
Јас ќе добие int, и јас би го стави во таа променлива n во линија 22.
Но кој линија од код сега ќе немаат поим што зборувам?
Значи 25, и испоставува 24, како и, бидејќи во овој случај, тоа е надвор
на тркалезните загради.
Па само малку непријатност, но многу лесно да се реши со едноставно прогласување
променлива надвор од самата функција.
>> Сега ќе видиме подоцна денес, може да оди еден чекор понатаму.
Па може дури да се добие малку мрзливи -
и тоа не е да се препорача, воопшто -
но дури и да се мрзливи и стави променлива глобално ниво, така да се каже не,
внатрешноста на функција, не внатрешноста на еден циклус, но во самата датотека, надвор
на сите функции што сум напишал, како што го направив тука on-line 15.
Но, ова е генерално се намуртен врз.
Но сфати дека ова е решение понекогаш до други проблеми, како што ќе
на крајот види.
Па за сега, ние ќе го оставиме вака.
Но, ајде да видиме дали можеме да го преработи уште еднаш ова само да започнат да изразуваат себеси на
малку поинаку.
>> Значи оваа програма, само за да биде јасно, е positive1.
Дозволете ми да оди напред тука и во мојот терминален прозорец направи positive1, Enter.
Подготвува, во ред.
Одам да се кандидира positive1, хит Enter.
Барам да ми даде позитивен цел број.
Јас ќе кажам -1.
Кои не работат.
0, 99, што се чини дека да се работи.
Можеби не најригорозните тест.
Но барем тоа е убаво разумност проверка дека сме на вистинскиот пат.
Па сега дозволете ми да оди напред и да се отвори верзија две од ова.
И она што е различно веќе?
Ги спроведува истото.
Но, она што е скокање како јасно различни овој пат?
Да, па ова bool во зелена боја.
Gedit истакна во зелено овој клучен збор познат како bool,
која е тип на податок.
Тоа не доаѓа вграден со сите верзии на В Вие треба да се вклучат во
специфични библиотека.
Во нашиот случај, јас вклучени CS50 библиотека, така што ние
имаат пристап до bool.
Но, во линија 18, ние се чини дека имаат Булова вредност тука наречен благодарен.
Па можев да се нарече нешто.
Но, јас го нарече благодарен само за да вид на пренесе некои семантичко значење.
Значи на почетокот на линијата 18, јас не сум очигледно благодарни затоа што
Булова вредност благодарен е иницијализиран на false, во согласност 18.
И тогаш, се чини она што го направив тука во линии 21 преку 23 се Тукушто
вид на препишува и повторно мојата логика.
Па нема функционално различни.
Но, во линија 22 сега, јас проверете дали int корисникот има обезбедено е поголема од
0, тогаш јас едноставно променете ја вредноста на благодарен на true.
И зошто да го направам тоа?
Бидејќи во линија 25, очигледно, јас одам да се провери состојба.
Дали овој циклус додека благодарен е лажна.
>> Па јас предлагам оваа како алтернатива на верзијата еден, бидејќи тоа е најмалку
малку повеќе интуитивна, можеби.
Тоа е малку повеќе втемелени на англиски јазик.
Затоа направете го следново додека не сте благодарни или додека благодарен е лажна.
И овој пат, исто така, јас очигледно не им е грижа да се сетам на она што корисникот внесе
во затоа известување нема променлива n.
Така, всушност, јас -
малку бела лага тука.
Функционално, на програмата е малку поинаква откако ќе се дојде до дното на
тоа, бидејќи јас не сум сеќавајќи се што n е.
Но јас сакав да покажат тука дека иако видовме GetInt и
GetString се користи од десната страна на знак за еднаквост досега, така што
ние се сеќаваме на вредноста, технички, тоа не е строго неопходно.
Ако за било која причина едноставно не се грижат за зачувување на вредноста, вие само сакате
да се провери вредноста, забележите дека ние едноставно може да се напише тоа како GetInt отворен
paren, во близина paren.
Таа функција ќе се врати на вредност, како ние сме биле изјава.
Тоа ќе ти го врати на инт.
И така, ако ментално мислам на ова случување, кога ќе напишете 99, GetInt
враќа бројот 99.
И така концептуално, тоа е како да мојот код, всушност ова.
Значи, ако 99 е навистина поголема од 0, тогаш благодарен станува вистина.
Потоа линија 25 сфаќа ooh, ние сме направиле бидејќи јас сум сега благодарен.
И во согласност 26, ние едноставно се каже, благодарам за позитивен цел број, без разлика на тоа
се случи да биде.
>> Сега ајде да направиме мала синтаксички шеќер тука, така да се каже.
Ајде да видиме дали можеме да се исчисти оваа линија 25 со овој трет и последен варијанса
во positive3.
Значи забележите Единствената разлика сега е она што линија код?
Да, па 25.
И ние не сме навистина видел овој трик само уште.
Но, ние не видите фантастичен точка во понеделникот, кој означува она?
Па не, или негацијата.
Така да Булова вредност и флип својата вредност.
Точно станува лажни.
Лажни станува вистина.
Значи ова, јас би им предложил е дури и малку повеќе интуитивна на начин на
пишувањето на кодот, бидејќи јас се уште се иницијализира благодарен на false.
Јас се уште го направите следново.
Јас во собата благодарен на точно кога ќе дојде време.
Но сега може да се навистина само преведе овој код вербално лево кон десно,
додека не благодарен.
Бидејќи Бенг, или фантастичен точка, означува поимот не, па додека
не благодарен.
>> Значи, повторно, ние не имаат воведено нови концепти сама за себе.
Ние разговаравме за Booleans назад кога игравме со нула.
Но сфати сега ние само може да почнете да пишувате нашиот код во
многу различни начини.
Значи особено во pset1, ако сте вид на се борат да дознаам начин да се
пишувам некои програмата, шансите се сте во среќа, бидејќи таму се случува да биде било
Бројот на решенија што може да се случи по.
На пример, ова е само три дури и за наједноставните програми.
Во ред.
И сега се потсетиме на Понеделник, тргнавме на оваа забелешка со враќање вредности.
Значи за прв пат, ние напиша програма која не само што мора главен,
Таа, исто така има свои сопствени функција што напишав тука.
Значи во согласност 31 до 34, јас сум спроведува коцка функција.
Тоа не е комплекс.
Тоа е само пати пати, во овој случај.
Но, она што е важно за тоа е дека јас сум земајќи влез во облик на и
Јас сум враќање излез во форма на пати пати.
>> Па сега имам способност, слично како јас се користи да со printf сам, да се јавите
оваа функција со повикување на коцка функција.
И коцка функција зема некои влез.
И коцка функцијата враќа некои излез.
И така од друга страна, printf само направи нешто.
Таа не се врати нешто што ние се грижи за тоа - иако, како
настрана, тоа не врати вредност.
Вие само генерално ги игнорираат.
Printf само направи нешто.
Тоа беше пропратен ефект на печатење на екранот.
За разлика од тука, имаме коцка функција, која
всушност се враќа нешто.
>> Значи ова е генерално -
за оние кои се запознаени со тоа, тоа е прилично јасна идеја.
Но, за оние кои се помалку запознаени со оваа идеја за полагање на влезови и добивање
назад излези, ајде да се обидеме само нешто супер едноставен.
Дали некој удобно доаѓа на сцената кратко?
Треба да се биде удобно со камера за вас, како добро.
Да.
Океј, она што е вашето име?
KEN: Кен.
Дејвид Џ MALAN: Кен.
Добро, Кен.
Ајде нагоре.
Па Кен ќе биде во функција на сорти тука.
И ајде да одиме напред и да го направите тоа.
Да се ​​добие малку фенси.
Убаво да ви се исполнат.
Добредојдовте во центарот на вниманието.
Во ред.
Да го погоди ова копче тука.
Во ред.
Значи тука имате модерна таблата.
И она што сум е главната функција, на пример.
И јас немаат iPad во мојата рака.
Јас навистина не се сеќавам како да - и, всушност, не може да се каже.
Јас навистина не имаат добри ракопис.
И поради тоа, сакам да печати нешто на екранот за мене.
>> Па јас сум се главната програма.
И јас идам да имате велат дека ова со пишување на тоа во мојата пилешки нула и
тогаш ви поминува влез.
Па како глупо иако оваа вежба е, идејата на функции и нарекувајќи
функција и се враќа на функцијата навистина се сведува на тоа.
Јас сум главен.
Имам само напишани printf ("нешто") на екранот.
Јас сум водење на оваа програма.
И штом printf добива нарекува, тоа трае еден аргумент - или еден параметар,
понекогаш -
помеѓу двојни наводници.
Тука е тој аргумент.
Јас сум го поминува на Кен.
Сега тој е црна кутија напишани некои број на години што очигледно
само знае како да се печати работи на екранот.
>> Значи, извршување.
Тоа не е лошо.
Значи, многу добар.
Па сега Кен е направено извршување.
Дали тој треба да ме предаде ништо назад?
Значи не дека ние сме виделе досега.
Повторно, printf всушност не се врати на број.
Но, ние ќе го игнорираат тоа за сега, бидејќи ние никогаш не сте го користеле.
Значи тоа е тоа за Кен.
Па сега главната враќа за извршување -
Главната презема контрола на програмата повторно бидејќи таа линија на кодот,
printf, е направено извршување.
И ние одиме за нашата начин извршување на она што другите линии се таму.
>> Во ред.
Па сега ајде да се обиде малку поинаков пример.
И овој пат тука, ајде прво го исчистите екранот овде.
И овој пат, ние ќе го стори местење Рубикова коцка функција.
Но овој пат, очекувам излезна вредност.
Значи, да оди напред и да го направите тоа.
Па сега имам една линија од код кој вели x = коцка (x).
Така всушност let's -
на линија код, се потсетиме, изгледа вака.
x = коцка (x).
Па, како е ова се случува на работа?
Значи, да оди напред и да ви даде бел екран повторно.
И јас идам да пишувам сега одредување на вредноста на x, која во овој момент во
време се случува да бидат, да речеме, 2, да го чува едноставна.
Значи имам напишано долу на парче хартија вредноста на 2,
што е мое вредност х.
Јас го предаде на Кен.
KEN: И јас само пишувам одговорот?
Дејвид Џ MALAN: Да, да, само напиши одговорот.
Во ред.
И сега тој има да ми се вратат нешто.
Значи -
совршена.
Убаво segue.
>> Па сега тој ми подава назад вредност од 8, во овој случај.
И што да правам со неа?
Па, всушност, ајде да видиме.
Го добивате ова право.
Што сум јас случува да се направи со неа?
Сега ќе одам да ја искористам оваа вредност, а всушност таа продавница во оние
исто битови во меморијата.
Но, огласот, јас сум вид на борба тука.
Јас сум малку збунет, бидејќи каде можам да всушност пишува вредноста на x?
Затоа што сум само направено е физички страна Кен парче хартија
кој имаше вредност 2, кој беше х.
И навистина, тоа е токму она што се случува.
Значи излегува дека кога ќе се јавите на функција, и ќе помине во расправија
како "Здраво свету" или да помине во расправија како 2, генерално, ти си
поминува во копија на тој аргумент.
И така јас како што запиша број 2 тука и му го на Кен, а тоа мора
значи дека сè уште имам копија од вредност 2 некаде.
Бидејќи навистина, сега дека сум добил назад вредност 8, јас треба да се врати во
RAM меморија, а всушност ги запишувам 8 каде што некогаш имале бројот 2.
>> Така визуелно сеќавам на овој поим за полагање во буквално
копија од вредност.
Кен прави неговата работа, рацете ми врати нешто - во овој случај,
вредност како 8.
А потоа морам да направам нешто со таа вредност ако
сакате да ја задржи околу.
Значи сето ова ќе биде сите премногу запознаен пред долго.
Ви благодарам многу за оваа демо тука, Кен.
Во ред.
Многу добро направено.
Да видиме како тоа на крајот се однесува на некои од функцијата
повик дека ние сме биле прави тука.
Па дозволете ми да оди напред и да ни донесе назад во местење Рубикова коцка пример тука.
И ќе забележите дека ако сакаме да всушност започнете преземањето ова понатаму, ние ќе
мора да биде свесен за фактот дека бројот x тоа е се помина во
тука е различно од она што всушност се донесе во функција.
Значи, повторно, ова го донесува копија ќе стане доста
соодветен за само еден миг.
>> Па ајде да ги разгледаме во нешто што сосема не работат и уште.
Одам да се оди напред и да се отвори една третина кабриолет пример, кој
е недостатоци по природа.
И се вика buggy3, а тоа спроведува Замена функција.
Значи тука имаме главна функција што x и y произволно иницијализиран на
1 и 2, соодветно.
Ние може да се користи GetInt, но ние само треба едноставна вежба.
Така, тоа е хард-кодирани како 1 и 2.
Во линии 21 и 22, што очигледно испечатите x и y, по еден на линија.
Потоа, на линија 23, тврдам јас сум Замена овие вредности, точка, точка, точка.
Јас очигледно се јавите на функција во линија 24 нарече swap
кој ги зема два аргументи.
Тоа е целосно legit за функции да се земе два аргументи.
Видовме printf го направи тоа веќе.
Значи swap очигледно зема x и y.
И како што сугерира името, се надевам дека тоа нема да
разменуваат овие две вредности.
Па тогаш тврдам на линија 25, заменети.
И јас сепаратите x и y под претпоставка дека
тие навистина биле заменети.
Но, ако јас всушност ја извршите оваа програма -
дозволете ми да се отвори прозорецот на терминалот.
Дозволете ми да се направи buggy3.
Како што сугерира името, ова не се случува да се заврши добро.
Бидејќи кога ќе притиснете ентер, забележите дека x е 1.
y е 2.
А сепак на крајот на програмата, тие се уште се, всушност, иста.
>> Па врз основа на демонстрација токму сега со Ken, она што всушност се случува?
Па, ајде да се нурне во оваа swap функција.
Тоа е супер кратко.
Тоа е само неколку линии на код долго.
Но она што е суштински проблем врз основа на едноставни приказна раскажана
се тука со Кен?
Зошто е трампа скршени?
[Беззвучен]
Точно.
Па ние сме чување на копија не, променливата себе.
Со други зборови, swap очигледно зема два аргументи, на инт.
И тоа е произволно наречен a и b.
И до тука, јас сум донесен во x и y, кои се соодветно 1 и 2.
Но, јас не сум буквално поминува во х.
Јас не сум буквално поминува во y.
Јас сум поминува копија на x и копија од y.
Тоа е како речиси како да сте копирани и атипичен во трампа на вредности кои
сакате да всушност манипулира.
Значи, ако тоа е случај, кога, на програмата, проектот извршување
линија 35, а потоа 36 -
кога ќе стигнете до линијата 37, во овој момент во приказната, она што е вредноста на?
Во овој момент во приказната, линија 37, што е вредноста на во овој момент?
Па тоа само треба да биде 1.
Нели?
Бидејќи х беше донесен како првиот аргумент.
И оваа функција само произволно повикува својот прв аргумент, а.
Слично е y, вториот аргумент.
И тоа е само произволно повикувајќи вториот аргумент б.
>> Сега оваа дихотомија е всушност прилично едноставно се објаснува.
Размисли за тоа.
Никој од нас не се сретна со лицето кое го напиша printf.
Па сигурно, тој или таа нема идеја што нашите променливи 30 години подоцна се случува
да се нарече.
Па има да биде разлика помеѓу она што вие го викате променливи во
функции сте пишување и она што вие го викате променливи во функциите си
повик или користите.
Значи со други зборови, имам напишано моите променливи како x и y.
Но, ако некој друг го напишал на swap функција, тој или таа сигурно
не би знаеле што ми променливи се случува да се нарече.
Така сфаќаат дека ова е зошто ти мораш оваа двојност на имиња.
Технички, би можел да го правиме ова преку случајност.
Но тие се уште ќе биде предадена во примероци.
Тоа само ќе биде чиста случајност естетски ако тоа лицето кое го напиша
swap се користи истите имиња.
>> Во ред.
Па во овој момент во приказната, линија 37, а е 1.
б е 2.
И сега продолжи да ги трампа.
Па прво на сите, дозволете ми да всушност го направите ова многу едноставно.
Јас не знам што овие три линии на код се прави.
Дозволете ми да го направите тоа.
б добива.
на добива б.
Готово.
Зошто е ова скршени, логично?
Тоа е вид на интуитивен работа, нели?
Значи станува б.
И б станува.
Но, проблемот е дека веднаш штом линија 37 извршува, што е
вредноста на a и b?
Истата, 1.
Затоа што се clobbered, така да се каже, сте ги промениле б да се изедначи со.
Значи еднаш линија 37 е погубен, тоа е одлично.
Вие сега имаат две копии на бројот 1 во внатрешноста на оваа функција.
Па тогаш кога ќе се каже во согласност 38, а добива б, добро, ти си вид на зезнав.
Бидејќи сте само давање 1-1.
Сте вид на изгубени ја вредноста што се грижи за.
>> Значи во оригиналната верзија на ова, забележуваат она што го направив.
Наместо тоа имаше трета линија на кодот кој изгледа вака.
Изјавувам привремена променлива - tmp е многу заедничко име
за привремена променлива.
Тоа е int бидејќи мора да одговара на она што сакам да се направи копија на.
Јас чување на копија од внатрешноста на мали. Значи еднаш линија 37 ја извршува,
вредноста на е -
брзо разумност провери -
1.
Вредноста на b е 2.
И вредноста на мали, исто така 1.
Па сега јас изврши линија 38.
Значи еднаш линија 38 извршува, а се нафрла врз вредноста на b.
И б е 2.
Значи, сега 2.
Па во овој момент во приказната, е 2, б е 2,
и мали е 1.
Па сега логично, можеме вредност само одеднаш tmp е во б.
И ние ќе завршиш.
>> Значи ние сме реши тој проблем.
За жал, кога ќе ја извршите оваа програма во оваа форма, тоа всушност не трампа
никакви вредности.
Но, да биде јасно, зошто?
Јас фиксна логички проблем од само еден миг пред.
Но, повторно, ако јас ја извршите оваа програма, x и y останат непроменети до крајот на
на програмата извршување.
[Беззвучен]
Дејвид Џ MALAN: Па ние не се вратија ништо.
Значи тоа е вистина.
Но излегува дека има малку проблем тука, бидејќи досега, на
Единственото нешто што ние сме биле во можност да се врати е една работа.
И ова е ограничување на C. Можете само да се вратат навистина една вредност,
во кој случај, јас сум вид на заглавени тука
затоа што може да се врати на нова вредност на x или би можел да се врати на
нова вредност на y.
Но сакам и назад.
Па враќање не е едноставно решение овде.
Но, проблемот фундаментално е зошто?
Што ние всушност сменил?
a и b.
Но, a и b се копии на x и y, што значи ние само го направи сето ова
работа - ние само трошат како три минути од разговорот за размена
функција и сите три од овие променливи.
И тоа е одлично, совршено точно во изолација.
Но и обемот на b само што е во овие линии.
Па само како за телефонска линија, ако пријават целобројна i внатре во за
јамка - Слично на тоа, ако сте прогласување a и b внатрешноста на функција која
што сум напишал, тие се само валиден внатре на таа функција.
Што значи штом трампа е направено извршување и одиме од линија 24 до
линија 25, x и y не се менуваат на сите.
Вие само потроши целина многу време Замена копии на променливи.
>> Значи излегува дека решението на ова е, всушност, не-очигледно.
Тоа не е сосема доволно за да се вратите вредности, бидејќи можеме да
само се врати една вредност.
И јас навистина не сакате да се разменуваат и x и y во исто време.
Па ние ќе се вратам на тоа.
Но, за сега, да сфатат дека ова прашање во основа произлегува од фактот
што a и b се копии.
И тие се во своите опсегот.
Па, ајде да се обидеме да се реши овој на некој начин.
Дозволете ми, всушност, дојдете назад тука и се отвори, да речеме, на четвртата варијанта
на ова, buggy4.
А што е ова?
Ова е слично, но поедноставно проблем да се погледне во пред да земе прободе во
решавање на тоа.
Оваа програма се нарекува прираст.
И тоа очигледно иницијализира цел број x до 1 во согласност 18.
Јас тогаш тврдат дека x е 1.
Јас тогаш тврдат зголемување,, точка, точка, точка.
Јас тогаш се јавите прираст.
Но, тогаш во линии 22 и 23, тврдам тоа е се зголемува.
Тврдам x е сега што и да е, 2 веројатно.
>> Но оваа програма е кабриолет.
Што е проблемот?
Да?
[Беззвучен]
Дејвид Џ MALAN: Токму така.
Значи x е прогласена очигледно on-line 18.
Што е внатре кадрави загради главниот е.
Значи едноставен одговор е дека, добро, x постои тука.
Тоа не постои во линија 32.
Значи оваа програма всушност дури и не ќе ги собере.
На компајлерот, кога се обидувам составувањето на овој законик, се случува да се развикам на мене
за некои непријавена идентификатор или нешто во таа насока.
Всушност, ајде да се обидеме.
Ова е да се направи buggy4.
Ете го.
Употреба на непријавена идентификатор x во линија 32.
А всушност, да бидеме поексплицитни тука денес, така што ова е корисно во
работното време и дома.
Забележете дека тоа е малку cryptically напишано.
Но, фактот дека ѕвекот има викна на нас, велејќи
buggy4.c: 32:5, е всушност корисно.
Тоа значи дека грешката е на линија 32 на карактер позиција пет.
Значи еден, два, три, четири, пет.
Тоа е, всушност, каде е проблемот.
А исто така и да ги држи во умот на работното време и дома, јас сум среќен тука.
Имам една грешка.
Тоа ќе биде релативно лесно да се поправи.
Но, ако добиете целиот екран полн со огромна пораки за грешки, повторно,
сфатат дека bottommost еден само може да биде симптоматично
на врвниот оние.
Значи секогаш бркаат надолу грешки од врвот надолу.
Бидејќи таму само може да биде Daisy-синџир ефект, што се сте укажува на
имаат начин повеќе проблеми отколку што навистина го прават.
>> Па, како би можеле да го надминете овој, ако мојата цел е да прираст x?
Што е тоа?
Во ред.
Значи можеме да направиме x глобален.
Да го земеме на кратенката што предупреди за порано.
Но, подлец, ние само треба брз лек.
Па да речеме int x се тука.
Тоа го прави x глобален.
Па сега главната има пристап до него.
И прираст има пристап до него.
И така нека ме оди напред и да ги собере на оваа сега.
Направете buggy4, Enter.
Чини да ги собере сега.
Ајде да се кандидира buggy4, и се чини дека всушност работат.
Сега ова е една од овие работи -
направите како што велам, а не како што правам јас, како јас сум само направено овде.
Бидејќи во принцип, нашите програми се случува да добиете многу повеќе интересни и
многу повеќе од тоа.
И ако вашиот решение за проблемите на животот е само ах, стави сите
променливи на врвот на вашата датотека, многу брзо се програми се
horrifically тешко да се управуваат.
Станува сè потешко да смислат нова променлива имиња.
Станува сè потешко да се разбере она што променлива што прави.
>> И така во целина, ова не е добро решение.
Значи, да се направи ова подобро.
Ние не сакаме да се користи глобалната променлива тука.
Јас сакам за зголемување х.
Па можев очигледно -
на крајот на денот, тоа е вид на глупо приказна, бидејќи ние само го направите тоа.
Но, ако јас не знам за тоа оператор, или јас не му беше дозволено да
промените во главната себе, како поинаку би можел да се спроведе Кен овде, овој
време не се коцка, но за зголемување?
Како да си ги променам тоа нешто тука?
Да.
[Беззвучен]
Дејвид Џ MALAN: Океј, добро.
Па зошто да не можам да помине во х?
А потоа наместо да ја вратат, зошто не јас само се враќа x + 1?
Сега, уште неколку работи треба да се променат тука.
Јас сум на вистинскиот пат.
Што друго ми е потребно да tweak?
Некој друг.
Да?
[Беззвучен]
Дејвид Џ MALAN: Јас треба да се промени враќање тип на прираст
бидејќи тоа не е неважечки.
Празнина не значи ништо е се врати.
Но, јасно, сега тоа е.
Значи ова треба да се промени за да int да бидат во согласност со она што
Јас сум, всушност враќање.
>> Сега нешто друго се уште е кабриолет тука.
Да?
[Беззвучен]
Дејвид Џ MALAN: Значи ми треба за зголемување х?
[Беззвучен]
Дејвид Џ MALAN: Ах, па затоа треба да помине х.
Па јас треба да направите тука.
Значи прототип, морам да го промените ова до овде.
Значи ова треба да стане int.
Ова треба да стане -
хм.
Јас всушност имаат грешки овде долу.
Да го надминете овој прво.
Што треба ова всушност ќе биде?
Па тоа е мора да биде int нешто.
Тоа може да биде х.
Но, искрено, ако почне повикувајќи на сите ваши променливи x, тоа се случува да се добие
помалку и помалку јасно кој е кој.
Па ајде само произволно да изберете различни именување конвенција за мојата
помошник функции, функции јас пишувам.
Ние ќе го наречеме.
Или би можеле да го наречеме - ајде да ги наречеме тоа even_number да биде уште поексплицитна.
Па тогаш мора да се врати без разлика на бројот е плус 1.
И сега морам да се промени една друга работа се тука и еден
друга работа тука.
Што треба да се промени на линија 21 првиот?
Морам да го доделите до x.
Па јас не може само да се јавите прираст x.
Ми треба да се потсетиме на одговор со промена на вредноста на x за
на левата страна.
И иако x е сега на лево и десно, и тоа е сосема во ред, бидејќи
на десната страна добива извршува првиот потоа добива plopped во левата
рака работа, x во овој случај.
А потоа на крај, тоа е лесен фикс сега.
Ова само треба да одговара она што е долу.
Int број.
>> Во ред.
Па еден куп на промени за навистина глупаво функција.
Но, претставник на она што ние повеќе ќе сакате да го направите.
Така осигурајте се buggy4.
Сум зезнав некаде.
О, Боже.
Пет грешки во, како, на шест-лајн програма.
Значи она што не е во ред на линија 18, карактер 5?
Во ред.
Па морам да пријават тоа int.
Во ред.
Да видиме, целиот куп на други грешки.
Oh my god.
19, 18, 21.
Но, повторно, ајде да го исчистите екранот -
Контрола L тука - и прегласувањето ѕвекот.
Значи пет проблеми е всушност само оној.
Па сега ајде да се кандидира buggy4, Enter.
Whew.
x се зголемува правилно.
>> Во ред.
Било какви прашања за тоа како да прираст броеви?
Да?
ЗВУЧНИК 2: Зошто е тоа што вие само може да го промени на X да ја број во променлива
име и тоа ќе знаеме на што мислиш?
Дејвид Џ MALAN: Добро прашање.
Како е тоа што јас само може да го промени на X да ја бројот и на програмата ќе знаете
веднаш?
Значи, повторно, мислам на тоа како оваа апстракција.
Значи, ако јас сум главен и Кен е поединечната, искрено, не ми е грижа
што Кен повикува неговите iPad.
Не ми е гајле што тој го нарекува нешто што има врска со неговата имплементација
на оваа функционалност.
Значи ова е имплементација детали што, главно, не
треба да се грижат.
И така едноставно менување постојано внатрешноста на функција, бројот тука
и бројот тука, се што е потребно толку долго како што прекомпајлирате.
Тоа е вид на како, ако мислите дека за тоа - многу од нас, оние од вас со возачот
лиценци кои сте управувано, или ако сте дури и управувано во автомобил -
повеќето од нас немаат идеја како автомобил работи под хаубата.
И буквално, ако се отвори капакот на моторот, повеќето од нас - мене доручек -
не се случува да навистина знае она што го барате.
Вид како може да се чувствуваат со нешто како ова право сега.
Но, ние навистина не треба да се грижи како автомобил работи.
Ние не треба да се грижи што сите прачки и клипови и кабли внатрешноста на
автомобилот се всушност прави.
>> Значи нешто како она што вие го викате на клипот не е важно
тука во овој случај.
Истата идеја.
Да?
[Беззвучен]
Дејвид Џ MALAN: Ако имаше повеќе намени на променливата Ха момент пред,
вас, програмер, ќе треба да ги промените насекаде.
Или вие буквално може да направи датотека, Menu, а потоа Најдете / Заменете,
нешто слично.
Но, ви се случува да треба да се направи оние промени себе си.
Мора да биде конзистентна.
[Беззвучен]
Дејвид Џ MALAN: А особено ред како овде?
Ако ова беше int друг број?
Да.
Па цел е важно кога ќе се јавите на функција.
Значи, ако јас се јавуваат прираст тука со нешто запирка нешто,
има директна мапирање.
Првиот променлива, што се вика, се прави копија на првиот
аргумент овде.
За жал, ова не треба да биде заграда.
Вториот аргумент линии со втората.
>> Така да, да, прашања.
Во ред.
Жал ми требаше долго начин да стигнете таму.
Други прашања?
Во ред.
Значи, да видиме ако не можеме да наслика слика на она што всушност се случува
тука под хауба, така да се каже.
Значи ова е правоаголник кои би можеле да претставуваат меморијата на вашиот компјутер.
Па дури и ако немаат идеја како меморија работи или како RAM меморија дела, барем
претпоставиме дека имате гроздовете на тоа овие денови.
Имаш мегабајти од неа.
Имаш гигабајти на неа.
И знаеме од недела нула дека бајт е само она што?
8 бита.
Право, па 8 нули и оние.
Значи, ако вашиот компјутер има свирка на RAM меморија, две свирки на RAM меморија овие денови, имате
милијарди денари или 2 милијарди бајти меморија, или околу 8 милијарди евра или 16 милијарди
битови, во внатрешноста на вашиот компјутер.
Сега за разлика од малку волнени Вили пример, тоа не е магнетни честички
обично повеќе.
Сè повеќе, во лап-топ компјутери во најмала рака, тоа е цврста состојба дискови, SSDs, дека
само немаат подвижни делови.
Тоа е сите електронски.
Сето ова е електрична енергија врз основа.
Така што мислам, иако, на овој правоаголник како само претставуваат еден или два
гигабајти на меморија што го имате.
>> Па тоа е дел од меморијата.
Сега во светот на компјутерски науки има вид на поделено надвор парчиња
меморија за да направите различни нешта.
Така на пример, ако ова е RAM меморија на вашиот компјутер - како што е предложено од страна на
правоаголник таму - Излегува дека од Конвенцијата, на врвот на вашата RAM меморија, така
да зборуваат, обично она што се нарекува текст сегмент.
Тоа се нули и оние кои се составени.
Значи, кога ние погледна под хаубата во она што a.out е, сите
на нули и оние -
кога ќе ја стартувате програмата, оние нули и оние кои се вчитуваат од вашиот хард
возење во нешто што се нарекува RAM меморија.
И во RAM меморија, тие се стави на врвот.
Сега пак, имате други работи.
Иницијализира податоците, деиницијализира податоци.
Овие две делови од меморија се однесува на глобални променливи, што
не често ги користат.
Но, понекогаш ако не, тие завршуваат таму, како и.
Потоа, тука е некои други работи.
Животната средина променливи, кои ние не ќе потроши многу време на.
Но, тогаш две важни нешта што ќе се врати во текот на овој
семестар, магацинот и грамада.
>> Па повеќето од меморијата на вашиот компјутер е резервирана кога водење на програма за
нешто што се нарекува магацинот и нешто што се нарекува куп.
И ние нема да се зборува за грамада денес, но ние ќе
зборува за оџак.
И на магацинот е замислена да апелирам до визуелна како јадење салата
оброк пепелниците во Mather куќа, или каде и да се случи да биде, каде што
Јадење сала персонал ги чисти секој ден.
Тие ги магацинот до од подот на нагоре.
И слично, во знак на сеќавање, не е идејата за ставање нешто на
магацинот, стави нешто на магацинот, стави нешто на магацинот.
И она што се подразбира под тоа?
Па, ајде да зумирате на само долната половина на оваа слика, на вашиот компјутер
RAM меморија, да предложи следниве.
Излегува дека кога ќе ја стартувате програмата како a.out или здраво, без оглед на
на програмата е дека сте го напишале,
повторно, оние нули и оние кои се вчитуваат од вашиот хард диск - што е
долгорочно чување, останува таму дури и кога ќе повлечете го приклучокот -
натоварена во RAM меморија.
RAM меморија е побрз од хард дискови.
Тоа е помал од хард дискови.
Но, тоа е каде програми живеат додека си ги извршува.
>> Па ќе кликнете два пати на програмата на Mac или PC - тоа е вчитана од
хард диск во RAM меморија.
Штом тоа е натоварена во RAM меморија, нули и оние одат на патот врвот,
т.н. текст сегмент.
Но, тогаш штом вашата програма всушност почнува да трча, главната
функција се нарекува.
И главни, како што видовме, често има локални променливи.
И има ints и стрингови и знаци и слично.
Значи, ако вашата програма кои сте ги напишале или програма која имате
двојно кликнавте користи некои променливи во внатрешноста на главниот, тие завршуваат во
дното од вашиот магацинот на меморија, така да се каже.
Сега поконкретно, што значи ова всушност значи?
Ова само значи дека ако ние се случува да бројот на работи -
ако ние се случува да бројот на бајти на RAM меморија во вашиот компјутер, забележите дека
ова може да биде бајт бројот нула.
Ова може да биде бајт број еден, два, три, четири, пет, шест, сите
пат до допаѓа -
2 милијарди ќе бидат сите на патот до таму на врвот.
Значи со други зборови, кога зборуваме за RAM меморија или мемориската во однос на бајти, тоа
само значи дека некој се одлучи што да се нумерира секоја од
оние делови од меморијата.
>> Значи, кога ви треба 32 бита за int, или треба 8 бита за знак, каде
тие завршуваат во меморија?
И концептуално, тие само се заокружи на дното на оваа
нешто што се нарекува на магацинот.
Но, она што е интересно сега е кога главниот повикува функција.
Да претпоставиме функција наречена foo, само произволна име.
Што се случува е главниот е на дното на оваа магацинот на меморија.
Foo сега е ставен на врвот на главната меморија.
Значи сите локални променливи кои foo е заврши вид на концептуално над
оние во главниот.
Ако foo повици друга функција наречена бар, овие променливи завршуваат тука.
Ако бар повици нешто друго, тука, тука, тука.
Значи она што е интересно за водење на програмата е дека ќе се јавите функции,
и како тие функции повик функции, и како тие функции повик функции,
ќе се изгради до овој магацинот на функции во меморијата.
И само еднаш функција се враќа да започнете добивање дека меморијата назад.
Значи еден од најлесните начини да се кандидира на меморија во компјутерот програмата е да се
пишува функции кои никогаш не се врати.
>> Така на пример, да покажат колку со
намерно кабриолет програма.
Дозволете ми да оди напред и да # се , int главната (празно).
И јас ќе одам да направите додека (2> 1), која, најверојатно, нема да некогаш
промена на нас.
И дозволете ми да оди напред сега и не printf.
Всушност, тоа ќе биде помалку визуелно интересна.
Ајде да го направите тоа.
За int (i = 0; з> 0).
Да се ​​направи оваа грешка, i + +.
И нека не printf тука.
Да се ​​практикуваат она што го проповеда.
Ајде да се метода.
Празнина хор, и ние ќе каже int i.
И тогаш ќе одам да се каже, printf -
ох, да се направи овој поинтересна.
Да, всушност, не се печати ништо на сите.
Ајде само го направите тоа.
Рефрен (i).
>> Во ред.
Значи ова е грешка, бидејќи зошто?
Јас сум измислувам, како и да одам, бидејќи на програмата всушност не направи ништо
на интерес.
Но тоа не е целта.
Целта е да се напише програма чија главна функција го прави она што, очигледно?
Повик себе.
И всушност, ние не треба јамка.
Ајде дури поедностави оваа само за да не се губи пред очите на навистина
основните бубачка.
Главната повици хорот да пее некои хор.
Тогаш јас направив нешто глупаво, и морав хорот повик хор, затоа што претпоставува
некој друг ќе беше да се имплементира можеби.
И сега тоа не се случува да се собере уште.
Јас треба да се направи она што?
Ми треба прототип, се сеќавам.
Па јас треба да имаат до тука празнина хор (int i);.
>> Па сега, ако одам долу тука -
всушност, да го користат поголем прозорец.
Ајде да одиме напред и да направат хор.
Употреба на неидентификувани declarer i.
Ох, тоа е глупаво.
Ние не треба на аргумент.
Ајде само го направите тоа.
Сакал да имавме отворени на овој начин.
Тоа би било многу полесно програма за пишување.
Па таму.
Сега ајде да одиме во текот на мојот терминален прозорец, прегласување ѕвекот.
И тука ќе одиме.
Тоа беше навистина брзо.
Што, всушност, само се случи, иако?
Па, сега јас ќе додадете печати линија, така што може да се види.
Па дозволете ми да кажам printf, да речеме, јас сум тука.
Океј, не променливи, ние ќе го оставиме тоа на тој начин.
Дозволете ми повторно да се кандидира направи.
Дозволете ми да прегласување хор.
И ајде.
Продолжувам да одам.
Како настрана, зошто не го урна уште?
Сегментација грешка се случи супер брз порано.
[Беззвучен]
Дејвид Џ MALAN: Токму така.
Значи тоа е потребно време да се печати.
Тоа само ги зема повеќе работа на дел на компјутерот.
И таму е.
Сегментација на вина.
>> Значи забележите колку брзо програми работат.
Ако не сте печатење ништо, супер брз.
Но ние сепак добив оваа сегментација на вина, бидејќи она што се случува?
Па, ако мислите дека за тоа меморијата на вашиот компјутер е изнесена, ова
се случува да бидат главни.
Но тука -
ајде да се јавите овој хор, и ајде да ги наречеме овој хор.
И сега, ако го направам мојата естетика во право, ова е само случува да се каже хор,
хор, хор, хор, хор, хор, хор, реклама nauseum.
И на крајот, она што ќе се случи?
Ако големата слика буквално е тоа, што едноставно се случува концептуално?
Магацинот пречекорување на грамада.
Или уште полошо, ти само лизгањето сè, вклучувајќи го и текстот сегмент, што е
на нули и оние кои ги претставуваат вашата програма.
На кратко, ова е само супер, супер лошо.
Нели?
Вашата програма има излезе од контрола.
Го користите начин повеќе меморија отколку што се наменети сите поради глупава
грешка, во овој случај.
Или во овој случај, многу намерно направено функција која себеси се нарекува.
Сега тоа не е сите лоши.
Функции се нарекуваат всушност има голема моќ
кога ќе ја користите правилно.
Јас не го користи правилно тука.
>> Значи ова не е сите лоши.
Но, фактот дека никогаш не сум всушност престанат да повикуваат себеси е основен
слабост тука на оваа програма.
Значи каде одиме со сето ова?
Па, она што навистина се случува?
Кога ќе се јавите на прираст функција, како што се прави во овие примери,
Имам вредност како 1 што помине внатре
Јас помине во копија на број еден.
Така се случува следното.
Значи, да одат во пораст пример.
И овој човек право овде.
Значи тука е она што всушност се случува.
Кога се јавив прираст, и јас помине во х, сликовито што е
случува овде е ова -
ако има вредност од 1 чуваат тука, а јас всушност се јавите прираст, што
сега се нарекува хор -
Да, тоа е мене отфрлаат тука.
Па ајде да го наречеме овој прираст.
И ние не знаеме што следниот функција ќе биде.
Значи она што всушност се случува е тука некаде во главниот, имам дел од
меморија што е чување на број 1.
Кога ќе се јавам прираст, јас сум користење на друг дел од меморијата, но сега јас
имаат копија од 1.
Кога јас зголемување на таа вредност, тоа станува 2 - ужасно напишани на
екранот овде.
Но, тогаш, што ќе се случи веднаш штом зголемување се враќа?
Оваа меморија само добива предаден назад во оперативниот систем, што значи дека сите
сте го направиле ништо корисно.
Оној што беше првично содржани во главната е сеуште всушност таму.
>> Значи каде одиме со оваа?
Па, излегува дека во меморија имате ова да се врати назад секвенца на
бајти кои може да се стави нешто внатре
И излегува дека ние сме веќе видено нешто што вклучува поставување
работите да се врати назад да се врати да се врати.
Што е стринг, врз основа на една недела и сега недела две?
Така, тоа е само собирање на карактери.
Значи испаѓа, како што може да се стави броеви во меморијата, слично можете да
стави карактери во меморијата.
И штом ќе започне со ликовите во меморија да се врати назад да се врати на
назад, излегува дека со користење на наједноставните работи како за телефонска линија или
време јамка, можеме да iterate -
од лево кон десно во текот на карактери во стринг -
и почнете масажа нив во различни карактери заедно.
А би можела да стане Б Б може да стане C. Така што во крајна линија, ние може да се земе
Македонски реченица која всушност има смисла и да ги конвертирате секоја од овие
букви едно по едно време со одење преку мемориска нашиот компјутер оставени
право да всушност криптирате.
>> Па ајде да нашите пет минути пауза тука, и кога ќе се вратиме, ние ќе
започне овој процес на scrambling информации.
>> Во ред.
Па пред да нурне во некои крипто и овие работи вика низи, дозволете ми да
пауза за било какви прашања, бидејќи се чувствувам како да сум навистина вид на ѓаволски некои од
овие теми.
Значи, да го поправи сега ако можеме.
Па ние само зборуваше за враќање вредности.
Зборувавме за аргументи.
И ние разговаравме за овој поим, што ќе се врати во недели
дојде на гледање на меморија, како еден куп на овие рангирани
пепелниците, така да се каже.
Од дното на горе, така што секоја лента, која добива стави на магацинот претставува
функција која во моментов се нарекува.
Било какви прашања?
Па, како за тоа - дозволете ми да се обиде поставување на прашање.
Продолжувам да расипе тоа, но сега it's - you've виделе лицето на момчето.
Па ние ќе се вратам на тоа.
>> Па дозволете ми да поставам едно прашање тука.
Дозволете ми да се поедностави оваа вратам на она што беше пред некои од нашите порано П & А
И фактот дека прираст има отворени заграда, int број, затворена
заграда.
Што значи int број претставуваат?
[Беззвучен]
Дејвид Џ MALAN: Еден аргумент.
Во ред, но она што е аргумент?
[Беззвучен]
Дејвид Џ MALAN: Жалам, што е тоа?
ЗВУЧНИК 3: Нешто ќе помине внатре
Дејвид Џ MALAN: Океј.
Значи нешто што ќе помине внатре
И поопшто, тоа е само на влез.
Ако сте пишување функција и цел таа функција во животот е да се направи
нешто малку различни секој пат кога ќе го користите, тогаш единствен начин за
тоа да се случи навистина ќе изгледа да биде да се обезбеди со влезот, така што тоа
може да се направи нешто различно со тоа влез секој пат.
>> Значи ви треба да се одреди две работи кога функцијата се влезови.
Потребно е да наведете името што сакате да им даде на тоа влез, чисто за
свој погодност, така што ќе може да се однесува на тоа во функција што
себе се пишува, како што го направив тука во линија 32.
Но исто така ќе треба да се одреди нејзината тип, бидејќи C е програмски јазик
што само бара
дека ако сакате променлива, ќе мора да му кажете на компјутерот што
податочен тип е тоа,
во голем дел, така што тоа го знае колку битови
распредели за таа променлива.
Бидејќи тоа би можело да биде шест -
Жал ми е, тоа нема да биде шест.
Тоа може да биде 16.
Тоа може да биде 8.
Тоа може да биде 32, дури и 64.
Но на компјутерот треба да знаеш.
Сега int на левата страна претставува она што, од друга страна?
[Беззвучен]
Дејвид Џ MALAN: Што е тоа?
[Беззвучен]
Дејвид Џ MALAN: Тип на функција и, поконкретно,
тип на своето производство.
Право.
Па со оглед на тоа нешто во загради претставува нејзиниот влез, доколку ги има,
нешто на левата претставува своето производство.
И во овој случај, зголемување очигледно враќа int.
И така int е враќање тип на оваа функција.
>> Што значи да се вратат?
Буквално, можете да користите клучниот збор враќање.
А потоа ако она што се враќаат во правото на клучни зборови е
број, тогаш тоа е навистина во согласност со она што го вети.
Вие не може да направи вакво нешто -
Здраво, Светот -
затоа што тоа е стринг.
Очигледно, тоа не е цел број.
Значи во кратки, товарот е навистина на нас, програмер, да бидат специфични како
на она што ние сме се враќаат и да потоа всушност да се обратите за враќање неа.
А потоа да се направи малку повеќе јасно контекст -
ене го повторно.
Контекст -
големо изненадување доаѓаат во само еден миг.
Контекст тука сега е тоа што меморијата на вашиот компјутер е, повторно,
Gigabyte, два гигабајти, сеедно.
Можеби тоа е повеќе.
Можеби тоа е помалку.
Но компјутерот го гледа како што имаат различни секции.
Нешто тргне таму долу.
Нешто друго оди до таму.
Различни нешта оди во средината.
И денес, ние само почнат да кажувам оваа приказна.
>> Но, ние ќе се вратам на ова со текот на времето.
За сега, само дел од меморијата ние навистина се грижат за е текстот сегмент
бидејќи тоа само претставува нули и оние
дека ѕвекот ја outputted.
Значи, кога ќе извршите команда на тастатурата како a.out, или двојно
кликнете на иконата на Mac OS или Windows, вашата програма е вчитана од вашиот хард
вози во RAM меморија.
И тоа е plopped на врвот на RAM меморија на вашиот компјутер, така да се каже.
Сега пак, како вашата програма почнува да трча и главните добива повикан во
Програмата ви напишал или програмата Microsoft или Apple напиша, било од неговите
локални променливи завршуваат таму долу на дното на меморијата на вашиот компјутер.
Но, ако главната повици друга функција која самата има променливи или
аргументи, тие завршуваат над неа.
И ако тоа функциски повици нешто, тие завршуваат над неа,
над неа, над неа.
И само еднаш функција е направено извршување не магацинот на коцки, па
да зборува, да почне да се пониско и пониско.
И тоа е она што тогаш, во мало, објаснува зошто, кога ќе се јавите коцка -
или ти се јавам прираст -
ти си поминува во копија од вредност.
И што значи тоа сликовито е дека сте буквално пишување на
број 1 во друг дел на меморијата, се менува 1-2, во случај на
прираст -
или на 8, во случај на коцка -
а потоа фрлање дека меморијата далеку штом зголемување или коцка
функцијата се враќа.
>> Прашање.
[Беззвучен]
Дејвид Џ MALAN: Каде - глобални променливи се чуваат во она што е
во моментов се нарекува иницијализира на податоци или деиницијализира податоци.
Разликата е во тоа, ако имате глобалната променлива, и го додели
веднаш вредност со еднаквите знаци, тој завршува на врвот таму.
И ако речеме int x запирка без вредност, тој завршува малку
пониски во RAM меморија, едноставно со конвенцијата.
Други прашања.
Во ред.
>> Значи оваа слика ќе се врати како што ние се помоќни со она што можеме да направиме
со компјутер.
Но, за сега, да имаат кратко интро да криптографијата, посебен вид на
криптографијата дека не ги решава сите проблеми на светот, но не го реши
некои од нив.
Во овој случај тука, ние имаме нешто што се нарекува таен клуч криптографија.
И таен клуч криптографија, како што сугерира името, произлегува нејзината безбедност
од тајна.
Така на пример, ако сте уште во основно училиште и сте донесување на
мала тајна љубов писмо до момче или девојче сте дробење на - ако
сакаше да мине низ публиката, најверојатно не би пишуваат
како белешка во англиски или без разлика на вашиот мајчин јазик, туку дека
да ја криптирате.
Или вие само може да ги испратите текстуална порака овие денови.
Но, вие всушност може да ги помине белешка во текот на наставата.
И да го направите ова безбедно, во таков начин што вашите пријатели и наставникот
не знам што сте пишување, може да излезе со прилично едноставен
алгоритам -
млади иако може да биде -
само да се трка на зборови.
Така, наместо на пишување, може да пишувам Б Наместо Б, може да напише
В Наместо C, можете да напишете D, и така натаму.
Или можете да излезе со повеќе софистицирани превод на букви
на различни писма.
Но, за улов е момче или девојче на кое сте испраќање на оваа забелешка треба да
знаат нешто.
Што е она што, очигледно?
Како, што твојата тајна е.
Како што е тоа мапирање помеѓу Како и Bs и акредитиви и DS?
Тоа е само додавање на еден, така да се каже, на секоја од буквите да одат од
А до Б, Б кон Ц?
Е посложена од тоа?
Па вие и вашиот здроби ќе треба да ја имаат оваа тајна информации.
Но, има еден вид на фати-22 тука.
Ако ова е прв пат праќаш ова љубовно писмо преку
класа, како е тоа момче или девојка ќе знаете што тајната дури е?
Значи таен клуч за криптирање не ги решава сите светски проблеми.
И таму е всушност врската која ние ќе се врати на кон
семестар крај.
>> Слично на тоа, треба никој од нас веројатно некогаш испратил -
Слично на тоа, не повеќето од нас знаат некој што работи, на пример, во
Amazon.com.
А сепак, многу од нас имаат веројатно купил работи на Amazon.com.
И ние сме научени да се претпостави дека овие е-трговија
трансакции се безбедни.
Нели?
URL-то веројатно вели https.
Има можеби глупо малку катанец икона некаде.
Има некој вид на криптографијата обезбедување на вашата кредитна картичка информации
помеѓу вас и Amazon.com.
А сепак, ако криптографијата вклучува знаејќи некои тајни, а сепак јас не
познавам никого во Амазон, а јас сум сигурно не е договорено било каков вид на
тајна со некого во Амазон, како е мојот компјутер или мојот прелистувач го прави ова?
Па, излегува има други видови на криптографијата целосно го реши
тој проблем.
Но, за денес, ние ќе се фокусираат на едноставен, каде што може да се организира во
однапред да знае некои тајни, како плус 1 или некои мапирање помеѓу Како и Bs.
>> И процесот на криптографијата обично вклучува ова.
Имате некои обичен текст, прикажана овде на лево.
Можете да го извршите преку некој вид на алгоритам или постапка
за енкрипција на неа.
Можеби тоа е само станува Б, Б станува В И тогаш ќе се заокружи со
шифра текст.
Во меѓувреме, еднаш вашиот здроби добива тајна белешка, тој или таа има да потоа
дешифрирате со генерално обратен дека алгоритам за да се добие
се врати на обичен текст.
Сега постојат физички инкарнации на ова.
На пример, ова е малку тајна декодер прстен.
И ова е еден прстен во смисла дека има два бирање тука.
На надворешната периферија на оваа работа, има писма A до Z,
иако тие се во случаен редослед.
И во внатрешноста, има всушност некои бројки, кои како со овој
прстен, можете вид на може да се претвори од надвор но не и во внатрешноста, со цел да се редат
броеви со букви.
И во спотот сте за да се види - од кои некои може да се види 24/7
околу сезоната Божиќ од филм наречен Приказна Божиќ.
Ќе видите дека малку Ralphie беше толку желни да дознаам што малку сираче
Тајна порака на Annie беше за него дека бил доставен, мислам, во
форма на нумерички пораки на сериски кутија.
И ти мораше да се акумулираат сите мали картички кои дојдоа
во житни кутија.
Ти мораше да ги пошта внатре
Ти мораше да се врати на тајната декодер прстен, така што конечно може да дознаам
од она што мапирањето е меѓу букви и броеви,
или писма и писма.
Па јас ви даде овој краток клип од една приказна Божиќ да ги мотивира pset 2 и
нашата дискусија, во еден момент, на низи.
Значи тука имаме Ralphie.
>> [Видео репродукција]
-Било да е тоа позната на сите и Преземање дека Ралф Паркер е предмет назначен
член на малата сирачиња Ени Тајната круг и има право на сите
на почести и бенефиции случуваат истите.
Потпишан, Литл сирачиња Ени.
Потпишана, Пјер Андре!
Во мастило!
Почести и бенефиции, веќе на возраст од девет години.
Ајде, ајде да се е со неа.
Јас не треба сиот тој џез за шверцери и пирати.
-Слушај утре вечер за склучување авантура на црната
Пиратски брод.
Сега е време за тајната порака на Annie за вас членови
на Тајната круг.
Запомни, деца, само членови на Тајната круг на Annie може да декодира
Тајната на Annie порака.
Запомнете, Ени е во зависност од вас.
Поставете ги вашите иглички да Б2.
Еве ја пораката.
12, 11 -
-Јас сум во мојот прв таен состанок.
-14, 11, 18, 16 -
Пјер беше во голема глас вечерва.
Можам да кажам дека пораката вечерва беше навистина важно.
-3, 25.
Тоа е порака од Ени себе.
Запомнете, не кажуваат никому.
-90 Секунди подоцна, јас сум во само соба во куќата каде што едно момче од девет
може да седат во приватноста и декодирање.
Аха, Б отидов до следната.
Е Првиот збор е да биде.
С Тоа доаѓа полесно сега.
U.
-Ох, ајде, Ralphie.
Морам да одам.
-I'll биде во право надолу, ма.
-Навистина зделка.
-Т, О Бидете сигурни да.
Бидете сигурни на што?
Што беше малку сирачиња Ени се обидувам да кажам?
Бидете сигурни на што?
-Ralphie!
Ренди мора да се оди.
Ќе ве молиме да излезе?
-Во ред, MA.
Ќе биде право надвор.
-Јас бев доближување сега.
Тензијата беше страшно.
Што беше тоа?
Судбината на планетата може да висат во воздух.
-Ralphie!
Ренди е мора да си замине.
-I'll биде во право надвор, за плачење гласно.
-Навистина, речиси таму.
Моите прсти полета.
Мојот ум беше челик стапица.
Секоја пора затреперија.
Тоа беше скоро јасна.
Да, да, да, да.
-Бидете сигурни да пијат вашата Ovaltine.
Ovaltine?
А кофти комерцијални?
Син на кучка.
[END видео репродукција]
>> Дејвид Џ MALAN: Па ние имаме криптографија.
Па, како во компјутер можеме да одиме за спроведување или
претставуваат вакви работи?
Па, ние треба начин на изразување на себеси малку повеќе флексибилно од
нашите променливи досега се дозволени.
Имавме ints.
Имавме карактери.
Имавме плови и двојки и уште неколку други.
Но тие се поединечни парчиња меморија која навистина не ни дозволуваат да
изразат нешта како зборови и реченици и фрази.
Всушност, ние го нарече такви нешта жици.
Но, ние вети дека ова е навистина само поедноставување во CS50
библиотека, дека ние сме со намера да лупам назад.
>> И така да почнеме да го стори тоа овде.
Дозволете ми да оди напред и да се отвори датотеката -
сите овие датотеки се достапни, како и обично онлајн -
наречен array.c да реши еден проблем поврзан со жици, но дека стравува
слика тука за тоа како ние може да се користи нешто што се нарекува низа.
Низа е податочен тип.
Тоа е тип на променлива, на сорти, кој има повеќе помали типови на податоци
во него да се врати назад да се врати да се врати.
Така на пример, ако сакаме да пишувам малку програма која ви дава вашиот
квиз просек за курсот како 50 која има две квизови, можете да многу лесно
ја напишам оваа програма - врз основа дури и на некои од материјал минатата недела -
со користење GetInt и неколку променливи.
Int quiz1, int quiz2, а тоа е прилично јасна.
Тоа е можеби 10, 20 линии на код, Макс, да спроведе програма што прашува
корисникот за две квиз резултати и потоа пресметува нивната просечна со додавање на нив
заедно, што ги дели со два, а потоа печатење на резултатите.
Ние веројатно може да го направи тоа прилично лесно сега по
одреден број на минути.
>> Но, проблемот е во тоа што претпоставувам дека 50 имаше три квизови или четири.
Да претпоставиме дека си сакал да ги користат истите програма за класа која имаше
неделни тестови.
Размислете за класа која има неделна квизови.
Ако има како 16 или така недели во еден семестар, сега имате 16 варијабли -
int quiz1, int quiz2, int quiz3, int quiz4.
Веднаш штом ќе започнете да гледате оваа вишок, овој копирање и вметнување
на кодот, тоа треба да почне да ве натера да сакаат имаше подобар начин.
И за среќа, бидејќи на низи, не постои.
Значи, да го направите тоа.
Прво, дозволете ми да се воведе еден многу едноставен нешто што ние не сум користел досега,
но ќе се види повремено во кодот.
Ова е она што обично се нарекува постојан.
Па тоа е постојана во смисла дека никогаш оваа вредност се менува.
Човековите конвенцијата кога создавање на постојана е да се користи сите капитални
букви, само така што навистина се издвојува во вашиот код.
И специјални клучни зборови кои ги користите во Ц # define.
Значи, ако ви кажам # define, тогаш простор, тогаш зборот кој сакате да го користите за
постојана името, а потоа вредноста на константата.
Па информации, ова е различно од давање нешто на променлива.
Нема еднаквите знаци.
Нема запирка.
Тоа е она што е општо познато како препроцесори директива, но повеќе на
што друго време.
>> За сега, ова создава непроменлива вредност наречена квизови чии вистински
нумеричка вредност е 2.
Па насекаде гледате квизови, тестови, квизови во текот на оваа датотека, тоа е
само бројот 2.
Сега, ако јас гледам на главната сега, ајде да видиме како тоа функционира.
На прв, тоа изгледа малку криптичната.
Но, тоа е сите работи од една недела.
Прашај на корисникот за оценки.
Како го правиме тоа?
Па, во линија 22 -
ова е навистина сочно дел -
Изјавувам плови, но не само еден плови.
Јас сум прогласување, туку низа на подвижна запирка вредности.
Тоа променлива ќе бидат повикани оценки, како подразбира тука.
Но само парче од нова синтакса, тогаш се овие загради, фактот
што сум рече плови оценки и потоа отворете заградата и тогаш голем број.
Известување, ако тоа е константа, тоа е исто како ние го сторивме тоа.
Ова значи еј компјутер, дај ми две пловки, и ајде заедно повик
нив оценки.
Ова е во контраст со многу повеќе мачна процес се допаѓа ова.
Плови grade1, плови grade2, и така натаму.
Значи низа ни овозможува да се спроведе оваа идеја, но многу помалку messily, во
таков начин што ние може да напише една линија код наместо, да речеме, 16 за 16
недела семестар.
Па јас не сакате да хард-код 2, бидејќи ако мислите дека за тоа сега
логично - да претпоставиме следната година CS50 промени до 3 квизови, наместо.
И имав број 2 тука.
Имав број 2 тука.
Станува многу досадни и многу лесно да ја зафркнам и да случајно промена
една вредност до 3 и фали некоја друга вредност од 2.
Па ќе одам да наместо апстрактни овој далеку и да го користите овој константа која, како нејзин
што сугерира името, никогаш не се менува.
И сега, без разлика дали имаме различни квизови оваа или следната година, јас
едноставно мора да го измените во едно место, до тука во врвот.
>> Значи тоа е постојана.
Во меѓувреме, новиот концептуални карактеристика е тоа што на низа.
Значи квадратни загради ми даде оваа многу плови и ми овозможува колективно
ги нарекуваат оценки тука.
Па сега ајде да видиме што ќе одам да се направи.
Тука во линија 24 е почеток на една за телефонска линија.
Ова е навистина ништо фенси.
Тоа е само со користење квизови, наместо на хард-кодирани број.
Но нема ништо интелектуално различни таму од минатата недела.
Ова е само printf.
Значи printf ("квиз број% d од% d"), бидејќи јас само сакам да се печати ми даде квиз
број еден на два, а потоа две од двете.
Значи ова е чисто естетска работа.
Но, интересен дел сега е во линија 27.
Со цел да се пополни во една од двете променливи со лебдечки-точка
вредност, можете повторно користење квадратни загради.
Во овој случај, јас сум јас користење, бидејќи тоа за телефонска линија започна со i изедначување
што вредност, очигледно?
0.
>> Така, на првата итерација на овој циклус, тоа е како да сум
напиша ова во кодот.
Но на втората итерација на овој циклус, тоа е како да сум
напиша ова во мојот код.
Но, фактот дека јас сум со користење на променлива е совршен, бидејќи, како што името
сугерира, тоа е различна неговата вредност на секоја итерација.
Па јас сум пополнување на оваа низа едно место во исто време.
Што значи оваа низа изгледа?
Добро, причината јас привлече ова супер едноставен правоаголник на екранот тука
пред се поради оваа причина.
Низа е само дел од меморијата по друг дел на меморијата,
проследено со уште еден дел од меморијата, и така натаму.
Значи, ако мојата низа е со големина од 2, во овој случај тука, сите ќе се прави со
пишување во мојот квиз резултати, како тука.
Добив 100 на оваа.
И тогаш добив 99 на оваа.
Тогаш оваа меморија дури и не може да се користи, бидејќи јас сум само побара од
компјутер за низа на големина 2.
Оние квадрати се уште се таму.
Нели?
Сеуште имате два гигабајти RAM меморија, дури и ако сте само
прашува за две пловки.
Значи, идејата зад низи е дека компјутерот само зема парче меморија
а потоа apportions помали парчиња да се врати назад да се врати да се врати.
И така тоа е низа е.
Тоа е соседни парче на меморијата, во внатрешноста на која може да се стави работите.
>> Сега тоа се случи за да потоа направи само некои здодевни аритметика.
Ако јас дојдете тука, ова е местото каде што јас тогаш iterate во текот на низата.
Јас излезе со збирот на сите вредности во низата.
И тогаш јас го користам круг функција тука за да всушност направиме
сумира поделено со квизови.
Но, дозволете ми бран мојата рака во тоа што вид на доволно аритметички за сега.
Но, сето тоа го прави за мене конечно се компјутери просек.
Значи прво квиз плус вториот квиз, поделено со 2, а потоа печатење
тоа надвор како int.
>> Но, ајде сега транзиција кон различни пример наречен string1,
која стравува слична слика но со користење на жици.
Дозволете ми да оди напред и да се поедностави тоа за само еден миг.
И прости вовлекување за сега.
Известување во линија 19 на овој пример, јас се добие стринг од корисникот.
Но, забележи она што јас сум следниот прави во линии 22 наваму.
Јас сум, всушност процесирањето од I до - и ова е нов трик -
strlen, стринг должина.
Ова е функција која доаѓа со C дека ако го помине низа, тоа кажува
Ви колку карактери се во таа низа.
Тоа е сè.
Фактот дека тоа е strlen наместо стринг должина е само затоа што е
повеќе содржаен.
30 години, луѓето се допаѓаше да пишувам нешта како посочно, како е можно.
Значи ние се чуваат таа конвенција тука.
i + + само значи зголемување јас во секоја итерација.
И сега забележите ова, што е навистина интересно.
Значи во линија 24, велам компјутер, ми даде знак, осум
битови, и го нарекуваат в.
Но, она што е оваа на десната страна зборуваш?
На англиски јазик, што значи дека претставуваат?
[Беззвучен]
Дејвид Џ MALAN: Токму така.
Дај ми го првиот карактер во низата.
Или поопшто, дај ми на i-тиот карактер во низа.
И ќе сфати дека е важно сега тоа што се компјутерски научници, ние сме всушност
сметано од 0.
Вие не имаат дискреционо право сега да почнете да го правите ова.
Сега треба да се однесуваат во согласност со очекувањата на компјутерот и
смета од нула, бидејќи [0] ќе биде првата
карактер во стрингот.
[1] ќе биде вториот.
[2] ќе биде третиот, и така натаму.
Значи оваа програма, ако јас го компајлирате - ова е, пак, string1.
>> Така осигурајте се string1.
И сега јас се кандидира string1 во мојот терминален прозорец.
Тоа е на чекање за влез, па ќе одам да напишеш во, да речеме, Дејвид.
Enter.
И сега тоа отпечатоци Дејвид сите на различни линии, бидејќи
забележи она што јас го правам.
Јас сум печатење еден карактер во исто време.
Сега ние не би навлегувал во детали денес на ова.
Но, јас избришани момент пред оваа проверка тука.
Излегува дека ако корисникот се немирни, контрадикторна, или само
збунет, вие всушност може да успее да даде низа на некои должина.
Ако притиснете на погрешно копче на тастатурата, може да даде
Нема низа на сите.
Или ако сте злопамтило, можеби ќе се обиде да го ставете во вредност од гигабајти на еден
есеј да се пополни оваа низа.
И ако на компјутерот снема доволно меморија, излегува дека ние ќе
да се вратам на оваа посебна вредност наречена нула.
Па за сега, само знам дека не е ова посебна вредност се нарекува нулти дека
ќе ни овозможи да се провери кога сме надвор од меморија, меѓу другите нешта.
>> Но, ако јас се отвори сега string2, забележите една разлика тука.
Забележите една разлика тука со string2.
Со string2, ова за телефонска линија е малку поинаква.
Дозволете ми да го избришете NULLS, така што можеме да зборуваме за оние некое друго време.
Но она што е различно за за јамка ова време?
И јас да се вратиш на претходниот пример.
Значи тоа е верзија две.
Ова е верзија еден.
Еден, два, еден два.
Па strlen повик е каде?
Тоа е во првиот дел од за телефонска линија.
Секој мисли за тоа зошто јас го правам ова?
Да.
[Беззвучен]
Дејвид Џ MALAN: Па ние не се јавите на функција секој пат.
Точно.
Потсетиме од за петелки дека тие се супер едноставен штом ќе вид на
Разбирам дека ова е иницијализација,
состојба, и ажурирање.
Проблемот е дека состојбата се случува на секој
повторување на јамка.
И така во овој пример тука, она што е лошо за фактот
дека ова е мојата состојба?
Ти си повикувајќи strlen повторно и повторно и повторно.
Но еднаш сум ја внеле во ДАВИД, должината на стрингот е пет.
И тоа не е ќе се смени на секој повторување на циклусот, бидејќи
стринг е уште Д-А-В-I-Д. Значи ова е навестување на она што се случува да стане
повеќе важна идеја познат како дизајнерска одлука, каде што - само не
направи на компјутерот направи непотребни работи.
>> Сега само како еден подлец преглед на 2 pset, pset 2 во стандардна верзија е
ќе ви предизвик да ги спроведе некои број на шифри, некои
број на енкрипција алгоритми, така што ќе може да и криптирате и декриптирање
тајни пораки, многу сличен на оној Ralphie има дешифрира.
Во хакер издание на pset 2, ние ќе одиме малку подалеку.
Ние ќе ви рака датотека од вистински компјутерски систем кој содржи
целиот куп на кориснички имиња и вистински криптирани лозинки и предизвик
за хакер издание ќе биде да попуштат оние лозинки и фигура
од она што криптографијата или какви тајни беше искористена за да всушност
генерираат оние лозинки.
И ние ќе го направите тоа со користење на нова функција тука на C кои ќе ти дадам
можете само демонстрација на, познат како командната линија аргументи.
>> Значи испаѓа, како што некои од вас може да се види во дел или во учебниците,
Главните не секогаш мора да биде неважечка во голема заграда.
Излегува дека главната исто така може да бидат напишани како оваа, со два аргументи,
argc и argv, каде argc е бројот на зборовите што пишувате после
на програмата името на вашиот командната линија.
И argv е вистински зборови.
И како квадратни загради има сугерира, argv е очигледно низа.
Тоа се случува да биде низа по низа по низа во меморијата.
Значи она што се случува да бидат во можност да се направи, почнувајќи со pset 2, се
нешто како ова.
Ако можам да направам argv1, која е пример ние ќе се врати во понеделникот, и да ја стартувате
тоа, забележите дека тоа не чини да се направи ништо сеуште.
Тоа само отпечатоци од свое име.
Но, ако јас се каже збогум класа, напомена дека оваа програма очигледно iterates
над секоја од зборовите кои беа напишани во конзолата.
И средствата со кои ќе се добие пристап до зборовите дека корисникот има
внесе во конзолата е со промена на главните, почнувајќи од овој викенд, од int
главната (празно) да int main (argc, argv).
И на тој начин ќе се роди командната линија аргументи.
И штом еднаш ќе добиете навистина софистицирани во ова, ќе бидете во можност да се напише
навистина trippy програми, како што е овој овде, кој оди над и надвор
некои од функционалноста ние го направивме досега, но сите доста моќни.
>> Па ние ќе ја напушти оваа со овој на екранот.
И ние ќе се видиме в понеделник.