[Powered by Google Translate] Дейвид Малан: Това е CS50, и това е началото на седмица 1.
Това, което ние решихме да направим днес, е да погледнете назад към
нещо, което много от вас вероятно мина покрай за някои
време и сега може да изглежда малко по-запознати.
Това нещо тук, това разбира се е в
АУДИТОРИЯ: науката.
Дейвид Малан: Наука център.
Така че това всъщност е един от най-ранните компютри
назад От 1940-те.
Той беше един от първите електромеханични компютри
това е състояние на особено дълго,
самоподдържащи изчисления, и това, което ние всъщност виждаме в
научен център е само една малка част от това нещо.
Това, което ние решихме да правим тогава, е да погледнете назад към видео
, което е станало преди известно време, въвеждането на тази
нещо на света.
И ще видите, от музика и глас, че наистина тези
бяха много щастливи времена.
>> [VIDEO PLAYBACK]
Триумф на математически и механични умения е това
страхотен нов автоматичен калкулатор в Харвардския университет.
Сложни задачи в математиката, чрез
машина в кодирана форма на лента, точно решен в
незначителна част от времето, необходимо за консумация от човека
изчисление.
Проектиран да ускори всички форми на математически и научни
изследвания, гигантски механичен мозък ще работи за Организацията на обединените
Щати флот до края на войната.
>> Дейвид Малан: Така че това, което може би не знаете е, че тя е в
същото това устройство, че план всички ние сега се почти
за даденост, че на бъг е измислена.
Така че един от инженерите, работещи в този компютър
буквално малък молец в машината, която е довела
в някои неправилни изчисления.
И тъй като историята разказва, че молец е записано в този дневник
списание тук, от септември 9, през 1940 г. - нещо, което,
и по този начин е роден за света на термина "бъг".
Така че отсега нататък ние считаме грешки да бъдат всякакъв вид грешки в
програми, независимо дали човека или, в този случай, насекоми.
>> Така няколко съобщения, тъй като ние продължи.
Така CS50 има традиция за предлагане на обяд на видове
повечето петък по време на семестъра, когато вземем 30 до
40 студенти за огън и лед на площада за случайни
задявка, говорим за компютърни науки,
говорим за бъдещето.
Каним възпитаници и приятели от индустрията за чат
студенти, както добре.
Наистина към края на това, което е доста голяма класа
всички по-интимен, най-малко веднъж, докато за
подгрупи на студентите.
Така че, ако искате да се присъедините към нас този петък, 13:15, отидете на
CS50.net/lunch RSVP.
И ние ще направим това recurringly, така че не се притеснявайте, ако не сте
сред първите 30 или така че тази седмица.
>> Така книжниците бележки.
Дума за ресурси, които сега ще започнат да бъдат на разположение
на учениците в клас.
Така че главите си, не е необходимо да бъдат определени по време на лекции
пишейки всичко, което казвам и така нататък, това, което правим
вместо това се предвижда от преподавателския състав
каноничен набор от бележки.
Така че ние имаме един от нашите учебни събратя, Андрю Sellergren
който сяда всяка седмица, преглед на видео, и след това
пише това, което смятаме, че е доста
авторитетен набор от бележки.
Андрю любители, също така, на snarky бележки под линия в
на дъното.
Така че ще се надяваме да се насладите на тези като справочник за
забавно, и също така, викторина време, като възможност да се преразгледа
това, което се случи в отделни лекции.
Така че тези, които са свързани на лекции страница.
>> Проблем набор 0, междувременно, е.
И по отношение на ресурсите, достъпни за Вас -
помагалото.
Мило поведе първото в петък.
Той е бил заснет, пуснати онлайн от събота.
И така осъзнават, ако не сте съвсем сигурни къде да започнете,
за това, или бъдещи р-комплекти, винаги изключвайте първо до
репетиция или видео от него.
Секциониране е в ход в cs50.net/section е мястото, където
трябва да представят вашите предпочитания, ако не сте
вече от днес.
Защото секции ще започнат идната неделя, понеделник,
и вторник.
Ние правим раздели тези три дни, всяка седмица на
семестър за по-голямата си част.
И ние също въведе отново, различни писти.
Така ще бъдете помолени този разделящ форма, ако
не са го виждали вече, ако сте сред тези, които по-малко
удобно, по-удобно, или някъде по средата.
И ако сте на оградата, обикновено някъде в
между тях е това, което повечето студенти в крайна сметка проверка.
Работно време започват тази вечер.
>> Така че Scratch е доста нисък ключ, въпреки че това е съвсем естествено
да се движат в различни бъгове, или да не е сигурно, тъй като за това как да
прилагане нещо.
Така че осъзнават, че ние ще започнем работно време тази седмица.
Те ще бъдат в Annenberg понеделник, вторник, сряда,
Четвъртък, 20:00-23:00 по време на мозъчна почивка.
Горни classmen могат да влязат, и ако някога имате проблеми с получаване на
на вратата, тъй като те ще бъдат прекарване, просто говоря пътя си
и обясни сте с CS50.
Обикновено 20 и 30 от нас по отношение на персонала ще бъде там, за да помогнем
един на един.
>> При пристигането идеята е това: ще донесе лаптопа си,
ще имате зарядното устройство, ще имат допълнителни захранващи кабели,
особено по южната стена на Annenberg
има много електрически контакти.
И основната входна точка в офиса на час Q & A е да отидете на
cs50.net/discuss и за да публикувате
вашия въпрос.
И за да го етикетират с pset 0 или pset 1, независимо от седмица
може да се случи да бъде.
И тогава какво ще направим, е да има таблица за преподаване на другарите
и разбира сътрудници, общо 8 или 10, или така на нас,
става чрез водене на зоркото око на борда, и
скубане на разстояние въпроси наистина ли е толкова бързо, колкото можем,
отнасящи свързани с публикации, ако не сте намерили тези
себе си, онлайн препратки, според случая.
И тогава, ако има проблеми, тъй като неизбежно
ще бъде, или просто има повече смисъл да седнат един по един,
работят чрез проблеми с някой.
>> Или просто влезе в работно време наистина
нуждаещи се от този начин на мислене.
Вие не искате да мине през електронния формуляр,
наистина искате да се срещнете с някого.
, Че за нас, както и какво ще се случи е, когато вашият
въпрос е било видяно от член на персонала, и ние
определи Мда, това трябва да бъде изпращан в един от 20 или
30 членове на екипа тук на местно ниво, ще видите горе вляво това
малко Въведете бутона опашката започва мига cs50.net /
обсъдим.
И това ви казвам, че сега са били поканени, така че
да се каже, за да влезете в опашката.
И като щракнете върху този бутон, името ви ще се появи на
IPAD, че за посрещане CS50, един от ръководителите на курса, ще
се проведе в близост до входа на Annenberg, които след това ще
Виж, както е описано тук, студенти, които имат въпроси относно
ляво, членовете на персонала, които се намират в дясно.
И с едно кликване на ляво и дясно, вашия уеб браузър
започне да мига веднага щом като, например, професор McGonnagal
е готов да ви видим в конкретна таблица в Аненберг.
>> Така че сме направили част от тази последна година.
Сме рестартира работно време и
усвоени голяма част от софтуера.
Така че осъзнавам, че това ще бъде топло тази седмица.
Но също така осъзнават, през последните години, както може би сте чували
от приятели, работно време наистина е от 50 до
150 ученици наведнъж.
И това просто не е възможно за нас да се справим, че
ефективно, един по един, през цялата вечер.
И това, което ние сме наистина ще се опитаме да направим тази година е
се възползва от факта, че много въпроси
често задавани и често могат да бъдат по-добре отговори
асинхронно.
Така можете да сортирате обмислят отговор на персонала,
и можем да мислим чрез кода си, без отопляем
налягане на задължително борят
чрез него рамо до рамо.
Така че ние изчислихме, че около една трета или половината от въпросите
ще бъдат изпратени в лице, и ние ще се опитаме да късат като
много като половината или повече по електронен път,
в работно време.
И ние ще продължим да използвате Обсъждане
през цялата седмица, както добре.
>> И накрая, да разбере, че този курс могат да бъдат взети Pass / Fail.
Така че, ако сте на оградата или просто мисля, че наистина сте
не съм сигурен дали това е светът за теб, или това е наистина
съвсем чужди за вас, разберете, че това е чудесен начин
за получаване на някои увереност, с която да се оттегли в
клас, както направих аз, честно казано, преди години.
И тогава има пет седмици, за да сортирате фигура за
себе си, ако искаш да останеш Pass / Fail, превключете на писмо
клас, или нещо подобно.
И обикновено това, което Pass / Fail се, мисля, че за студентите е
, че ако си сложиш, че 10 часа, 20 часа, независимо от това
може да бъде по някои проблеми, а ти си чука главата си
срещу стената,
и наистина просто не може да гони нещо, и вие
има толкова много други неща, които трябва да направите, честно казано, това, което
мисля, Pass / Fail е, тя е на ръба на
ситуации като тази.
Когато сте взели нещо, което 90% от пътя.
Знаеш ли, това не е съвсем перфектно.
Но имаш много от нея, все пак.
Така че, помисли Pass / Fail като ви дава, че
мисловен модел, може би.
>> Добре, така че миналата седмица се гмурна под нулата, и ние
говорихме за програмиране на сравнително по-висока графична ниво.
И днес ние правим преход към език
С, по-ниско ниво език за програмиране на върха на
които сега са построени много съвременни езици, включително и някои
на онези, които ще се използват към края план.
И синтактично, как изглеждат
е доста сходни.
Така че нека започнем да направят този преход тук.
Така че това е програма миналата седмица, че е най-простият
Hello World програми.
Тя просто отпечатва на екрана здравей свят, с
малко балонче излиза на котката.
Е, ако сега ние започваме да преведат на някой друг
език, да разбере, че идеите днес и в сряда
са идентични, но синтаксисът започва да се променя.
Така че, като има предвид, че миналата седмица имахме, когато зеленото знаме кликнали, да речем
здравей свят.
Днес ние ще трябва ПНА, основно, невалидни, ФОРМАТ
връщане, с някой друг синтаксис там, както добре.
Фигурни скоби, скоби, както и цитати, и какво ли не.
Но осъзнават, че в основата на идеята тук е печат,
и в крайна сметка факта, че основната сега ще да бъде
синоним на стартиране на програма.
Основно ще бъде там, където зеленото знаме започва нещата.
>> Така че нека сега дразни освен някои от основните градивни елементи тук
Преди да се потопите в някои конкретни примери.
Така че ние нарича това изявление миналата седмица, което е просто
инструкция.
Направете това - в този случай, да кажем здравей свят.
Ами в C, ако се вгледаме в тази линия, това е как сме
ще започне да изрази, че специално парче пъзел:
ФОРМАТ ("Hello World");.
И сега ние ще дразни това, освен все повече и повече с течение на времето,
но осъзнават, че има модел тук.
Така че, ние имаме това нещо, наречено ФОРМАТ, което е
по същество аналогично на думата казвам.
Това е, което ще направи.
ФОРМАТ и е тук означава "форматиран".
Така че това просто означава, че можете да вмъкнете
различни естетически детайли.
Цитат кавички е началото на това, което ще
да започне да се обадите на низ.
Дума, фраза, изречение.
Низ в езика за програмиране е поредица от нула
или повече знака.
Така з-д-л-л-о, запетая и т.н.,
цитат кавички низ.
И сега обратно наклонена черта N, малко синтактично странно, но ние
вече е определен, че миналата седмица в смисъл, какво?
Това е просто нов ред.
Това е просто начин на предаване към компютъра иска
еквивалент на удари Въведете там, но не
искате да удари Въведете и следователно обърквам всички
форматиране на действителното си програма.
Сега скоби приложат този низ, отворена скоба и
близо скоба и вътре в това е нашата низ.
Защото това е така, защото в C, и други програми
езици, неща като ФОРМАТ вземат аргументи, или да се
параметри.
>> Така че да започнем да мислим сега на този лилаво блок казвам като
функция, като метод, като процедура.
Вие наистина може да го наречем, каквото си искате за сега, но
Това е нещо на миниатюрна програма, която само един
нещо, в един ред, не по-малко.
Така ФОРМАТ е това, което ние ще започнем да наричаш
функция, както и функциите направи нещо - в този случай
отпечатва форматиран низ на екрана -
но функционира също така да вземат аргументи и параметри.
И с аргументи и параметри, благодаря ти, имаме предвид
че тяхното поведение могат да бъдат повлияни от това, което давате
вътре в скобите.
Така че в този случай, ФОРМАТ нужди да се каже какво да отпечатате, и ние
просто минават, в кавички, низ, че ние
всъщност искате да отпечатате.
И точка и запетая на края на тази линия е просто
исторически неудобство, с което в края на повечето линии на кода,
сложите точка и запетая, за да се направи супер ясно към компютъра
, че тази линия на код свършва тук.
Сега това е добре, защото както ще видим и програми за да получите повече
комплекс, точка и запетая ще направи супер ясно за нас, хората,
, а също и на компютъра, където линии на началото и края на код.
Осъзнайте, че някои езици не е нужно някои
на същите тези подробности.
И в действителност, JavaScript, не винаги се нуждаем от нещо
като точка и запетая.
Но повече за това, за да дойде.
>> Така цикли.
Имахме нещо като това, много интуитивно, очевидно, направете
нещо отново и отново и отново.
Както пускането на чорапи, или да каже здравей, в този случай.
Е, започва днес в C, бихме могли да изрази тази Scratch
блок като докато (вярно) ФОРМАТ ("Hello World").
Така че забележите, че започвате да се гради върху буквално пъзел
парче от преди.
Имаме същия лилаво блок, но това е в рамките на това
скоби Завинаги блок, и най-добрият начин да превежда, че
С е както следва.
Има не Завинаги ключови думи.
Вие не можете просто да въведете е-о-р-д-V-д-р на C.
Така че най-близкият аналог е време.
>> Сега, докато (вярно) изглежда малко глупаво, защото на стойност
вярно някога се промени?
Предполага се, че не.
Това е като да кажеш, докато един, докато, докато вярно.
Всичко е едно и също нещо, вярно е, винаги е така.
Така че този цикъл действително се убедят каква линия?
Само един безкраен цикъл, нали.
Контур Forever или както ние го нарече миналата седмица,
просто един безкраен цикъл.
Така че понякога това е лошо.
Понякога това е бъг, понякога това е причината да получавате
въртящата се топка на плажа или пясъчен часовник или нещо подобно.
Но в този случай, ние нарочно, за каквото
причина, искаше да отпечатате едно и също нещо отново
и отново, и отново.
Или в случай на подобно на часовник, което искате да направите
нещо отново и отново и отново.
Толкова безкрайни цикли може да има смисъл.
И това е в C можем да превежда Завинаги до код.
>> Така че сега това е малко по-специфичен.
Бяхме се повтаря 10 пъти следното изявление.
Така че, докато (вярно) не съвсем работят там, защото е вярно
винаги е вярно.
Така че, ако вместо това погледнете версията на C, сега синтаксиса получава
малко по-загадъчно.
Но за да бъда честен, след като започнете да виждате това, всичко се
доста запознат бързо.
Така че това е, което се нарича за контур.
А за цикъла ще да каже на компютъра, за да се направи нещо
отново и отново, и отново, за толкова дълго, колкото
тези неща са верни.
Сега какво ще кажеш с това?
Е, има три части на линия, и ние ще
се върнем към това в контекста на реалното
примери в един миг.
Така че не се притеснявайте, ако не съвсем потъне във всички наведнъж.
Но Int I = 0 е дълга история кратко, казвайки дайте ми
променлива, която е от тип цяло число, така че ми даде номера
призован, и да я инициализираме с 0.
Това ми даде като алгебрични променливата х и
инициализира до 0.
Но в този случай ние го извиках аз.
След това в средата, тя казва, че е по-малко от 10.
Това казва на компютъра, направете следното неща толкова дълго време
, както и е по-малко от 10.
И очевидно тя започва по-малко от 10, тъй като
започва от 0.
Тогава накрая, може би Познай какво + + средства.
Това е малко на синтаксиса, което просто означава, че нарастване.
Така, се добавя 1 да съм отново и отново и отново.
>> И така, както ще видим по тази линия, този синтаксис, а по-скоро изпълнява
точно същото нещо, което, честно казано, в Scratch беше толкова
много по-лесно да изразят.
Повторете 10 и сте готови.
В C, и в повечето програмни езици, трябва да бъде
малко по-поучително за компютъра и всъщност
уточняват нещо подобно.
Но ние ще се върнем на този и други синтаксис.
>> Ами променливи?
Scratch имахме нещо като тези оранжеви блокове,
, където можех да декларирате променлива.
Да произволно го наричат ​​брояч.
Нека да я инициализираме на 0, а след това
нека направим нещо завинаги.
В този случай в Scratch казвам на тезгяха, така че
котка ще трябва малко балонче за реч, която говори
номер, който е в тази променлива.
И тогава имаме промяна брояч с 1.
Така че всичко това е обвит в рамките на ключалка Forever.
Така че вече има градивни блокове в C с
който да превежда.
>> Един от начина, по който бихме могли да направим, че е това.
Дай ми цяло число, да го наречем контра.
Инициализиране 0
на първа линия там.
Докато (вярно), така че аз съм кражба на тази идея само за миг
преди, давай напред и направете следното.
Печат на тезгяха, и след това нарастване на тезгяха,
отново, и отново, и отново.
Или пък, + + означава само добавете 1 до нещо.
Но тук има едно ново парче на синтаксиса.
Какво изскочи като не е сред нашите предишни примери?
Да, това% г.
Така че може би си представите какво се прави, честно казано, на базата
на това, което Scratch блок се прави.
Но отново в C, ние просто трябва да бъде малко по-специално
, когато става дума да се изрази.
>> Така ФОРМАТ ("% г \ N").
Е, повечето от които можем да изхвърляме като запознати.
Котировките просто означава, че е низ, наклонена черта н
е просто нов ред.
Така че единственото ново нещо тук е% г.
И всичко, което е контейнер.
% Г ще се обозначи десетично число.
% Г компютъра означава, десетично число.
Е, какъв номер искате да поставите там?
Е, както може би може да се направи извод, след запетаята, което казваме
брояч, това е името на променливата, че ние декларирахме или
създаден преди няколко линии.
Така че това е просто начин С включване в променлива в
низ динамично.
Защото за разлика от това, ако бях вместо правил нещо подобно
това, ФОРМАТ ("гише"), какво би тази
програма да го правим, вероятно?
Буквално ще отпечатате "гише".
Което не е в смисъл, че искам.
Трябва да замени в някои числова стойност.
Така че ще видим, че функциите и след това, като ФОРМАТ, не могат да приемат
само единични аргументи, като
"Hello World".
Те могат да вземат край на цитата цитат запетая, а след това някои променливи
, който ще се включи в нея, както ще видим Предишният низ
чрез тези контейнери% знак.
>> Ами какво да кажем за булеви изрази?
Булеви изрази са тези стойности, вярно или невярно.
Да или не.
1 или 0.
Включен или изключен.
Така че в Scratch те изглеждат по този начин, и забележите, че
дъното блок тук е всъщност връзка
на две по-малки блокове.
Така че аз на влачене и пускане три парчета пъзел
заедно, за да направи това по-дълъг парче пъзел там, така че аз
биха могли да предадат идеята, че искам Х да бъде по-малко от години и
г. да бъде по-малко от ¼.
И така, аз може да превежда тези две отделни линии, както следва.
На върха може да бъде много тривиално преведени на C,
само с X <г.
Може би с някои скоби за добра мярка.
И след това в C, не пишат и да се обозначи
връзка на нещо.
Вместо да пишат &&.
И тъй като ние в крайна сметка ще видите, един амперсанд се случва с
означава нещо различно.
Така && просто обозначава идеята за "И".
>> Така че отново, въпреки че това започва да изглежда доста сложен,
една от целите на въвеждането на надраскване, освен
просто като вид забавление на рампата, където можете да направите
нещо, което е много графичен и анимирани, както и
споделя и други подобни, е да предам идеята, че
всички идеи, ние започваме да се гмурне в днес и по-нататък
са въплътени в дори тази проста
интерфейс, тъй като един ден.
Какво ще кажете за това тук?
>> Така условия.
Така че Scratch блок на ляво, там изглежда
малко по-сложни.
Но това е само част плъзгане и
отпадане на познатите парчета.
Ако х е по-малко от години, да кажем така.
Иначе, ако х е по-голяма, отколкото у, кажете го.
Друго, ние логично да се приеме, че тя е заключи, че
те трябва да бъдат равни.
Така казват, че те са равни.
Сега в C от дясната страна, точно същата нещо.
И забележите, че фигурни скоби ще бъде
характеристика на C и други езици, които правят този вид
капсулиране.
Точно както, ако блок е това жълто нещо, което е нещо
вземете лилаво блок вътре в него.
По същия начин са тези скоби -
тези фигурни скоби -
за цел да апелирам, че същата идея се възползват от един или повече
редове код, които са вмъкнати вътре в тях.
Така че от дясната страна, ако х по-малко от Y, ФОРМАТ
("Х е по-малко, отколкото у").
Иначе, ако х е по-голяма от години, отпечатате същото.
Else отпечатате, че те са равни.
>> Така че, накратко, има доста пряка картографиране или превод
на езика, които сме виждали до този момент, включително и за някои
на по-сложни функции.
Така че може да не се използва това за своя проект, или може да не
се използва за вашия проект тази седмица.
Но ние сме тези неща, наречени масиви в C. Scratch
те се наричат ​​списъци.
И видяхме с Fruitcraft RPG миналата седмица.
Малък син човек, който се разхождаше наоколо, бране
череши и портокали и други подобни.
Ами в самото начало, че се реализира с този оранжев
блок, който съдържа думи, в този случай, ние сме буквално
добавяне на "оранжевите" на
променлива, наречена инвентара.
Така че в C, този синтаксис ще се получи малко по-загадъчен.
И ние ще се върнем към това следващата седмица и да направи повече
интересни неща в света на криптографията с него.
Но в дъното тук, тези две линии по същество
превод на това, което правим в една драскотина блокира там.
Но повече за това, за да дойде.
>> Така че пускането заедно, тук е програма на C. Така че нека
бързо дразни освен някои на парчета на синтаксиса тук, но
след това да започнете да пишете някакъв код, запознаване
с някои от инструментите, които ще се използват, и да видим дали можем
може да се изгради сега някои от тези основни градивни елементи от
миналата седмица, сега синтактично в C. Така че в горната тук, това
е може би един от най-скучните програми, които биха могли да
пише в почти всеки език за програмиране.
Но е някак има специално значение, защото това е
каноничен програма, която всеки компютър учен пише, когато
преподаване на някой програмен език -
здравей програма свят.
>> Така че на самия връх, ние виждаме това понятие на # включват
и след това в ъглови скоби, stdio.h.
Ние ще се върнем към това, но наистина това, че
означава, че в този свят има файл наречен стандартен
I / O, stdio точка з, и това е просто един текстов файл, който
Някой е написал преди години.
А вътре на този текстов файл са цял куп
функции, или методи, или процедури, че някой друг
пише, че ние сме бенефициенти на защото ние
вече могат да използват кода, който човек.
Функции, той или тя пише.
В този случай, ФОРМАТ не е нещо, което съм написал, това е
не нещо, което CS50 пише.
Това е нещо, което някой е написал преди години и се слага в
файл, наречен stdio.h и след това, като настрана, сложи
друга част на функцията в друг файл.
Но ние ще стигнем до там.
>> Така # включват е просто начин да се каже, в
C, дай ми достъп до функции, които някой друг е написал.
И в този случай ме интересува, защото искам ФОРМАТ.
Сега стигаме INT главната (нищожна).
Така че това е едно от тези неща, честно казано, че на ден 0,
почти Нямам вид на зона извън, защото това е просто
не е интересно
интелектуално, някои от синтаксиса.
Но за сега се знае, че функциите, иначе известни като
процедури, или методи, обикновено някаква стойност.
Те правят нещо.
Те идват с отговор.
Те произвеждат продукция.
Така INT до главната е само стенограмите начин да се каже
че тази функция, тази процедура, е в крайна сметка ще
да ви дам номер.
И защо това е така, ние ще се върнем.
Майн е само стандарта по подразбиране света по подразбиране
функция, която ще се изпълни в програма на C, когато
можете да го стартирате.
Void просто означава това нещо, основен, не взема
аргументи, като в този случай.
Така че аз съм супер изрично.
Няма по струните там, няма запетаи.
Void означава, че няма аргументи на основното.
>> Сега, накрая, слава Богу, последните два реда са запознати.
Вътре в фигурни скоби имаме ФОРМАТ
и имаме възвращаемост.
И връщането е вид жалко, че ние трябва да
да я тури там, защото в този случай не прави всичко това
много на интереси.
Но в компютърна програма, когато функцията връща 0,
това означава, че всичко е наред.
Нищо не се е объркало.
От друга страна, ако една функция връща един или отрицателна 1, или
отрицателно 1337, или някои случайни числа, като това, че
обикновено означава, че действително е имало грешка.
Така че, ако сте на вашия Mac или PC, ако сте виждал
някои досадни съобщение, защото компютърът ви е разбил или
замразени, а има и загадъчно съобщение за грешка,
и след това някакъв код, като кодова система
1,2,3,4, известен брой,
, че като цяло е излишен детайл да се каже
повечето от нас, хората, но това е, което някои функции или някои
програмата действително е върната, различна от нула стойност.
И Ползата от това е, че 0 означава, както и
тогава ти същество да има безкраен брой неща, които
може да се обърка.
Което е защо са избрали 0 за добро и различна от нула стойност за
лошо, както скоро ще видим.
>> Така че нека да вървим напред и да напиша тази.
Така че се припомни, че на другия ден аз използвах моя Мак да отвори
терминален прозорец, а след това отвори текстообработваща програма, като
TextEdit, и аз започнах да пиша някакъв код.
Е, това е добре.
Но вашият опит ще бъде различен на Mac, или
на компютър, Linux, Solaris компютър, независимо от операционната
система, се случи да използвате.
И така, разбира се, това, което ние, вместо да се използва, е нещо
CS50 техника.
Така че CS50 техника за изтегляне част от софтуера
, която ви позволява да стартирате операционната система, наречена Linux,
специално Fedora Linux, на собствения си Mac или PC.
И това се прави чрез изтегляне на нещо, наречено на хипервайзор.
Така че всичко това ще бъде документирано в проблем набор 1.
И ще се насочва към това, което трябва да изтеглите.
Но крайният резултат, независимо дали имате Mac или PC,
изтегляне някакъв свободен софтуер.
След това да изтеглите CS50 техника, и да ти кажа, че
свободен софтуер - хипервайзора
да стартирате CS50 техника в прозореца на вашия компютър.
И това, което се случва, е това.
>> Имам сега, забележете, тук това, което изглежда да бъде работния плот
околната среда.
И нека ми се свие тази единствен прозорец.
Така че това сега е моя Mac, с малък прозорец, и вътре
на този прозорец се случва да бъде напълно
различна операционна система.
Всъщност има този старт менюто тук, напомнящ
Windows, който има цял куп подменютата, включително
линк към CS50 употреба, Dropbox, и други подобни.
И какво тази среда сега е стандартна среда
че всички ние вече могат да използват, така че няма значение какво ви
компютърът е, какво е инсталирано на него, каква версия
Mac OS или Windows бягаш, ние всички вече имат
и съща среда.
И сега, в тази среда можем да започнете да пишете някакъв код.
>> Така че аз отивам да вървим напред и да се отвори една програма, наречена Gedit.
Това е сравнимо notepad.exe, или
TextEdit на Mac.
И това е само супер проста програма за редактиране на текст
което прилича на това на пръв поглед.
Сега най-отгоре, имам бяла палитра, в долната
този черен прозорец, който казва jharvard @ уреда.
И това е, защото потребителят има предвид, че ние предварително
за всеки е призван Джон Харвард.
Той има папка, където всички файловете му ще отидете, и
тук е мястото, където можем да започнете да пишете някакъв код.
Така че нека да вървим напред тук и да се увеличат само малко, и аз съм
ще направим # включват , INT главната (недействителни), и
тогава аз ще направя ФОРМАТ ("Hello World")
; Върне 0.
Сега всичко това е доста черно и бяло.
>> Позволете ми да отида напред и да направи едно нещо, за да преподават Gedit какво съм
всъщност прави.
Нека да отида до Save As.
Отивам да изберат най-лявата страна тук jharvard.
Така че отново, дори ако никога не сте използвали Linux преди, честно казано
тези дни, всички от тях са прехвърлени в по същество
един и същ тип интерфейс -
Mac OS, Windows и Linux.
Затова избрах jharvard домашната папка.
И аз отивам да запишете файла като hello.c.
Така че на самия връх, написах hello.c именуване C
програма с разширение в
това, което е често срещана практика.
И аз удари Запиши.
И сега, което е хубаво е, че съм ефективно преподава Gedit,
, че това е програма C.
Забележете, че ми черно и бяло сега е цветово кодиран текст, или
синтаксис подчерта, която току-що се насочва вниманието си към
различни семантични части на програмата.
В горния ляв ъгъл, програмите ми стават по-сложни, аз съм
ще има резюме на всички от нещата, които съм написал.
Така че това е там.
Така че нека сега да се намали и до този терминален прозорец.
>> Така че това е може би нова за много хора.
Ако никога не сте използвали среда на командния ред, които никога не сте
използва DOS, или никога не сте използвали Linux, или никога не сте отворили
Mac OS терминален прозорец, има много неща, които
може да направи с GUI, като сочи, и кликнете и
плъзгане и пускане, и други подобни, но като цяло -
сигурност в света на компютърната наука -
командния ред, където не е нужно мишката
обикновено, имате само клавиатурата си, всъщност е много
по-силен от интерфейса, след като се аклиматизират към
различни команди.
И ти вид на свободно себе си, че е необходимо да се отбележи и кликнете
във всичко.
Така че в Gedit ще някак да имате най-доброто от двата свята.
Ние можем да влачите и пускате текст, можем да го видим
хубаво и цветово кодиран.
Но когато дойде време да работи нашата програма, ние ще понякога
просто използвайте този малък прозорец.
>> Така че аз отивам да вървим напред и да направи това.
В долната черно и бяло прозорец, аз отивам да вървим напред
и пишат ехтя.
И звъня е името на компилатор.
Това е програма, която конвертира ми изходния код
в, така, обектния код.
0s и 1s, че видяхме за кратко миналата седмица.
Спомнете си от миналата седмица, обеща, че щяхме да
от нещо подобно - ние трябваше да бъде
нещо подобно -
и това със сигурност не е нещо, което човек ще
да направите ръчно.
Така че, вместо да започваш да използвате програма, и тази програма в
този случай се нарича звъня.
И името на моята програма е hello.c.
Така че, за да съставят hello.c от сорс код в
обектен код или 0s и 1s, той трябва да е достатъчно просто да си направи
и натиснете Enter.
>> Добре, нищо не изглежда да се случи.
Но аз знам, сега, или от миналата седмица, че името по подразбиране на
програма, когато са написани в C, е глупаво нарича a.out.
Най-безинтересна името, което може да дойде.
А е първата буква от азбуката, е това, което беше
изход, но така да бъде.
Това е моята програма, а сега точка наклонена черта, както ще видим, е
всъщност само функция на сигурността, тъй като
a.out е програма, съм написал.
Тя не дойде с моя компютър, това е
не в Program Files.
Тя не е в папката "Приложения" Mac OS.
Трябва да съм супер изрично с компютъра, и да кажа
тази програма, a.out, е в текущата папка,
текущата директория.
И начина, по който го представлява, в среда като тази
е точка представлява каквато и папката, в която в момента са инча
И така. / Просто означава, работи a.out
в текущата папка.
И аз тичам с Enter, и готово, първата ми програма.
>> Сега нека да направи крачка назад.
Този прозорец е малко по-малък, и осъзнавам, че дъното
ляво на уреда тук е друга икона.
Един от тях е Chrome, който трябва да бъде доста познато, само на уеб
браузъра вътрешността на уреда.
И това е само черно и бяло икона на
по-голям терминал прозорец.
Така че, ако става малко досадно да сортирате имат само
едно мъничко парче на прозореца, с които да си взаимодействат
с програми, ние можем да го правим това.
А сега нека да започнете да пишете няколко скоро
да бъде познатите команди.
LS.
Така ли е команда за включване в списъка.
Така че в Mac OS или Windows, като цяло ще двукратно върху
папка и след това, готово, ще видите всички различни файлове
и папки.
В командния ред среда, където можете само да въведете
команди или текст, ли е еквивалент.
Така ми покаже какво има в тази директория.
>> Сега има един куп неща тук, това е малко
познати и малко непознати.
Но забележете, че точно като Windows и Mac OS, jharvard
има папка на работния плот.
Така се случват всички икони, които са на компютъра си
да бъде в тази папка.
Има сваляния папка, неща, които
Chrome може да постави там.
Dropbox.
Така че Уредът е с вградена поддръжка за Dropbox
така, че през семестъра, може да се синхронизира с вашия Dropbox
сметка, така че всички ваши програми са подкрепени.
Те са достъпни на другия си компютър.
Ако нещо някога се обърка с уреда, можете да
много лесно да се възстанови от Dropbox.
Така че тази папка е там за това.
Има два файла, които направих - hello.c
a.out.
И тогава в дясно има някои други папки, които ние ще
стигнем до към края на семестъра, с уеб
програмиране.
Така че, когато го направя. /, A.out, Enter, че казва
в директорията съм в текущата директория, и изпълнете
програма, наречена a.out точно там.
>> Добре, така че е хубаво и добро, но това не е всичко, че
непреодолими да се напише програма, наречена помогне a.out.
Така че ние може да се прави това е малко по-различно.
Така че, вместо просто вървят ехтя, hello.c, нека добавим
, което се нарича аргумент на командния ред.
Така аргумент от командния ред, или преминаване в този случай, е само
друга дума или фраза, която въведете в ред след
програмата, която искате да стартирате.
Така че в този случай, ехтя е програмата Искам да изпълня-о
средства изходен файл, който вече не нарича a.out.
Изход файл със същото име и да го направят чрез съставяне на
последната дума на линията, hello.c.
Така че по-кратко, това е много леко подобрение, с което
вместо това глупаво име на файла a.out,
Сега мога да направя ехтя-о здравей, тогава hello.c и
след това натиснете Enter.
Сякаш нищо не може да се случи, но отново много с 0 - когато
нищо не изглежда да се случи, това означава, че нищо лошо се случи -
така че нека го направим ли сега, Enter, и наистина сега
здравей програма.
Така че, ако напиша здравей сега, Командата не е намерена.
OK. /.
Така че, точно така.
Така, защото тази програма съм написал, и тя не дойде с
компютъра, / Здравейте, Enter, означава
Аз съм сега работи здрасти.
>> Така че тя е там.
Сега това, което в крайна сметка ще стигнем до все повече и повече командния ред
аргументи, които ни позволяват да се направи повече, но само за тези, за които
които това може да бъде стара шапка, нека отиде в
директория тук и да ви дам само една закачка как иначе ние
може да отиде за прилагане здравей свят.
Нека отида в тук, и аз отивам да го отворите.
Така че всъщност, аз отивам да се обясни това, което правя, така че
това е полезно.
Нека обратно.
>> Така че аз съм правил това от дълго време.
Така че забележите в дясно има няколко
директории, които са странно име source1m и source1w.
Това е просто глупаво конвенция, която ние използваме.
Източник просто означава, изходния код, 1 означава, че това е една седмица, и
m означава, че е понеделник и w означава, че е сряда.
Така че нищо загадъчно там.
Това е просто съкратена нотация.
Тези сини неща са папки, иначе известни като
директории.
Искам да отида в тази папка, както и на нормален компютър
Можех просто щракнете двукратно върху иконата на папката и
има всичките си файлове.
Но в среда на командния ред, не може съвсем да направя
това, така че вместо това, аз трябва да промените директории ръчно.
Така че, ако въведете компактдиск и след това source1m, Enter, забележите, че
бързо ми, нещо в бяло в ляво, току-що се променили.
И наистина, когато тя току-що каза, скоби и след това
малко завъртулка, символът тилда, това означаваше, че е
в домашната директория на Джон Харвард, My Documents,
личните си файлове.
Но сега в скоби се казва ~ / source1m.
Това просто означава, че съм в една папка, наречена source1m
това е в домашната директория на Джон Харвард.
Така че, ако аз сега искам да се изброят файловете в тази папка, лесно
въпрос, ще напише ли.
И сега виждам всички файлове, че предварително създаден за днес
лекция, всички от които, или по-голямата част от които, се случи
до края инча в.
>> Така че нека да вървим напред и тичам Gedit на програма, наречена
holloway.c, която е написана от някой случаен хакер
в интернет, че изглежда малко като този.
И ние няма да мине през това във всеки
детайли, но за тези, които по-удобно, по-специално, ако
искате да се предположение на това, което прави тази програма тук.
Уверяваме ви, независимо дали сте по-малко или по-удобно,
ние не сме дори да се стигне до подобно нещо до края на
този семестър.
Това е, което е пример за завоалира конкурса C, които
средства пишете най-загадъчен търсите програма, която евентуално
може да надмине други умни хора, които са по същия начин
се опитвам да напиша неща и да покаже, че те могат да пишат
по-загадъчни неща от теб.
Така че това не е пример за добре написана програма от
гледна точка на стил, това е пример за програма, която
печели конкурс за хора, които се опитват да
да бъдат неясни и абстрактни.
>> Така че, ако ни свърши това нещо, пусни ме в моя терминален прозорец,
така да се каже.
Така че това черно и бяло среда се нарича
терминален прозорец като цяло.
Нека вървим напред и да го компилирате.
Аз няма да се използва ехтя, защото тази програма е
малко загадъчен и се нуждае от по-различно
съставител, наречен GCC.
Но го прави едно и също нещо.
Изходния код на обектен код.
И сега, ако аз тичам a.out, че програмата, която
Току-що видях прави това.
Така че този човек през тази година спечели този конкурс.
Във всеки случай, ние не отиваме в тази посока, сама по себе си.
>> Така че нека да се опитаме да дразни, освен това, което можем да направим
с тези основни градивни елементи, за да правят все повече и повече
интересни програми.
Така че ние сме написал програма, ние сме стартирате програмата.
Сега ние действително можем да се опрости и вече не се налага да пиша
думата ехтя в командния ред.
Оказва се, че нашите програми получават по-загадъчен, ние можем, или
по-сложна, а ние действително можем да стартирате тази команда.
Така че нека да се върнем към моята домашна директория, така да се каже, позволете ми да
премахване - RM е командата за премахване - Тръгвам да премахнете
файл, наречен a.out и здрасти.
И сега забележите в среда на командния ред, също като в
GUI, ще получите подкана за това. Не мога да щракнете върху бутона обаче,
трябва да въведете г. за Да, Y за да.
И сега, ако въведете ли отново, забележете, че тези зелени
програми - a.out и здравей -
са си отишли.
Пазете се Rm.
Той може да направи лоши неща, както можете да направите чрез плъзгане
неща за боклука.
>> Така че сега, нека вървим напред и бих могъл да направя това - ехтя-о
здравей, здравей -
Аз вече съм отегчен пишете тази команда.
Въпреки, че аз го написали малко по-бързо.
Така че ние можем, вместо да правят здрасти.
Така че да не е компилатор.
Това е просто една програма, която идва с Linux, в това
случай - операционната система -
, която автоматизира процеса на съставяне на програми.
Така че, вместо да помним ехтя-о име и
така нататък, особено след тези линии се удължават и
по-дълго, може просто да напишете направи.
И това се случва да плюе цял куп неща, които
ние в крайна сметка ще видим този семестър.
Но забележете сега, ако ми тип ли, здравей отново е в моята директория.
И наистина мога да го стартирате. / Здрасти.
Така че направи просто автоматизира процеса да работи това, което е било,
в този случай, много по-дълъг, по-сложна команда.
Така че ние ще започнем да се използва марката, просто защото това е много
по-удобни за ползване.
>> Но сега нека да направим по-интересна програма
, отколкото просто да кажа здрасти.
Така че в програмите сме написали досега е основната.
Това е просто по подразбиране, което започва всичко.
Но там има и други функции, както и
stdio.h е нещо, което видяхме на върха на нашата
файл и преди, и това е, което е известно като стандартната библиотека.
Вътре от стандартната библиотека е цял куп функции
че някой друг пише, а ние да започнете да използвате тези
функции да пиша повече
интересни самите програми.
>> Така че нека да се върна на уреда.
Отивам да затворите този прозорец на терминала.
Отивам да затворите нещата, които е написал по-рано, и просто отидете
в hello.c и забележете сега мога да направя следното.
Здравей, свят не е толкова интересно, бих искал да
персонализирате тази програма за себе си.
Така че, вместо да казва на света, аз отивам да
отидете напред и да каже -
Можех да въведете David - но това наистина е нещо
основата си е същият.
Но нека се опитаме тази идея контейнер.
Спомнете си, че в C, а в ФОРМАТ, имахме тези
контейнери, и там са повече, отколкото просто% г.
Така% D, бърза проверка на здрав разум.
Добре, десетично число, това е всичко.
Десетични цифри, това е всичко.
Така% C, тъй като ние ще се сблъскате, ще бъде герой.
Поставете герой тук, писмо от А до Я,
или препинателен знак.
Един символ,% F, Някой знае ли от други езици?
Така плаваща запетая стойност.
Реално число.
Така че не десетично число - това е реално число с
десетичната запетая, а някои от броя на цифрите в ляво
и вдясно от нея.
% S, низ.
Това отива да се види доста често.
Низ, отново, е просто дума, фраза, поредица от
отделните герои.
И накрая, LLD?
Така че това е повече от ъгъла случай.
Дълго, дълго след десетичната запетая.
Така че, ако не искате само един номер, който е този голям,
искат по-голям брой, вие ще трябва да се определи до
компютъра, че на определен размер.
>> Така че нека да ощипвам това малко.
Вместо просто трудно код в Дейвид, нека леко
динамично кажа% S.
Така че, сложи S%, което е контейнер за низ.
После ме остави да правя запетая, а след това "Давид" тук.
Сега това не е всичко че интелектуално интересно,
защото всичко, което съм направил сега е наистина създава повече работа за
на компютъра.
Вместо да кажеш на компютъра, всичко това едновременно, аз съм сега
казва направи това и го поставете низ тук в крайна сметка, запетая,
тук е, че низ.
Така че това не е по-голямо подобрение, но това е най-малко
стъпка към по-интересна програма.
Защото сега, позволете ми да отида напред и да направи този прозорец малко
по-голям, позволете ми да отида напред и да тичам да здравей.
И сега, / a.out не работи, защо?
Добре, сега тя се нарича здрасти.
Така че отново, а също и ехтя с-о, преименуван на
програмата да бъде нещо по-интересно.
И готово: сега се казва здравей Дейвид.
>> Добре, още една глупава програма.
Така че сега да се върна тук и да се въведе понятието
на променливата.
Не би ли било хубаво, ако мога да декларирате променлива
, чийто тип е низ?
И стойността на променливата всъщност идва от потребителя
себе си.
Така произволно, аз отивам да се обадя на променлива S, която е
обща конвенция, когато имате една променлива, наречена
низ.
Отивам да направя знак за равенство, и тогава аз ще се обадя
функция, наречена GetString.
Така GetString не е нещо, което идва вграден в C. Това е
функция, която CS50 екип е писал, наистина само за
тези първи няколко седмици, за да се опрости процеса на
приноса на потребителите и получаване на приноса на потребителите под формата
на низове, или номера, както и такива.
Така GetString е като ФОРМАТ, но очевидно, отколкото
да го отпечатате ще направи това, което името му казва, низ.
Но да използваш GetString, ние ще трябва да се направи промяна
тук, отвъд това.
Така интуитивно, тази програма, да се надяваме, е по някакъв начин да
низ от потребителя, а след това какво ще направя
с този символен низ, наречен S?
Тя просто ще го отпечатате, нали?
Все още не е стимулираща програма, защото всичко ще
да направите, е да включите в тази стойност в където% е
казва, че трябва да отида.
>> Така че нека поне видим това в действие.
Нека ме спаси и отдалечаване.
Сега тук, в моя терминален прозорец малка част от една,
нека отново правят здрасти.
Добре, ах, по дяволите, аз имам един куп грешки.
Нека превъртете нагоре, и ние виждаме нашата първа -
така че нека действително да направите това в още по-голям прозорец, така че
може да видите колко лошо се издъних -
така че не Здравейте.
Добре, това е катастрофа, нали?
Съм написал три реда код, и
ми даде 12 грешки.
Така че, защо е това?
Така че, за щастие, често, когато видите много, много грешки
плюе наведнъж, това е наистина само защото сте
бърка компютъра тук.
И остава объркан от времето, става тук.
И така, той просто започва да препъване, и се препъваше и
плюе по-страшни неща, отколкото в действителност.
Така че, като цяло, винаги започват с горната.
>> Така най-най-най-например червено,
съобщение за грешка е това.
Използване на недекларирания идентификатор низ, съм
означава стандарт в?
Аз не го направих.
Имах предвид стринг, но това е така, защото, думата низ
, че продължите да използвате устно всъщност
не съществува в C или.
Това е нещо, което ние ще използваме само за първата седмица или две
тук, но тя съществува в един файл, наречен cs50.h.
Така че за сега, знам, че има тази друга библиотека
екип е писал, така че е бил написан по-скоро от
stdio.h.
Но вътре на cs50.h е определение, синоним на
видове, които създава тази дума низ.
>> Така че сега да се върна на моя терминален прозорец.
Отивам да изчистите цялата тази бъркотия от Ctrl-L. Ние просто ще
избършете всичко чисто, и аз ще отида напред и да направи
Здравейте отново, Enter.
Така че това, което се случи сега?
Сега всички тези грешки си отиде.
Така че това, което съм наистина направи?
Току-що научи, че компютърът, низ съществува, и това е
в този файл, наречен cs50.h.
Така че спрете да се оплакват, защото сега знаят къде да намерят
декларация, че функцията, така да се каже.
Когато съществува в света.
>> Така че сега аз отивам да вървим напред и да работи здравей.
Струва ми се, че да има безкраен цикъл, нищо не се случва.
Така че аз трябва да напишете нещо тук, нали.
Първия ред от кода в моята програма е GetString.
Така че това е буквално ме чака да се получи низ.
Така че в този смисъл да, това е безкраен цикъл.
Очевидно в GetString е поведението по подразбиране, че ние
пише - персоналът -
че просто казва, чакаме и чакаме и чакаме и чакаме и чакаме,
, докато потребителят не ви дава низ от пишете нещо инча
Така че нека да вървим напред и тип в D-А-V - I-г, въведете.
И това е, здравей Дейвид.
>> Сега това изглежда като че ли е просто акт?
Нека вървим напред и въведете в Томи.
Въведете, добре, изглежда да се работи.
Работи за Роб, работи за Zamyla, работи добре.
Така че ще ходи да работи, най-вероятно.
Така че трябва да отпечатате каквото и да го дам,
и можем да бъдем малко трудно тук.
Да видим, ако ние не направим нещо подобно Здравейте.
Да отидете тук, нека да видим, копие, паста.
Аз няма да бъде в състояние да поставите, че много пъти тук.
Paste, добре, Shift + Ctrl + V. Така че това, което би могло
се случи, че е лошо тук?
>> Добре, така, segfaults.
Така че някои от вас с предишни произход ще знаят, че
като цяло, като компютри партиди на суровини, когато те са
вероятно не е трябвало да получават дълги имена като този - лошо
неща се случват.
Всъщност, в света на интернет, също това се случва доста малко,
, при която, когато сте проектиране на уеб сайт, когато сте
проектиране Facebook, вие трябва да направите произволни решения на
отпред, както и колко дълго ще продължи някой
Facebook потребителско име да бъде?
Или колко дълго ще първото име на някого?
Колко дълго ще телефонния номер на някого и др.
И ако програмистите правят лоши предположения, програми чупят
защото се опитате като им дава повече мощност, по-вход
по-скоро, отколкото те имат памет.
Или RAM разпределени за него, така че ако сега удари Въведете,
тази програма действително работи, защото бяхме в библиотеката
и ние всъщност очаква този конкретен случай.
Но безспорно този семестър, ще напише най-малко един
програма, която ще каже тези думи.
Запомни тази седмица от сега, може би два дни от сега.
Сегментация е виновен за нещо лошо.
Той се отнася да правиш нещо, което на компютъра
не очаквате.
И в този случай, като програмист, не е очаквала.
Много харесва това, което тази купчина чорапи, имаше различни
ъглови случаи бихме могли да са се сблъсквали.
По подобен начин в програми, ако не се предвидят колко време е
нечие име ще бъде.
Или какво, ако имам един злонамерен потребител, и името му е
всъщност е доста кратко, но те просто се опитваме
да се забъркваш с мен?
Какво ще бъде поведението на моята програма?
Е, в този случай, нещо, което всъщност може да се срине.
>> Така че нека да го направим.
90 минути, това е ужасно дълго време
да направят компютърни науки.
Защо не получите в навик на вземане на пет минути
почивка тук, и когато се върнем, ще се потопите в някои
по-сложни и завладяващи програми?
Пет минути.
>> Добре.
Така че един бърз коментар.
Казаха ми, че въпреки че това е на екрана, преди, какво
излезе от устата ми беше cs50.net/rsvp.
Това е правилно. cs50.net/lunch.
Така че сега можете да опитате RSVPing за това / обяд.
Но нека да направим това сега.
Така че това е супер бързо, супер нова за много хора.
Стара шапка за някои хора.
Така че нека назад само за миг, и да видим как се стигна до
тази здравей световното производство само преди миг.
>> Така че, на първо място, е това CS50 техника.
Отново, парче от софтуер, проблем 1 ще каже
как да го изтеглите, къде да го изтеглите, какво да кликнете
и така нататък.
И тогава, след като следвате тези инструкции, ще бъде в състояние
да увеличите вашия прозорец, и вашия Mac или PC ще изглежда
малко нещо подобно.
Черен фон, домашна папка в горната част, където всички
вашите файлове, една кофа за боклук в горния ляв,
меню в долната част.
Така че отново, доста подобни по дух на Mac OS или Windows,
въпреки че се случва да бъде Linux.
И така, какво е следващото?
Е, ние започва да пише програми.
И си спомняте от миналата седмица, че всичко необходимо, за да напишете
Програмата е обикновен текстов редактор,
като Notepad или TextEdit.
Честно казано, дори можете да използвате Microsoft Word.
Но лошите неща, в крайна сметка ще се случи, защото това е много
непохватни решение за написването на програмата, плюс това ще
да го запишете в грешен формат на файла.
Но това е просто текстов редактор, текстообработваща програма, всичко, което е
е необходимо да се напише програма.
>> Така че в уреда CS50, можем да направим това по един прост начин.
Ние можем само да кликнете върху тази икона в долния ляв.
И отново проблеми 1 ще ви посъветва за това, и готово -
можете да получите този черно-бял интерфейс, където можем да започнем
писане на код.
Така че нека започнем написването на супер проста програма отново.
Отивам да отидете до File, Save, и аз ще се обадя
това, нека кажем, hello2.c.
И аз просто го казвам като кликнете върху jharvard, го
в своята домашна директория, не ми пука
когато това се отива.
И тогава Запиши.
И сега мога да започна да пиша моята програма.
И си спомням от по-рано, че аз трябва да пиша Int
главната (нищожна).
Увеличаване на горния ляв ъгъл.
И тогава искам да кажа, ФОРМАТ вземат две.
И сега един нов ред, в близост цитат, затворете
скоби, точка и запетая.
И тогава слизат тук, за да ми терминален прозорец, който е
вградени в Gedit, просто за удобство.
И аз ще отида напред и пишат направи здравей, но не
Здравейте сам, hello2.
>> Така че моето досие се нарича hello2.c. Моят файл следователно
трябва да се нарича hello2, в този случай.
По дяволите, какво съм направил погрешно?
Добре, така че аз ясно пропуснати линия, ако си спомняте какво
предишни програми изглеждат.
Но нека да видим дали не можем да дразни този апарт.
За съжаление, повечето хора, които пишат програмите, с които
пишем програми не се опростят нещата толкова добре.
Така че ние трябва да се вид на обезмаслено над това, което не прави
смисъл тук и да видим дали можем да разберем какво не е наред.
Най-горния ред казва, че ще имплицитно обявяване C
библиотека функция ФОРМАТ тип с вътр.
Добре, разбрах, част от това.
Но изглежда намеква за факта, че използва ФОРМАТ
погрешно, по някакъв начин.
И какъв смисъл не е наред?
Аз просто не се учат на компютъра, че е във файл
нарича stdio.h.
Сега само трябва да запомните, че сега ФОРМАТ е
в stdio.h, и наистина ще има друга
функции в същия файл, че ние ще свикнем да.
>> Така че сега ме пусна напред и натиснете Ctrl-L само ясно, че
далеч, повторение hello2, и готово.
И тази команда отново, по-сложна, отколкото ще обясним за
днешните цели.
Но той не се управлява ехтя и ехтя изходния код и
изплюва 0s и 1s.
И 0s и 1s в този случай се наричат ​​какво?
Добре, обектния код.
И файла, че те са в, така се нарича,
hello2, в този случай.
Защото моят текстов файл hello2.c Enter.
И сега да вземе две удивителен знак, удивителен
точка, удивителен знак.
Добре, така че сега имаме способността да се получи струни,
очевидно.
Е, какво друго можем да получим от потребителите?
>> Добре в CS50 библиотека, има и други функции, които
ще да опростим живота си в тези първи няколко дни.
GetChar, GetDouble, GetFloat, GetInt,
GetLongLong, GetString.
Ами, нека да извади най-лесният от тях първи.
GetString буквално прави това.
Той просто седи там, чакайки на потребителя да въведете нещо в
и веднага след като напишете нещо и натиснете Enter,
прави нещо с тази стойност.
Така че нека да се върнем към този пример, за да видите какво точно
GetString прави.
Нека вървим напред и да се отворят в Gedit, hello.c, и припомни
че точно преди почивката, това е там, където бяхме.
>> Така че нека сега дразни освен в малко по-подробно.
Така че по линия 6, има две неща
случва в момента.
Знак за равенство се отделя първото полувреме и втората половина.
Така че на лявата страна на знака за равенство, ние сме
казва низ е.
И тогава, само мирянин условията, какво е низ е
правиш, мислиш ли?
Те създават в какво?
Така че това е низ, наречен S.
Сега какво всъщност означава това?
Е, това е запазване място за низ, наречен S.
Това не е съвсем така.
Какво е това?
Ами компютри, както знаете, имат твърди дискове, това е мястото, където
вашите файлове се съхраняват.
Компютри RAM, и това е мястото, където програмите са заредени
докато те се изпълняват.
Така че, когато щракнете двукратно върху иконата и Microsoft Word отваря
, Microsoft Word работи, така да се каже, RAM, което е
електронна част на вашия компютър.
Не физически, механичната част, която е предене, където
данни обикновено се съхраняват в дългосрочен план.
Така низ е доста много казва компютъра ми даде
достатъчно RAM, за да се вмести в низ.
Сега това е малко прекалено опростяване, защото
колко голяма е низ ще бъде?
Ами ние всъщност не знам все още, така че в следващите седмици да дойде
ние действително ще дръпне слой, който е низ и
ние ще ви кажа за какво става въпрос.
String, за сега, е просто хубава опростяване на нашия свят.
Но низ и декларира, низ, наречен S, за сега.
Обявява низ.
Запазва малко място в паметта за низ, потребителят е
за да въведете.
>> Сега нека погледнем в правото на знак за равенство.
Така се казва GetString ().
И малко здрав разум проверка.
Фактът, че няма нищо вътре в скобите
предполага какво да кажем за GetString?
Той не възприема аргументи.
Това е, че не може да повлияе на поведението му по какъвто и да е начин.
Всеки път, когато го използвате, ще получите низ и това е всичко.
От друга страна, ФОРМАТ, се надяваме, че поведението му прави
променя всеки път.
В противен случай, това е доста безполезен печат функция, ако
го прави едно и също нещо.
Ако тя винаги се отпечатва Давид или нещо подобно
произволно през цялото време.
Така ФОРМАТ има смисъл да има аргумент.
GetString не трябва наистина аргумент, защото исках
да се получи низ от потребителя и това е потребител, който ще
да предостави на динамика като напишете различни букви
всеки път в клавиатурата.
>> Така че това, което се GetString се в крайна сметка?
Мислете за него като за тази малка черна кутия.
И тази черна кутия не взема вход, но когато взрив на
него, да го изплюе низ, който потребителят е въвел инча
А фактът, че има знак за равенство означава вземе
това, което се изплюе в дясно и да го съхраните в
това, което е в ляво.
Така знак за равенство, то всъщност не означава
равенство, а по-скоро технически означава задача.
На стойността на правото, и го постави в
променлива в ляво.
Така че това е всичко, което се случва там.
>> Сега в линия 7, ние се обаждате ФОРМАТ.
Така ФОРМАТ надяваме се малко скучно до сега.
Така че да отпечатате форматиран низ.
Какво низ?
Печат ", ч-е-л-л-о,% S
\ N ".
Добре, така че това, което мога да искате да включите в% S?
Буквално, каквото и да се съхраняват в чл.
Така че в този случай, малко здрав разум проверка, колко аргументи
ФОРМАТ отнеме?
Добре, чух едно.
Чух отново.
Второ, чух две.
И как около три?
Добре, три?
Отлично.
Три възможни отговора, само един от тях е верен.
Така че аргументите отново повлияе на поведението на функция.
В миналото, ФОРМАТ е само един аргумент.
"Hello World" е единствен аргумент.
Въпреки това, сега, забележете, когато това запетаята.
Това запетая е извън цитат / кавички, което означава,
хей ФОРМАТ, тук идва втори аргумент.
>> Така запетаи в повечето езици за програмиране
отделни множество аргументи.
Така че отговорът тук определено не е един, защото
има запетая.
Толкова минимално, ФОРМАТ изглежда като две
аргументи това време.
Но възможността за подвеждащ въпрос тук е това, което
за този запетая?
Означава ли това, че всъщност има три аргумента?
Това, това и това.
Така че не, защото това запетая е вътре в кавичките, които
означава, че тя е наистина само естетиката на английски език.
Това няма нищо общо с броя на
аргументи в тази програма.
Така че това запетая е извън кавичките.
И тогава върне 0.
За сега нека просто на тази вяра за
днес, и просто знам, че когато се правят функции изпълнение
реда код, те по принцип трябва да върне някаква стойност.
В този случай, просто защото основният трябва да се върне Int
това е само начин на езика C работи.
>> Така, защото нищо не се обърка, се чувства като тази програма
добре, аз просто трудно кодирани в замяна 0.
Но за сметка на това и аз отивам да пиша това в псевдо код
сега, точно както Джоузеф когато направихме чорап
Например миналата седмица.
Ако нещо се обърка - това не е действителният код - са заминали
наред, след това се върнете, да речем, 1.
Else върне 0.
Така че това е мястото, където отиваме с това.
Това не е актуален C код, просто pseudocode.
Но това е начина, по който може да се върне
различните възможни стойности.
Но за сега аз съм просто ще да вървим напред и да върне 0.
Добре, всички въпроси до този момент по синтаксис, функционалност,
или нещо подобно?
Да, в гърба.
>> ПУБЛИКАТА: недоловим]
Дейвид Малан: Може ли да се говори малко по-силно?
Защо тази програма за връщане 0, и?
ПУБЛИКАТА: недоловим]
Дейвид Малан: О, това е защото имам мързелив, съжалявам.
Не добър академичен отговор върне 0.
Мога да вид спасят това, с думите, технически C, ако основната
изрично не връща стойност 0 ще бъдат върнати
автоматично за вас.
Кое е вярно, аз не съм просто прикрива.
Но, аз трябва да го направи по този начин.
Не интересна храна за вкъщи, отколкото, че освен моя грешка.
Да?
>> ПУБЛИКАТА: Обикновено, когато напишете невалидни, това означава,
не върне нещо.
Дейвид Малан: Правилно.
Ако вместо това, трябва да укажете пред името на функцията,
Например тук, нищожно, то функцията
не връща нищо.
И затова просто ще кажа, връщане или нищо,
и това ще бъде последователна.
И ние ще се върнем към това.
И точно FYI, един от улова с учене
програмиране в света, която има стотици книги и
стотици сайтове там е неизменно ще
виж различен синтаксис в различни книги
от различни хора.
Осъзнайте, ние ще направим всичко възможно в раздели и лекции да бъде
последователна.
Но понякога ще видите противоречиви синтаксис.
Така че, когато се съмнявате, просто попитайте.
И като цяло, ние ще се погрижим в лекции и секции, за да
почти винаги го представят по правилния начин.
И аз казвам почти винаги, защото пример в това отношение.
Други въпроси?
>> ПУБЛИКАТА:% съществува извън уреда?
Дейвид Малан: Има ли% S съществуват извън уреда?
Да.
Така% и трябва да се направи с C. Фактът, че ние го използвате,
уреда фундаментално няма нищо общо с
особености на езика, ние използваме.
Всъщност, миналата седмица, когато ние използвахме моя Мак, аз написах
C код на моя Mac.
Бих могъл да използвам% и на моя Mac, и можете да го използвате за
вашия Windows компютър, ако инсталирате компилатор, като
Visual Studio от Microsoft.
Така% S.
Всичко, което правим днес в рамките на този прозорец трябва да
общо с C. И фундаментално нищо общо с
операционната система под въпрос.
От друга страна, черно и бяло терминален прозорец - когато
Съм да пишете такива неща ли, и RM, и CD -
че има нещо общо с операционната система и
навигацията наоколо.
Да.
АУДИТОРИЯ: Имах предвид библиотека, CS50 библиотека.
Дейвид Малан: Добре, така че ако искаш да кажеш дума низ, че
съществува само в библиотеката CS50, правилно.
Това не съществува в C себе си, а и в няколко
седмици ще изхвърлите CS50 библиотека и да започне
правене на нещата от нулата себе си, така да се каже.
Други въпроси?
Да.
>> ПУБЛИКАТА: недоловим]
Дейвид Малан: Добър въпрос.
Команди малки и главни букви?
И нека ме направи разграничение.
Така команди са нещата, които ще напиша в
долната част на прозореца, в терминален прозорец.
Всичко тук би било изявления или C код.
Но и в двата случая отговорът е един и същ, да.
И двете тези среди код C в горната и
онлайн система команда в
дъно, са чувствителни.
Така че трябва да се възползва GetString с капитал G,
капитал S. Вие трябва да напишете ФОРМАТ във всички малки букви.
Вие трябва да напишете ли във всички малки букви.
Така че в почти всяка ситуация, този семестър, случай, в
Всъщност, значение.
Да.
>> ПУБЛИКАТА: недоловим]
Дейвид Малан: Ах, толкова добре, какво ще стане, ако имахме файл
нарича hello.d.
Така се оказва, D е език за програмиране.
И така, в някои случаи, в действителност може да се напише програма на
този файл и да го съставя, че в модата.
Ние можем и всъщност Краткият отговор е, аз не знам.
Така че ние ще направим това.
Нека вървим напред и да се създаде нов файл.
И спин тук, честно казано като цяло, е, когато всякакво съмнение
този семестър, а вие имате вашия уред или компютър
отворите, давай напред и да опитам нещо.
Така че аз отивам да запишете файл, наречен hello.d.
Запази това.
И аз отивам да тече здравей Въведете.
Изглеждаше да се направи извод, че в по-вероятно
от г, в този случай.
Други въпроси.
Да.
>> ПУБЛИКАТА: недоловим]
Дейвид Малан: Добре, да кажем, че още веднъж.
ПУБЛИКАТА: недоловим]
Дейвид Малан: Как бихте отишли ​​за диагностициране на това или
отстраняване?
Така че най-вероятно, защото те са различни езици,
най-вероятно ще получи напълно
друга програма изведен.
Вие ще получите напълно различни съобщения за грешка.
И също така само по отношение на дизайна, ще може би е
лош дизайн решение да се пише две различни
езици с почти идентично име файлове, в
точно същата директория, като се използва
автоматичен инструмент като направи.
Така че аз също може да бъде отблъснат и да кажа, през последните 15 години за правене на това,
никога не прави тази грешка.
Може да се случи.
Но има само различни, мисля,
логистични защита на място.
Плюс съобщения за грешки, които биха настъпили, това би
в крайна сметка разкрие какъв е проблемът.
Но възможен ъгъл случай.
>> Добре, така че нека се въведе само за няколко други
функции тук, така че ние може да започне изграждането на повече
и по-сложна програма.
Така че, на първо място, математика.
Математика примери са просто вид на лесно в първата седмица.
Това не е да се каже, че всички програми е около
математика.
Разбира се, разбирането на различните характеристики на
математика, алгебра, в частност, е
доста от значение тук.
В по-горните класове, ниво CS, линейна алгебра,
смятане, както и други подобни.
Но да реализираме повечето от това, което ние ще направим този семестър не намалява
математика, и със сигурност не за аритметика, сама по себе си, но наистина
само логика и внимателно мислене.
И така тази връзка, че компютърната наука отдавна имали
особено на гимназиално ниво, с математиката, е
малко подвеждащо.
Тъй като по-голямата част от програмите, които ще пишем, наистина, са
нещо на по-високо ниво и се съсредоточи върху решаването на проблемите, че
разбира се, може да използвате някои събиране, изваждане, както и различни
математически формули или други подобни,
но в края на деня, това е за мислене, а не
само изпълнението на това, което може да направи като TI
калкулатор в гимназията.
>> Така че с това каза, нека сега направим нещо с тях
математически оператори, които не съществуват, така че можем пътуване
над някои от основните аспекти на програмирането, или в
този случай В. Така че, като CS50 библиотека предложи,
и днес ние сме само с помощта на GetString и в един момент
може би една друга функция -
но има различни типове данни в компютъра.
В края на деня, компютри знам само 0s и 1s.
Но припомни, че миналата седмица говорихме за двоична система
в представителството на номера, като номер 0 и 1, и 2,
по целия път до 8, като във видео Нейт.
И тогава можем да разчитаме много по-висока, тъй като ние
на сцената тук.
Но ако искате да представляват не само номера, но писма,
ние, хората, трябва да излезе с някаква произволна
конвенции, при който, ако в края на деня всичко на моя компютър
е способността да изразиш 0s и 1s, бяхме по-добре
стандартизиране модели на 0s и 1s, които представляват
различни неща.
Модел на 0s и 1s, който представлява писмо.
Модели на 0s и 1s, които представляват буквата Z.
Модели на 0s и 1s, които представляват синия цвят, или
червено, или нещо подобно.
Трябва да използваме всички тези 0s и 1s да изразим себе си в
различни контексти, по различни начини, които не са
непременно цифрова.
>> Така че по отношение на представителството, C има различни типове данни,
и видяхме една от тях досега.
Видяхме ПНА, и забележете, това, което не е на екрана
точно сега е низ.
String не, в действителност съществува в C. Отново, това е
опростяване сме представя за първи път
няколко седмици.
Чар е индивидуален характер.
Плувка е реално число, с десетична точка и номера на
вляво и вдясно от нея.
Двойно е това, за тези с назад преди фон?
Така че двойно е два пъти нещо.
Добавя два пъти по-голяма прецизност.
И така, какво означава това?
Така че във всеки от тези случаи, в света има вид на стандартизиран
колко бита се използват за представяне
всяка от тези неща.
Така че, ако сте гледали ASCII видео Нейт вече за част
pset 0 или по-късно тази седмица ще ви вероятно ще знаят
че ASCII -
характер представителства -
Колко бита?
И може би дори да си спомня от нашата демонстрация миналата седмица за това как
много хора бяха на сцената.
Така че седем или осем, обикновено.
Така че принципно 8, а има и нещо, наречено като удължен
ASCII, която използва всички 8 бита, вместо на 7.
Но като цяло, ние говорим в правомощията на две, така че в този случай, 8.
Така че един знак в един език за програмиране обикновено е 8 бита.
Така че едно число е 32 бита.
Поплавък обикновено е 32 бита.
Двойно по принцип е 64 бита.
И какво означава това?
Това означава, че може да представлява по-големи числа, или в случай
на реалните числа, можете да получите много повече номера след
знак след десетичната запетая.
Много по-голяма точност, в този случай.
Сега много дълго е за съжаление име.
Така че има едно цяло число, което е 32 бита.
Налице е дълъг, което е, Не, 32 бита.
И много дълго, което е 64 бита.
Въпреки това някои от тях са зависи от контекста, то зависи
какъв компютър имате.
Така че, като цяло, ние ще посочите в домашна работа или в тест, когато
всъщност има значение.
Но въпросът е, че има всички тези различни
представителства тук.
>> Така че нека да се потопите в една програма.
Вместо да напиша това един от нулата, нека вървим напред
и да се отворят от изходния код днес - всичко, което е
онлайн - ако искате да калайджия наоколо онлайн, или възвръщаемост на
Сряда с уреда на вашия компютър, инструкции
, за която ще свърже на началната страница на курса.
Тук е супер проста програма.
Но имам малко нещо ново в горната
не сме имали преди.
Един куп сини линии на текст.
Така че тези сини линии представляват коментари.
Така че това е доста полезна програма, която да бъде в състояние да пиша
някои коментари за себе си, или на колеги или приятели, или
преподаване събратя, този вид описват какво се случва в
този файл, но нямат нищо общо с C самия код.
Няма нищо общо с програмата функционално, това е просто
естетика.
Така че начина, по който правят това в C е, че обикновено започват
коментари с / * и в крайна коментари
* /.
И ако сте наистина анален и да изготви сортиране на снимки,
тогава ще се сложи един куп звезди, щеше да направи
малка кутия като тази.
Но няма значение.
Единственото нещо, което има значение е самото начало
и последния.
Това е, което се нарича мулти-лайн коментар.
И това е просто човешка конвенция за често правят звездите и кутия
неща като това, ако имате много свободно време.
>> Така че, след като съм писал в някои коментари, като цяло, хайде
действителните смелостта на програмата.
Това е познатата ни # включват .
И само бързо, това е необходимо или не е необходимо?
АУДИТОРИЯ: необходимо.
Дейвид Малан: Така че това всъщност не е необходимо.
Така че защо, обаче, не е необходимо?
Така че няма ФОРМАТ.
Наистина е така.
Всичко, което правим в тази програма е математиката.
Така че аз всъщност може да изтриете това.
Така че не винаги трябва да включва каквото и да било
в началото на програмата.
>> Така че нека да се опрости това малко.
И сега забележете какво прави тази програма.
Не много на интереси.
Int х = 1.
Е, какво е това?
Е, мисля, че обратно на мисловен модел от преди.
Лявата страна на този израз какво прави?
Създаване на пространство за цяло число.
Така че колко пространство?
Е, ние се случи да знаете, че това е 32 бита.
Преди това низ е технически 32 бита, но по-
за в бъдеще.
Но число е 32 бита.
Така че този израз на ляво тук, вътр х просто казва, хей
операционната система, дай ми 32 бита на RAM -
иначе известни като 4 байта RAM -
, така че да може да се сложи цяло число в това пространство.
Какво число искате да сложите?
Ами, просто номер 1.
INT г. получава две, не точно същото нещо, въпреки че
брой е по-голям, по отношение на големината му.
Самият брой все още е само на 32 бита.
Това е просто модел на битовете е различен
са 1 срещу 2.
INT Z сега казва, дай ми още 32 бита, го наричат ​​Z, и сложи
сумиране на 1 и 2 там.
Така че сега щ е вероятно съхраняване на стойност 3,
и после се върнете 0.
>> Сега тази програма, има ли нещо интересно?
Така че това всъщност не прави нищо интересно, във всеки
смисъл, защото защо? Това прави малко математика.
Но това не е връщане на отговор, нали.
Това е връщане 0.
Това не е отпечатването на отговор.
Така че тази програма е фундаментално безполезно, тъй като
стои сега.
Той върши някаква работа.
Това ще отнеме известен брой секунди, или микросекунди, за да
тичам, но това не е всъщност прави нищо
полезно за човека.
>> Така че нека всъщност вече е отворен math2, където сега аз всъщност съм
печат на резултата.
Така че това също може да се изведе от нашите предишни примери.
Ако аз искам да направя някои прости математика, вътр х = 1, Y
= 2. Z е 1 плюс 2.
Какво е това да отпечатате очевидно?
Само 3.
Толкова бързо здравия разум проверка.
Позволете ми да се движи в тази директория.
Така CD source1m.
Нека вървим напред и въведете направи math2.
Съобщения за грешка, така че нека да тичам -
a.out-нека тичаме math2. Enter.
И наистина, отпечатани 3.
Ами нека да разгледаме вариант на този.
В math3.c, сега ние имаме този пример тук.
>> Така че това е нещо интересно.
Така че в този тук, отговор ще получите 1 делено на 10,
и забележите, съм я обяви като плаващо.
Защо искам да бъде с плаваща запетая?
Е, това е една малка част.
Това ще бъде реално число.
Така че това ще бъде 0.1, надявам се - 10%, в този случай.
И какво искате да разпечатате?
Е, този отговор.
Ами, нека да дразни тези освен първата.
Така че на лявата страна, обяви
плува, да го наречем отговори.
От дясната страна, 1 делено на 10 и да сложи
отговори вътрешността на променливата.
Сега, тази линия изглежда малко по-загадъчен.
Но забележите някои познати функции. % Означава, тук идва
контейнера.
е тук означава стойност с плаваща запетая, просто истински
номер, нещо с десетична запетая.
0.2 какво означава?
Някой знае ли от предишен опит?
Два знака след десетичната запетая.
Така че не съм виждал това преди, но това е просто начин на
упражняване на малко по-голям контрол над ФОРМАТ и
поговорка, не ми дават 30 точки след десетичната запетая,
вместо да ми даде само два.
>> И след това да вървим напред и да стартирате тази.
Така че направете математика 3, а сега нека тичаме математика 3, Enter.
И това не е точно така.
Ние изглежда да са се натъкнали първата ни истинска бъг.
Е, може би просто не съм достатъчно близо.
Така че нека отида тук, и нека ме постави на 20 знак след десетичната
точка места там.
И нека ми съставят това, math3, бягай.
Сигурен, че 1 делено на 10, не е 0.
И така, какво става?
Е добре, така че всъщност не трябва да правя с това.
Това е една добра мисъл.
Това наистина е просто съвпадение
това, което правим.
Но само за да докаже, че това не е тя, аз ще
върнете нещо случаен.
Не правете това у дома си, защото това е просто погрешно.
Но се math3, позволете ми да го стартирате.
Така че има нищо общо с това, което Връщам, само трябва да се направи
с какво аз съм печат.
Но аз го чух тук.
Какво?
АУДИТОРИЯ: Така че ние трябва да напишете номера в
разделението като
>> Дейвид Малан: Добре добро.
Така че ние трябва да напишете номера, участващи в
разделение тук като плаваща запетая самите стойности.
Така че проблемът тук е както преди: C, както и с много
езици, има различни типове данни.
И тези типове данни, например, са тези тук.
И данните въпросните видове, когато въведете 1 и след това
тип 10, вероятно са какви типове данни?
Така че това е може би едно цяло число, нали?
Това определено не е поплавък, защото няма знак след десетичната
точка или нещо подобно.
Така че наистина, имам вътр разделени от вътр.
>> Така че нещо интересно за математика и компютър е, че
ако правиш разделение при използване на цели числа -
1 делено на 10, да е 0.1.
Въпреки това, когато се раздели цяло число от цяло число,
Отговорът трябва да бъде цяло число, само защото, за сега.
И какъв е изводът?
Е, ако отговорът е 1 делено на 10, се равнява на 0.1, какво
компютъра ще направя е да имам никаква представа как да
представляват 0.1, защото това е плаваща стойност точка, а не
цяло число;, че ще отреже всичко след
десетичната точка и просто да ви покажа 0 в началото.
А фактът, че това е печат като плаваща запетая
стойност, това е просто естетически нещо.
Това е така, защото аз съм принуждава компютъра да отпечатате това като
плаваща запетая стойност.
И наистина аз съм го декларира като поплавък, но математиката е
случва тук.
>> Така че, нека действително определи това в един доста лесен начин.
Защо не мога да направя 10.0 и 1.0, въпреки че
технически може да се размине само с един от тези.
Сега нека да вървим напред и да math3.
Позволете ми да отида напред и сега тичам math3, Enter.
И сега, о, момче.
Сега имаме съвсем нов проблем.
Толкова по-добре, нали, ние сме по-близо до 0,1, но това, което е ясно
наред?
Освен ако не сме били лъжа в продължение на години, нали?
1 делено на 10, всъщност не е съвсем 0,1, така че това, което е
всъщност се случва тук?
Ами да на разума през това логично.
Ако компютърът разполага само с ограничено количество RAM да започне
, и наистина компютърът използва само 32 бита за
плаваща запетая стойност, то е естествено, че с
краен брой на битовете, 32 в този случай, да, можете да
представляват много неща.
То всъщност е четири милиарда различни стойности могат да бъдат
представена с 32 бита, от 2 до 32, но все още е ограничен.
Така че проблемът е, че има безкраен брой на недвижимите
номера, нали.
Ако ми дадеш реален брой, винаги може да ви намери един
малко по-голям, по-малко, като просто променя
номера, които са след десетичната запетая.
Така че, ако не да има безкраен брой на битовете,
не може да представлява безкрайна
броя на реалните числа.
>> Така че този присъщ неточности в компютрите и
това стане спъна през цялото време, дори и в най-простите на
програми като тази.
Но също и в някои много реални проблеми от световен мащаб, както и.
Всъщност, нека да отделим момент просто да погледнете
нещо, което всъщност се е случило в действителност.
Ще гледате само първите няколко минути, а след това
ние ще публикуваме онлайн връзка.
Но това е доказателство за точно това, което може да се обърка съвсем
честно казано, в един много трагичен начин, когато тези неща не са
оценява и не само ние, хората правят грешки, когато става въпрос за
тези видове на подробностите по изпълнението на съвременните компютри.
>> [Видео игра]
Ние сега се върнем към инженерни бедствия на съвременни чудеса.
Компютри.
Всички сме да приеме често проблемите
че отиде с тях.
Бъгове, вируси и софтуерни бъгове са малки цени
плащат за удобство.
Но във високи технологии и висока скорост на военни и пространство
програмни приложения, най-малкият проблем може да бъде
възвеличи в бедствие.
На 4 юни 1996 г., учените са подготвени да започне безпилотен
Ракетата "Ариана 5.
Тя носеше научни спътници, предназначени да
установи точно как магнитното поле на земята
взаимодейства със слънчеви ветрове.
Ракетата е била построена за Европейската космическа агенция и
започнаха от централата на брега на Френска Гвиана.
>> За около 37 секунди от полета, те първи
забелязали нещо не е наред, че дюзите
поклащайки се на начина, по който те наистина не трябва.
Около 40 секунди в полет, ясно превозни средства
е в беда, и това е, когато те е взела решение да
го унищожи.
Служител диапазон на безопасност с огромен кураж натисна
бутона, взриви ракетата, преди да може да се превърне в
опасност за обществената безопасност.
>> Това беше първата разходка на Ариана 5, и
е извършено унищожаване поради недостатък, вградени в
ракетата софтуер.
>> Проблемът на "Ариана" беше, че има номер, който
изисква 64 бита, за да се изразят и те искаха да го конвертирате
16-битов номер.
Те предполагаха, че броят никога не е бил
ще бъде много голяма,
, които най-много на тези цифри в 64 броя малко 0s.
Те са били погрешни.
>> Невъзможността на една софтуерна програма, за да приемете
вид на номер, генериран от друга, е в основата на
недостатъчност.
Разработка на софтуер е станала много скъпа част от
нова технология.
На ракета "Ариана 4" е била много успешна.
Така че голяма част от софтуер, създаден за него е използвано също и
в Ариана 5.
>> - Основният проблем е, че "Ариана 5 е по-бързо,
ускорява по-бързо.
И софтуерът не се отчитат за това.
>> -Унищожаване на ракетата е огромен финансов
бедствия, поради минута грешка софтуер.
Но това не е първият път, данни преобразуване проблеми
измъчван модерни ракетни технологии.
>> Дейвид Малан: Ще го оставите в това.
Но това е свидетелство за това колко приложим дори някои от
тези най-ниските детайли ниво, което сме започнали да
проучи днес.
Така че, дори можете да получите малко разсеяни може би от някои от
синтаксиса и arcaneness тук, да разбере, че през
мандат ще бъдат насочени само от това колко е приложимо това е да се
светове далеч отвъд CS.
Ще се видим в сряда.