[МУЗИКА] Дейвид Дж Малан: Добре. Това е и това CS50 е началото на седмица 2. И вие ще припомним, че през През последните няколко седмици, ние сме били въвеждане на компютър наука и, на свой ред, програмиране. И ние започнахме историята по пътя на Scratch, че графичен език от Media Lab на Масачузетския технологичен институт. И тогава най-скоро, миналата седмица, направихме ние въведе higher-- на език-ниско ниво познат като C, нещо, което е чисто текстова. И наистина, за последен път сме проучени в рамките на този контекст редица концепции. Това, изземване, е самото първата програма ще погледна. И тази програма, просто, отпечатва, "Здравей, свят". Но има толкова много сякаш магия става. Има тази #include с тези ъглови скоби. Има вътр. Има (недействителни). Има скоби, фигурни скоби, точка и запетая, и много повече. И така, припомни, че ние въведохме Scratch така че бихме могли, в идеалния случай, вижте минало че синтаксис, неща, които наистина не е всичко, което интелектуално Интересно, но в началото на деня е, абсолютно, малко сложно да приключи ума си наоколо. И наистина, един от най-често срещаните неща в началото на деня в един клас програмиране, особено за тези, които по-малко удобно, е да се разочароват от и спънал от определена синтактична грешки, да не говорим за логически грешки. И така сред нашите цели днес, всъщност, ще да бъде да ви снабди с някои решаване на проблеми техники за това как за по-добро решаване на проблемите си под формата на отстраняване на грешки. И вие ще си припомним също, че среда, ние въведохме последно време се нарича CS50 IDE. Това е уеб-базиран софтуер, който ви позволява да програмирате в облака, така да се каже, като същевременно запазят всичките си файлове заедно, тъй като ние отново ще се днес. И припомни, че ние преразгледани тези теми тук, сред тях функции, както и примки, и променливи и булеви изрази, и условия. И всъщност още няколко, които ние преведено от света на Scratch в света на C. Но основната сграда блокове, така да се каже, бяха наистина все още същото миналата седмица. В действителност, ние наистина просто имаше различен пъзел парче, ако щете. Вместо това лилаво запишете блок, ние вместо бе ФОРМАТ, което е тази функция в C, че ви позволява да отпечатате нещо и да го форматирате на екрана. Ние въведохме CS50 Библиотека, където можете имаме сега на свой get_char обезвреждане, и get_int, и get_string, и няколко други функции, добре, чрез които можете да получите вход от собствена клавиатура на потребителя. И ние също се погледнете на нещата като these- булев, и Чар, и двойно, поплавък, INT, long_long низ. А има и още други типове данни в C. С други думи, когато се декларират променлива за съхраняване на някои стойност, или когато се изпълнява функция който връща някаква стойност, можете да определите какво тип на стойност, която е. Дали това е низ, като последователност от символи? Дали това е номер, като цяло число? Дали това е плаваща запетая стойност, или други подобни? Така че в C, за разлика от нулата, ние всъщност започна да се уточни какъв вид данни ние се връщат или използване. Но, разбира се, ние също се блъсна в някои основни граници на изчислителната техника. И по-специално, този език C, изземване че ние разгледахме число преливник, реалността че, ако имате само един ограничен размер на паметта или, по-конкретно, краен брой на бита, можете само да разчитаме толкова висока. И така, ние погледна този пример тук при което брояч в самолет,, всъщност, ако работи достатъчно дълго, за да прелее и да доведе до софтуер действителен физически потенциал грешка. Ние също погледна към плаващ точка неточност, реалността че само с ограничен брой на бита, независимо дали е на 32 или 64, можете да посочите само толкова много номера след десетичната запетая, след което започне да се неточно. Така например, една трета в свят тук, в нашия човешки свят, Знаем, че е просто един безкраен брой от 3s след десетичната запетая. Но един компютър не може непременно представлява безкраен брой числа ако само му позволи някои ограничен обем информация. Така че не само, че ние ви снабди с по-голяма мощност от гледна как можете да изразите себе си в клавиатура от гледна точка на програмиране, Ние също така ограничава какво всъщност можете да направите. И наистина, бъгове и грешки могат възникнат от тези видове проблеми. И наистина, сред темите днес ще бъдат теми като отстраняване на грешки и всъщност търсят под капака как бяха въведени неща миналата седмица действително са приложени така че да можете по-добре разбирам и двете възможности на и ограниченията на език, като C. И в действителност, ние ще се лющи обратно слоевете от най-простите на структурата на данните, нещо, наречено масив, който Scratch случва да наречем "списък." Това е малко по- различно в този контекст. И тогава ние ще се представим един от най- първо на нашите домейни специфични проблеми в CS50, в света на криптография, изкуството на кодиране или в шифриране на информация, така че че можете да изпратите тайни послания и декодира тайни послания между две лица, A и B. Така че, преди да сме преход да, че нов свят, нека се опитаме да ви снабди с някои техники, с които можете да се елиминират или намаляване на поне някои на отчаянието че най-вероятно са се сблъсквали над сам изминалата седмица. В действителност, пред вас се such-- някои от Първите си проблеми в C. И шансовете са, ако сте като мен, за първи път опитате да напишете програма, дори и ако мислите логически програмата е доста проста, може много добре се удари в стената, и компилаторът няма да си сътрудничат. Уверете или звън не се случва действително да вършат работата си. И защо би могло да бъде това? Е, нека да погледнем, може би, една проста програма. Отивам да вървим напред и да спаси това в файл умишлено нарича buggy0.c, защото аз го знам, за да бъде опорочен предварително. Но аз може да не осъзнават, че ако тази е първата или втората или третата програма че аз съм всъщност прави себе си. Така че аз ще отида напред и напишете, INT главната (недействителни). И тогава вътре от моите големи скоби, много запознат ( "Здравей, world-- наклонена черта, п ") - и точка и запетая. Аз бях спасен файла. Сега аз ще сляза до терминал моя прозорец и тип грим buggy0, защото, отново, името на файла, днес е buggy0.c. Така че аз въведете направи buggy0, Enter. И, о, Боже, припомнят от последния път че няма съобщения за грешки е нещо добро. Така че без изход е нещо добро. Но тук имам ясно някои брой грешки. Така че на първа линия на изхода след въвеждане направи buggy0, изземване, е доста подробния изход звън е. Под предния капак, CS50 IDE е конфигуриран да използват цял ​​куп опции с този компилатор така че не е нужно да се мисли за тях. И това е всичко, че на първа линия средства, която започва с трясък. Но след това, проблемите, започват да се правят външния им вид. Buggy0.c на ред 3, характер 5, там е голям, червен грешка. Какво е това? Безусловно обявяване библиотека функция ФОРМАТ с тип INT (Конст Чар *, ...) [-Werror]. Искам да кажа, че е много бързо става много мистериозен. И разбира се, на първо поглед, ние не бихме Очаквам да се разбере цялост на това съобщение. И така, един от уроците за днес ще да бъде да се опита да се забележи модели или подобни неща, за грешки може да се наложи срещани в миналото. Така че нека да дразни с изключение само тези думи, които изглеждат познати. Големият, червено Грешката е ясно символ на нещо е погрешно. Безусловно обявяване библиотека функция ФОРМАТ. Така че дори и да не ми е ясно какво неявно обявяване библиотека функция средства, проблемът със сигурност се отнася до ФОРМАТ някак. А източникът на този въпрос има нещо общо с него се обявява. Деклариране на функция е тя се споменава за първи път. И ние използвахме терминологията миналата седмица на обявяване на функционални прототипи, или с една линия в горната част на вашия собствен файл или в така наречената заглавния файл. И в какво файл направихме ние казваме миналата седмица, че ФОРМАТ е цитат, край на цитата, обявена? В какво файл е негов прототип? Така че, ако си спомняте, първото нещо, което аз напечатан, почти всяка програма миналата time-- и случайно преди малко започна писането myself-- е този един here-- hash-- # включват