>> [За възпроизвеждане на музика]
>> SPEAKER 1: Това е CS50 и Това е началото на две седмици.
Така че, нека да се потопите право в нещо че е бъгав, така да се каже.
Така че, тук е CS50 IDE и съм придърпа предварително тази screen-- дяволите
това.
Предупредителен спойлери.
Всичко е наред.
Аз бях спрял на този екран тук, който има много проста програма.
Ако ние превъртете надолу, най- за това е просто коментира,
но тук, в 13 линии през 17 имаме програма.
>> Това е синтактично валидна, което означава, ако Аз го компилирате, то ще събира и управлява,
но това е бъгав.
Тази програма твърди в коментарите до върха, че тя трябва да отпечатате 10 звезди,
но това не е така.
И въз основа на вашия опит, или скоро да бъде опит с C,
може ли логично различи защо това е, всъщност, бъги?
Да?
АУДИТОРИЯ: Той отива от нула до 10.
Това е 11 повторения.
SPEAKER 1: Да.
Така, че ще ходи от нула нагоре през и равно на 10,
което разбира се е на 11 повторения.
Така че, това ще печат, наистина, 11 звезди.
Така че, конвенцията за компютърни науки в повечето езици за програмиране
е, наистина, само за да започне броенето на нула,
но брои до но не чрез стойност, която всъщност е грижа за.
>> Сега, това е едно нещо, което Отнема малко време за опознаване
и дори Scratch, тъй като тя е предназначена Достъпът за програмисти или без компютър
учени и за деца до голяма степен, е проектиран да има
да започнете да се брои като цяло в един.
И това е добре.
Абсолютно Можете да започнете да броим по едно, ако това е по-удобно.
И брои до 10 и чрез, но ще разбереш особено тази седмица
и извън нея, че просто така много неща в програмирането
предположи, че 0 е първият цифра, с която можете да разчита,
че започваш да се намери по-лесно само за да влязат в този навик на стартовата
от нула и да броим до стойността ти пука за сега от
получите отида.
>> Така, че е определила, че.
Ние променихме по-малка или се равнява на по-малко от просто.
Нека да разгледаме най- втори пример тук.
>> Така че, тази програма също твърди в своята Коментари до върха, че тя трябва да отпечатате
десет звезди, но това не го прави.
Каква е грешката тук?
>> Така че, what-- и съжалявам, нека да е ясно.
10 звезди.
Един на ред, но не го прави.
Така че, всъщност, нека да вървим напред и да съставят това, защото това е малко по-малко
изчисти въз основа на това описание.
Позволете ми да отида в нашия източник директория.
Направи бъги една точка наклонена черта, бъги един.
OK, виждам 11 звезди, които все още е проблематично,
но те са също и всички в един ред.
Какъв е проблема тук?
Да.
АУДИТОРИЯ: [недоловим].
SPEAKER 1: Да.
Така че това е една тънкост, че вие ​​може припомни ми направи кратко споменаване на.
Въпреки всичко изглежда доста, и това е добре разчленена,
и да го вид изглежда Scratch-подобни в тази линия 16 и 17 са,
Наистина, с отстъп под това за цикъл.
Това е без значение.
Компютърът не знаете или вижте бяло пространство.
White пространство е само за нас, хората, стилистично.
Компютърът не знае, когато имате фигурни скоби, които би, наистина,
решите този проблем.
>> Така че, ако ние действително влезе и изрично записани в тези фигурни скоби
че ще решите този проблем, като изясняване на компилатора
че аз всъщност искате да изпълните два реда код отново,
и отново и отново.
Но това, което е основното обяснение?
Нали така?
Ние не строго нужда фигурни скоби през цялото време,
въпреки че това е може би най-добрият практика, за да влязат в този навик, така или иначе
макар и да добавя две знака на кода си. защо?
>> АУДИТОРИЯ: [недоловим]?
SPEAKER 1: Да, така че е друго решение напълно.
Нали така?
Особено, ако на пръв поглед не го направите Наистина оценявам това, което се случва.
Е, със сигурност можехме просто правя две неща наведнъж
и просто да се избегне проблема напълно.
И това е добре, но сега, за днешните цели, това, което
е обяснението за бъг?
Защо са всички тези звезди на една линия?
Да?
>> АУДИТОРИЯ: Изглежда, че ако имате един ред код,
можете да го направите без тези.
SPEAKER 1: Точно така.
Това е само една човешка конвенция.
Хората осъзнават, че това е малко досадно или досаден
да трябва да сложите фигурни скоби всички от времето, ако всичко, което искате да направите,
е изпълни един ред код.
Така че, хората решиха някои Преди време, че това е добре.
Ако искате да поставите всичките си линия върху само, че един ред като този,
това е добре със сингъла точка и запетая в края.
Но можете да направите само една такава линия без фигурните скоби.
>> Така че, когато CS50 стил употреба като ще ви насочи към,
ще видите, че като цяло това е добър навик
да влязат в това, докато сте доста удобно отклони
от тези видове конвенции и да си вършиш нещо свое.
Така че стига да сте самостоятелно последователен.
И ние ще говорим повече за това оформите малко по-късно днес.
>> Така че, нека да отворят една друга програма.
Разбира се, ние трябва да предупредим 10, както добре.
Нека да вървим напред и да напише реално бърза програма, която ще се обадя,
да речем, линия Дот C. Така че, линия Дот C. И в цикъл точка C Отивам да имат,
включва стандартна I / O точка H INT главната невалидни.
А сега нека просто правя, наистина, една линия.
Така че, 4 инт I получава нула.
I е по-малко от, да кажем, 50.
I плюс, плюс.
И тогава тук позволим отидете напред и да отпечатате F.
И тогава аз искам да отпечатате I и нова линия, точка и запетая.
>> И това трябва да отпечатате всички номера от нула до 50?
Няколко главата кимва.
Няколко Nos.
Какво е вече бъг?
Какво е най-лесно грешка направих?
Да.
>> АУДИТОРИЯ: [недоловим].
SPEAKER 1: Да.
Така че, дори и да изглежда като това е, което аз смятам,
Припомняме, че аз също само ASCII символи.
>> Така че, ако кажа, печат "I."
Това е буквално ще да отпечатате I. Така че, ако аз
Искам да плъг-ин контейнер стойност аз всъщност трябва да направите това
и след това включете-в стойност на I-динамично.
Иначе аз съм просто ще получавате 50 I е на екрана.
>> Така че, нека да вървим напред и да направи тази линия, стартирайте го,
и, наистина, ние имаме всички път нагоре през 49.
И ако аз превъртете назад във времето виждам числото нула в началото.
>> Е, какво ще стане ако някак се притеснявам?
Какво става, ако го направя?
Просто, защото аз не съм мислене.
Каква е тази програма.
След като отново се компилира и изпълнява, ще направим логично?
>> АУДИТОРИЯ: Нищо.
>> SPEAKER 1: Нищо.
Защо така?
>> АУДИТОРИЯ: I е предназначен за нула.
Така че, условието е невярно.
SPEAKER 1: Да, точно така.
All кодът е правилен, синтактично.
Това ще се съберат, това код ще работи, но това не е
смяташ да правиш нещо полезно защото аз се инициализира I до нула.
Ние след това проверка, е I-голяма от 50?
Очевидно е, че не, това не е така.
Така че цикълът никога не изпълнява изобщо.
>> Какво става, ако правим нещо малко по-безразсъдно?
Така че, това, което, ако ни допада инт I получава нула.
А сега нека да използваме това време линия, която е друго състояние.
И докато аз казвам, докато аз е по-голямо от или равно на нула, и след това в тук
отидете напред и да запишете файла, направи примка.
И аз съм за да го стартирате.
Какво съм аз ще видите това път с линия, докато?
Да.
>> АУДИТОРИЯ: Един безкраен цикъл?
>> SPEAKER 1: Един безкраен цикъл?
Да, и защо?
АУДИТОРИЯ: Защото тя винаги е нула.
SPEAKER 1: Да.
Така че, аз се инициализира с нула.
Разбира се, че винаги е по-голяма от или равно на 0 като резултат.
Така че, аз съм просто ще виж това безкрайно.
И сега, това е дошъл веднъж или два пъти на ръководителите на курса.
Какво се случва, когато има един безкраен цикъл?
>> АУДИТОРИЯ: Control C.
SPEAKER 1: Да.
Така Control C в крайна сметка ще реагира.
За съжаление, ние сме разпечатан милиони и милиони нули вече
и така компютърът вид имам пред мен.
Така, че ще ходи да се игнорира ме за малко.
Но ако просто натиснете Control C малцина пъти на вашия Mac или PC клавиатура,
в крайна сметка тя трябва, наистина, прекрати.
И ако не, ние ще ви покажем някои техники преди дълго, където можете
всъщност може насила да убие програми, много прилича на Windows и Mac OS,
ако е необходимо.
Но нека се опитаме нещо друго.
Нека действително нарастване I. Е това все още продължава да бъде безкраен?
Позволете ми да изпълня този.
А сега можете да вид виж какво се случва.
Това също е един безкраен цикъл.
Но това е малко подвеждащ въпрос.
Дали това ще се отпечата номера завинаги?
>> АУДИТОРИЯ: No.
SPEAKER 1: No.
Защо?
Чух някои номера тук.
Someone-- Да.
АУДИТОРИЯ: Вие нямате достатъчно бита наистина продължавай.
SPEAKER 1: Добре.
Така че аз не разполагат с достатъчно бита да продължавай.
И така, какво ще се случи?
Това е просто няма да спре?
>> АУДИТОРИЯ: В един момент тя ще се изключи the--
SPEAKER 1: Тя ще се изключи линия надолу, но защо?
Какво ще се случи в Много край на границите му?
Да?
АУДИТОРИЯ: Тя ще цикъл обратно към отрицателни числа.
SPEAKER 1: Към отрицателните числа, или ако ние бяхме просто лечение на положителна,
нулата поне.
Така че, да, абсолютно.
Припомнете си, че видяхме за последен път, че ако увеличите вашите бита един твърде много пъти,
и вие Трябва следователно преливник капацитета на инт
или каквото и типа на данните е, че си ще обгърне, вероятно,
две отрицателни числа.
Или ако сте се уточни, че си диапазон трябва да бъде положителна, само,
които можете да направите, но ние не сме виждали, че все пак,
може да свърши най-малко назад към нула.
Въпреки че, всъщност, да.
В този случай, отрицателно числа, в който случай
примката ще се прекрати защото не е, в действителност,
по-голямо от или равно на нула, ако е отрицателна.
>> Така че, за съжаление, как дълго ще трябва да чакаме?
Точно сега ние сме до какво, 2000000-Иш?
Ние сме като 2000000000, ние ще трябва да почака
докато всъщност можем да видим този симптом.
Но можем да го видим малко по-бързо, maybe-- нека да видим дали можем да се прекъсне.
Хайде.
Дори менютата се появяват бавно.
Всичко е наред.
Така че, ние ще се върнем към това, преди дълго.
Това е добра time-- дявол да го вземе, кученца.
>> Това е добро време за някои съобщения.
Така че, ако може би искате да се включат в YHack,
която е събитие в спонсорирано от нашите приятели в Йейл.
И, наистина, някои от курса TFS в Йейл са ангажирани с това.
YHack е международен хак-а-Thon домакин и държани
в Йейл, обединяваща 1500 съмишленици хакери и рекламни послания всички
по света.
Ако това е от значение, вижте тук.
Ако това е твърде кратко на екран, да погледнем на днешните пързалки
за URL адреса за yhack.org.
Така че, това е и няколко бързи съобщения.
Така че, официално секции ще започнат следващата седмица както тук, така и Ню Хейвън.
Имайте предвид, че ще бъдат намалени с имейл-късно този уикенд най-вероятно.
Това отнема много време за CS50 раздел,
дадени всички хора в клас и всички движещи се наоколо.
И всичките Учебни стипендианти " графици са също все още консолидиране,
но очаквайте имейл и ако е необходимо се, можете да си точка там след.
>> Study.cs50.net.
Така че, дори и да сте на постоянен участник по секции, осъзнавам, че почти всички
от средствата, които използваме в раздели са публично достъпни в CS50
Проучване на този URL тук.
Така че, ако някога искате да се възстанови преглед материал от раздел, или да прочетете напред,
или не можете да го направите някои седмици, Осъзнайте, че пробите пързалки,
и проблеми, и определения, и по-всички са там, както добре.
>> Работно време възобнови днес и утре, и в сряда
и четвъртък провери разбира се те години сайт за графика.
>> И също така, сега стартира днес е CS50 Обсъждане.
Така че, ако и когато имате въпроси за помежду си, или за персонала на курса,
и обикновено се работи на някакъв проблем набор,
осъзнае, че не е задължително Трябва да се обърнем към човека следващата ти.
Ако няма никой там, можете да достигне до нас и съученици
онлайн чрез CS50 Обсъждане.
Така че, това е дискусия дъска за курса,
и осъзнавам, че това е може би най-добрия
място да започнете, когато имате въпроси, когато извън работно време
в частност.
>> Обяд ще започнат тази седмица също.
В Огън и лед [Недоловим] в Ню Хейвън.
Обърнете внимание на дисциплината те години уебсайт, за да RSVP.
Първи по време, първи служи за това.
Ако не получите в тази седмица ние ще направим това най-всеки петък
по време на срока.
>> OK, а сега и дума за категоризация.
Особено когато навлизаме проблем зададете една, която е извън тази седмица,
и проблем зададете два и след това.
Как да отида за оценяване P комплекти и оценка на качеството от него?
Така че, това е четири оси, които ние използваме в CS50, и те са тези четири тук.
>> Обхват, който улавя на цифровата база точно колко от множеството P
Знаете ли справи.
Това е приблизително съответства с усилия, и това е нашият начин на заснемане
не се опитате половината от P определя, всички от множеството P.
Това е лесен за да получите перфектно резултати на ако го направите, наистина,
опитайте всеки аспект на снимачната площадка P.
Така че, имайте това предвид.
>> Коректност е точно това.
Има ли вашата работа като код на спецификацията и като разтвор на пробата щабовете "
подсказват, че си код трябва, в действителност, да работи.
Проверете 50, ако не сте го срещнах Все още е в P зададете една спецификация
и обикновено ти дам да / не отговори
за това дали си код е правилен.
Поне доколкото отиваме За да се оцени, че на базата на тестовете
че ще свършим в рамките на тази програма.
>> Дизайнът е много по-субективно.
Това е колко добре написано е кода си.
И това е нещо, което вие ще получите по-добри в течение на времето,
и това е нещо, което ние ще предоставят по-качествена обратна връзка.
И още при проектирането бих могъл означава преди време сте
може да се изкуши по някакъв P настроен да направи нещо loopingly,
но да има може би три или четири, или пет вложени предни примки или вложени по време на
контури.
Това принцип би следвало да започне да ви накара да се свият
и като цяло би било смята за лош дизайн.
И вие ще започнете да виждате в класа и от класа добри начини за правене на нещата,
лошите начини за правене на нещата, които може всичко да е вярна, но не
непременно добре проектирана.
Подобно писане на есе.
Може да бъде в състояние да сложи думи по страница, че са граматически правилно,
но есето или теза те са в е просто
напълно непоследователна или неубедителен.
И така, това може да е аналог в писмено свят на лош или добър дизайн.
>> И стил, също е доста субективно.
Но най-малко очакваме консистенция.
Това е начина, доста е кода си.
Възможно нещата добре отстъп?
Вашите променливи и име / са всички от вашите скоби и фигурни скоби
подравнен, тъй като те трябва да бъде?
Имаме употреба на CS50 стил като набора проблем ще ви посоча.
Тези, по-удобни са Приветствам да се отклоняват от които
толкова дълго, колкото сте самостоятелно последователен.
И това също е урок ние ще се засили в раздел.
Така че, ако всичко това е малко бързо, осъзнаваш комплекта P и секции
ще отидат в по-голяма дълбочина не след дълго.
>> Но като цяло имаме много малко кофи за CS50.
Десетки са като цяло по десетобалната от 02:59 или 04:59.
Ние сме literally-- и аз не мога да кажа това е достатъчно в първата седмица.
Три е добро.
Така че, въпреки че, да, три от пет нормално, математически,
може да е 60 процента или като D минус.
Три е, в действителност, добре.
И, всъщност, ние очакваме повечето ученици в класа
да започнем термина около двойки, тройки и четворки и.
Вероятно не толкова много петици.
Не твърде много такива.
Но като цяло, за да започне че сладко място в кривата
така че с течение на времето, всъщност има стая за,
и възможности за горната прогресия.
Така че, моля, не се равнява на три с 60%.
Това е много по-абстрактно от това.
Формулата, с които ние се изчисли класове се претеглят, както следва.
Коректност е на стойност най-много.
Design е на стойност малко по-малко.
Style е на стойност малко по-малко.
И това като цяло улавя размера на времето
която отива в получаване на всяка от тези оси точно.
Style е супер лесно, трябва да бъде супер бързо,
но това е един лесен навик за да получите мързелив около.
Коректност може да отнеме можете голямата част от времето.
Преследването на земята част бъг мощ вземе, че допълнителен час или повече,
и така, точкуването в крайна сметка, че улавя.
И така, сега е по-сериозна дума.
Тъй като има CS50 разграничение, за по-добро
или за лошо, че са може би по-добре запознати
с проблемите на академичната честност, отколкото повечето всеки друг разбира се.
И наистина, това е, за да ми е известно, че ние изпращаме повече студенти, за съжаление,
дисциплинарна цел всяка година, като резултат. Така че,
в интерес на пълното оповестяване, нека да поговорим за кратко
за това, което се случва в CS50, и това, което може да направи, и какво можете да се забравя.
>> Така че, тук от 2007 г. насам, когато Аз наследих хода,
е броят на случаите Ad съвет.
Ad Board е дисциплинарно Харвард тяло, или сега Honor съветник,
към който са посочени случаите, когато учениците да направят нещо, че разбира се те години
конспект счита неразумно.
Няма по-реален модел тук, бих казал.
Тя се колебае над река години, но като цяло
това е броят на случаи, които са посочени.
Броят на студентите които са включени?
Тя също варира.
Обикновено, миналата година за Например, 29 студенти в Харвардския
Ad бяха качили, така да се каже.
29 от тях са настоящи студенти, две от тях преди учениците,
които са били сътрудничество по някакъв нежелан начин.
И след това от гледна точка на процент, това е обикновено около 3%
от класа, че, за съжаление, прави тези видове решения.
>> Така че, миналата година той е бил 3,5% на студент тялото на CS50
това беше Ad качва, така да се каже.
>> И така, какво означава всичко това?
И какво всъщност правим?
>> Така че, за пълно разкриване, ние абсолютно, като компютърни специалисти,
има софтуерни инструменти, с които разполагаме и това е много лесно за нас, в справедливостта,
че другите съученици, които не са преминаване тези редове да пресече сравни
всяко представяне тази година срещу всеки Подаването за последните осем години.
Software прави това.
И в крайна сметка това е човешки очи, които решават
дали да отнесе някои значение за по-нататъшното решаване,
но софтуер със сигурност помага.
И това, честно казано, е защо аз мисля, че имаме такива големи числа в CS50.
Това не е така, защото CS50 студенти или ученици CS повече
като цяло са по-малко честен от всички други ученици,
това е просто имаме инструменти и техники
с които да се възползвам от тази на първо преминаване.
>> Но ние държим под око за всички тези неща,
както и, отново, в интерес на признавайки дейността, че е се сложи
в с супер мнозинство от класа.
И политиката на курса на академична честност,
въпреки че това е един куп точки дълго с един куп куршуми
че сме се надяваме съвсем разбираеми, то наистина се свежда да бъдем разумни.
И най-добрият правило, че ние предлагаме в рамките на учебната програма
е това, същността от цялата работа, че сте
представя този курс трябва да бъде вашата собствена.
И наистина, в почти всички от тези, В случаите, предвидени за дисциплинарни действия
това е, защото на някои студент късно една нощта обикновено се обърна си код
над направо да съученик, които след това я прие
в своята цялост или значително от него.
>> Но наистина, това е ОК.
И наистина, в офиса часа, листчета
сте били предадени, ако дойде от офиса часа миналата седмица насърчава толкова много.
Вие сте абсолютно приветства и насърчава
за да обсъдят проблемните комплекти със съученици.
За да помагат един на друг, когато препъване.
Но като цяло правилото следва да бъде това ", когато сте с молба за помощ,
може да се покаже кода си на другите, но не можете да видите тяхно. "
Така че, с други думи, ако съм се борят с някои P комплект
и аз съм седнал там в зала за хранене, или в библиотеката,
или в класната стая опитвайки се да намери някаква вина,
Със сигурност мога да покажа моя код на екрана си
към човека до за мен, със сигурност на персонала,
но също така и един съученик.
Но ако решението, което моя съученичка предлага е, о,
тук просто да разгледаме какво Направих, че пресича линията.
>> И бих казал, че е посмял цяло разумен нещо за повечето хора
да много лесно място на линията на.
И така, вижте конспекта за повече подробности.
И сега един от най- спорни аспекти
на CS50 учебна програма, която мислех, че бих говорил в заключение тук
е така наречената клауза съжаление.
Така че, тук е всичко, с дребен шрифт.
Но като цяло сме виждали през последните 8 години плюс
че наистина, почти всички CS50 на случаи на академична нечестност
са резултат от просто лошо вземане на решение, късно през нощта.
В резултат на стрес, резултатът от липса на хранене, липса на сън,
твърде много P комплекти, твърде много срокове, твърде много ангажименти.
Стресът изграждане в 02:00 AM, 03:00 AM, 04:00 AM, с краен срок задаващата.
Повечето студенти в тези случаи Току-що направени лоши решения
че те могат много добре съжалявам за На следващата сутрин, ако не минути по-късно,
но до миналата година не е имало клапан за пресата, че тези студенти могъл
всъщност се отворят към действително адрес проблем с глава без страх да не се
зарежда от колежа напълно.
>> И наистина, ние въведохме тази клауза съжаление миналата година,
в която се казва, че ако в рамките на 72 часа, три дни,
на пресичане някаква линия предписано в учебната програма
дойдеш с нетърпение едно от курса главите и ние ще имат чат за това.
Има все още има някакъв изход, противно на това, което е
Съобщава се за противното.
Все още има някои резултати, които е обжалваем от курса,
обикновено зануляване на P комплект или като някои други действия,
но ние, наистина, се справя себе си и не
вижте го по-високи са резултатите може да бъде много по-тежки.
И наистина, за да споделят какво се е случило миналата година, в рамките на осем години, а сега
девет години, от преподаването на този курс и след бърникането с различни копчета,
превръщайки различни циферблати над миналото няколко години на академична честност,
и тъй като по данни без видима въздействие, дори и на изказвания като това,
това е ръцете надолу най-хубавото нещо въведохме педагогически
за осем години заедно тези линии в CS50.
>> 19 студенти се отзоваха по тази клауза миналата година.
Взехме никакви действия за седем от тези студенти,
определяне, че те са ненужно разтревожен.
Те не са, в действителност, пресече линията, но това
Беше добър чат да има все пак.
Ние занули 11 от точките които са били представени.
И в единия случай ние зададе студент да направи проблем зададете.
Но по-наложителна, честно казано, с тези 19 чатове,
която беше начин повече от мен Очаква се да има, всеки един от тях
10 минути до може би един час дълго, също подава
да запали редица въпроси по отношение на семейни проблеми, въпроси, приятел
психични проблеми че ние тогава ангажирани,
със студента благословение, пребиваващи декан, или с приятели, или друг номер
на ресурси за поддръжка.
Така че това е далеч един от най-добрите начини на използване на нашето време
и един от най-добрите интервенции.
>> С това каза, той не е имал въвеждане на степента на разкриване
на академична нечестност по-общо.
И смея да кажа, тази подгрупа на студенти от миналата година
Беше демографска че ние преди това не е идентифициран преди
и никога не е свързана с преди.
И така, това са прекрасни истории на успеха
въпреки че те са били доведени до светлината по-малко от оптимални условия.
Така че, имайте предвид това както ти направи, може би,
грешка на решение себе си късно през нощта,
че се прибягва толкова дълго като студент в тази ситуация
Притежавате и излезе, за да можем има този вид на чат и се справят с него
по начин, който е образователна, а след това можем да го сложи зад нас на следващия ден.
>> Така че, без повече приказки, вземи ръба на разстояние от този разговор,
причината кученцата са нагоре т.е. само за разчупване на леда за миг.
И за съжаление, всички те са на сън, но това, което е трябвало да се случи тук
е всеки е трябвало да страхопочитание и вид релакс
след това много тежък разговор.
Но очевидно Сложих кученцата да спят.
Но ако отидете в CS50 е уебсайт наклонена черта кученца,
можете да ги гледате по цял ден.
Особено може би 02:00, или 03:00 или 04:00 AM през нощта
да видите малко облекчение стрес там.
Така, че е наклонена черта кученца.
Всичко е наред.
Не беше ли това забавно?
ДОБРЕ.
Така че, обратно на някои компютъра науката, ако ми позволите.
>> Така че, припомни, че за последен път започнахме не търси само в основното, което
е функция по подразбиране, когато зелен флаг кликнали еквивалент,
но ние също започна накратко написването на някои от нашите собствени функции.
И досега нито едно от тези функции бяха особено големи или месест.
Ще получите в тези по-големи функции, вероятно, P комплект 2, P настроите 3,
Определено P зададете 4 и нататък.
Точно сега повечето от вашите програми, ако не всички от тях, определено за P
комплект 1 може да се извършва изцяло в основната.
Ако вашата програма е само пет линии, 10 реда,
дълго дори 20 линии, перфектно разумно да го напиша
всичко това в главната и да не прекалите усложняват Код си, но това, което правим днес
и нататък се опитва да се представим някои добри техники за дизайн
така че като си код получава повече сложна и като проблемите
искате да се реши стават все по- по-интересно ли, нещо,
инструментите в инструментариум, с който да проектира добри решения на тези.
>> Така че, нека хвърлим един бърз поглед назад към тази програма от последната ми седмица, която
беше функции нулева точка C. И забележите, че, съвсем просто,
тя изглежда така с две функции, основната и името на печат.
И мисля назад или може би обратен инженеринг днес
какви са били мотивите за въвеждане на функция в съответствие 28 нарича,
Име на печат?
Или какво е този пример в от гледна точка на един принцип, или храна за вкъщи,
ако искате.
Някои шумове.
Какво?
>> Да, така Функционално разпадане е вид на луксозен начин на казвайки,
разлагат програма на съставните си части
и след това да използвате тези части да се събере цяло.
Така че, това също е просто вид на хапка вече,
но това е може би дори по- по-добър пример за нещо,
Просто нарича абстракция.
Нали така?
Abstraction ще бъде една на повтарящи се теми в CS50
а също и компютърни науки по-общо, тъй като това е
техника, с която можете да решите проблеми по-ефективно, защото вие
може да напише решения повече интуитивно и по начин, който везни
и е разбираемо от други хора.
Какво имам предвид с това?
>> Така че, може би тя е много по-разбираеми да погледнем в програма като тази,
супер кратко макар че той е.
Когато видите по линия 22, която има функция, наречена, име на печат.
Само това име казва това, което прави.
Тази функция очевидно отнема вход между неговите скоби,
и очевидно прави нещо, вероятно отпечатва името.
И така, въпреки че ние абсолютно биха могли да имат
направи това, което направихме преди една седмица, на която беше просто приемете това действително ред код,
Отърви се от това, и да получите отърви от тази, всички заедно,
ние някак абстрахира понятието за отпечатване на име.
Не ми пука, ако използвате за печат деф.
Не ми пука, ако имате процента S и наклонена черта N. Те
са невероятно мистериозните подробности.
Това, което ме интересува като програмист печата име.
И така, какъв по-добър начин да направите това отколкото чрез извикване на функцията, името на печат?
И така, това беше една от мотивациите за правене на нещо подобно.
Осъществяване на кода по-разбираеми, по- за многократна употреба, а също и самостоятелно описателен.
Сега, нека да разгледаме в друг пример,
който е един функции, които имахме тук.
>> Така че, това е може би още по- убедителна, тъй като в този случай,
Аз не искам просто да се качите на инт.
Аз искам да отида положителен инт.
И се оказва, за да получите положителен INT което трябва да направите един куп подготвителна работа.
Нали така?
Това не е просто една линия обадя като името на печат е,
което е несъмнено по-малко убедителни.
>> За да получите положителен инт, logically-- позволете ми да превъртите надолу, за да се скрие това.
Какво трябва да направя?
Подобно на всички инструменти, ние имаме в момента са
неща като печат деф от Standard Библиотека, а също и от CS50 библиотека
имаме Вземи Int, и да получавате Float, Вземи Long Long, Get String,
но единственият, уместен, точно сега е Спечелете Int.
Така че, ако единственият инструмент имате във вашата кутия за инструменти е Спечелете Int,
как да отида за изпълнение тя да получи положителна инт?
>> АУДИТОРИЯ: Създаване на регистър и проверка от това дали на входа, че те дадоха
е положителна или не.
>> SPEAKER 1: Perfect.
Точно.
Друг инструмент, които имаме в нашия инструментариум от преди една седмица или две
е само конструкцията примка.
И така, да, ако използваме известно време линия, или да не се прави, докато линия, или преден план
линия ние вероятно може да се размине с някои от тези в някаква форма.
Ние може да реализира идеята за GET положителна инт само с помощта на Get Int,
и след това просто да го наричаш отново и да досажда на потребителя
докато той или тя всъщност ни дава това, което искаме.
>> И така, сега, това абстракция на процеса
за получаване на положителна инт в функция, наречена
Вземи Positive Int е малко по- убедителна, защото гледам на това.
Те са като 10 плюс реда код, който
са въвлечени в получаване на положително инт, и аз не ми пука как го правиш.
Всички ме интересува е, че може да го направи, и така съм
скрити всички тези детайли, които стоят зад функция, наречена Вземи Positive инт, че,
Наистина, има тази задача, докато линия.
>> И виж миналата седмица за синтаксиса там, но тя просто декларира, N,
и го отпечатва инструкция за потребителя.
Той призовава да получавате Int и след това го проверява това състояние отново и отново,
и отново, докато потребителят не сътрудничи.
>> Така че сега, след няколко проверки по.
За тези, които може би запознати с малко програмиране,
Затова е обявен N, защо да създам N извън правя, докато цикъл?
Защо е по линия 29, а не на 33, като, например.
>> АУДИТОРИЯ: Защото, когато известете отвън, тя натура
повече, по-голямата scope--
>> SPEAKER 1: Добро.
>> АУДИТОРИЯ: --and ако декларират то вътре в контура, [недоловим]
защото той не знае за това.
SPEAKER 1: Точно така.
Ако мога да simplify-- това е въпрос на характер.
И обхват се отнася до контекста, в който променлива съществува или е използваема.
И хубаво правило тук е, че по принцип, когато декларират или да създадете
променлива можете да го използвате само вътре от най-близките възприемане фигурни скоби.
И така, какво означава това?
Ако аз, вместо това, да отмените това и да отида с нещо, което се чувства малко по-лесно.
Нали така?
>> Line 32 просто изглежда по-чист за мен сега.
Правя и двете неща веднъж и след възлагане
дясната ръка към лявата страна.
Проблемът сега на базата на тази дефиниция на обхвата
е това, че п може да бъде използван линии 31 и 32 в рамките на този цикъл,
но когато от това определение не може да се използва?
В съответствие какво?
Да.
>> АУДИТОРИЯ: 35.
>> SPEAKER 1: 35.
Определено не е 35.
И също така къде другаде?
АУДИТОРИЯ: 34.
SPEAKER 1: Дори 34 е проблематично, защото това е
извън фигурните скоби.
И така, в действителност, нека да видим какво ще стане.
Нали така?
Това може да изглежда малко по- интуитивно или не вали,
но нека да видим какво съставител има да каже, когато
отиваме в днешния източник директория.
Направи една функция.
О, Боже мой.
Е, аз най-накрая завърши които, между другото.
Всичко е наред.
И каква е въпрос тук?
Много тайнствена да погледнете.
Но ето какво typed-- направи една функция.
Ето какво направи индуцирана, който всъщност
използване на компилатор звън с някои от тези флагове
че ще видим отново след дълго.
И пак, винаги гледам в първата грешка,
защото може просто да има каскаден безсмислена ефект върху други линии.
>> И така, какво означава това е, че проблем е във функционална 1.c.
Тя е на линия 32.
И това е най-колона или герой, 13.
Така че, когато си текстов редактор, който може да да ви помогне да се определи къде е проблема.
Така че, ако превъртите нагоре, което е ред 32?
Това е наистина това това е вече маркирана
полето here-- неизползвана променлива п.
Но това не е неизползван.
Аз съм го използвате.
Но компилатор-те бърка, защото тя съществува само вътре в този обхват.
И така, аз не мога да го използвам тук.
Не мога да го използвам тук.
И компилатора, следователно, дори не е грижа, че аз се опитвам.
Изглежда, че е неизползвана в рамките на действителната му обхват.
>> Така че можем да се разшири обхватът чрез правене точно това, което сме започнали with-- INT п.
И въпреки, че това не е така изглежда толкова елегантен, може би,
и ние сме като допълнителен ред тук, сега е в обхват навсякъде.
Така че нека да се опитаме отново.
Така че направи една функция.
Ница.
И сега, ако аз, ако аз тичам функция един, нека го даде отрицателен 10,
отрицателна 1, 0, 1, и тя наистина работи.
>> Така че има и друго решение тук.
Знаеш ли какво?
Какво става, ако аз наистина съм се боря с това?
Аз не знам къде е п е трябвало да отиде.
Знаеш ли какво?
Аз съм просто ще го постави всички начин в горната част на досието ми тук.
Какво би това ми, как мислиш?
Да?
>> АУДИТОРИЯ: [недоловим].
SPEAKER 1: Да.
Така че аз съм правил това глобално, така да се каже.
Ако имате променлива, която е извън всичките си функции, които е разрешено,
и кода трябва да се съберат, и п Сега ще бъде достъпна не само в GET
положителна инт, но и в която main-- е малко по-тревожен, защото има
вече е п в основната, така че по- за това само с moment--
но това ще се счита за лош дизайн.
Всичко е наред.
Ако трябва да се прибегне до нещо подобно, о, аз ще
Просто го направи тук, защото кодът изглежда да съставят
обикновено не е най-добрата практика.
По-скоро искате да изберете възможно най-малкото обхвата
за вашите променливи, което би означавало, става с нашия първоначален проект, който
е точно тук.
>> Сега като се отмени, ако нямаше един и същ начин, именувана променлива тук,
начина, по който ще се справят век this-- въпреки че това няма да се случи твърде often--
е, че това е още съвършено глоба в тук.
Но това определение на п в съответствие 22 ще засенчи световната един.
Така че това ще работи в рамките на Основната и глобалната този,
всъщност ще се прилага, когато сте в получите положителен инт Но повече за това
друг път, но просто за тези любопитни.
>> Така че по-кратко, ние се определи това тук.
Сега нека да дразни освен две други парчета преди да разгледаме един последен ред код
в тази програма.
Вземи положителна инт.
От лявата страна на неговата дума е думата Int.
Какво значи това означава, как мислиш?
До този момент ние сме най-вече се вижда нищожно.
Да?
>> АУДИТОРИЯ: Това е вида на променлива, която можете да започнете пита за.
>> SPEAKER 1: Да Това е вида на, нека Ще кажа по-променливо, но видът на стойност
че аз питам за обратно.
И наистина, това е интуитивен тук, надявам се.
Нали така?
Ако искате да получите положителна инт, какво е, който
искам function-- като нашия доброволци от миналата седмица
да ви върне парче хартия с пад върху него?
И затова сме уточни, че така наречения тип възвръщаемост на тази функция
е да получите положителен инт.
Ако ние не го искаме да върнете всичко, което казвате за невалидни.
Ако искате да го да се върне низ, вие казвате низ.
Ако искате да го да се върне поплавък, което казвате плувка.
Но единственият, който се прилага тук логично, защото аз съм с GET инт,
въпреки че аз съм ги ограничава положителни стойности, е да се върне на инт.
>> Така че обратно, какво означава това че има празнота в скоби?
Какво да направя скоби обикновено определят?
Да?
>> АУДИТОРИЯ: Това означава, че функцията те години всъщност не го получат.
>> SPEAKER 1: Това означава, че функцията те години всъщност не получава това, което?
>> АУДИТОРИЯ: An вход.
>> SPEAKER 1: Един вход, каквато.
Така че наистина, ако скобите Тук можете зададени нищожен,
това просто означава, че аз не искам всеки вход.
Аз ще се справят с проблема си.
И наистина, не е нужно да кажете получи положителна инт нищо.
Можете само да кажа, може да получи положителна инт, и че функция ще изгасне и да си свърши работата.
>> Но е имало един малък трик съм играе тук цялото това време
да се уверите, този код се компилира.
Забележете, че int-- получи положителна инт void-- е на линия 27.
Но по някаква причина на пръв поглед странно тя също е тук по линия 16.
И точно за добра мярка ще повторя това, така че е напълно идентични.
И аз съм казвал прототип с малко коментар от един ред.
Какво се случва, ако изтрия, че, И Сега изпълнете отново направи функция 1, влиза.
Опа.
Чакай малко.
Къде е моята сметка?
А?
В готовност.
Направи функция 1.
Ето.
ДОБРЕ.
Ако не го е записал правилно.
Така че, аз мисля, че има малко по- бъг тук, където аз не съм
виждаме името на раздела в момента.
Така че това, което се случва тук?
Скритият декларация на функция получите положителен инт е недействителен, C99.
Така обърква отново.
Така че това, което е показателно за това?
Е, оказва се, че C е доста глупаво.
Е, това е програмирането език, или по-скоро на компилатора е.
Той знае само това, което имате той преподава, и това е само
Ще знаете нещо ако го научи преди.
С други думи, в Основният в момента, аз съм
опитвайки се да се обадя на функция наречено получите положителен инт.
Но компилаторът не върви да забележите, че се получи положителен инт
съществува, докато линия 26.
И какво от това компилаторът прави, е просто грешки, веднага след като тя стане по линията 17,
казвайки имплицитно декларация на получите положителен инт, които
е само един луксозен начин на казвайки, че не правим знам какво се получи положителен инт е все още.
>> Други езици като Java и Python и Ruby може да гледа напред.
C не го прави.
И така начина, по който фиксира това е един от двата начина.
Всеки един, ако проблемът е, че получавате положителна инт не е виждал преди,
добре, нека просто да го преместите в горната част.
Това ще решите този проблем.
Но като цяло, това е счита по-добра техника
да се постави основната си функция в самото отгоре, така че човек чете кода си
знае какво е случаят с програмата, защото основната не е погребан всички
начинът на дъното или в средата.
Това е най-отгоре.
Така, че не се чувства идеално.
И всъщност можете да получите в ситуации, в които
ако една функция повиквания друго, което изисква друго,
можете да получите в проблем, когато нито може да отиде над друга, логично.
Това просто не е възможно.
>> И така, на път за работа около това е просто да си вземе
подписване на функцията, така че да speak-- на първа линия, където това е declared--
и просто да копирате, поставете го в отгоре, но не и с къдрава braces--
само с точка и запетая.
Това е като малко намек от това, което предстои.
И в действителност, всичко това време, когато съм виждал неща като стандарт io.h
и cs50.h също така, в тези точки з файлове има други прототипи.
И ние ще видим, че не след дълго.
>> Така че по-кратко, когато имате програма във файл с множество функции
освен основната, почти Винаги искаш да ги декларира
само по пътя на първото си линия, следвана от точка и запетая,
в самото началото на файла.
Това беше много наведнъж.
Някакви въпроси?
Всичко е наред.
>> Така че нека да преминем след това до нещо като кашлица.
Oh.
Как монтаж.
Всичко е наред.
Кашлица.
Така че тук е в изпълнение на програма
ние направихме на другия ден в Scratch, че много просто просто
казва кашлица, кашлица, кашлица.
Всичко е наред.
И някой каза няколко Преди дни, че има
начин за почистване на този код се вече.
Всичко е наред?
Веднага след като сте копиране и поставяне вероятно лош дизайн.
Поне веднъж да стигнем до четири или пет или 20 кашлица, тя се чувства лоша практика.
Ние просто да копирате, пастиране.
Какво е най-очевидното решение да почистите тази програма става?
>> АУДИТОРИЯ: Loop.
>> SPEAKER 1: Да.
Така че използването на една линия.
И ние можем да използвате за цикъл, а същевременно контур произволен брой подходи.
И наистина, това е, което което правим във версия тук.
Аз бях вместо да го пренаписва във версия един от cough.c
да бъде само в рамките на една кашлица за цикъл.
Добре, но има един възможност сега да вид старт
да се изработи този малко повече като урока сме научени преди малко,
което е this-- Предполагам, че аз исках да се създаде функция, наречена кашлица,
нека разгледаме само за миг какво ще прилича.
Така че, ако Искам нещо да кашля, аз просто трябва
да се използва за печат е в самата функция.
И наистина съм.
И в действителност, това време, по всяко време, че си
отпечатване на нещо, което да екрана, програмист
ще се обади, че е страничен ефект.
Не ме е подавайки гърба на някого стойност.
Това ме води някакво действие които могат да бъдат визуално очевидно.
Но тази функция кашлица, няма да го върне нещо въз основа на своята първа линия?
Не, защото неговото връщане тип е нищожен, което просто означава,
тя не ме е да дадете нещо в замяна.
Би могло да се направи нещо визуално, но това е не ми подаваше
резервно парче хартия като миналата седмица.
>> Трябва ли всеки вход?
Не.
И така, това е нищожно и тук.
Така че това също е един вид свръх-инженеринг на този проблем.
Нали така?
Аз направих програмата по- комплексни, повече реда код,
Аз не съм го направила по-функционален, но този
ще бъде етапно, Може би по-широк
връзка с по-сложна код.
Но какво да кажем за това?
Какво съм done-- просто погледна това без да гледа в коментара
на самия връх на file-- какво има Аз принципно прави тук с моята кашлица
изпълнение, който е по-различно?
Да, в гърба?
>> АУДИТОРИЯ: Направи го така че можете да имат характер изключите.
SPEAKER 1: Да.
Така че този вид се чувства приятно.
Нали така?
Това е като добавяне на функция, за да ви програма или си функция, в този случай.
Той все още не връща нищо.
Тя може да има визуален страничен ефект, защото тя се обажда на печат е.
Но сега съм parametrized функцията, която
означава I сте посочили взето вход от тип INT и го наричат ​​п,
но можех да го наречем нещо, което искам.
В действителност, това може да бъде само пъти, за да бъдат още по-категоричен.
И тогава аз може просто да промени това тук.
Но въпросът е, че това е начинът, I създадете функция, която използва вход.
И ако си спомняте обръщане чрез онлайн може би в един
на разходка проходи, на Четвъртата и последна например кашлица,
вие ще забележите, тук съм генерализирана код ми further-- вид добиваната
това по-нататък.
Подобно на кашлица и кихане, както са около като да кажеш нещо или вземане
някакъв звук.
Save ще бъде най- съответстваща Scratch блок.
И така, какво съм направил в тази версия, които можем просто поглед,
е кашлицата е точно като каза: [КАШЛИЦА], кашлица, и междувременно, кихане е
все едно да кажеш, [ACHOO].
И така, аз съм генерализирана прилагането на тези,
от предприятието за изпълнение това родово функция,
казват, което е интересно за днешните цели
само защото все още не разполага с връщане тип.
Но колко входа има тя?
АУДИТОРИЯ: Two.
SPEAKER 1: Two.
И така, ако искате да вземат в два аргумента,
Просто отделете ги със запетая.
А ако искате да след това наричаме тази функция,
забележите, че просто обадя да речем, цитирам, край на цитата,
за първи аргумент, обща п, за втория аргумент.
Така че отново, ние просто трябва сега и изграждащи блокове, така че ние можем действително
изпълнение на някои от нашите собствени функции.
Всичко е наред.
Всякакви въпроси за тях?
>> Така че сега нека отстранете слой ако е така.
И целта, в крайна сметка, е следващата седмица проблем набор
ще бъде по cryptogrophy-- изкуството на кодиране на информация.
И по-специално, информацията ще има ли криптиране или декриптиране
ще бъде текст.
И така, този вид на покани въпросът днес като добре,
какво се случва под капака с текст извън ASCII от нула седмица
и как може ние всъщност започнете да го манипулира?
Така че тук е името Zamyla му.
И в текст, който може да бъде въведен в подобно на функцията за GET низ.
И сега започва, когато видите низ като this-- Z-A-M-Y-L-A--
започнем да мислим за него като че ли всеки от тези знаци е в кутия на неговата
собствен.
И наистина, в една седмица или така е време, всеки един от тези кутии
ще представлява много специфично блок от memory-- ухапване на паметта.
Така че всеки един от тези писма, в крайна сметка, ще представлява 8 бита.
И ние всъщност ще видим какво се случва за под предния капак в моя компютър.
>> Но за да не е достатъчно просто да погледнете Zamyla
през тази леща, при което всяка от тези писма е в собствената си кутия.
И достатъчно добре в C, което можем достъп до всеки от тези кутии директно.
Така че, ако искате да получите първата писмо от името й, супер лесно в C.
Ако искате да получавате последните писмо, супер лесно, както и
с парче нов синтаксис.
>> Така че аз ще отида напред в CS50 IDE и да се отворят низа нулева точка C.
И в този пример тук, има Няколко нови неща става.
Така за първи път в ред 19, ние сме виждал този before-- GET низ.
Така че просто като бърза проверка здрав разум, ако някой може да предложи до словесно
обяснение на лаик това, което се случва в ред 19.
Както току-що преведе този в English че не съквартирант в CS50
може да се разбере.
Да.
>> АУДИТОРИЯ: Има потребителския вход низ и да го съхранява в променлива ите.
SPEAKER 1: Добро.
Има вход за употреба низ и да го съхранява в променлива ите.
Това е прекрасно.
Така че от дясната страна страна, която наричаме GET низ.
Това връща стойност че не се възлага
от дясната страна, за да лява страна в променлива наречена лидер, който е
проектирани да съхраняват низ.
Точно.
>> Така че сега линия 22, на коментара в ред 21,
Очевидно отпечатва, че низ един символ на ред.
Но как?
Така че на първо място, ние I до 0 инициализира.
И тогава как можем да стигнем до В края на име Zamyla си?
Е, в края на Име Zamyla, аз можех
ръчно въведете в последния символ на името й по някакъв начин, или от броя на него.
Нали така?
Ако се върнем here-- Z-A-M-L-- Y-L-A-- така че можех да напишете инча
Какъв е индексът на Последно писмо Zamyla си?
Ако това е 0-- говори като programmer-- 0, 1, 2, 3, 4, 5,
I heard-- така наистина, последната буква в името Zamyla е шести,
но ако ние разчитаме от 0, това ще бъде номер 5.
Така че имайте това предвид тук.
>> Оказва се, че има функция в C нарича strlen, и през деня
и до днес все още, много програмисти
изберете да синхронизирате имената им функции, които звучат като думите
те се опитват да се каже.
Така strlen е с дължина низ.
И така, какво ще низ дължина S се върне, когато Zamyla е на входа?
>> АУДИТОРИЯ: Five.
>> Високоговорител 1: Z-A-М-Y-L. Six.
Нали така?
Каква е продължителността на име Zamyla си?
Нали така?
И точно в действителност, шест букви.
Нали така?
И така, какво означава това за нашия цикъл?
Отиваме да се премине от 0 до шест, които
ще ни даде пет повторения.
Какво правим за всяка итерация?
Е, процента C, някой предположил на другия ден,
означава контейнер за какво?
>> АУДИТОРИЯ: Char.
SPEAKER 1: Само на Чар.
Така че един-единствен character-- не множество герои като низ.
И тогава тук е новата линия че ние имаме отпечатване.
И тогава тук е новия синтаксис.
Ако искате да разпечатате на аз-ти символ в низа S, така да се каже,
можете просто да се каже име на низ S,
и след това отворете квадратна скоба, и после затвори квадратна скоба, с аз
средата.
И това е нещо хубаво в това тя вид прилича на квадрат
точно като на площадите, в която е Zamyla съществуват герои на тази картина там.
>> Така че, ако аз всъщност стартирате тази Сега, нека да видим какво ще стане.
Направете низ 0 точки наклонена черта низ 0, а след това аз съм
Ще напишете името Zamyla му.
Няма по-бързо, защото не го направих използвате печат е, но това е добре.
Просто знам какво да правя.
И наистина, той отпечатва Име Zamyla му, по една на ред.
>> Сега нека да е малко безотговорно.
Да предположим, че аз не знаех около strlen и аз помислих,
Всичко е наред, никой няма да има назове по-голяма от около 50 символи.
Да вървим напред и да компилирате този и да го повтаря отново и след това въведете в Zamyla
отново.
Логично, това, което е най- програмата ще се опита да печатате?
Z-A-М-Y-L-A след като 45 неизвестни байта памет.
И наистина, ние ще се върнем до тази идея за памет.
Но само логично, ако Име Zamyla е този дълъг,
Съгласно снимката тук, това, което казва,
се запази печат, имайте печат, имайте печат, имайте печат, имайте печат,
чак до 50-ата характер, които кой знае какво ще се случи.
Така че нека да погледнем реално.
Нека да напишете в Zamyla.
Интересно.
Имаме късмет.
Само един куп бяло пространство.
Oh.
Има едно фънки характер.
Тя прилича на вид странен въпрос отбележат там, но има име Zamyla му.
Нека да получите наистина безотговорно.
Какво ще кажеш да разпечатате 500 блокове в неизвестното?
Да вървим напред и да направи тази както и след това отново да тичам.
И нека цял екран го, защото ние трябва да се види от повече пространство.
Zamyla.
Имаш късмет отново.
>> Осмели се да стигнем по-безразсъдна?
Нека да получите повече безразсъдно.
50,000 знаци.
Това не е най-сигурно е добра идея.
Всичко е наред.
Направете низ 0.
Това ще бъде последната ни демо.
Zamyla.
Уф.
ДОБРЕ.
Така че паметта ми е наистина празна точно сега, който всъщност е вид удобен.
Това, което аз се опитвам да to-- оправи.
И сега, аз съм просто ще получите безразсъдно.
500 000.
Make-- нека цял екран тя.
Enter.
Zamyla.
Ето.
Нямам представа какво е това е, но това звучи зле.
Всичко е наред.
И всъщност, най-скоро, ако сте сред щастливия малкото в работно време
и в проблем избран един, може много добре се сблъскате с този.
Сегментация вина всъщност прави има добре дефинирана значение.
Това означава някаква грешка отнасяща се до сегмент на паметта.
И от гледна точка на лаик, това означава, че се докоснахме
memory-- ние използвахме RAM в компютъра ми че не би трябвало да има достъп до.
И това е, което е едновременно мощен и също е опасно
за C е, че всъщност имат безпрепятствен достъп
до съвкупността от паметта на вашата програма или байта или RAM, по-конкретно.
>> Така че, въпреки че името му Zamyla е с дължина само шест знака,
Все още мога да отида навсякъде в паметта, което искам.
И като се отмени, ако сте някога е чел някаква статия
през годините около някои сървър или някоя програма
Първи напукани или хакнат, че е възползвал от нещо
наречено препълване на буфера експлоатира, че ние всъщност ще
говорим за след няколко седмици, това е по принцип се отнасят до по някакъв начин да излъжем
компютър в върви добре извън границите на паметта
че трябва да има, и намери нещо сочно
в тази memory-- а парола, може би, по начин,
заобикаляне някои сериен номер проверите, или просто цяло състояние
да подвежда, че компютърът е изпълняващата код, който не е бил предназначен.
Но нека се върнем към реалност само за миг
когато тази програма беше осъществява с strlen,
и да се въведе едно нещо тук.
Какво е новото сред тези топ три линии?
>> Така низ дот ч.
Оказва се, че има тази библиотека, наречена String Dot H, или String библиотека,
чийто удар с глава на файл, така да се каже, е низ дот ч, че ми дава
достъп до тази функция strlen.
Ако пропуснете, че компилаторът е Ще ми крещиш в някаква форма.
Но знаете ли какво?
Сега нека да получите наистина нюансирано.
В ред 22, има нещо натура на inefficient-- зле проектирани,
arguably-- за този ред код.
Спомни си как се прилагат за цикъл
и какви стъпки да се случи отново и отново и again-- инициализация,
условието, кодът, че получава екзекутиран, а след това на нарастването
или промяна, след това условие, след това кода, след промяната, а след това
условието, тогава кода, след промяната, и така нататък.
Така че това, което може да е малко тревожен или лошо направено тук?
Да, в синьо.
АУДИТОРИЯ: Strlen е наречено много, много пъти.
SPEAKER 1: Да.
Така strlen се нарича много пъти, но това, което е
Дължината на името му на Zamyla Първият път, когато примката изпълнява?
>> АУДИТОРИЯ: Six.
>> SPEAKER 1: Six.
Е, каква е дължината на нейното име За втори път кода изпълнява?
>> АУДИТОРИЯ: Six.
>> SPEAKER 1: Добре.
Тя все още е шест.
Нали така?
Име Zarla не разполага променило, дори ако аз търся
само на част от буквите в името си.
И така на факта, че аз съм ефективно питам този въпрос, какво е
дължината на Zamyla, каква е дължината на Zamyla, каква е дължината на Zamyla,
шест отделни пъти, или седем дори, е просто глупаво,
защото това е непроменлив този отговор.
И така, какво мога всъщност направите е this-- в низ една
Имам незначително по-добра версия тук.
There-- whoops-- низ два имам незначително по-добър вариант, където
Правя this-- вместо просто инициализиране аз до 0, аз също със запетая
Декларирам, втора променлива, наречена , N- аз не трябва да се каже инт отново.
Не би трябвало, в действителност.
Но аз казвам п.
И тогава аз инициализира п да на strlen на N, така че сега
колко пъти се strlen се изпълнява в общия?
Само веднъж.
И така, това е, което имаме предвид рано за по-добър дизайн.
Всъщност, след като Ви код е правилен, връщане назад и мисли чрез,
Аз съм с помощта на най-малко памет или като няколко секунди
или милисекунди на компютърно време като възможно да се приложи някакъв проблем?
И аз отивам да превъртите и само да спомена,
че има това споменаване на нула в тази версия,
но ние ще се върнем към това, преди дълго.
Тъй като за сега, нека да разгледаме в случаите, когато това няма да ни доведе.
Така един, се оказва, че сега, че ние сме в състояние
да разгледаме отделните герои, можем да използваме нещо
от седмица 0, че е много тайнствена и нещо безинтересно към момента.
Но сега, и особено когато сме стигнем до криптография в една седмица,
това ще бъде доста мощен.
Оказва се, че с някои цели числа и плувки данни имоти--
и символи и низове и друга things-- някои от тях
може много лесно да се преобразува в друга.
>> Така например, когато говорихме около ASCII известно време ago-- ето
на главни букви A чрез M, точка, точка,
dot-- казахме, че има картографиране между тези букви и цифри.
И в действителност, това е вярно за малки букви, както и.
Малки букви а е 97, а на капитала е 65.
И има няколко в ASCII, който е само това картографиране
система за всички тези други букви.
И така, какво означава това?
Е, аз отивам да се продължи напред и отворен до реално бързо нещо, наречено
ASCII 0, повечето от които е коментари.
И отново на линия винаги можете да поглед чрез коментарите.
>> И да погледнем какво това ще направя.
Така че тя има основна функция.
Аз съм твърдо кодирани цифрите само за сега, защото знам какво правя.
Знам, че това, което искам да видя тук.
И аз съм инициализира с 65.
И аз брои през 26 писма общо.
И това, което съм аз ще отпечата един ред наведнъж
ако можете да тълкуваме Това подчерта линия?
Какво получава отпечатан?
Да.
>> АУДИТОРИЯ: Смятате ли за отпечатване на писмото, което
съответства на картата на писмо стойност и стойност на цяло число?
SPEAKER 1: Точно така.
Отивам да отпечатате писмото съответстваща на цяло число,
и обратно, както следва.
Ами това, някой каза по-рано, е просто контейнер за Чар.
Все още е.
Това, разбира се, е контейнер за да не int-- нов ред.
И сега забележите, моята първа стойност, която Аз съм включите за този контейнер
е не само I. Казвам, в скоби, Чар I,
които в скобите е Чар казва на компилатора, лечение I
не като това, което е, което е брой.
Отнасяйте се като действителен характер.
Като има предвид, втората стойност съм включване in-- I-- трябва да бъде само един номер.
>> Така че, ако се съберат тази program-- така че това е направи ASCII 0,
дот наклонена черта ASCII 0-- аз просто се този удобен малък диаграма, която
ми показва всички възможни съответствия без да се налага да го мисля
през или го разбера на моята собствена.
И аз също съм отпечатване, забележите малки букви,
защото няколко реда по-късно, аз също отпечатате този картографиране
както и, което е само за да се каже, че след като разберете
какво става отдолу качулката, нали
автоматично конвертира назад и напред.
И всъщност, ако някой от вас някога съм правил това в началното училище
или чували за някой, митовете като бележка
и преминаването й да си или приятелката си в клас,
но вие бъркани на букви от A като става B,
и B се превръща C, или нещо по-сложно от това, добре,
как ще отида за прилагане, че като дете?
Е, вие просто вид знаете А става Б, B става C,
но математически, какво прави това дете?
Какво се добавят към всяко писмо?
Ефективно, 1.
>> Така че, когато промените А до точка Б, това е нещо като смяна на 65-66,
които математически означава просто добавете 1.
И така, ако ви се налага да приложи това малко измамна техника
за вашия учител в кода, вие може да направи точно това просто
чрез добавяне на една буква заедно.
Така че не след дълго, ние сме Ще видим как можем
могат да се възползват от това, за да всъщност действително разбъркване и подреждане
информация.
В същото време, знаете, че ние започнахме да се въведе няколко други библиотеки
here-- низа една днес.
И един много полезен сайт да се надяваме, че ще намерим
се нарича reference.cs50.net, които преподавателския състав са взети заедно,
така че, ако искате да гледам как strlen произведения,
можете да започнете да пишете Име на функцията му,
кликнете strlen там, и след това по-малко удобно обяснение
ще се появи.
Или ако искате длъжностното Linux базирани обяснение,
можете да щракнете по-удобно горе в дясно, и то
ще представи една и съща информация, но в по-сложни термини.
Това е полезен ресурс за всъщност знам какво всичко прави.
>> Следващия път, ние ще да разгледаме Ovaltine
и повече, и се представим в света на криптографията.
Преди това, ще видим можете по-късно тази седмица.
И сега, Колтън Огдън.
Ще се видим в сряда.
>> [За възпроизвеждане на музика]
>> SPEAKER 1: Какво, по [Пуикането] правиш?
>> SPEAKER 1: Аз съм яденето ми десерт?
Как да го ядеш?
С ръцете си?
>> [За възпроизвеждане на музика]