[Музички] David J MALAN: Сите во право, добредојде назад кон CS50. Ова е почеток на недела две. Еден збор од еден од нашите пријатели на кампусот - ако сте заинтересирани, веројатно, било сега или во некое идно терминот дури, еднаш поудобно, настава средно училиште студентите малку нешто во врска со компјутерски науки, направи главата кон оваа адреса. Тие се во посебна потреба во моментов на наставници, особено ако имате имаше некои изложеност на компјутерските науки. Па се потсетиме дека минатиот пат, воведовме неколку типови на податоци во C, и може да почнаа да ја добиете вашата раце валкани со овие досега во проблемот се постави еден. И имавме знак. Па во малку технички термини, што е знак како што го знаеме денес? Па тоа е карактер, но, ајде да бидеме попрецизни сега. Што мислиме со карактер или поединец знак? А не-нумеричка карактер - па не мора да значи. Излезе дека дури и броеви, па дури и интерпункциски знаци и букви се претставен со овие податоци тип познат како знак. Па тоа не е нужно азбучен. Да? Па ова е ASCII карактер. Значи, ако мислите назад кон недела нула, кога имавме бајт на волонтери излезе и или ги држат нивните раце или не и сите, тие претставуваат бита. Но колективно како група од осум, тие претставуваат еден бајт. И ние го воведе поимот на ASCII во тоа предавање, која едноставно е мапирање помеѓу броеви и букви. И ASCII намени, како оние на луѓето имплицираната, осум битови да претставува лик. Па соодветно на тоа, ако осум битови може да секој ги преземе за една од двете вредности - нула или еден - тоа значи дека има две можности за ова лице - нула или еден - две за ова лице, две за ова лице, две за оваа. Така вкупно два пати два пати два пати два пати два - па две осмиот во вкупно. Па постои вкупниот број на карактери 256 можно дека можете да претставуваат со осум бита. Сега, оние од вас кои зборуваат Азија јазици би можеле да знаат дека има повеќе ликови во светот отколку само Како и B и акредитиви и Д. И навистина, ASCII не се доволни за многу јазици на светот. Но повеќе за тоа друг пат. За сега, знам дека во C ако сакате да ги претставуваат писмо, едно парче од интерпункциски знаци, или само нешто карактер во природата, ние ги користиме знак. И тоа е еден бајт или осум бита. Како за int? Па, со int е цел број. Колку битови, ако се сеќавате, беше цел број обично? Секој потсетиме? Па тоа е обично 32. Тоа всушност зависи од компјутер дека сте користење. Но во апаратот, и во многу компјутери, тоа е 32 бита или четири бајти - осум пати четири. И ints се користат само за складирање броеви, или негативна, позитивен или нула. И ако имаш 32 бита и ти само грижат за позитивни броеви, може да секој груба проценка колку е можно цели броеви компјутер може да претставува од нула на до? Па тоа ќе биде од два до 32, кои е околу четири милијарди долари. Па овие сили на двете ќе бидат Повторувачки теми во компјутерски науки. Како што ќе видиме, тие се доста удобен да се работи со дури и ако тоа не е сосема лесно да го направите математика во главата. Па ние ќе се каже околу четири милијарди долари. Сега, долго долго - можете да вид на се погоди. Тоа е повеќе отколку Инт. Колку битови? Па 64 бита или осум бајти. Ова само значи дека може да претставува дури и поголеми броеви, поголем позитивен или поголеми негативни броеви. И како за плови? Тоа е подвижна запирка вредност од 32 бита. Ова е само еден вистински број, нешто со децимална точка. Но ако наместо треба повеќе места по децималната точка или сакате да претставуваат поголем број со некои фракција по него, можете да го користите двојно, што е 64 бита. Но, има една интересна готова брза тука. Па ако ints се ограничени од 32 бита и дури и долго време копнее се ограничени од 64 битови, тој вид на моли на прашањето: што ако навистина сакаш да се избројат повисока од 4 милијарди за int? Па, ти само го користите долго долго. Но што ако сакате да се избројат повисоко од два до 64, се дава или зема? Сега, тоа е огромен број. Но на крајот, можеби, всушност, се грижи за овие видови на вредности, особено ако сте со користење на база на податоци и почнуваат да се соберат многу, многу и многу податоци и доделување на единствена броеви на секое парче на тие податоци. Па ние вид на имаат проблем. И слично, со подвижна запирка вредности - лебди или двојки - ако сте само добив конечен број на битови, колку вкупниот број може да ви можеби претставуваат? Па, тоа е помалку јасно кога ќе вклучуваат децимална точка. Но, тоа е сигурно конечни. Ако имате ограничен број на битови, конечен број на луѓето, конечен број на светилки, сигурно може да само што претставуваат конечен број на подвижна запирка вредности. Но колку реални броеви се нивните во светот? Таму е бесконечна. Па тоа е вид на проблем, бидејќи ние немаат бесконечна сума на меморија или RAM меморија во внатрешноста на нашите компјутери. Па некои предизвикувачки работи може да се случи. Па ајде повелете и обидете се да го изразат овој овде. Дозволете ми да оди напред и да се отвори gedit. Одам да се оди напред и да ја зачувате датотеката наречен "floats0.c" само за да бидат во согласност со пример што е достапни на интернет, ако би сакал. И јас одам да се оди напред и да дефинира како што следи - Одам да се оди напред и да се каже, int Главната празнина, како што често се направи. А потоа во оваа програма, ќе одам да се се декларирам плови, па 32-битна променлива наречена ѓ, произволно. А потоа јас ќе одам да ја запази во него Не знам, една десетина, па 0.1. Па ќе одам да се изрази дека како еден поделено со 10, што е совршено легитимни во C. А потоа на втората линија, јас едноставно сакате да испечатите таа вредност. Па се потсетиме дека можеме да го користиме познатите printf. Ние не сакаме да го користите% i за Инт. Ние сакаме да го користите% f за плови. А потоа јас ќе одам да направите обратна коса црта n, Затвори цитат, запирка, f, точка-запирка. Па овде е мојата програма. Има веќе еден бубачка. Дали некој за кого ова кликна веќе сакаат да го посочат барем една бубачка што сум направил? Да? Да. Го заборавив "# вклучуваат" на врвот, тие симптом на кој, ако јас се обидувам да собере тие се случува да биде дека компајлерот се случува да се развикам на мене, велејќи недефиниран симбол или нешто за таа цел. Тоа не разбирам нешто како printf. Па јас ќе одам да направите "# вклучуваат ", Ја зачувам датотеката. И сега е во подобра форма. Но јас сум исто така, ќе се укаже од еден нов детал денес. Во прилог на специфицирање место носители како% f% i% s, можете да понекогаш се влијае на однесувањето на кои случаеви. На пример, во случај на подвижна точка вредност, ако јас само сакам за да се прикаже едно децимално место по период, јас всушност може да направи 0.1f. Значи со други зборови, јас се разделиме f и на знакот за процент со 0.1, само кажува printf, може да имаат цела куп на броеви по децималната точка за мене. Но јас само сакам да видам еден од нив. Па ќе одам да се оди напред сега и заштедете оваа програма, одам во мојата терминал прозорецот, и јас одам да се оди напред и видот направи плови 0, внесете. Гледам дека малку криптичната линија која ќе почнат да се направи повеќе смисла како што ние душманке тоа, освен оваа недела и следната. Сега ќе одам да се оди напред и да ја стартувате плови нула. И, по ѓаволите. Значи има уште еден баг тука поради некоја причина. Јас сум прилично сигурен дека една десетина, или еден поделено со 10, не е 0,0. Можеби и јас не сум само барате на доволно цифри. Па зошто да не можам да кажам две 0,2 за да ја видите две децимални места, наместо на само еден. Дозволете ми да се вратам на моето терминален прозорец тука и хит до неколку пати да види мојата историја. Го прават плови нула повторно, а потоа повторно. А сега влезе. И сега јас сум прилично сигурен дека ова е погрешно. И јас не можеше да стори три и четири, и јас сум веројатно нема да ги гледате нули. Значи каде е грешка? Еден поделено со 10 треба да биде 0,1. Некој сака да земе прободе во она што основното прашање е? Да? Тие се двете цели броеви. Па што? Така да со еден поделено со 10, тоа е она што го правам во самата аритметика. И јас се добие 0.1. Да. И така тоа е навистина тоа прашање. Кога ќе се земе цел број во компјутер и ќе го подели со друг број, на компјутерот од страна стандардно се случува да се Претпоставуваме дека сакате цел број. Проблемот иако, се разбира, е дека 0,1 не е цел број. Тоа е вистински број. И така што компјутерот го прави од страна на Стандардно е тоа само фрла сè по децимална точка. Тоа не коло надолу или нагоре по себе. Тоа само фрла сè што по децималната точка. И сега тоа има смисла. Бидејќи сега сме јасно замина со нула. Но, чекајте. Јас не гледам на int нула. Јас сум всушност гледаат 0.00. Па како можам да се помират ова сега? Ако еден поделено со 10 е нула, но јас сум види 0,00, каде што е тоа добивање конвертира назад на вистинскиот број? Да. Токму така. Значи до тука во пет линија, кога јас всушност продавница, во којашто 0,1, што е тогаш скратена на нула, во внатрешноста на плови, тоа е ефикасно еквивалентно на чување не е тоа како int, но, навистина, како рационален. Згора на тоа, јас сум потоа со помош printf да експлицитно се печати тој број до две децимални места иако има може да не е всушност да биде било. Така овој вид на смрди, нели? Очигледно не можете да направите математика, барем на ова ниво на прецизност, во компјутер. Но сигурно има решение. Што е наједноставниот фикс би можеле да можеби стори, дури и само интуитивно тука за да реши ова? Да? Завртете го копчето за цели броеви во - је. Дури и ако јас не сум сосема сигурен што е навистина се случува овде, ако тоа фундаментално треба да се прави со овие двете се ints, добро, зошто да не можам направи таа 10,0, правејќи го овој 1.0, resave на датотеката. Дозволете ми да се врати долу на дното и прекомпајлирате. А сега допуштете ми повторување. И таму - сега, имам мојата една десетина претставен како 0,10. Сите во право. Па тоа не е лошо. И дозволете ми да истакнам еден друг начин ние би можеле да се реши ова. Дозволете ми да всушност се тркалаат назад во времето кога имавме ова како еден десетина пред еден миг. И дозволете ми да оди напред и да resave оваа датотека како друго име на датотека, само за да имаат малку пункт. Така што беше верзија еден. И сега дозволете ми да оди напред и да направи уште една верзија. Ние ќе го наречеме оваа верзија два нула индексирани. И јас одам да наместо да прават ова - знаеш што? Додавање точка нула работи во овој случај. Но, да претпоставиме некој требаше променлива. Би требало 10 беа променлива. Со други зборови, да претпоставиме дека не можев само тешко-код 0,0 на крајот на овој аритметички израз. Па, јас всушност може да направи нешто во загради се нарекува кастинг. Јас може да фрли дека цел број 10 до број со подвижна запирка, и јас може да фрли дека цел број еден на плови, како и. Тогаш математика што се случува да се направи е ефикасно 1,0 поделено со 10,0, резултат на што оди во ѓ како порано. Значи, ако јас го прекомпајлирате ова како да лебди 2, и сега плови 2, јас го добиете истиот одговори, како и. Значи ова е прилично измислена пример, за решавање на овој проблем со воведување на кастинг. Но, во принцип, леење ќе биде моќна работа, особено за Проблемот постави две во време една недела, кога сакате да го конвертирате еден тип на податоци да друго, кое на крајот од денот се претставени во ист начин. На крајот на денот, секој нешто ние разговаравме за досега е само ints под хауба. Или ако тоа е премногу ниско ниво за вас, тие се само бројки под хауба. Дури и ликови, повторно, да се потсетиме од недела нула, се броеви под хауба. Што да се каже, ние може да конвертирате помеѓу различни типови на броеви ако тие се само делови. Ние може да конвертирате помеѓу броеви и писма, ако тие се само битови, и обратно. И леење на овој начин е механизам во програмирањето, кој ви овозможува насилно промена на еден тип на податоци на друг. За жал, ова не е толку јасна како би можел да се допадна. Одам да се врати во лебди 1, кој беше поедноставно, повеќе јасна еден со 0,0 додадени на едни. И само како брз бакшиш, дозволете ми да оди напред и да го прекомпајлирате ова, бидете плови 2 - Жал ми е, ова е да се направи плови 1. И сега нека се кандидира плови 1. И во долниот дел, забележите дека јас навистина се добие 0.1. Значи, проблемот решен. Но сеуште не е. Јас сум сега се случува да се добие малку љубопитни, и јас одам да се вратам во мојата printf изјава и да речеме, знаеш што? Би сакал да се потврди дека овој е навистина една десетина. И јас ќе одам да сакате да го видите ова да речеме, пет децимални места. Тоа не е некој проблем. Јас го промените две до пет, Јас го прекомпајлирате со направи. Јас повторување како лебди 1. Овде сум прилично добар. Мојата разумност проверки може да заврши таму, но Јас сум добивање малку повеќе авантуристички. Одам да се промени 0,5-0,10. Сакам да ја видам 10 цифри, по децимално место. И јас одам да се оди напред и да го прекомпајлирате ова и повторување плови 1. Јас вид на жалење ја тестираат оваа понатаму, бидејќи мојата математика не е толку поправи веќе, се чини. Но, чекајте, можеби тоа е само среќа. Можеби компјутерот ви е глума малку чудно. Дозволете ми да оди напред и да се направи 20 децимална поени и јас ги убеди дека јас знам како да направите математика. Знам како да програма. Направи плови 1, повторно компајлирајте и ѓаволите. Тоа е навистина, навистина станува далеку од вистината. Значи она што се случува тука? Интуитивно, врз основа на нашите претпоставки претходно за големината на типови на податоци, она што мора да се случува овде под хаубата? Да? Токму така. Ако сакате ова многу прецизност, и тоа е подлец на многу прецизност - 20 броеви по децималната точка. Вие не може да претставуваат произволен број освен ако не сте произволен број на битови. Но, ние не правиме. За плови, имаме само 32 бита. Па ако 32 бита само може да се permuted во начин - исто како и нашите луѓе на, сцената рацете нагоре или надолу - во ограничен број на начини, има само ограничен број од реални броеви може да претставуваат со оние бита. И така на компјутер на крајот се случува да мора да проектот за сечење агли. На компјутерот може да се скрие оние детали од нас за малку време. Но ако почнеме ѕиркаа на броеви и да гледа подалеку и подалеку на заостанува броеви во целиот број, тогаш ние почнуваме да видите дека тоа е всушност приближување на Идејата за една десетина. И така што се испоставува, трагично, има бесконечен број на броеви ние не може да претставува токму во компјутер, барем со конечни број на битови, конечен износот на RAM меморија. Сега за жал, тоа понекогаш има реални последици. Ако луѓето не сосема ценат тоа или вид на земаме здраво за готово фактот дека нивниот компјутер само ќе го направи она што тие го каже да го стори и не се разбере овие основни застапеност детали - која, искрено, во некои јазици се скриен од корисникот, за разлика во C - некои лоши работи може да се случи. И она што мислев дека би го сторила е да направиме чекор назад. И ова е за еден осум-минутно видео. Тоа се емитуваше пред неколку години, и тоа му дава увид во всушност она што може да оди не е во ред, кога ќе под-ценат овие видови на детали во самиот сите премногу реалниот свет. Ако можеме да ја придуши го светла за неколку минути. ЗВУЧНИК 1: Ние сега се врати на инженеринг катастрофи на Современ чуда. Компјутери - сме сите доаѓаат да го прифати честопати фрустрирачки проблеми кои одат со нив. Грешки, вируси, и софтвер баговите се мали цени да плати за погодност. Но во high-tech и со голема брзина воена и вселенска програма апликации, најмалиот проблем може да се зголемува во катастрофа. На 4 јуни 1996 година, научниците подготвени да започне беспилотни Ariane 5 ракета. Тоа беше спроведувањето научни сателити со цел да се воспостави точно како Магнетното поле на Земјата се поврзува со соларни ветрови. На ракетата била изградена за Европската Вселенска агенција и крена надвор од своите објект на брегот на Француска Гвајана. ЖАК GANSSLE: На околу 37 секунди во на летот, тие прво забележале нешто се случува не е во ред. На прскалките се врти во начин тие навистина не треба. Околу 40 секунди во лет, јасно на возилото беше во неволја. И тоа е моментот кога тие го направија Одлуката да го уништат. Опсегот безбедност офицер, со огромна храброст, притиснав на копчето, разнесе ракета, пред да се стане опасност за јавната безбедност. ЗВУЧНИК 1: Ова беше прво патување на Ariane 5, а неговото уништување се одржа поради недостаток вградени во софтверот на ракетата. ЖАК GANSSLE: Проблемот на Ariane беше тоа што таму беше број дека потребните 64 битови да го искажам. И тие сакаа да го конвертирате на 16-битен број. Тие претпоставуваат дека бројот никогаш не беше ќе биде многу голема, дека повеќето од тие цифри во 64-битна број беа нули. Тие беа во право. ЗВУЧНИК 1: Неспособноста на еден софтвер програма за прифаќање на каков вид на број генерирани од страна на друга беше во коренот на неуспех. Развој на софтвер стана многу скапи дел од новата технологија. На Ariane 4 ракета беше многу успешна, па голем дел од софтверот создадени за тоа беше, исто така, се користат во Ariane 5. Филип COYLE: основниот проблем беше дека Ariane 5 беше побрз, забрза побрзо. И софтверот не сте имале отпаѓаа за тоа. ЗВУЧНИК 1: Уништувањето на ракета Беше тоа една огромна финансиска катастрофа, сите се должи на една минута софтверска грешка. Но, ова не е првпат податоци конверзија проблеми го мачеа модерна ракета технологија. ЖАК GANSSLE: Во 1991 година, со почеток на Првата заливска војна, Патриот ракетен помина низ сличен вид на голем број конверзија проблем. Како резултат на тоа, 28 американски војници беа убиени и околу 100 ранети кога Патриот, кој требаше да се заштити од влезните Scuds, не успеа да оган проектил. ЗВУЧНИК 1: Кога Ирак го нападна Кувајт и Америка започна Пустинска бура во почетокот на 1991 година, Патриот проектили батерии беа распоредени за заштита на Саудиска Арабија и Израел од ирачките Скад ракетни напади. Патриот е американска среден опсег земја-воздух систем произведени од страна на на компанијата Raytheon. THEODORE Постол: Големината на Патриот пресретнувачи сам по себе е приближно 20-метри долга. И тежи околу £ 2000. И таа носи боева глава од околу - Мислам дека тоа е околу 150 фунти. И боева глава сам по себе е висок експлозив кој има фрагменти околу неа. На обвивка на боева глава е дизајниран да се однесуваме како buckshot. ЗВУЧНИК 1: Проектилите се вршат четири по контејнер и се транспортираат од полу приколка. Филип COYLE: На Патриот анти-ракетен системот се навраќа на најмалку 20 години. Првобитно таа беше наменета како на одбраната воздух проектили да соборат непријател авиони. Во првата Заливска војна, кога таа војна дојдоа заедно, Армијата сакаше да ја користите да ги соборат Scuds не, авиони. На ирачката воздухопловните сили не беше па голем дел од проблемот. Но на Армијата е загрижен за Scuds. И така тие се обиделе да се надополни Патриотскиот. ЗВУЧНИК 1: зграпчување на непријателот проектили патуваат на Мах пет беше ќе треба да се предизвик доволно. Но кога Патриот бил пренесен во услуга, Армијата не бил свесен на Ирачкиот модификација што го направија нивните Scuds речиси невозможно да се погоди. THEODORE Постол: Што се случи е Scuds кои беа доаѓаат во се нестабилни. Тие се ниша. Причината за ова беше Ирачани, во цел да се добие 600 километри надвор од 300 километри дострел, зеде тежина од пред боева глава. Тие го направија боева глава полесни. Па сега на Патриотскиот се обидува да дојде на Скад. И поголемиот дел од времето, големо Поголемиот дел од времето, тоа би само летаат од Скад. ЗВУЧНИК 1: Откако Патриотскиот систем оператори реализира Патриот пропуштени нејзината цел, тие детонираше на патриоти боева глава да се избегнат можните жртви, ако тоа е дозволено да падне на земјата. THEODORE Постол: Тоа беше она што најмногу луѓето видоа како голема fireballs во небото и неразбран како оската на Скад боеви глави. ЗВУЧНИК 1: Иако во текот на ноќта небо Патриоти се појави да биде успешно уништувајќи Scuds, во Дахран таму може да има грешка во врска со нејзините перформанси. Таму, радарски систем Патриот е изгубена ги пратите на дојдовен Скад и никогаш не започна се должи на софтвер пукнатина. Тоа беше Израелци кои за првпат се откриени дека колку подолго системот беше, толку е поголема временска неусогласеност стана се должи на часовникот вградени во компјутерот на системот. ЖАК GANSSLE: За две недели пред Трагедијата во Дахран, Израелците пријавен во Министерството за одбрана дека системот е губење на време. По околу осум часа од трчање, тие забележале дека системот е станува значително помалку точни. Министерството за одбрана одговорија со кажува на сите Патриот батерии да не остави на системите на долго време. Тие никогаш не рече она што долго време беше. Осум часа? 10 часа? 1000 часа? Никој не знаеше. ЗВУЧНИК 1: Патриот батерија стационирани во касарната на Дахран и нејзините недостатоци внатрешниот часовник беше на повеќе од 100 часа во ноќта на 25 февруари. ЖАК GANSSLE: Тоа следи пат на точност од околу една десетина од секунда. Сега, една десетина од секунда е интересни број, бидејќи не може да биде изразени во бинарен точно, што значи тоа не може да се изрази токму во секој модерен дигитален компјутер. Тоа е тешко да се поверува, но го користите ова како пример. Да го земеме на број една третина. Една третина не може да се изрази во децимална точно. Една третина е 0,333 случува на за бесконечност. Не постои начин да го направите тоа со апсолутна точност во децимални. Тоа е токму на ист вид на проблем што се случи во Патриот. Колку подолго системот трчаше, на Најлошото време грешка стана. ЗВУЧНИК 1: По 100 часа на операција, грешката во тоа време беше само околу една третина од секунда. Но во однос на таргетирање на проектили патуваат на Мах пет, тоа резултираше во СЛЕДЕЊЕ грешка од над 600 метри. Тоа ќе биде фатална грешка за војниците на Дахран. THEODORE Постол: Што се случи е Скад лансирање беше откриен од страна на почетокот предупредување сателити. И тие знаеја дека Скад доаѓаше во нивната општа насока. Тие не знаат каде доаѓа. ЗВУЧНИК 1: Тоа беше сега до радар компонента на Патриотскиот систем одбрана на Дахран да се лоцираат и да ја задржите ги пратите на влезните непријател проектили. ЖАК GANSSLE: На радар беше многу паметни. Тоа всушност ќе следи позицијата на на Скад и потоа се предвиди каде што најверојатно, ќе биде следниот пат на радарот испрати пулсот надвор. Тоа беше наречен спектар портата. THEODORE Постол: Потоа еднаш на Патриотскиот одлучува доволно време помина да се оди врати и да го провери следната локација за оваа откриен објект, тоа оди назад. Па кога таа отиде назад во погрешно место, тогаш не гледа објект. И тој одлучува дека не постои објект, тоа беше лажна откривање и капки на патеката. ЗВУЧНИК 1: На дојдовен Скад исчезна од радарскиот екран, и секунди подоцна го тресна во касарната. На Скад убиени 28 и беше последен отпуштен за време на Првата заливска војна. Трагично, ажурирани софтвер пристигна на Дахран наредниот ден. На софтвер пропустот бил фиксен, затворање на едно поглавје во проблематичниот историјата на Патриот проектили. Патриот е, всушност, акроним за Фазен Низа Следење Пресретнат на целните. David J MALAN: Сите во право, па отрезнувачки пример, за да бидете сигурни. И за среќа, овие пониско ниво грешки не се нешто што ние ќе обично имаат да се цениме, секако, не со некои од нашите најрано на програми. Наместо тоа, повеќето од бубачки да ќе средба ќе биде логички во природата, синтаксички во природата при што кодот едноставно не работи во право. И знаеш дека прилично брзо. Но особено кога ќе дојде до крајот на семестарот, тоа се случува да стана се повеќе и повеќе на можноста за навистина мислам тешко за дизајн од вашите програми и основните застапеност таму, исто така, на податоците. На пример, ние ќе се воведе MySQL, која е популарна база на податоци моторот дека можете да го користите со веб-сајтови да се складирање на податоци на задниот крај. И ќе мора да почне да одлучува во На крајот на семестарот, не само што типови на податоци, заедно овие линии да се користи но точно колку битови за користење, дали или не сакате да го зачувате датуми како датуми и времиња што пати, и, исто така, работи како колку е голема сакаш уникатен ИД да биде за, да речеме, на корисниците во вашата база на податоци. Всушност, ако некои од вас имале Фејсбук сметките за сосема извесно време, и знаеш како да се добие пристап на вашиот кориснички ID - што понекогаш се појавува во вашата профилот на URL на освен ако не сте ја одбрале прекар за URL, или ако сте користи Фејсбук График API, јавно достапни API, со кој можете може да побара Фејсбук за необработените податоци - може да се види она што вашите нумерички проект е. И пред неколку години, Фејсбук суштина мораше да ја промени од користење на еквивалент на ints за користење на долго долго, бидејќи со текот на времето како корисниците се и да си одат и да се создаде многу сметки и лажни сметки, па дури и тие многу лесно беа во можност да ги исцрпиме нешто како 4 милијарди можна вредност како int. Толку повеќе на овие видови на прашања по патот, како и. Добро, така што беше кастинг. Тоа беше непрецизност. А неколку брзи пораки. Значи делови формално започне оваа доаѓаат Недела, понеделник, вторник. Ќе слушнете преку е-маил подоцна оваа недела како да се вашиот дел задача. И ќе исто така, тука во тој момент како да го промените вашиот дел ако вашиот распоред сега е изменета или вашиот удобност ниво сега е изменета. Во меѓувреме P-сет еден и хакерски еден се поради овој четврток, со опција да го продолжи тој рок е опишано во спецификации за петок во типичен начин. Сфатат дека се вклучени со проблемот сет спецификации се инструкции за како да се користи CS50 апаратот, да, како и некои CS50 специфични алатки како 50 стил, кој може да ви обезбеди со повратни информации динамички на квалитетот на вашиот код стил и, исто така, провери 50, кои може да ви обезбеди со динамичен повратни информации за вашиот кодот е коректност. Прости, дека ние сме сеуште пеглање од неколку kinks со чек 50. Неколку од своите соученици кои ја почне околу 04:00 во петокот вечерта кога на спец отиде да се забележи, бидејќи тогаш неколку грешки кои ние работиме преку, како и извинување за секој кој има доживеано непотребно фрустрации. Грешката е моја. Но ние ќе се надоврзе на CS50 разговараат кога тоа е решено. Па еден збор на резултати себе. Па тоа ќе биде една недела или две пред да почне да се добијат повратни информации за проблемот сетови затоа што сеуште не ги имаат настава колеги. Па дури и тогаш, ние ќе започнеме да се оцени проблемот Ц поставува пред ние врати се назад и оцени нула, па дека можете да добиете повеќе релевантни повратни информации побрзо. Но, во принцип на наставната програма, CS50 проблем поставува се оценува по должината на по четири оски - обемот, точноста, дизајн и стил. Опфатот се случува да биде број обично помеѓу нула и пет кои доловува колку од парче што сте малку надвор. Обично, сакаш тоа да биде пет. Ти барем се обидел сè. И ќе забележите дека тоа е помножителен фактор така што прави само дел од проблем во собата не е најдобрата стратегија. Во меѓувреме, повеќе од очигледна е важноста на точноста - само е вашата програма правилно со однос на спецификација? Ова е бројат намерно повеќе во голема мера од другите две оски со фактор на три, бидејќи ние ја признаваме кои обично си оди за да поминат многу повеќе време си поигруваше со одредување на некои грешки, добивање на вашиот код да работат, тогаш се тоа вовлекување и изборот соодветни променлива имиња и допаѓа, кој е на другиот крај од спектарот на стил. Тоа не е да се каже стил не е важно, и ние ќе го проповеда над време и во предавања и во делови. Стил се однесува на естетиката на вашиот код. Дали сте го одбрале добро име променливи кои се кратки, но малку описни? Е вашиот код вовлечен како што сум го видел во предавање и на начин во согласност со стил 50? И на крај е правото на дизајн таму во средината. Дизајн е потешко еден да се стави прст на, бидејќи тоа е многу повеќе субјективни. Но тоа е можеби најважниот од три оски во однос на педагошки вредност со текот на времето и дека ова ќе биде наставата колеги е можност да се ви обезбеди со квалитативни повратни информации. Навистина, во CS50 иако ние немаме овие формули и резултати, на крајот на ден овие се многу намерно многу мали кофи - точка вредности меѓу нула и три и нула и пет. Ние не се обидуваме да се подготви многу груб линии помеѓу проблемот поставува или помеѓу студентите, туку се фокусира колку што е можеме на квалитативна, longhand повратни информации, или внесе или вербална од вашиот особено настава колеги, ќе добиете да се знае доста добро. Но, во принцип, оние кои се на тегови дека различните оски ќе ги имаат. Во меѓувреме, исто така, тоа е вреди да се зачува во ум дека не треба да се претпостави дека три од пет е 60% и Затоа грубо неуспешна. Три е намерно замислена да биде вид на средината на патот добро. Ако сте добивање тројца на почетокот на семестарот, тоа е навистина значи да се биде добар место да се започне. Ако сте добивање twos, саеми, има дефинитивно некои работи да плати малку повеќе внимание, да ги искористат предностите на секции и канцеларија часа. Ако сте добивање на четири нозе и петки, одлично. Но, навистина, ние се надеваме да видите траектории меѓу учениците - многу индивидуализирана по студент, но почнувајќи на семестарот овде во вид на двете на трите спектар, но завршува до тука во 04:56 опсег. Тоа е она што ние сме навистина барате. И ние се задржи во умот на делтата дека ви покажуваат помеѓу недела нула и недела 12 кога јас го правам оценки. Тоа не е важно за нас е апсолутно како сте фер на почетокот ако вашиот траекторија е навистина нагоре и силна. Академска чесност - така нека ме стави на мојот повеќе сериозен глас за само еден миг. Така овој курс има разлика испраќање на повеќе студенти од било кој друг во историјата за реклама одбор, верувам. Имаме вид на изгубени брои во овој точка на тоа колку често се случува ова. И тоа не е затоа што студентите во 50 се повеќе нечесни од нивните соучениците на друго место. Но сфати, исто така, дека ние сме многу добри во откривањето на овој вид на работа. А тоа е предност што компјутерски науки класа има со тоа што ние може да и ние се споредуваат сите ученици Проблемот поставува пар-мудар против секоја други, не само оваа година но сите претходни години. Ние имаме способност, како и учениците во класата, на Google и да се најде код на сајтови како github и форуми за дискусија. Постојат апсолутно решенија за CS50 е P-поставува лебдат околу таму. Но ако може да ги најдете, ние може да ги најдете. И сето ова е многу автоматизиран и лесно и тажен за нас да се најде. Но сакам да нагласам, исто така, дека академски курс е искреност политика е многу замислена да биде многу спротивно на тој дух. Навистина, оваа година ние сме преформулира работи во наставната програма да биде оваа, точка точка точка, со повеќе детали во наставната програма. Но Главната тема во текот навистина е да се биде разумен. Ние признаваме дека постои значителна износот на педагошките вредност за соработка, до одреден степен, со соучениците, при што ќе ги две или три или повеќе се стои на бела табла таблата, така да зборувам, вашиот идеи - пишување надвор pseudocode во слики, diagramming она Марио треба да биде ако сте биле за да го напише првиот во pseudocode. Што треба алчен алгоритам - како треба да се однесуваме на Проблемот поставува еден? И така сфаќаат дека однесувањето дека ние ги охрабруваме е многу многу заедно оние линии. И во наставната програма, ќе видите целиот куп на куршуми под разумна категорија и не е разумно категорија која ни помага да помогне ќе заврши вашиот ум околу каде ние ги тргаме таа линија. И општо земено, пристоен правило на палецот е дека ако се обидуваат да се реши некои бубачки и вашиот пријател или соученик седи до тебе, тоа е разумно за вас да му покаже или нејзината вашиот код и да каже, еј, може да помогне мене дознаам што се случува во ред овде? Ние обично не ја прегрне спротивната страна. Тоа не е точниот одговор за вашите пријател или соученик тука да кажам, ох, само погледнете во рудникот и фигура тоа надвор од тоа. Тоа е вид на неразумно. Но има некој друг, друг на мозокот, уште еден пар на очи гледам екранот или погледнете во вашиот код и да каже, дали сте сигурни дека сакате да има јамка тука? Или сте сигурни дека сакате дека запирка тука? Или ох, тоа порака за грешка значи ова. Тие се многу разумни и поттикнуваат однесување. Случаите на која што и беше алудирајќи на порано се сведуваат на кога студентите се доцна во ноќта правејќи сиромашните пресуда одлуки и испраќање на нивните кодот на некој друг или само велејќи, тука, тоа е во Dropbox или Googling доцна во ноќта. И така јас ќе ги охрабри и моли од вас, ако имате оние неизбежна моменти на стрес, ти си испреплетуваат против рок, немате доцна ден, бидејќи тоа е веќе петок во тоа точка, е-мејл глави на курсот или мене директно. Велат, слушаат, јас сум во мојата кршење точка тука. Ајде да разговарате и го дознаам. Прибегнување кон интернет или некои други не разумно однесување никогаш не е решение, и премногу од вашето соучениците се веќе тука на кампусот, бидејќи на таа слаба процена. Но тоа е многу лесно да здолниште таа линија. И тука е малку сликата за да ја расположи те од Reddit, така што сега сè ќе биде во ред. Толку брз повториме, тогаш, од каде што застанавте. Па минатата недела, се потсетиме дека ние се воведе услови, не во Скреч но во C тоа време. И имаше некои нови синтаксата, но навистина нема нови идеи сама за себе. Имавме Булова изрази кои би можеле да или заедно со две вертикални барови или и заедно со две ampersands, велејќи дека и двете на левата и правото мора да биде вистина за ова да се изврши. Тогаш имавме прекинувачи, која баравме на кратко, но јас предложи се навистина само различни синтакса за постигнување на ист вид на цел ако знаете во однапред што вашиот случаи се случува да биде. Ги свртевме погледите кон петелки. А за телефонска линија е можеби најчестиот, или барем онаа која луѓето обично достигне за инстиктивно. Иако тоа изгледа малку криптичната, ќе видите многу, многу примери за ова пред долго, како што имате веќе кон крајот на минатата недела. Додека петелки може слично постигне истото. Но, ако сакате да направите било incrementation или ажурирање на вредности променлива, мора да го прават тоа повеќе рачно од за телефонска линија пред дозволува. И потоа, тука е не-додека јамка, која ни овозможува да се направи нешто на најмалку еднаш додека нешто друго е точно. И ова е особено добро за програми или за игри каде што сакате да го извести корисникот за нешто барем еднаш. А потоа, ако тој или таа не соработува, можеби ќе сакате да го направи тоа повторно и повторно. Со променливи, пак, имавме линии на код, како таков, кој би можел биде две линии. Вие би можеле да се изјаснат за int наречен шанкот, точка-запирка. Или едноставно можете да ги пријават и на дефинира, така да се каже. Го даде вредност во исто време. А потоа на крај, ние разговаравме за функции. И тоа беше еден убав пример во смисла дека тоа го илустрира два типа на функциите. Една од нив е GetString (), кој, пак, добива низа од корисникот. Но GetString () е вид на интересни, дотаму што ние сме го користи, затоа што ние секогаш го користи со нешто на левата страна на знак за еднаквост. Тоа е да се каже дека GetString () враќа вредност. Тој се враќа, се разбира, низа. А потоа на левата страна, ние сме едноставно заштеда на стрингот внатрешноста на променлива наречена име. Ова е различно, во некоја смисла, од printf бидејќи printf, барем во нашата употреба тука, не враќа ништо. Како настрана, тоа не се врати нешто. Ние едноставно не се грижат што е тоа. Но тоа не мора она што е нарекува ефект. И што е тоа пропратен ефект во секој случај ние сме виделе досега? Што значи printf направам? Тоа отпечатоци нешто на екранот, прикажува текст или броеви или нешто на екранот. И тоа е само смета пропратен ефект затоа што тоа не е навистина предавање се врати за мене. Тоа не е одговор внатрешноста на црна кутија што можам да потоа достигне во и го имате. Тоа е само тоа го прават на свој, многу како Колтон беше вклучен во овој црна кутија минатата недела, а тој некако магично е цртеж на табла без мене, всушност, се вклучени. Тоа ќе биде пропратен ефект. Но, ако јас всушност мораше да достигне назад во тука и да кажам, ох, тука е стринг од корисникот, кои би биде враќање вредност. И досега ние сме само користените функции дека другите луѓе го имаат напишано. Но ние всушност може да направи овие видови на нештата нас самите. Па ќе одам да одат во CS50 апаратот повторно. Дозволете ми да го затворите табот дека ние го отвори пред еден миг. И дозволете ми да оди напред и да се создаде новата датотека. И јас одам да се оди напред и да ова го нарекуваат еден positive.c. Па сакам да направам нешто со позитивни броеви тука. Па ќе одам да се оди напред и да прават int - жал - # Вклучат. Ајде да не се направи истата грешка како порано. Int главната (празно), отворен кадрава заграда, затворена кадрава голема заграда. И сега сакам да го направите следново. Сакам да се напише програма која инсистира на тоа дека на корисникот му дава мене позитивен цел број. Значи не постои GetPositiveInt функција во CS50 библиотека. Има само GetInt (). Но тоа е во ред затоа што имам конструкции со која можам да наметне малку повеќе пречка за таа вредност. Можев да сторам нешто како ова. Па int n - и ако сте пишување заедно, само сфатат Одам да се вратиш назад и промени некои работи во еден момент - па int n еднаква на GetInt (). И дека се случува да се стави на int внатрешноста на n. И дозволете ми да биде повеќе описни. Дозволете ми да кажам нешто како Барам ти ми даде позитивен цел број. Сите во право. Па само малку инструкции. И сега што можам да направам? Па, јас веќе знам од мојот едноставен услови или гранки, исто како и јас имаше во Скреч, би можел да каже нешто како ако n е помала или еднаква на нула, тогаш сакам да направам нешто допаѓа, што не е позитивен. И тогаш би можел да го направи - Добро, но јас навистина сакате да се добие дека Инт. Па можев да одам до тука и можев вид на копија ова и алинеја ова. А потоа, во ред. Значи, ако n е помала или еднакви на нула го направите тоа. Сега, што ако на корисникот не соработува? Добро, тогаш јас ќе одам да позајми овој овде. А потоа одам во тука и тука и тука. Значи ова не е јасно решение, нели? Бидејќи нема крај во очите. Ако сакам да бара од корисникот дава мене позитивен цел број, можам да всушност добиете Инт. Јас тогаш може да се провери за што Инт. Но, тогаш сакам да го проверете уште еднаш и провери тоа повторно и да го провери тоа повторно. Па очигледно, она што е подобро изградба да се користат тука? Сите во право, па некој вид на јамка. Па ќе одам да се ослободи од речиси сето ова. И јас сакам да го добивате ова int барем еднаш. Па ќе одам да се каже направи - и јас ќе се врати на додека во само еден миг - сега, го направи она што? Јас ќе одам да направите int n добива GetInt (). OK. Па тоа е прилично добар. И сега колку често Сакам да го направите ова? Дозволете ми да го стави на printf внатрешноста на јамка па јас може да бара повторно и повторно, ако тоа биде потребно. И она што го сакам ова додека услов да направам? Сакам да го задржи тоа додека она што е случај? Да. N е помала или еднаква на нула. Тоа веќе, ние сме значително исчистени овој код нагоре. Ние сме позајмени многу едноставен изградба - не се прави додека јамка. Сум украдени само важни линии на кодот кој почнав копирање и вметнување, што не беше мудар. Па сега јас ќе одам да всушност ставете тоа во овде и само го прават тоа еднаш. И сега што сакам да направите во На самиот крај на оваа програма? Јас само ќе кажам нешто едноставно допаѓа, благодарение на - и Јас ќе сторам% i за int - обратна коса црта n, запирка, а потоа приклучок во N, точка-запирка. Сите во право. Да видиме што се случува сега кога ќе ја извршите оваа програма. Одам да се оди напред и да го прават позитивни. Гајле. Пред неколку грешки. Па да ми дојдете назад до првото. Не работат преку нив наназад. Работа преку нив од врвот надолу да не каскада и само една работа да биде погрешно. Имплицитна изјава на функција GetInt (). Да. Па тоа не беше доволно. Јас вид на прави истата грешка, но малку различен тоа време. Јас треба не само да вклучуваат stdio.h но исто така cs50.h, која ги вклучува т.н. декларации на се int, која учат на апаратот, или учи Ц она GetInt () е. Па да ми resave. Одам да се игнорира и други грешки затоа што ќе одам да се надеваме дека тие се некако поврзани со грешка Јас веќе поправени. Па дозволете ми да оди напред и да го прекомпајлирате со направи позитивни, Enter. Гајле. Три грешки, сепак. Дозволете ми да дојдете до првото. Неискористени променливата Н. Ние не го видел тоа порано. И ова, исто така, е малку криптичната. Ова е излезот на компајлерот. И она што нагласи линија таму - positive.c :9:13 - е велејќи дека, тоа е велејќи on-line девет од positive.c, на 13-тиот карактер, 13-ти колона, сте направиле оваа грешка. А особено, тоа е ти го кажувам мене неискористени променливата Н. Да видиме - линија девет. Јас сум користење на N, во смисла дека Јас сум тоа даваат вредност. Но, она што на компајлерот не му се допаѓа е дека јас не сум навидум го користите. Но, чекајте, јас сум го користите. Во линија 11, јас сум го користите овде. Но, ако јас движете надолу понатаму на positive.c :11 - па на линијата 11, карактер 12, компајлерот се ми кажуваше, употреба на непријавена идентификатор n. Така непријавени средства имам не е одредено тоа како променлива со тип на податок. Но, чекајте. Го направив точно дека во согласност девет. Па некој е навистина збунет тука. Тоа е или мене или на компајлерот, бидејќи во согласност девет, повторно, јас сум прогласување на int n, и јас сум доделување неа се врати вредноста на GetInt (). Тогаш јас сум со користење дека променливата n во линија 11 и проверка, ако неговата вредност е помалку од или еднакво на нула. Но, ова очигледно е лоши и скршени зошто? Велат дека тоа повторно? Ах, јас мора да се декларираат N пред влегуваат во јамка. Но зошто? Мислам, ние само предложени малку пред тоа тоа е во ред да се декларираат променливи сите на една линија, а потоа им доделите некои вредност. А глобалната променлива - да се врати на таа идеја во само еден миг. Зошто сакаш да се стави тоа надвор од јамка? Тоа е. Токму така. Значи, иако, нешто контра, дозволете ми да резимираме. Кога ќе прогласат N внатре на го блокира таму - конкретно во внатрешноста на оние големите загради - таа променлива n го има она што е нарекува опсегот - поврзани со нашата постигнувајќи систем во се разбира - но има обем кој е ограничени на оние големите загради. Со други зборови, обично ако прогласат променлива внатре во собата на кадрави загради, таа променлива постои само во внатрешноста од оние големите загради. Значи со таа логика сам, иако Сум прогласи n во линија девет, тоа суштина исчезнува од опсегот, исчезнува од меморија, така да се каже, од времето кога хит линија 11. Бидејќи линија 11, за жал, е надвор од оние големите загради. Па јас за жал не може да се поправи ова со да се вратам на она што јас го направив тоа порано. Можете на прв би можеле да го направите тоа. Но, она што се не сега прави циклично? Ти си очигледно не е добивање на на int циклично. За да можеме да ја напушти GetInt (), и ние треба да ја напушти GetInt () во внатрешноста на јамка, бидејќи тоа е она што ние сакаме да отегчавам на корисникот за повторно и повторно. Но тоа не се доволни за да одат до линија, да речеме, шест. Int n, точка-запирка. Не го даде вредност бидејќи допрва не треба да се само уште. Но сега тука долу, најава - ова ќе биде многу лесно грешка. Не сакам да сенка моите претходни декларацијата на n. Сакам да го користат n дека всушност постои. И така сега во линија 10, Јас му ја додели n вредност. Но, во линија шест, изјавувам n. И така можам или не можам користат во линија 12 сега? Можам бидејќи меѓу кои кадрава загради е n прогласена сега? Од една до тука on-line пет. На еден тука on-line 14. Значи, ако јас сега одзумирате, освен оваа датотека, одете назад во и да ја стартувате направи позитивен, Составувач тоа време. Па тоа е веќе напредок. Коса црта. . / Позитивен, Enter. Барам ви даде мене позитивен цел број. Негативни 1. Негативни 2. Негативните 3. Нула. Еден. И благодарност за еден е она што е сега печатени. Дозволете ми да се обиде нешто друго, од љубопитност. Јас сум да им се кажува да го внесете цел број. Но, што ако јас наместо да напишеш во јагне? Значи сега ќе видите еден поинаков брза - обидете се повторно. Но, никаде во мојот код никако не можев да пишувам обидете се повторно. Значи, каде што, веројатно, е ова се обидете повторно брза доаѓаат од, дали би рекле? Да, од GetInt () сама по себе. Значи една од работите персонал CS50 е не за вас, барем во овие првите неколку недели, се имаме напишано некои износ на грешка проверка за да се осигура дека ако ти се јавам GetInt (), можете барем ќе се вратам на int од корисникот. Нема да добиете низа. Вие нема да добие знак. Нема да добиете нешто друг друго. Ќе добиете Инт. Сега, тоа не може да биде позитивен. Тоа не може да биде негативен. Ние не правиме никакви гаранции околу тоа. Но, ние ќе отегчавам на корисникот да се обидете повторно, обидете повторно, обидете се повторно додека тој или таа, всушност, соработува. Слично на тоа, ако го направам 1,23, тоа не е int. Но, ако јас го напишеш во, да речеме, 50, кој ми дава вредност што сакав. Сите во право. Па не е лошо. Било какви прашања за тоа што ние сме само се направи? Клучот готова брза да се биде, да не бидат јасни, толку јамка, која што сум го видел пред иако имаме навистина не користи тоа, но прашањето на обемот, каде променливи може да биде само може да се користи само во некои одреден опсег. Сите во право, дозволете ми да се обрати на предлог сте го направиле порано, дека на глобалната променлива. Како настрана, излегува дека некој друг Решението за овој проблем, но обично погрешен решение или лошо дизајниран решение, е да се декларираат вашата променлива како што е нарекува глобална променлива. Сега јас сум вид на кршење на мојата дефиниција на опсегот, бидејќи постојат без големите загради во самиот врв и на самото дно на датотеката. Но импликација на кои е дека сега во согласност четири, n е глобална променлива. И како што името значи, тоа е само достапни насекаде. Нула всушност има овие. Ако сте користеле променлива, може да се сети ти мораше да изберете, ако тоа е за овој спрајт или за сите sprites. Па, сите sprites е само појасна начин да се каже глобалното. Да? Ах, навистина добро прашање. Па се потсетиме дека во првиот верзија на мојот код, кога јас погрешно прогласена и што е дефинирано n во линија девет - Јас го прогласи како променлива и јас ја даде вредност со операторот за доделување на - ова ми даде две грешки. Еден, фактот дека n не беше искористена, и две, дека во линија 11 тоа едноставно не беше прогласена. Па првиот јас не адреса во тоа време. Тоа не е строго грешка да се прогласи променлива, но не го користам. Но, една од работите што го направив во на CS50 апаратот, намерно, педагогичен, е ние сме извит до очекувањата на компајлерот да се направи сигурни дека сте вршење на работите не е само правилно, но навистина правилно. Бидејќи ако сте за прогласување на променлива како n и никогаш не го користите, или да го употребувате правилно, тогаш што е тоа го правам таму? Тоа навистина служи нема цел. И тоа е многу лесно со текот на времето, ако не го конфигурирате вашиот сопствен компјутер во на овој начин, само да имаат код кој има малку остатоци тука, остатоците таму. А потоа месеци подоцна ќе се погледне назад и сте како, зошто е оваа линија на кодот таму? И ако нема добра причина, тоа не имаат корист вие или вашите колеги по патот да мора да сопнуваат врз неа тогаш. Како настрана, каде што е кои доаѓаат од? Па, да се потсетиме дека секој пат кога ние ги собере Програмата, сите на овој материјал е се испечатени. Па ние ќе се вратам на тоа. Но, повторно, осигурајте е алатка која автоматизира процесот на составување на водење на вистински компајлерот наречен ѕвекот. Оваа работа, ние на крајот ќе се види, има да го стори со дебагирање со посебен програма наречена дебагерот. Ова има врска со оптимизирање на код - повеќе за тоа во иднина. Std = C99 - ова само значи користење на 1999 верзија на В Ц е се околу дури и подолго од тоа, но тие го направија некои убави промени 10 плус години. И тука е се релевантни. Ние сме велејќи направи нешто што претходно би биле предупредување грешка спречување на студентот од составувањето. И ѕидни средства го стори тоа за бројни нешта не само во врска со променливи. И тогаш дозволете ми да дојдете до крајот на оваа линија. И ова, исто така, ние ќе на крајот се врати. Ова е очигледно име на на датотеката јас сум составувањето. Ова потсетува на името на датотеката Јас сум Ставање како име на мојот Runnable програма. Ова-lcs50 само значи користење на CS50 библиотека, како и сите оние кои и нули, кои на персоналот напиша и собрани порано оваа година, да се интегрира нив во мојата програма. И некој знае што-филмот е? Тоа е математика библиотека, која е само таму дури и ако сте не прават какви било математика. Тоа е само автоматски се обезбедуваат за нас од страна направи. Па, дозволете ми направи еден друг пример тука од отворањето на новата датотека. И нека ме спаси оваа како string.c. Излегува дека како што се зборува податоци типови денес, има дури и повеќе случува под хауба од што сум го видел досега. Па дозволете ми да брзо го направите брзо програма. Вклучуваат stdio.h. И јас ќе спаси. И знаете, дозволете ми да не се направи истата грешка повторно и повторно. Вклучуваат cs50.h. И дозволете ми да оди напред сега и направи int главната (празно). И сега јас едноставно сакате да се направи програма која го прави ова - изјави низа нарекува S и да добијат низа од корисникот. И дозволете ми да се направи малку инструкции тука - Те молам дај ми низа - па корисникот не знае што да прави. А потоа тука долу под оваа, Сакам да го направите следново - за int i добива нула. Повторно, компјутерски научници обично почне пребројување на нула, но ние би можеле да направи таа една, ако ние навистина сакаше. Сега јас ќе одам да направите i е помалку од стринг должина на С. Па strlen - С-Т-Р-Л-Е-Н - повторно, тоа е концизен, бидејќи тоа е полесно да напишеш, иако тоа е малку криптичната. Тоа е функција што не сум користел пред, но буквално го прави тоа - се врати за мене е број што должината на стрингот дека корисникот ја внеле. Ако тие ја внеле во здраво, тоа ќе се врати пет затоа што има пет букви во здраво. Потоа, на секој повторување на овој циклус, јас плус плус. Значи, повторно, стандарден изградба дури и ако вие не сте сосема премногу удобно или запознаени со тоа уште. Но сега на секој повторување на овој циклус, забележи она што јас ќе одам да направите. Сакам да одам напред и печати надвор еден лик - па% c обратна коса црта n на нова линија. И тогаш, знаеш што сакам да направам? Без оглед на зборот е дека корисникот типови во, како здраво, сакам да се печати H-Е-Л-Л-О, по еден знак на линија. Со други зборови, сакам да се стигне до индивидуални карактери во стринг, при што до сега низа има само е низа од карактери. И испоставува можам да направам с, заградата, Јас, блиску заграда, затворете загради, точка-запирка. И јас треба да се направи уште една работа. Тоа е во датотека наречена string.h дека strlen е декларирана. Значи, ако јас сакам да ја користат таа функција, Јас треба да кажам на компајлерот, се очекува да го користам. Сега дозволете ми да оди напред и да на програма наречена стринг. Дот, коса црта, стринг. Те молам дај ми стринг. Јас ќе одам напред и ја внесете. Здраво, во сите капи, Enter. И сега забележиш јас сум печатени тоа еден карактер по друг. Значи новиот детали тука е дека низа, на крајот на денот, може да биде пристапи по пат на своите индивидуални ликови со воведување на плоштадот заградата нотација. А тоа е затоа низа под хаубата е навистина низа од карактери. Но она што е уредни за нив е во RAM меморија на вашиот компјутер - Mac, PC, што и да е - тие се буквално да се врати назад за да ги поддржат - H-Е-Л-Л-О - на индивидуално, во непосредна близина бајти меморија. Значи, ако сакате да добиете на осмиот како бајт, кој во овој циклус ќе биде заградата нула, држач еден, заградата две, заградата три, држач четири - тоа е нула индексирани до пет - кои ќе испечатите H-Е-Л-Л-О по сопствена линија. Сега, како закачка, дозволете ми да ви покажеме на видови на нештата на крајот ќе биде можност да се разбере, барем со некои блиски барате. За едно, она што се вклучени во денешниот примери, ако сакате, е, всушност, една од првите jailbreaks за iPhone. Jailbreaking значи напукнување на телефонот па всушност можете да ја користите за различен превозник или инсталирање свој софтвер. И ќе забележите ова изгледа сосема криптичната, најверојатно. Но погледнете ова. На iPhone е очигледно испукани со А за јамка, една ако состојба, на друго место состојба, еден куп функции ние не сме виделе. И повторно, ќе не на прв поглед веројатно се разбере како тоа функционира. Но сето она што ние вид на се здраво за готово во нашата модерна живот всушност има тенденција да се намали дури и до одреден на овие основи, ние сме биле гледа. Дозволете ми да оди напред и да се отвори една друга програма, holloway.c. Па ова, исто така, е нешто што не треба навистина да знаат. Дури и никој од персоналот или можев веројатно дознаам ова од страна гледајќи во тоа, бидејќи тоа е код нечија кој беше доставен до она што е историски познат како криење C натпревар, каде што се напише програма кој ги собира и работи, но е толку проклето криптичната никој не може да се разбере она што тоа се случува да се направи додека тие всушност се работи. Значи, навистина, ако се погледне на овој код, гледам еден гајтан. Гледам главната. Гледам овие квадратни загради имплицирајќи некој вид на низа. Сака ли некој да се погоди она што оваа програма, всушност, прави ако јас се кандидира Холовеј? Да. OK. Добро направено. Па само на вработените и не можам да дознаам од она што овие нешта го прават. И сега на крај, дозволете ми да оди напред и се отвори една друга програма. Тоа едно - повторно, ќе сториме изворниот код достапни на интернет - ова е само вид на прилично да се погледне. Сите тие го направија е хит на простор бар доста. Но, ова е вистинска код. Значи, ако мислите дека тоа е убаво, ако ние всушност ја извршите оваа во конзолата, на крајот ќе се види како ние може да се прават работите вака. Па ние ќе те оставам за тоа белешка и ќе видите во средата. [Музички] ЗВУЧНИК 2: На следниот CS50, на TFS организира бунт. ЗВУЧНИК 3: Ене го. Тргни го! [Музички]