[За възпроизвеждане на музика] DAVID J Malan: Добре, Добре дошли отново в CS50. Това е началото на две седмици. Една дума от един от нашите приятели в университета - ако се интересувате, може би, или сега или в бъдеще план дори след по-удобно, обучение Близък училище ученици малко нещо за компютърни науки, направи главата на този URL. Те са по-специално необходимостта момента на учители, особено ако имате имаше някои излагане на компютърните науки. Така се припомни, че последния път, ние въведохме няколко типове данни в C и може да са започнали да си цапа ръцете с тях до този момент в проблем зададете една. И ние имахме Чар. Така че в малко по-техническа гледна точка, това, което е знак, какъвто го познаваме днес? Така че това е герой, но нека по-точно сега. Какво искаме да кажем с характер или индивидуалната Чар? А не-буквен знак - така че не е задължително. Оказва се, че дори и номера, дори препинателни знаци и букви са представени с тези данни тип, известен като знак. Така че това не е задължително азбучен. Да? Така че това е един ASCII характер. Така че, ако си спомните седмица нула, когато имахме байт ни на доброволци излезе и заемат техните ръце или не всички, те представляваха бита. Но заедно като група от осем, те представляват един байт. И ние въведохме понятието ASCII в този лекция, която просто е Съответствието между цифри и букви. И ASCII, така както са тези хора подразбиращи се, осем бита да представлява символ. Така че, ако съгласно осем бита може всеки взема по една от двете стойности - нула или едно - Това означава, че имаше две възможности за това лице - нула или едно - две за този човек, две за тази лице, две за това. Така общо два пъти по два пъти два пъти по два пъти две - така две на осма в общия. Така че има общ брой на знаците 256 е възможно, че можете да представляват, с осем бита. Сега, тези от вас, които говорят Азия езици може да знае, че има и още героите в днешния свят, а просто Както и Bs и Cs и Ds. И наистина, ASCII не е достатъчно, за много езици по света. Но повече за това друг път. За сега знаем, че в C, ако искате да представят писмо, парче пунктуация, или просто нещо характер в природата, ние използваме Чар. И това е един байт или осем бита. Какво ще кажете за едно цяло число? Е, едно цяло число е цяло число. Колко бита, ако си спомняте, е цяло число обикновено? Всеки, изземване? Така че това е обикновено 32. То всъщност зависи от компютъра че използвате. Но в уреда, и в много компютри, това е 32 бита или четири байта - осем пъти по четири. И цели числа са просто използвани за съхранение на номера, или отрицателни, положителен, или нула. И ако имаш 32 бита и само грижа за положителни числа, може да някой приблизителни колко е възможно числа компютър може да представлява от нула нагоре? Така че би било две до 32, които е около четири милиарда. Така че тези правомощия на две ще бъдат повтарящи се теми в областта на компютърните науки. Както ще видим, те са доста удобен да работи с дори ако това не е съвсем лесно да се направи по математика в главата си. Така че ние ще кажем грубо четири милиарда. Сега, много, много дълго - можете вид предположение. Това е по-дълго от едно цяло число. Колко бита? Така че 64 бита или осем байта. Това просто означава, че може да представлява дори по-големи числа, по-големи положителни или по-големи отрицателни числа. А какво ще кажеш за плувка? Това е с плаваща запетая стойност на 32 бита. Това е само на реално число, нещо с десетична запетая. Но ако вместо да се нуждаят от повече места след десетичната запетая или искате да представляват по-голям брой с някои фракция след това, можете да използвате двойни, която е 64 бита. Но има един интересен храна за вкъщи тук. Така че, ако цели числа са ограничени от 32 бита и дори дълги дълги продукти са ограничени от 64 бита, такива повдига въпроса, Какво става, ако действително искате да преброите по-висока от 4 млрд. евро за едно цяло число? Е, можете просто да използвате дълго време. Но какво, ако искате да преброите по-висока от две до 64-то, или да се даде? Сега, това е огромен брой. Но в крайна сметка, може би действително грижа за тези видове стойности, особено ако сте с помощта на база данни и започват да се събират много и много и много данни и задаване на уникални номера на всяка част от тези данни. Така че ние вид имате проблем. И по същия начин, с плаваща запетая стойности - плувки и двойници - ако имаш само краен брой бита, колко общия брой можеш вероятно представляват? Е, това е по-малко ясно, когато включват десетичната запетая. Но със сигурност това е ограничен. Ако имате определен брой битове, определен брой хора, ограничен броя на електрическите крушки, със сигурност можете да представляват само ограничен брой стойности с плаваща запетая. Но колко реални числа са им в света? Има безкрайно. Така че това е нещо като проблем, защото ние не разполагат с безкрайно количество RAM памет или вътрешната страна на нашите компютри. Така че някои предизвикателни неща могат да се случат. Така че нека да продължим и ще опитаме да изрази тази тук. Нека да вървим напред и да се отворят Gedit. Аз ще отида напред и да запишете файла наречен "floats0.c" само за да бъде в съответствие с един пример, който е достъпни онлайн, ако искате. И аз ще отида напред и го определят, както следва - Аз ще отида напред и да се каже, вътр Основната невалидни, тъй като ние често правим. И след това в тази програма, аз ще обяви себе си за плувка, така че 32-битов променлива наречена F, произволно. И тогава аз ще се съхранява в него Аз не знам, една десета, така че 0.1. Така че аз ще изразя, че като един делено на 10, което е напълно легитимна в C. И след това на втора линия, аз просто желаете да отпечатате тази стойност. Така се припомни, че можем да използваме познатия ФОРМАТ. Ние не искаме да се използва% и за вътр. Искаме да използваме F% за плувка. И тогава аз ще направя наклонена черта N, близо цитат, запетая, F, точка и запетая. Така че тук е моята програма. Има вече един бъг. Има ли някой, за когото това кликнали вече искам да посоча най-малко един бъг, който съм правил? Да? Да. Забравих "# включват" в отгоре, те симптом на което, ако се опитам да съставят това ще бъде, че Компилаторът ще ми викаш, казвайки неопределен символ или нещо в този смисъл. Той не разбира нещо искали ФОРМАТ. Така че аз ще направя "# включват ", Запишете файла. И сега тя е в по-добра форма. Но аз също ще отбележи от един нов детайл днес. В допълнение към определяне мястото притежателите като% е% и% S, можете да понякога повлияе на поведението на този контейнер. Например, в случай на плаващ точка стойност, ако искам за да се покаже един десетичен знак след период, всъщност мога да направя 0.1f. Така че с други думи, аз се отдели е и знака за процент с 0,1, само казва ФОРМАТ, може да се наложи цяло куп номера след десетичната точка за мен. Но аз само искам да видя един от тях. Така че аз ще да се продължи напред сега и спести тази програма, отидете в моя терминал прозорец, и аз отивам да вървим напред и тип направи 0 плувка, въведете. Виждам, че малко по-загадъчен линия, която ще започне да се направи повече смисъл, тъй като ние дразни това, освен тази седмица и следващата. Сега отивам да вървим напред и тичам нула плувка. И, по дяволите. Така че има и друг бъг тук по някаква причина. Аз съм сигурен, че една десета, или една разделена на 10, не е 0.0. Може би просто не търся при достатъчно цифри. Така че защо да не кажа два 0.2, за да видите две знака след десетичната запетая, а не само един. Позволете ми да се върна в терминален прозорец тук и удари няколко пъти, за да виж моя история. Карай плаваш нула отново, и след това отново. И сега влиза. И сега, аз съм сигурен, че това е погрешно. И мога да го направя с три и четири, и аз съм вероятно ще продължим да виждаме нули. Е, къде е грешката? Една разделена на 10 трябва да бъде 0,1. Някой иска да вземе хладно оръжие на това, което основният въпрос е? Да? И двамата са цели числа. И какво? Така че с една, разделена на 10, това е това, което правя в аритметична. И да получа 0.1. Да. И така е наистина този въпрос. Когато се вземе цяло число в компютърна и го разделете на друго число, на компютъра по подразбиране ще приемем, че искате цяло число. Проблемът обаче, разбира се, е че 0,1 не е цяло число. Това е реално число. И така, какво прави на компютъра от подразбиране е просто изхвърля всичко след десетичната запетая. Тя не закръгляват надолу или нагоре по себе си. Тя просто се изхвърля всичко след десетичната запетая. И сега, че има смисъл. Защото сега сме ясно остава с нула. Но почакайте. Не виждам едно цяло число нула. Всъщност съм виждам 0.00. Е, как да съгласува това сега? Ако едно делено на 10 е нула, но аз съм виждам 0.00, където се тя да конвертира в реално число? Да. Точно така. Така че тук, в съответствие пет, когато всъщност съхраняване на тази 0.1, който след това се пресечен до нула, вътрешността на плувка, това е ефективно еквивалентни на съхранение не като едно цяло число, но, В действителност, тъй като поплавък. Нещо повече, аз съм след това с помощта ФОРМАТ да изрично отпечатате, че броят на две знака след десетичната запетая, въпреки че има не може в действителност да бъде всеки. Така че този вид е гадно, нали? Очевидно не можеш да направиш по математика, най-малко на това ниво на точност, в компютъра. Но със сигурност има решение. Какво е най-лесният начин за бихме могли може би правя, дори и само интуитивно тук, за да решаване на този? Да? Обърнете числа в - Да. Дори и да не съм съвсем сигурен какво е наистина се случва тук, ако фундаментално има нещо общо с тези два са цели числа, добре, защо да не правя направи, че 10.0, което го прави 1.0, запазете файла. Нека да се върнем чак до дъното и прекомпилирате. Нека сега разясняване. И там - сега, аз си имам една десета представени като 0.10. Добре. Така че това не е лошо. И нека да се отбележи още един начин бихме могли да сме разрешили това. Нека действително се връщам във времето да, когато имахме тази като един десети преди малко. И нека да вървим напред и запазете този файл като друго име, само за да има малко контролно-пропускателен пункт. Така че това е една версия. А сега нека да вървим напред и направи още една версия. Ще се обадя тази версия две нула индексира. И аз ще направя вместо това - знаете ли какво? Добавяне на точка нула работи в този случай. Но да предположим, един бяха променлива. Предполага 10 бяха променлива. С други думи, да предположим, че не можех да само трудно код 0.0 в края на аритметичен израз. Е, всъщност мога да направя нещо в скоби нарича леене. Мога да хвърли, че число 10 за числа с плаваща запетая и аз може да хвърли това число един до плувка, както добре. Тогава по математика, че ще бъде направено е ефективно 1.0, разделена на 10.0, в резултат на което отива в е както преди. Така че, ако компилирате това като направи поплавъци 2, и сега плава две, получавам същото отговори, както добре. Така че това е доста измислен пример, за решаване на този проблем чрез въвеждане на леене. Но като цяло, леене ще бъде мощен нещо, особено за Проблемът се определят две в срок от една седмица, когато искате да конвертирате един тип данни още, че в края на деня са представени по същия начин. В края на деня, всеки нещо, което сме говорили за този момент е само цели числа под капака. Или ако това е твърде ниско ниво за ти, те са просто числа под предния капак. Дори героите, отново припомни от седмица нула, са числа под предния капак. Което ще рече, ние можем да конвертирате между различни видове номера, ако те са просто бита. Ние можем да конвертирате между номера и букви, ако те са само бита, и обратно. И леене по този начин е механизъм в програмирането, която ви позволява насилствено промени един тип данни в друга. За съжаление, това не е толкова просто, колкото бих искал. Отивам да се върне в поплавъци 1, която е опростена, по- лесно един с 0.0 добавен на един. И точно както бързо да си припомните, позволете ми да отида напред и да компилирате това, да плува 2 - Съжалявам, това е да плува 1. А сега нека да тече поплавъци 1. И в дъното, забележите че аз наистина се 0.1. Така че, проблемът решен. Но не още. Аз съм сега ще се получи малко любопитни, и аз ще се върна в моя ФОРМАТ отчет и Кажете, вие знаете ли какво? Бих искал да потвърдя, че този е наистина една десета. И аз ще искам да видя този , да речем, пет знака след десетичната запетая. Това не е проблем. Да променя два до пет, I компилирате с грим. I разясняване него като плава 1. Търсите доста добър. Здравия си разум проверки може да се свърши там, но Аз съм се малко по-приключенски. Отивам да се промени от 0.5 до 0.10. Искам да видя 10 цифри след десетичната запетая. И аз ще отида напред и да компилирате това и разясняване плава 1. I вид съжаление след изпробване на това допълнително, защото моята математика не е толкова коригира вече, изглежда. Но чакай малко, може би това е просто щастлива случайност. Може би, когато компютърът е в качеството малко странно. Нека да вървим напред и да направим 20 знака след десетичната запетая и се увери, че аз знам как да се направи по математика. Знам как се програмира. Направи поплавъци 1, компилирате и дявол да го вземе. Това е наистина, наистина се далеч от целта. И така, какво става тук? Интуитивно, въз основа на нашите предположения по-рано с размерите на типовете данни, какво трябва да се случва тук под предния капак? Да? Точно така. Ако искате това много прецизно, и това е един чесало на много прецизен - 20 числа след десетичната запетая. Вие не може да представлява произволен брой, освен ако имате произволен брой битове. Но не го правим. За плувка, ние имаме само 32 бита. Така че, ако 32 бита може да се дейонизирана в начин - точно като нашите хора на, етап ръце нагоре или надолу - в краен брой начини, има само краен брой на реални числа можете да представляват с тези битове. И така, в крайна сметка компютъра ще трябва да начало просото. Компютърът може да се скрие тези подробности от нас за малко време. Но ако започнем да изпълзяват на цифрите и търсят по-далеч и по-далеч в задния номера в цяло число, След това започваме да виждаме, че това е всъщност приравняване на Идеята на една десета. И така се оказва, трагично, има безкраен брой цифри не може да представлява точно в компютър, най-малко с ограничен Броят на битовете, ограничен размер на RAM. Сега за съжаление, това понякога има реални последици. Ако хората не съвсем оценят това или нещо като приемаме за даденост факта, че техният компютър просто ще направи това, което те му кажете да прави и не разбере тези основни представителни данни - които, честно казано, в някои езици са скрита от потребителя, за разлика от C - някои лоши неща може да се случи. И това, което мислех, че ще направя е да се върнем назад. И това е около осем минути видео. Той излъчен преди няколко години, и го дава прозрения в действителност какво може да се погрешно, когато сте по-ценят тези видове информация в много всички твърде реалния свят. Ако можехме да намаляване на осветлението за няколко минути. SPEAKER 1: Ние сега се върнем към инженеринг бедствия на съвременни чудеса. Компютри - ние всички са приели, че често проблеми разочароващ че отиде с тях. Bugs, вируси и софтуерни бъгове са малки цени за заплащане на удобство. Но в хай-тек и високоскоростен военна и космическа програма приложения, най-малкият проблем може да бъде увеличено в бедствие. На 4 юни 1996 г. учени готови да стартира безпилотен Ariane 5 ракета. Той носеше научни спътници , създадена да определя точно как магнитното поле на Земята взаимодейства със слънчеви ветрове. Ракетата е била построена за Европейския Космическа агенция и повдигнат от неговия съоръжение на брега на Френска Гвиана. JACK GANSSLE: На около 37 секунди след на полета, те забелязаха за първи път нещо не беше наред. Дюзите са въртящи се в начин, те наистина не трябва. Около 40 секунди след началото на полета, ясно превозното средство е в беда. И това е, когато те направиха решението да го унищожи. Отговорникът гама безопасност, с огромен кураж, натисна бутона, взриви ракетата преди да може да се превърне в опасност за обществената безопасност. SPEAKER 1: Това беше първата разходка на Ariane 5, и разрушаването му се състоя, тъй като на вградения недостатък в софтуера на ракетата. JACK GANSSLE: Проблемът на Ariane е, че има редица която се изисква 64 бита да изразя. И те искаха да конвертирате на 16-битов номер. Те Предполага се, че броят никога не е бил ще бъде много голяма, че повечето от тези цифри в 64-битов брой са нули. Те са били погрешни. SPEAKER 1: неспособността на един софтуерен програмата да приеме вид номер, генериран от друг е в основата на провала. Разработка на софтуер се превърна в много скъпа част от новата технология. The Ariane 4 ракета е била много успешно, така че голяма част от софтуера е създаден за това беше използвани в Ариана 5. Филип Койл: Основният проблем е, че Ariane 5 е по-бързо, ускорява по-бързо. И софтуерът не е отчитат, че. SPEAKER 1: унищожаване на ракетата е огромна финансова катастрофа, всичко се дължи на минута грешка софтуер. Но това не е първият данни време преобразуване проблеми бе измъчван модерна ракета технология. JACK GANSSLE: През 1991 г., с началото на първата война в Залива, на Patriot ракети имали подобен вид проблем с броя превръщане. В резултат на това 28 американски войници бяха убити и около 100 ранени когато Patriot, който трябваше да се предпазите от входящите ракети Скъд, не успя да изстреля ракета. SPEAKER 1: Когато Ирак нахлуват Кувейт и Америка започна Пустинна буря в началото на 1991 г. Пейтриът ракети батерии бяха разположени за защита на Саудитска Арабия и Израел от иракски Скъд ракетни атаки. The Patriot е САЩ със среден обсег земя-въздух система, произведени от компанията Raytheon. ТЕОДОР Постъл: Размерът на Patriot прехващачи себе си е грубо 20-фута дълго. И тежи около 2000 паунда. И носи бойна глава от около - Мисля, че е около £ 150. И самата бойна глава е високо взривно вещество, което има фрагменти около него. В корпуса на бойна глава е предназначена да действа като едри сачми. SPEAKER 1: Ракетите са извършени четири на контейнера и се транспортират от полуремаркета. Филип Койл: The Patriot противоракетна Системата се връща в поне 20 години насам. Той първоначално е бил разработен като на въздушната отбрана ракети да свалят вражески самолети. В първата война в Залива, когато тази война дойдоха заедно, армията искаше да го използва да свалят ракети Скъд не, самолети. Иракското ВВС не беше така че кой знае какъв проблем. Но армията се тревожеше за Скъд. И така, те се опитаха да обновите на Patriot. SPEAKER 1: Прихващане враг ракети движи Mach пет е ще бъде достатъчно голямо предизвикателство. Но когато Patriot се втурна в услуга, армията не е знаел на Иракската модификация, които направиха своя Скъд почти невъзможно да се удари. ТЕОДОР Постъл: Какво се е случило е Скъд, които са били нахлуващият са нестабилни. Те са се клатушка. Причината за това е, иракчаните, в За да се получи 600 км от един 300-км-гама ракети, взе тегло от предната бойна глава. Те направиха бойна глава запалка. Така че сега се опитва Patriot да дойде в Скъд. И през повечето време, по-голямата голямата част от времето, тя просто ще летят от Скъд. SPEAKER 1: След като Patriot система оператори осъзнали Patriot пропусна целта си, те взриви Patriots бойна глава за да се избегне възможно произшествия, ако се допускат да падне на земята. ТЕОДОР Постъл: Това беше това, което най- хора видях като големи огнени топки в небето колкото и неразбрани прихваща на бойни глави Скъд. SPEAKER 1: Въпреки че в нощното небе Patriots се оказа успешно унищожаване на ракети Скъд, в Dhahran има може да не се заблуждавайте за неговото изпълнение. Има, радарна система на Patriot е загубен проследяване на входящо Скъд и никога стартира поради софтуерен недостатък. Това беше най-израелци, които първи открили че колкото по-дълго система беше, толкова по-голямо време несъответствие се дължи на часовника вградени в компютъра на системата. JACK GANSSLE: За две седмици преди Трагедията в Dhahran, израелците докладвани на Министерството на отбраната че системата е загуба на време. След около осем часа в режим на работа, те забелязали, че системата е става значително по-малко точни. Министерството на отбраната отговори, като разказвам всичко на Patriot батерии да не напускат системи в продължение на дълго време. Те никога не е казвал това, което дълго време беше. Осем часа? 10 часа? 1000 часа? Никой не знаеше. SPEAKER 1: The Patriot батерията разположени в казармата в Dhahran и недостатъци вътрешния часовник е бил на над 100 часа в нощта на 25-ти февруари. JACK GANSSLE: Това проследяват време на точността на около една десета от секундата. Сега, една десета от секундата е интересен номер, тъй като не може да бъде изразени в двоичен точно, което означава, не може да се изрази точно в всеки модерен цифров компютър. Трудно е да се повярва, но използваме това като пример. Да вземем броя една трета. Една трета не могат да бъдат изразени в десетичен точно. Една трета е 0,333 ще на мястото на безкрайност. Няма начин да се направи това с абсолютната точност в десетичен. Това е точно същия вид проблем , което се случи в Patriot. Колкото по-дълго на системата се завтече, на лошото време стана грешка. SPEAKER 1: След 100 часа работа, грешката в момента е само около една трета от секундата. Но от гледна точка на насочване на ракети движи Mach пет, което доведе до на грешка на проследяване на над 600 метра. Това би било фатална грешка за войниците на Dhahran. ТЕОДОР Постъл: Какво се е случило е Скъд старта е бил открит от началото на предупредителни сателити. И те са знаели, че Скъд идва в тяхната обща посока. Те не знаеха къде идва. SPEAKER 1: Сега беше до радара компонент на Patriot система защитава Dhahran да се локализира и да проследяване на входящи ракети враг. JACK GANSSLE: Радарът Беше много умен. Това всъщност ще следите позицията на на Скъд и след това се предскаже къде вероятно ще бъде следващия път радара изпрати импулс навън. Това се нарича гама порта. ТЕОДОР Постъл: Тогава, след като Patriot реши е минало достатъчно време за да отидете и се проверяват следващото място за тази засечения обект, той се връща. Така че, когато той се върна в грешната място, то тогава не вижда обект. И тя реши, че няма обект, това е откриване на фалшиви, и пада на пистата. SPEAKER 1: входящо Скъд изчезна от екрана на радара, и секунди по-късно той затръшна в крепостта. The Скъд убити 28 и беше последният уволнен по време на първата война в Залива. Трагично е, че актуализирания софтуер пристигна в Dhahran на следващия ден. Софтуерът недостатък е фиксиран, затваряне на една глава в размирни историята на Patriot ракета. Patriot всъщност е акроним за фазирана решетка за проследяване Отрязъка на Target. DAVID J Malan: Добре, така че отрезвяване Например, за да бъде сигурен. И за щастие, това по-ниско ниво грешки не са нещо, което ние ще обикновено трябва да е ясно, със сигурност не с някои от нашите ранната от програми. Напротив, повечето от бъгове ти ще среща ще бъде логично в природата, синтактичен характер, при която код просто не работи добре. И знаеш, че доста бързо. Но особено когато стигнем до края на семестъра, че ще все повече и повече на възможността за Наистина ли мислиш, трудно за дизайн от вашите програми и на свързаните с тях представителство има също на данните. Например, ние ще представим MySQL, която е популярна двигателя база данни , които можете да използвате с уебсайтове, за да съхраняване на данни в задния край. И ще трябва да започнат да се решават на края на семестъра не само това, което типове данни в тази насока за използване но точно колко бита да се използва, дали или не искате да съхранявате дати като датите и часовете като пъти, а също и неща като колко голям искаш на уникални идентификатори да бъдат, да речем, на потребителите във вашата база данни. В действителност, ако някои от вас са имали Facebook представлява доста време, и вие знаете как да се получи достъп да си User ID - което понякога се появява в Профил на URL, освен ако не сте избрали псевдоним за URL, или ако сте употребяван на Facebook Graph API, на публично API, чрез които можете може да поиска Facebook за сурови данни - можете да видите какъв е вашият цифров номер. А преди няколко години, по същество Facebook трябваше да се промени от използване на равностойността на цели числа да използвате дълго дълго, защото с течение на времето като потребителите се и отидете и да се създаде много сметки и фалшиви профили, дори и те много лесно са в състояние да изчерпи нещо като 4 млрд. възможна стойност като вътр. Така повече от тези видове въпроси надолу по пътя, както добре. Добре, така че е кастинг. Това беше неточност. Няколко бързи съобщения. Така раздели официално започва този смешен Неделя, понеделник, вторник. Ще чуете по електронната поща по-късно тази седмица за да си точка задача. И ще и тук в този момент как да промените секция, ако Вашата график вече е променена, или си ниво на комфорт вече е променена. Междувременно P-серия и един хакер едно са поради този четвъртък с опцията да удължи този срок, според спецификации до петък в типичен начин. Осъзнайте, че включени с проблема установят спецификации са инструкциите как да се използва CS50 направете уреда, както и някои специфични инструменти CS50 като стил 50, който може да ви осигури с обратна връзка динамично на качеството на кода си стил, а също и проверите 50, който може да ви осигури динамична обратна връзка за вашата код на коректност. Простете, че ние сме все още за гладене след няколко прегъвания с чек 50. Някои от съучениците си, които са започвали около четири ч. в петък вечер, когато спец. излязат сте забелязали, тъй като след това няколко грешки, че ние работим чрез, и извинения за всеки, който е имало неправомерно отчаянието. Вината е моя. Но ние ще последват примера на CS50 обсъдите кога, че е решен. Така че думата на самите резултати. Така че това ще бъде една седмица или две преди да започнете да получат обратна връзка върху проблемните комплекти защото все още нямате учение съграждани. И дори тогава, ще започнем да се оцени проблемът C определя преди да се върна и да оцени нулата така че можете да получите по-голямо значение обратна връзка по-бързо. Но като цяло на учебната програма, CS50 проблемни групи се оценяват по след четири оси - обхвата, коректност, дизайн и стил. Обхват ще бъде много типично между нула и пет, че улавя колко от парченце, което отхапа. Обикновено, искате това да бъде пет. Вие поне опитали всичко. И забележете, че това е мултипликативна фактор така че това само част от Проблемът в стаята не е най-добрата стратегия. В същото време, по-очевидно е значението на точността - Просто е вашата програма с правилното отношение на спецификацията? Това се претеглят умишлено повече силно, отколкото другите две оси с коефициент три, защото ние признаваме че обикновено започваш да прекарат много повече време преследва някои бъгове, получаване на вашия код, за да работят, а след това са го редовете и избор подходящи имена на променливи и искал, която е на другия край на спектъра на стил. Това не означава, че не е стил важно, и ние ще го проповядват над време както в лекции и в раздели. Стил отнася до естетиката на кода си. Избрали ли сте добре наречени променливи че са къси, но донякъде описателен? Вашият код разчленена като сте видели в лекция и по начин, съответстващ със стил 50? На последно място е правото на дизайн там в средата. Дизайнът е по-трудно да се постави един пръст, защото това е много по- субективно. Но това е може би най-важните от трите оси по отношение на педагогическия стойност с течение на времето и че това ще бъде учението съграждани е възможност да ви предоставят качествена обратна информация. В действителност, в CS50 въпреки че ние имаме тези формули, резултатите, в края на ден те са много умишлено много малки кофи - точка стойности между нула и три и нула и пет. Ние не се опитваме да се направи много груби линии между проблемните групи или между студенти, но по-скоро се съсредоточи колкото можем на качествена, longhand обратна връзка, или напечатан или устно от вашата конкретна съграждани преподаване, вие ще получите да знаете доста добре. Но като цяло, тези, които са теглата че различните оси ще има. В същото време, твърде, че си струва като се има предвид, че не трябва да се приема, че три от всеки пет е 60%, а Поради липса на грубо. Три е умишлено трябвало да бъде сортиране на средата на пътя добре. Ако сте се тройки в началото на семестъра, това е наистина означава да бъдеш добър място да започнете. Ако сте се по двама, панаири, има Определено някои работи да плащат малко по-голямо внимание, за да се възползват на секции и работно време. Ако получавате четири крака и петици, чудесно. Но всъщност, се надяваме да видим траектории сред студентите - много индивидуално обучение на един ученик, но като се започне семестъра тук, в нещо като на две до три обхват, но приключва тук в 04:56 диапазон. Това е това, което наистина търсите. И не забравяйте, че на делтата ви показват между седмица нула и седмица 12, когато правя оценки. Няма значение за нас абсолютно как ви справедливо в началото, ако вашият траекторията е наистина нагоре и силни. Академик честност - така че нека си сложа по-сериозен глас само за миг. Така че това разбира се има разлика изпращане на повече студенти, отколкото всеки друг в историята на рекламата борда, аз вярвам. Имаме нещо като загуби брой на този точка на това колко често това се случва. И това не е, защото учениците в 50 са повече нечестно от тяхната съученици другаде. Но осъзнавам, също така, че ние сме много добри при откриване на този вид на нещо. И това е предимството, че компютърни науки клас има с това, че ние може и ние да се сравняват всички студенти Проблемът определя по двойки срещу всеки други, не само тази година но всички предишни години. Ние имаме възможността, като студенти в на класа, за да Google и да се намери код на сайтове като GitHub и дискусионни форуми. Не са абсолютно решения на CS50 на р-определя витае там. Но ако можете да ги намерите, можем да ги намерим. И всичко това е много автоматизирано и лесно и тъжно за нас да се намери. Но искам да подчертая също, че академична честност политика разбира се е Много трябвало да бъде много обратното на този дух. Наистина, тази година сме перифразирана неща в учебния план да бъде тази, точка точка точка, с повече подробности в учебната програма. Но основната тема по време наистина трябва да бъде разумен. Ние разбираме, че съществува значителна размер на педагогически стойност в осъществяването на сътрудничество, до известна степен, със съученици, с което сте две или три или повече са заставане на бяла дъска whiteboarding, така да се се каже, на вашите идеи - оформяне pseudocode в снимки, диаграми какво трябва да бъде, ако Mario ви се налага да го напиша първата в pseudocode. Какво трябва да знае алчен алгоритъм - как трябва да се държат на Проблемът определя един? И така осъзнават, че поведението че ние насърчаваме е много много в тази насока. И в учебния план, ще видите цял куп от куршуми по разумен категория и не разумен категория, която ни помага да помогне ви увийте ума си около където ние се изготви тази линия. И като цяло, приличен правило е, че ако се борят за решаване някои бъгове и твой приятел или съученик седи до вас, това е разумен, за да му покаже, или я кода си и да каже, ей, може да ви помогне ми да разбера какво се случва погрешно тук? По принцип не прегърне противоположната страна. Това не е правилния отговор за приятел или съученик тук, за да кажа, о, просто погледнете моя и фигурата тя се от това. Това е нещо неразумно. Но като някой друг, друга мозъка, още един чифт очи, погледнете екрана или поглед към вашия код и да кажа, вие сте сигурни, че искате да има една линия тук? Или сте сигурни, че искате че запетая тук? Или О, това съобщение за грешка означава това. Тези, които са много разумни и насърчават поведение. В случаите, в които бях визирайки по-рано се свеждат до когато студентите са късно през нощта прави лоша преценка решения и електронната поща своя код за някой друг или просто казвам, тук, тя е в Dropbox или Гугъл късно през нощта. И така, аз ще насърчи и моля ви, Ако имате тези неизбежни моменти на стрес, което удрях срещу крайния срок, нямате късно дни, тъй като тя вече е петък, че точка, приятел главите на курса или себе си директно. Кажи, слушай, аз съм в моя точката на пречупване тук. Нека да има разговор и да го разбера. Прибягването до интернет или някои други не разумно поведение никога не е разтвор и твърде много от своя съученици вече не са тук, на кампуса, защото на тази лоша преценка. Но е много лесно да се заобиколи тази линия. И тук е малко снимката за да развесели вие нагоре от Reddit, така че сега всичко ще бъде наред. Така бърза рекапитулация, а след това, от там, където бяхме. Така миналата седмица, припомнят, че ще се въведе условия, а не в Scratch но в C този път. И имаше някакъв нов синтаксис, но Наистина няма нови идеи по себе си. Имахме булеви изрази, които бихме могли или заедно с две вертикални барове или и заедно с двама амперсанди, казвайки, че както отляво и правото трябва да е вярно за това да се изпълни. Тогава имахме ключове, които разгледахме най-кратко, но аз предлагам са наистина просто различен синтаксис за постигане на и същи вид на гол, ако знаете в предварително какви са вашите случаи ще бъдат. Разгледахме цикли. A за линия е може би най-често, или най-малко една, че хората обикновено достигне за инстинктивно. Въпреки че това изглежда малко загадъчен, ще видите много, много примери за това Не след дълго, колкото имат вече в края на миналата седмица. Докато линия са също постигане на едно и също нещо. Но ако искате да се направи някаква incrementation или актуализиране на стойности на променливата, трябва да да го направи по-ръчно от за линия преди позволява. И тогава там е не се прави линия, докато, което ни позволява да се направи нещо в поне веднъж, докато нещо друго е вярно. И това е особено добър за програми или за игри, където искате да напомни на потребителя за нещо най-малко веднъж. И тогава, ако той или тя не оказва съдействие, може да искате да го направя отново и отново. С променливи, междувременно, имахме линии от код, подобен на този, който може да да има две линии. Може да обявят нарича Int брояч, точка и запетая. Или може просто да декларират и определят това, така да се каже. Дайте му стойност в същото време. И тогава на последно място, ние говорихме за функциите. И това е хубав пример в смисъл, че тя илюстрира два вида функции. Един от тях е GetString (), който отново получава низ от потребителя. Но GetString () е нещо интересно, доколкото сме го използвали, защото ние винаги сме го използва с нещо на лявата страна на знак за равенство. Така да се каже, че GetString () връща стойност. Тя се връща, разбира се, низ. И след това в лявата страна, ние сме просто спестяване че низ вътрешността на променлива наречена име. Това е различно, в известен смисъл, от ФОРМАТ защото ФОРМАТ, поне в нашия използване тук, не се връща нищо. Като настрана, той не се връща нещо. Ние просто не им пука какво е то. Но тя има това, което е нарича страничен ефект. И това, което е, че страничен ефект във всяка случай сме виждали до този момент? Какво означава ФОРМАТ направя? Той отпечатва нещо на екрана, дисплеи текст или числа или нещо на екрана. И това е само счита за страничен ефект защото това не е наистина предаването Върнете се в мен. Това не е отговор вътрешността на черна кутия, която тогава мога да бръкне в и вземете. Това е просто го правят по своя собствена, много като Колтън е включен в тази черна кутия миналата седмица, и той по някакъв начин магически се опира на борда без мен действително участват. Това би било страничен ефект. Но ако аз всъщност трябваше да достигне обратно в тук и да кажа, о, тук е низ от страна на потребителя, това би да бъде стойност връщане. И до този момент сме само използваните функции че други хора са писали. Но всъщност можем да направим тези всякакви неща сами. Така че аз ще отида в CS50 уреда отново. Позволете ми да затворите раздела, че ние бе отворен преди малко. И нека да вървим напред и създаване на нов файл. И аз ще отида напред и наричаме това един positive.c. Така че аз искам да направя нещо с положителни числа тук. Така че аз ще отида напред и да направим Int - Съжалявам - # Включват. Да не се правят, че същата грешка, както преди. Int основни (свободна), отворена къдрава презрамки, затворена фигурна скоба. И сега искам да направя следното. Искам да напиша една програма, която настоява, че потребителят дава мен е положително число. Така че няма GetPositiveInt функция в CS50 библиотека. Има само GetInt (). Но това е ОК, защото имам конструкции, с които мога да налагат малко повече натиск върху тази стойност. Мога да направя нещо подобно. Така Int N - и ако си пишете заедно, просто осъзнават Аз ще се върна и промените някои неща в момента - така Int н равнява GetInt (). И това ще се сложи едно цяло число вътрешността на п. И нека да бъде по-описателно. Позволете ми да кажа нещо подобно Настоявам ли да ми даде положително число. Добре. Така само малко от инструкции. И сега това, което мога да направя? Е, аз вече знам от моя прост условия или клонове, просто ми харесва имаше в Scratch, бих могъл да кажа нещо като, ако п е по-малка или равна на нула, след това искам да направя нещо като, че не е положителен. И след това не можех да направя - OK, но аз наистина искам да се получи, че вътр. Така че мога да отида до тук и мога да вид копие на тази и тире това. И тогава, OK. Така че, ако п е по-малка или равни на нула направите това. Сега, какво, ако потребителят не си сътрудничат? Е, тогава аз ще взема това тук. И тогава ще отида в тук и тук и тук. Така че това очевидно не е решението, нали? Защото там е краят не се вижда. Ако искам да изиска от потребителя дава ми положително число, мога всъщност става дума за вътр. I може да проверите за това вътр. Но след това искам да го проверите отново и проверите отново и да го проверите отново. Така че, очевидно, какво е по-добре изграждане се използва тук? Добре, значи някаква линия. Така че аз ще се отървете на почти всички от това. И аз искам да се получи това INT поне веднъж. Така че аз ще да кажа, правя - и аз ще се върна към докато в един момент - сега, какво? Аз ще направя Int N получава GetInt (). OK. Така че това е доста добър. И сега колко често Искам да направя това? Нека вкара ФОРМАТ вътрешността на линия така че може да поиска отново и отново, ако е необходимо. И това, което мога да искам това докато състояние да направя? Искам да продължаваш да правиш това докато това е така? Да. П е по-малка или равна на нула. Така вече, ние сме значително почистени този код до. Ние сме привлечени много прост изграждане - В направи линия, докато. Аз бях откраднати само важните линии на кода, който започнах копиране и поставяне, което не е разумно. И сега аз ще действително поставете то тук и просто го направи веднъж. И сега това, което искам да направя в самия край на тази програма? Аз просто ще кажа нещо по-просто харесва, благодаря за - и Ще направя% съм за Int - наклонена черта N, запетая, а след това щепсела в N, точка и запетая. Добре. Така че нека да видим какво ще стане сега когато стартирате тази програма. Аз ще отида напред и правят положителни. По дяволите. Няколко грешки. Така че нека да превъртите обратно до първия. Да не се работи чрез тях назад. Работа чрез тях от горе надолу да не би да каскада и само едно нещо да бъде погрешно. Скритият декларация за функция GetInt (). Да. Така че това не е достатъчно. Някак си направи същата грешка, но малко по-различно и този път. Трябва не само да включват stdio.h но също cs50.h, която включва така наречените декларации за да получите Int, които научи уреда, или учи С това GetInt () е. Така че нека да запишете отново. Отивам да се игнорират други грешки защото аз ще се надявам, че те са по някакъв начин свързана с грешка Аз вече са определени. Така че позволете ми да отида напред и да компилирате с грим положително, Enter. По дяволите. Три грешки, все още. Позволете ми да превъртите до първия. Неизползваните променливи п. Не съм виждал това преди. И това също е малко неразбираем. Това е на изхода на компилатор. И какво, че подчерта линия има - positive.c :9:13 - се казва, тя казва на линия девет от positive.c, на 13-герой, 13 колона, сте направили тази грешка. И по-специално, тя казва ми неизползван променлива п. Така че нека да видим - Онлайн девет. Аз съм с п в смисъл, че Аз съм го придават стойност. Но това, което компилаторът не обича е че аз не съм привидно да го използвате. Но чакай малко, аз съм го използва. В ред 11, аз съм го използвате тук. Но ако превъртите надолу допълнително в positive.c :11 - така че по линия 11, характер 12 г. компилатора ми казва, използването на недекларирания идентификатор п. Така недекларирани означава, че трябва неупоменати, че като променлива с тип данни. Но почакайте. Направих точно това в съответствие девет. Значи някой е наистина объркан. Това е или аз или съставител, защото в съответствие девет, отново, аз съм обявяване на Int N, и аз съм го възлагане на върне стойността на GetInt (). Тогава аз съм с тази променлива N в съответствие 11 и проверка, ако стойността му е по-малко малка или равна на нула. Но това очевидно е лошо и натрошен защо? Кажи го отново? Ах, аз трябва да декларират пред п въвеждане на цикъла. Но защо? Искам да кажа, ние просто предложен малко преди това това е добре да декларират променливи на един ред и след това да им дават някаква стойност. A глобална променлива - нека да се върна към тази идея в един момент. Защо искаш да се сложи то извън линия? Това е. Точно така. Така че, макар и малко нелогично, нека обобщим. Когато се декларират п вътре на не блокират там - специално във вътрешността на тези фигурни скоби - тази променлива п има това, което е нарича обхват - свързани с нашата система за оценка на Разбира се - но има обхват, който е ограничено до тези фигурни скоби. С други думи, най-често, ако декларират променлива в рамките на набор от фигурни скоби, че променливата съществува само вътрешността на тези фигурни скоби. Така че, от тази логика сам, въпреки че Аз бях обявен п в съответствие девет, тя същество изчезва от обхвата, изчезва от паметта, така да се каже, По времето, когато удари линия 11. Поради ред 11, за съжаление, е извън тези фигурни скоби. Така че за съжаление не може да се определи това, като връщайки се към това, което аз съм го направил преди. Може би на първо направим това. Но това, което сега не са прави циклично? Вие очевидно не сте се на вътр циклично. Така че можем да напусне GetInt (), и ние трябва да напуснат GetInt () вътре в линия, защото това е, което искаме да досаждам на потребителя за отново и отново. Но това е достатъчно, за да отидете до линията, да речем, шест. Int N, точка и запетая. Не му се даде стойност, защото все още не е нужно да, просто все още. Но сега тук, забележете - това Би било много лесно грешка. Аз не искам да засенчи предишния ми декларация от п. Искам да използвам на N че действително съществува. И така, сега в линия 10, I възлага п стойност. Но в съответствие шест, декларирам, п. И така, аз може или не може да го използвате в ред 12 в момента? Не мога, защото, между които къдрава скоби е М обявена сега? Този тук, на линия пет. За едно тук, на ред 14. Така че, ако аз сега намалявате, запишете файла, отидете архивирате в и тичам направи положително, то съставен този път. Така че това е вече прогрес. Слаш. . / Положителна, Enter. Настоявам да ми дадеш положително цяло число. Отрицателна 1. Отрицателна 2. Отрицателна 3. Нула. One. И благодаря за един е какво сега отпечатани. Нека да опитам нещо друго, от любопитство. Посочено ми е да въведете цяло число. Но какво ще стане ако вместо да напишете агне? Така че сега виждам различен ред - повторен опит. Но никъде в моя код писах опитайте отново. Така че, когато, вероятно, е това опитайте отново подкани идващи от, бихте ли казали? Да, от GetInt () себе си. Така че едно от нещата, персонал CS50 се прави за вас, най-малко в тези първи няколко седмица, е сме написали някаква сума на проверка за грешки, за да се гарантира, че ако ти се обадя GetInt (), поне ще се върна едно цяло число от страна на потребителя. Ще си низ. Вие няма да получите Чар. Вие няма да получите нещо съвсем друго. Ще получите вътр. Сега, това не може да бъде положително. Тя не може да бъде отрицателен. Ние не правим никакви гаранции, около това. Но ние ще досаждам на потребителя да опита отново, повторен опит, опитайте отново, докато той или тя всъщност сътрудничи. По същия начин, ако го направя, 1.23, че не е Int. Но ако се объркате в, да речем, 50, че ми дава стойност, която исках. Добре. Така че не е зле. Всякакви въпроси за това, което току-що направихте? Ключът за вкъщи е не, за да е ясно, толкова много на линия, която сме виждали преди, въпреки че не сме наистина използват го, но на въпроса за обхвата, когато променливи може да се може да се използва в някои определен обхват. Добре, нека да отговори на предложението ти по-рано, че на глобална променлива. Като настрана, се оказва, че друг Решението на този проблем, но обикновено неправилно разтвор или недобре изградения разтвор, е да декларирате променлива като това, което е нарича глобална променлива. Сега аз съм един вид нарушаване моята дефиниция на обхвата, защото има не фигурни скоби на самия връх и на самото дъно на даден файл. Но влиянието на тази е, че сега в четвърти ред, п е глобална променлива. И както подсказва името, това е само достъпни навсякъде. Scratch всъщност има тези. Ако сте използвали променлива, можете да си спомните трябва да избирате дали това е за този спрайт или за всички спрайтове. Е, всички спрайтове е само на ясна начин да се каже глобална. Да? Ах, наистина добър въпрос. Така се припомни, че още в първата версия на моя код, когато неправилно декларираните и определени н в съответствие девет - Аз го декларирани като променлива и аз го даде стойност с оператора за присвояване - Това ми даде две грешки. Едно, че п не е използвана, и второ, че в съответствие 11 това просто не е обявена. Така че първият не го направих адрес към момента. Това не е точно грешка да обяви променлива, но не го използвам. Но едно от нещата, които сме правили в CS50 на уреда, умишлено, педагогически, е сме извит на Очакванията на компилатора да направи уверите, че правиш неща, които не само правилно, но наистина правилно. Защото ако си за обявяване на променлива като п и никога не го използвате, или да го използвате правилно, тогава какво го прави там? Това наистина е безпредметно. И това е много лесно с течение на времето, ако не конфигурирате вашия собствен компютър в по този начин, просто да има код, който е малки останки тук, останки там. И след това месец по-късно погледнете назад и вие сте като, защо е тази линия на код там? И ако няма основателна причина, той не се възползват вас или вашите колеги надолу по пътя, да се наложи да препънат над него след това. Като настрана, където е че идва? Е, припомни, че всеки път, когато съставят програмата, всички тези неща е да се отпечата. Така че ние ще се върнем към това. Но отново, да е инструмент, който автоматизира процеса на съставяне от работи действителната компилатор нарича звън. Това нещо, ние в крайна сметка ще видите, има общо с отстраняване на грешки със специална програма, наречена дебъгер. Това е свързано с оптимизиране на код - повече за това в бъдеще. Std = c99 - това просто означава, използвайте 1999 версия на C. C е от вчера още по-дълго, отколкото това, но те направиха някои хубаво промени плюс 10 години. А ето и съответните такива. Ние казваме, направи нещо, което преди са били предупреждение грешка предотвратяване на студента от компилиране. И стенни средства направя това за цял куп неща, не, само свързани с променливи. И след това да ме превъртете до края на тази линия. И това също, ние в крайна сметка ще се върна. Това е очевидно името на файла съм компилиране. Това припомня името на файла Аз съм извежда като името на моя изпълнима програма. Това-lcs50 просто означава, използвайте CS50 библиотека, както и всички нули и тези, които персонала пише и компилира по-рано тази година, се интегрират тях в моята програма. И всеки, който знае какво-LM е? Това е математика библиотека, която е само там, дори ако сте не стори никакво математика. Това е просто предоставят автоматично ни от направи. Е, нека да направим един друг пример тук чрез отваряне на нов файл. И нека ме спаси това, както string.c. Оказва се, че като говорим за данни видове и до днес е още по- става под капака отколкото сме виждали досега. Така че нека бързо да направи бърза програма. Включи stdio.h. И аз ще спести това. И знаеш ли, нека да не се правят на същата грешка отново и отново. Включи cs50.h. И нека да вървим напред сега и направи Int основни (свободна). И сега, аз просто искам да направя една програма който прави това - да се установи низ наречен S и да получите низ от страна на потребителя. И нека направя малко инструкции тук - Моля, дайте ми един низ - така ръководство знае какво да прави. И след това тук под тази, Искам да направя следното - за средно и стане нула. Отново, компютърни специалисти обикновено започва да брои до нула, но бихме могли направи, че един, ако ние наистина искахме. Сега отивам да правя аз, е по-малко от дължината на низа S. Така че strlen - S-T-R-L-E-N - Отново, това е кратка, защото е по-лесно с типа, въпреки че това е малко загадъчен. Това е функция, не съм използвал преди, но буквално прави това - върне при мене с номер, който представлява Дължината на низ че потребителят написали. Ако при въвеждане здравей, тя ще се върне пет, защото има пет буквите в здравей. След това, на всяка итерация на този цикъл, аз плюс плюс. Така че отново, стандартен изгради дори ако не сте съвсем твърде удобно или запознати с него, все още. Но сега на всяко повторение на този цикъл, забележите това, което аз ще направя. Искам да отида напред и да отпечатате от един символ - така наклонена черта% в п на нов ред. И тогава, знаеш ли какво искам да направя? Каквато и да е дума е, че потребителят в подобно Здравейте, искам да отпечатате H-E-L-L-O, един символ на ред. С други думи, аз искам да отида в отделните знаци в низ, което до сега е просто низ е поредица от символи. И се оказва, което мога да направя и, скоби Аз, в близост скоба, затворете скоби, точка и запетая. И аз трябва да направя още нещо. Това е във файл, наречен string.h че strlen е обявена. Така че, ако искате да използвате тази функция, Трябва да кажете на компилатора, Очакваме да го използвам. Сега нека да вървим напред и да на програма, наречена низ. Dot, наклонена черта, низ. Моля, дайте ми един низ. Аз ще отида напред и да го въведете. Здравейте, във всички капачки, Enter. И сега съм забележите печатни тази един знак след друг. Така новият детайл тук е, че низ, в края на краищата, може да бъде достъпни чрез своя индивидуален героите чрез въвеждане на площада скоба нотация. И това е така, защото низ под капака е наистина последователност на героите. Но това, което е чист за тях е, в оперативната памет - Mac, PC, каквото и да е - те са буквално обратно към Насрещен - Н-Е-Л-Л-О - на индивидуално, в непосредствена близост байта в паметта. Така че, ако искате да получите по време на осмото като байт, който в този цикъл ще бъде скоба нула, скоба една скоба две, скоба три, четири скоба - това е нула индексира нагоре, докато пет - , която ще се разпечатва H-E-L-L-O по своя собствена линия. Сега, като закачка, позволете ми да ви покаже всякакви неща, в крайна сметка ще бъде в състояние да разберат, най-малко с някои внимателно търсите. От една страна, това, което сме включени в днешната примери, ако искате, е всъщност един от първите Jailbreaks за iPhone. Съвети и трикове означава напукване на телефона така че всъщност можете да го използвате на друг превозвач или инсталиране свой собствен софтуер. Ще забележите това изглежда напълно загадъчен, най-вероятно. Но виж това. В iPhone е очевидно крекинг с за линия, ако е състояние, на друго състояние, един куп функции не съм виждал. И отново, не ще в пръв поглед вероятно разбере как работи. Но всичко, което някак се за даденост в нашия модерен живот всъщност е да намали дори до известна на тези основи ние сме били разглежда. Нека да вървим напред и да се открие една друга програма, holloway.c. Така че това също е нещо, което не трябва да знаят. Дори никой от персонала или можах вероятно разбера това, като погледнете в Дали защото това е нечий код че бе подадено до това, което е исторически известен като завоалира C конкурс, където се напише програма която съставя и работи, но е така, по дяволите загадъчен никой човек може да разбере какво това ще направя, докато те всъщност го стартирате. Така че наистина, ако се вгледате в това код, виждам ключ. Виждам главната. Виждам тези квадратни скоби, което означава, някакъв масив. Някой иска ли да се отгатне какво тази програма действително прави, ако пускам Holloway? Да. OK. Браво. Така че само персоналът и аз не мога да разбера какво тези неща правя. И сега, накрая, нека да вървим напред и да се отворят една друга програма. Това едно - отново, ще направи изходния код достъпни онлайн - това е просто вид доста за гледане. Всички те направиха, е хит на бар пространство доста малко. Но това е реално код. Така че, ако смятате, че е доста, ако всъщност стартирате тази в командния ред, в крайна сметка ще видим как можем може да направи нещата по този начин. Така че ние ще ви оставя на тази бележка и ще се видим в сряда. [За възпроизвеждане на музика] SPEAKER 2: На следващото CS50, на TFS организират бунт. SPEAKER 3: Това е той. Хванете го! [За възпроизвеждане на музика]