[Powered by Google Translate] [Дел 4] [Помалку Комфорни]
[Нејт Hardison] [Универзитетот Харвард]
[Ова е CS50.] [CS50.TV]
>> Добро, добредојде назад кон секција.
Во делот оваа недела ние ќе направи неколку работи.
Одиме прво да повториме Проблем Постави 2,
кој е Цезар и Vigenère проблем во собата.
А потоа ние ќе се нурне во квиз 0 преглед
и да потрошат малку време recapping она што го зборуваше за
во секоја од предавања досега, и ние исто така ќе направи неколку проблеми
од квизови претходната година.
На тој начин вие момци имаат добар начин да се подготват за тоа.
>> За почеток, јас сум стартува неколку добри решенија
за претходниот проблем во собата, проблемот Намести 2, во овој простор.
Ако вие момци сите погоди овој линк,
и ако кликнете моето име и кликнете на мојот прв ревизија
ќе видите caesar.c, што е токму она што го барам во.
Ајде да зборуваме за ова навистина брзо.
Ова е само еден примерок решение.
Ова не значи дека тоа е совршено решение.
Постојат многу различни начини да се напише ова,
но постојат неколку работи кои сакав да се потенцира
што видов како ми беше степенување, вообичаени грешки што мислам
ова решение не е многу добра работа за ракување.
>> Првиот е да се има некој вид на насловот коментар на врвот.
На линии 1 до 7 гледате детали,
што точно оваа програма прави.
Еден добар стандардна практика кога сте пишување C код
без разлика дали вашата програма е содржан во една датотека или
без разлика дали е поделена во текот на повеќе датотеки е да се има некој вид на
Ориентирање коментар на врвот.
Ова е исто така и за луѓето кои одат надвор и да пишувам кодот во реалниот свет.
Ова е местото каде што тие ќе се стави информации за авторските права.
Подолу е листа на # вклучува.
On-line 16 има овој # define, која ќе се врати во само малку.
А потоа еднаш функцијата започнува, откако главната започнува,
затоа што оваа програма е сите се содржани во една функција
Самиот првото нешто што се случува и ова е многу идиоматичен и типична за програмата C
кој ги зема во командната линија аргументи-е тоа што веднаш ги проверува
>> за аргумент брои, argc.
Токму тука можеме да видиме дека оваа програма се очекува 2 аргументи точно.
Запомнете тука е дека првиот аргумент тоа е еден посебен
тоа е секогаш името на програмата и тоа е се кандидира,
името на извршната датотека.
И така што тоа не е тоа спречува корисникот водење на програма
со повеќе или помалку аргументи.
Причината сакаме да провериш за ова веднаш е затоа што
ние, всушност, не може да пристапите до оваа argv низа тука сигурно
додека ние Сум проверил за да видите колку е голема тоа е.
>> Една од заедничките грешки видов беше народ веднаш ќе одат во
и грабне avg [1].
Тие ќе го имате клучниот аргумент од низа и прават една да ми провери на неа,
а потоа тие ќе се направи тестот за argc како и следниот тест,
дали или не на првиот аргумент беше навистина целобројна во исто време,
и тоа не функционира затоа што во случај дека не постојат аргументи доставени
ќе се грабање аргументот дека не постои или се обидуваат да го зграби она што не е таму.
>> Другата голема работа што треба да се забележи е дека
вие секогаш сакате да се печати некој вид на корисни порака за грешка
на корисникот да се ориентираат нив.
Сигурен сум дека сите го стартувате програми каде што одеднаш ќе блокира,
и ќе се добие оваа смешна малку дијалог што се појавува и вели
нешто ужасно криптичната а можеби и ти дава грешка во кодот или нешто слично
дека не прави никаква смисла.
Ова е местото каде што навистина сакате да се обезбеди нешто корисно
и насочени кон корисникот, така што кога ќе го стартувате тие одат "Ох", лицето дланка.
"Знам точно што да правам. Знам како да го надминете овој."
>> Ако не печати порака, тогаш ќе се заокружи всушност
напуштање на корисникот да се оди испита вашиот изворен код
да дознаам што не беше во ред.
Исто така постојат и некои времиња кои ќе користат различни грешка кодови.
Еве ние само се користи еден да се каже дека беше грешка,
имаше грешка, имаше грешка.
Поголеми програми, често програми кои се нарекуваат со други програми,
ќе се врати некој вид на посебни грешка кодови во различни сценарија
да програмски комуницираат она што би поинаку
само користење убаво Македонски порака за.
Кул.
Како работиме долу, можете да видите ние се повлече клучот.
Ние тест за да видите ако клучот одговара.
Ние се добие порака од корисникот.
Причината поради која го направи тоа во овој направите додека јамка-и ова е нешто што ќе се покрие
во малку-но излегува дека ако го напишете контрола D
кога ќе се добие дека GetString брза на терминалот
она што всушност не е таа праќа специјален карактер
на програмата.
Таа се вика на ELF или на крајот на датотеката карактер.
И во тој случај, нашата порака стринг ќе биде нула,
па ова не е нешто што проверуваат во проблемот постави себе.
>> Но, како да одиме на, сега дека ние сме отворени да се зборува за покажувачи
и динамична алокација на меморија на грамада,
проверка за нула кога имаш функција која може
врати null како вредност е нешто што ќе сакате да се добие во навика да прави.
Ова е овде пред се за илустрација.
Но, кога ќе се направи видите GetString во иднина,
па од Проблем Намести 4 па натаму, ќе сакате да се задржи ова на ум.
Повторно, ова не е прашање за проблемот Намести 3 или бидејќи ние не се опфатени уште.
Конечно, ние се да овој дел, каде што дојде до главниот енкрипција јамка,
и постојат неколку работи се случува тука.
Прво, ние iterate во текот на целата порака стринг себе.
Еве ние се чуваат на strlen повик во состојба,
што голем број од вас имаат посочи не е одличен начин да се оди.
Излегува во овој случај тоа не е исто така голем,
делумно затоа што ние сме менување на содржината на самата порака
внатре во за телефонска линија, па ако имаме некоја порака која е 10 карактери,
прв пат ќе го започнеме дека за јамка strlen ќе се вратат што?
10.
>> Но, ако тогаш ние менувате порака, велат дека ние ги менувате своите 5 карактер,
и ние фрли во \ 0 лик во 5 позиција,
на следните повторување strlen (порака) нема да се врати она што го правеше
прв пат ние потврди,
но наместо тоа ќе се вратат 5, бидејќи ние фрли во таа нула терминатор,
и должината на стрингот е дефиниран
од страна на позицијата на која \ 0.
Во овој случај, ова е одличен начин да се оди затоа што ние сме го модифицира во место.
Но ќе забележите дека ова е всушност изненадувачки едноставно да го криптирате
ако може да се добијат по математика точни.
Сите тоа е потребно е да се провери дали е или не на писмото што барате
е големи или мали букви.
>> Причината ние само треба да се провери за што и ние не треба да се провери за
на е алфа случај е затоа што
ако еден лик е големи или ако тоа е со мали букви
тогаш тоа е дефинитивно буква,
бидејќи ние немаме големи и мали бројки.
Од друга работа што правиме и ова е малку незгодно-
е ние пат е изменета на стандардните Цезар шифра формула
дека дадовме во проблемот сет спецификација.
Она што е различно тука е дека ние одземе
во големи капиталот А, а потоа додаде капитал
се врати во на крајот.
>> Знам неколку ќе го направи тоа во вашиот код.
Дали некој од вас го направите ова во вашата поднесоци?
Си направил ова. Може да се објасни она што оваа не, Sahb?
Со одземање тоа надвор, бидејќи си направил мод веднаш по неа,
ќе мора да го извади, па на тој начин ќе добиете [кашлање] позиција.
А потоа од страна додавајќи дека подоцна ќе се префрли во текот на еден што си сакал.
Да, точно.
Што Sahb рече беше дека кога ќе сакате да го додадете
нашата порака и нашите клучни заедно
а потоа МО дека МО дека со NUM_LETTERS,
ако не скала нашата порака во соодветните 0-25 спектар прво,
тогаш ние би можеле да завршат добивање на навистина чуден број
бидејќи вредностите кои ние барате кога ќе погледнеме во пораката [i],
кога ќе погледнеме во ith карактер на нашата обична текстуална порака,
е вредност некаде во овој 65-122 опсег
врз основа на ASCII вредности за големи А преку мали z.
И така кога ја МО од 26 или од NUM_LETTERS,
бидејќи тоа беше нашата # define во горниот десен агол се тука,
тоа ќе ни даде вредност, која е во 0-25 спектар,
и ние треба начин да потоа скала што се врати
и да го во соодветните ASCII опсег.
Најлесен начин да го направите тоа е само скала се надолу
во 0-25 спектар да започне со тоа,
а потоа се префрлат се врати на крајот.
>> Уште една честа грешка дека го видов луѓе работат во е дека
ако не всушност го направите ова скалирање веднаш
и ќе додадам пораката и клучните заедно и ќе им додадете, да речеме,
во знак променлива, проблем со тоа
е од пораката [i] е релативно голем број за да започнете со-
се сеќавам тоа е најмалку 65 ако тоа е голема буква-
ако имате голем клуч, да речеме, нешто како 100,
и ако додадете оние 2 заедно во потпишан знак си оди за да се добие претекување.
Ви се случува да се добие вредност, која е поголема од 127,
која е најголемата вредност што char променлива може да се одржи.
Повторно, тоа е зошто вие би сакале да се направи тој вид на работа да почне.
Некои луѓе доби околу тој случај со правење на ако друг и тестирање
да се види дали тоа ќе претекување пред тоа го прават,
но на овој начин добива околу тоа.
А потоа во ова решение се отпечатени на цела низа на самиот крај.
Други луѓе отпечатени лик во исто време. И двете се страшни.
Во овој момент, дали вие момци имате било какви прашања, било какви коментари за ова?
Работите ви се допаѓа, работите не ви се допаѓа?
>> Имав прашање.
Можеби и јас го пропушти во текот на вашето објаснување, но како го прави ова програма
прескокнете празни места за поврзување клучот за должината на текстот?
Ова е само Цезар број. >> О, извинете, да.
Да, ние ќе се види тоа.
Во шифра Цезар добивме околу тоа, бидејќи
ние само flipped карактери.
Ние само ги ротира, ако тие беа големи или мали букви.
Вие момци чувство прилично добро за ова?
Слободно можете да ја копирате на оваа дома, го земам,
Спореди со што напиша вас момци.
Дефинитивно се чувствуваат слободни да испрати прашања во врска со него.
И повторно, сфати дека целта тука со вашиот проблем поставува
не е да ви момци за да напишете добра код за вашиот проблем комплети.
Тоа е учење. Да.
>> Назад кон направите додека јамка, ако тоа е еднакво на нула,
па нула само значи ништо, тие само притиснете ентер?
Null е посебен покажувач вредност,
и ние ги користиме нула кога сакаме да се каже
имаме покажувачот променлива која е укажува на ништо.
И така обично тоа значи дека оваа променлива, оваа порака променлива
е празен, и тука, бидејќи ние сме со користење на CS50 специјалниот стринг тип,
што е CS50 стринг тип?
Дали сте виделе што е тоа кога Дејвид влечат назад хаубата во лекција?
Тоа е фанки-тоа е покажувач, нели?
Океј, да. >> Тоа е знак *.
И така навистина можеме да го замени овој
овде со char * пораката,
и така GetString функција, ако не успешно се добие стринг од корисникот,
тоа не може да се интерпретира стринг, и еден случај во кој не може да се интерпретира низа
е ако корисникот типови на крајот на датотеката карактер, контролата D,
која не е нешто што обично го прават, но ако тоа се случи
тогаш функцијата ќе се врати оваа null вредност како начин да се каже
"Еј, јас не добие стринг."
Што ќе се случи ако не го стави пораката = нула,
што е нешто што не сме го правеле уште?
Зошто тоа би било проблем тука?
Бидејќи знам дека ние разговаравме малку во предавање за меморија протекување.
Да, ајде да го стори тоа и да видиме што се случува.
>> Прашање Василиј беше она што се случува ако не всушност имаат
оваа порака = NULL тест?
Ајде да дојдете до врвот.
Вие момци можат да коментираат ова.
Всушност, јас ќе го зачувате во ревизија.
Ова ќе биде верзии 3.
Што ќе треба да направите за да ја извршите оваа програма е ќе мора да кликнете на оваа опрема икона се тука,
и ќе треба да додадете аргумент за тоа.
Ќе мора да го даде клучниот аргумент, бидејќи ние сакаме да помине во командата.
Еве јас ќе одам да го даде бројот 3. Ми се допаѓа 3.
Сега зумирање назад, водење на програма.
Тоа е трчање, составувањето, градење.
Еве ќе одиме. Тоа е чекаат да бидат прашани.
Ако јас напишете нешто како здраво-каде што одиме?
О, мојата програма требаше премногу време да се кандидира. Бев jawing за предолго.
Еве оди.
Сега јас напишете здраво.
Гледаме дека енкриптира соодветно.
Сега она што се случува ако правиме брза GetString да се врати нула?
Запомнете, реков дека ние го сторивме тоа со притискање на контрола D во исто време.
Ќе дојдете до тука. Ние ќе се кандидира повторно.
Зграда. Таму оди.
Сега кога ќе се погоди контрола D
Ја добив оваа линија во која се вели opt/sandbox50/bin/run.sh, Сегментација на вина.
Дали вие момци се гледа дека и пред тоа?
>> [Студентски] Зошто нема->> Извини?
[Студентски] Зошто нема основни депонија во овој случај?
Основните депонија е-прашањето е зошто нема никакви основни депонија тука?
Прашањето е дека може да има, но јадрото депонија е датотека
кој добива зачувани на хард дискот.
Во овој случај ние сме оневозможени основни депонии
во бегство сервер, така што ние не сме луѓе секунда Разлом
и градење тони основни депонии.
Но, може да се добие една.
Основни депонии се на вид на нешто што често може да се оневозможи,
а понекогаш правиш.
Сегментација грешка, да одговори на вашето прашање, Василиј,
е велејќи дека ние обиделе да пристапите покажувач
што не требаше да укаже на нешто.
Запомни Binky во видеото кога Binky се обидува да
одат пристап покажувач тоа не е укажува на нешто?
Во овој случај Претпоставувам технички покажувачот е да се покажува кон нешто.
Тоа укажува на нула, која е технички 0,
но тоа е дефиниран да биде во еден сегмент кој не е достапен
со вашата програма, па ќе добиете сегментација грешка
затоа што не си пристап меморија, која е во валидна сегмент
како грамада сегмент или стек сегментот или податоците сегмент.
Кул.
Повеќе прашања во врска со Цезар?
>> Ајде да се движат натаму. Да ги погледнеме на верзии 2 навистина брзо.
Тоа е Vigenère.
Тука во Vigenère
ние ќе одиме во текот на овој еден прилично брзо, бидејќи, повторно,
Vigenère и Цезар се прилично слични.
Насловот коментар е пред,
# Define е пред да се избегне со користење на овие магија броеви.
На убаво нешто е да се каже сакавме да се преселат во
различна азбука или нешто слично.
Наместо да одат рачно го промени сето на 26 во кодот
ние би можеле да го промените ова на 27 или пуштете го надолу
ако бевме користење на различни азбуки, на различни јазици.
Повторно, ние го добивме ова проверка на аргумент брои,
и навистина речиси може да се земе ова како шаблон.
Доста секоја програма што пишува треба да има-
ако е потребно командната линија аргументи кои некои низа на линии
која гласи вака уште на самиот почеток.
Тоа е една од првите разумност тестови сакате да го направите.
>> Еве она што го правевме беше ние се сигурни дека
клучниот збор е валидна, и тоа беше втората чек што ние го сторивме.
Забележите еднаш дека ние се одделивме ова од argc и 2.
Забележете дека во овој случај едно нешто што ние требаше да направи беше наместо
на користење на на i сакавме да се провери целата низа,
а со цел да се направи тоа навистина треба да се оди карактер по карактер
во текот на стрингот.
Нема добар начин да се јавите нешто на него
бидејќи дури, на пример, да јас ќе се врати 0
ако не може да се интерпретира цел број, така што дури и не работат.
Повторно, убаво порака раскажување на корисникот токму она што се случило.
Тогаш овде, повторно, ние исто така се справи со случајот каде
корисникот видови во контрола D случаен карактер.
>> А потоа Шарлот имаше прашање претходно за тоа како успееме да ја прескокнете простори
во нашата низа тука.
Ова е вид на слични на она што го правевме со Myspace програма
дека ние го сторивме во делот, и начинот на кој тоа работи
е дека ние следи бројот на букви кои би видел.
Како што одеше преку порака стринг, како што одеше над карактер по карактер,
ние следи индексот како дел од нашата за телефонска линија, а потоа ние, исто така, следи
бројот на букви, па не специјални карактери, не-цифри, не-белиот простор
дека ние ќе се гледа во посебна променлива.
И тогаш ова решение модифицира клучот
да се добие вистински клуч цел број, и го прави тоа во лет,
право пред тоа, тогаш оди да го криптирате вистински порака карактер.
Постојат некои решенија, кои биле совршено одлично премногу
кој ќе се измени нагоре кога се тестира за валидноста на клучот е.
Во прилог на што си сигурен дека ликот и клучни зборови
беше една буква, исто така, покажа дека во цел број
во 0-25 спектар на тогаш прескокнете морале да го направите тоа подоцна во ова за јамка.
Повторно, ќе видите тука ова е навистина точно истиот код
што се користеа во Цезар во овој момент.
Правиш иста работа, па Вистинската трик е да пронајдат
како да се претворат клучен збор во цел број.
>> Едно нешто што ние го сторивме тука дека е малку густ
е ние повтори оваа фраза, претпоставувам дека би можеле да го наречеме,
3 одделни пати на 58 линии, 59 и 61.
Може некој објасни што точно оваа фраза не?
Тоа е пристап карактер, како што рече ти.
Да, тоа е [недоловим] лик во клучниот збор,
и така тоа е бројот на писма гледа затоа што ти си само се движи по
клучниот збор еднаш сте виделе писмото,
така што ќе ефикасно да прескокнете празни места и работи како што.
Да, точно.
А потоа еднаш сте виделе клучниот збор празно едноставно МО, па можете да се движи назад наоколу.
Точно. Тоа е совршено објаснување.
Што Кевин рече е дека ние сакаме да индексира во клучен збор.
Ние сакаме да се добие num_letters_seen карактер, ако сакате,
но ако num_letters_seen надминува должината на клучни зборови,
начинот на кој ние се врати во соодветниот опсег е ние ги користиме на современи оператор
ефикасно да се заврши околу.
На пример, како на краток, нашиот збор е сланина,
и тоа е 5 букви.
Но, видовме 6 букви во нашата обичен текст во овој момент
и шифрирана 6.
Ние ќе завршат пристапуваат на num_letters_seen,
која е 6, МО должината на клучни зборови, 5,
и така ќе добие 1, и така што ќе направите е ние ќе
пристапите на првиот карактер во внатрешноста на нашите клучни зборови во тој момент.
>> Сите права, било какви прашања на Vigenère
пред да се движи?
Вие момци чувство прилично добро за ова?
Кул, одлично.
Сакам да бидете сигурни дека вие момци се добива шанса да се види кодот
за кои мислиме дека изгледа добро и имаат шанса да учат од неа.
Ова ќе биде последниот што ќе биде со користење простори засега,
и ние ќе транзиција сега, и јас одам да одат на cs50.net/lectures
така што може да се направи малку на квизот преглед.
Најдобар начин мислам да се започне квиз преглед
е да се дојде до оваа Предавања страница, cs50.net/lectures,
и под секоја од недела наслови, па ако гледам тука во недела 0,
Гледам дека имаме листа на теми кои што се опфатени во недела 0.
>> Ако било кој од овие теми се чини непознат за вас
вие дефинитивно ќе сакаат да одат назад и да Корито на материјалите и евентуално
дури и обезмаслен преку предавања, да ги гледаш повторно, ако сакате
да се добие чувство за она што се случува со секоја од овие теми.
Јас нема да кажам дополнително оваа година еден од кул ресурси имаме
е овие шорцеви дека ние сме создадени, и ако се погледне на недела 0,
ние немаме сите теми се опфатени, но имаме неколку од нив,
некои од сложени да ја формира оние, па гледањето на овие шорцеви повторно
е добар начин за да добиете до брзина.
Конкретно, јас одам да се стави во приклучок за 3 на дното, бидејќи јас не оние.
Но, ако сте се борат со бинарни, битови, канаста, тој вид на работи,
бинарни е одлично место за почеток.
ASCII е уште еден што е добро за да ја видите премногу.
Можете дури и да ме види во 1.5x брзина, ако јас одам премногу бавен за вас.
Бидејќи е преглед, се чувствуваат слободни да го направите тоа.
>> Само за да започнете многу брзо, ние ќе треба да поминат низ неколку од овие квиз проблеми
само брзо да разпенвам преку овие.
На пример, нека се погледне на проблемот 16 дека имам право тука на табла.
Ние го добивме ова следниве пресметка во бинарна,
и ние сакаме да ги покаже сите работа.
Океј, јас ќе одам да им даде на оваа да се сними.
Вие момци треба да го следат заедно со хартија,
и ние ќе го направите ова навистина брзо.
Ние сакаме да ги вршат следниве пресметка во бинарна.
Имам 00.110.010.
И јас одам да го додадете во неа 00.110.010.
За математика гении следниве заедно дома,
ова е стварно множење со 2.
Да почнеме.
Ние ќе го следат истиот Покрај алгоритам што го правиме
Кога ќе се додаде децимални броеви заедно.
Навистина единствената разлика тука е дека ние јамка назад околу
еднаш имаме 1 + 1 наместо штом ќе го добиеме до 10.
>> Ако тргнеме од правото, навистина брзо, што е првата цифра?
[Студентски] 0. >> [Нејт Х] 0.
Велики, втората цифра?
[Студентски] 1.
[Нејт Х] Дали е 1? 1 + 1 е?
[Студентски] 10.
[Нејт Х] Точно, така што е цифрен дека јас пишувам веднаш под 2 оние собираат заедно?
[Студентски] 1, 0, или 0, а потоа го носат 1.
[Нејт Х] 0 и носат 1, точно.
Следниот нагоре, Василиј, вие сте.
Што е третиот? >> [Василиј] 1.
[Нејт Х] 1, совршена. Кевин?
[Кевин] 0. >> [Нејт Х] 0, Шарлот?
[Шарлот] 0. >> [Нејт Х] Да, и она што можам да направам?
[Студентски] Во 1.
[Нејт Х] И она што можам да направам? А потоа го носат 1.
Совршен, Sahb? >> [Sahb] Сега имате 1.
[Нејт Х] И да правам нешто тука?
[Sahb] Потоа за следниот имате 1 затоа што пренесуваат 1.
[Нејт Х] Велики, па овде можеме да го завршам.
Кул.
[Студентски] Дали 0 + 0 = 0?
0 + 0 = 0.
1 + 1, како што рече, е 10, или 1, 0, а.
10 е погрешна употреба на израз, бидејќи за мене 10 значи дека бројот 10,
и тоа е поврат на тоа како ние сме го претставуваат кога ние сме го пишувам.
Ние претставува број 2 од 1, 0, а бројот 10 е малку поинаква.
>> Што е вид на убаво за бинарни е дека навистина не се толку многу
случаи што треба да дознаете.
Има 0 + 0 = 0, 0 + 1 = 1,
1 + 1 е 0, а потоа го носат 1,
а потоа можете да видите тука на третата колона од десно
имавме оваа 1, 1, и 1.
И 1 + 1 + 1 е 1,
и ти го носиш уште 1.
Кога правиш бинарни Покрај тоа, прилично едноставна.
Јас би го сторила уште неколку од овие да разумност себе провери
пред да одите во затоа што ова е
веројатно нешто што ќе видиме на квизот.
Сега ајде да го направите ова следната, како и.
Да направиме проблем 17.
Ние ќе се конвертира следниве бинарен број на децимални.
Имам 10100111001.
Запомни во бинарен видео кое го направив
Одев преку неколку примери, и јас покажа како
се работи кога сте го прави тоа во децимални.
Кога си работат во децимална застапеност Јас мислам дека ние сме
во овој момент во нашите животи, па зборува тоа што
тоа е прилично лесно да се притајуваат механика на тоа како всушност работи.
>> Но да се направи брз повториме, ако имам бројот 137
ова навистина значи и повторно, ова е во децимална застапеност-
бројот 137 во децимални значи дека имам 1 x 100 + 3 x 10 + 7 x 1.
Ова е за сите кои престојуваат на екранот.
А потоа ако се погледне на овие броеви токму тука,
100, 10 и 1, ќе видите дека тие се всушност сите овластувања на 10.
Имам 10 ², 10 ¹, а 10 до нула.
Имаме сличен вид на работа во бинарна,
освен дека нашата база, како што го нарекуваат, е 2, наместо на 10.
Овие 10s што напишав тука долу на дното,
овој 10 ², 10 ¹, 10 до нула, 10 е нашата база,
и експонент, 0, 1 или 2,
се подразбира од страна на позицијата на бројот на бројот што пишувам.
1, ако се погледне во него, овој 1 е во 2 позиција.
На 3 е во 1 позиција, а 7 се во 0. позиција.
Тоа е како ние се различни експонати подолу за нашите бази.
>> По сето ова we'll-всушност, знаеш што?
Ние ќе направиме се-каде ми го вратите копчето одиме?
Таму оди.
Го сакам овој вратите работа.
По ова мислам дека за мене барем
најлесниот начин за да започнете конвертирање бинарен број
или хексадецимален број, каде што основата е 16
а не 10 или 2 е да се оди напред и да пишува од
основите и експоненти за сите броеви во мојата бинарен број на врвот.
Ако тргнеме од лево кон десно, повторно,
кој е вид на контра,
Ќе се вратиме назад до црниот тука, имаме 2 до 0. позиција,
а потоа имаме 2 ¹, 2 ²,
а потоа 2 до 3, 2 до 4, 2 до 5, 6,
7, 8, 9 и 10.
Овие бројки што сум напишал надвор се сите експоненти.
Јас само напишав бази овде во првите 3 само за просторот.
>> Во овој момент јас ќе одам да се оди напред и јас сум всушност се случува да се избрише
работи кои што направивме во децимала, ако тоа е во ред.
Вие сте сите добив тоа.
Оние од вас гледање онлајн Сигурен сум дека ќе биде во можност да ми ја премотам касетата, ако сакате.
Префрлување назад кон пенкало.
Сега, она што можеме да направиме-ако вие момци не се целосно до брзина на вашите овластувања на 2,
тоа е тотално кул.
Тоа се случува. Јас разбирам.
Јас еднаш имаше интервју каде што ми беше речено јас треба да ги знаат сите сили од 2
до преку 2 до 30-ти.
Тоа не беше работа добив.
Како и да е, вие момци може да оди напред и направете математика тука,
но со бинарни тоа не е никаква смисла,
и ниту дали има смисла со децимална или хексадецимален или,
да го направите математика каде имате нули.
Можете да видите јас имам 0 тука, 0 тука 0 тука 0 тука 0 тука 0 тука.
Зошто да не има смисла да го направите вистинскиот математика
да се пресмета соодветно моќта на 2 за таа позиција?
Точно, како Шарлот рече, тоа ќе биде 0.
Како и да се спаси од времето, ако пресметување овластувањата на 2 не ви е силна одговараат.
Во овој случај ние само треба да го пресмета за 2 до 0, која е-?
[Студентски] 1.
[Нејт Х] 1, 2 до 3 кој е-?
[Студентски] 8. >> [Нејт Х] 8.
2 до 4?
[Студентски] 2. Жал ми е, 1.
[Нејт Х] 2 до 4 е 16, точно.
2 до 5, Кевин? >> 32.
[Нејт Х] 32, 2 до 8?
[Студентски] 32 х 8, 256.
[Нејт Х] Совршен.
И 2 на 10?
[Студентски] 1024.
[Нејт Х] Да, 1024.
>> Откако имаме овие бројки можеме да заклучиме сите нив до.
И ова е местото каде што тоа е навистина важно да се направи неколку работи.
Еден е да се оди бавно и проверете ја вашата работа.
Може да се каже дека има 1 на крајот од овој број,
па јас дефинитивно треба да добие непарен број како мојот резултат,
бидејќи сите други оние ќе бидат дури и броеви
со оглед дека тоа е бинарен број.
Од друга работа да направите е ако дојде до оваа точка на тест
и сте го напишани на овој далеку
и сте истекува времето
погледне бројот на поени дека овој проблем е вреден.
Овој проблем, како што можете да видите, ако јас флип назад кон мојот лаптоп навистина брзо-
овој проблем е вреди 2 поени, така што ова не е вид на тоа
треба да се оди преку ако сте навистина притисок за време.
Но, ние ќе го вратите назад на iPad, и ќе одиме преку тоа навистина брзо.
>> Ми се допаѓа прават мал број првата
затоа што сметаат дека полесно.
Ми се допаѓа 32 и 8, бидејќи тие одат заедно прилично лесно, и да добиеме 50.
16 и 1 добива 17.
Има добиеме 57,
и потоа можеме да правиме на останатиот дел од ова, па можеме да направиме 57, 156.
Ајде.
Човекот, добро, ајде да видиме.
Имавме 57, 256, и 1024.
Во овој момент, Претпочитам само одат преку.
Јас немам поим. Јас јасно треба да прочитате на овој.
7, 6 и 4, ќе добиете 17.
1, 5, 5, 2, 13.
Потоа да добиеме 3, а потоа да добиеме 1.
1337.
Велигденското јајце, некој?
Секој признае овој број?
Крис признава број. Што значи тоа, Крис?
[Крис] Leet.
Leet, па ако се погледне на овој, тоа изгледа како leet.
Хакер работи. Види надвор за тој вид на работи на среднорочни или квиз, а.
Ако видите дека вид на работи и сте Прашувајќи "Ха"
кои, всушност, може да значи нешто.
Не знам. Дејвид сака да го стави внатре
Тоа е добар начин да се здрав разум да го провериш.
Како во ред, можам да видам што се случува.
>> Тоа е недела 0/Week 1 нешта.
Ако ние се вратиш назад кон нашите лаптоп сега,
одзумирате, и неколку други работи.
Има ASCII, кој го прави многу со проблемот комплети.
Овој поим на капиталот А што е тоа навистина?
Знаејќи дека тоа е децимална број.
65 е она што е одбележан во ASCII табелата,
и тоа е тоа како компјутерот го пишува,
и тоа како сме се извлекуваат со всушност пишување
ликот капитал и карактерот мали букви на
во некои од овие решенија и проблемот поставува дека сте правеле.
Неколку други работи.
Имаме извештаи, рационален израз, услови, петелки, променливи и теми.
>> Оние се чини да се направи смисла во најголем дел?
Некои од оваа терминологија е малку фанки во пати.
Сакам да мислам на изјава во најголем дел е нешто што завршува со точка-запирка.
Изјави како x = 7, која поставува променлива,
веројатно нарекува x = 7.
Веројатно x е исто така еден вид кој може да се сместат на бројот 7,
па тоа е int или можеби лебди или кратко или знак,
нешто слично.
А рационален израз е користење на овие двојно изнесува
и тресне еднаква или не еднакви, помалку од, поголем од,
помалку од или еднакво на сите тој вид на работи.
Услови потоа се ако друг извештаи.
Јас ќе се сеќава дека не може да има друго место без соодветните ако.
Исто така, не може да има друго ако без соодветните ако.
Петелки, се сети на 3 видови на јамки ние се ковале во тебе
за последните неколку секции и проблемот комплети.
Користејќи се додека кога сте добивање корисник влез,
користење додека петелки до одредена состојба е точно,
а потоа со помош оние за петелки, ако треба да
знае кои повторување на јамка која моментално се наоѓате е како јас размислувам за тоа.
Или ако правиш за секој лик во серијата сакам да направам нешто,
за секој елемент во низа сакам да направам нешто на тој елемент.
>> Теми и настани.
Овие не се опфатени толку експлицитно во C,
но запомнете ова од нула.
Ова е идејата на постоење на различни сценарија.
Ова е, исто така, овој поим на емитување на настанот.
Некои луѓе не ги користат емитување во нивните проекти на почетокот,
која е тотално кул,
но овие се 2 различни начини на справување со овој поголем проблем наречен конкурентноста,
кој е како да добиете програми за извршување на
или навидум изврши во исто време?
Различни задачи работи додека другите задачи се, исто така, работи.
Ова е како вашиот оперативен систем изгледа да се работи.
Ова е причината зошто, иако, на пример,
Имам мојот интернет пребарувач работи, јас, исто така, може да се претвори во Spotify и пуштите песна.
Тоа е повеќе од концептуална нешто да се разбере.
Јас ќе се погледне на теми кратко
ако сакате да дознаете повеќе за тоа.
>> Ајде да видиме, верувам дека би можело да се
проблем на овој во една од овие.
Повторно, мислам теми и настани не се нешто што ние ќе ги покрие во C
само затоа што е значително потешко отколку во нула.
Вие не треба да се грижите за него, но дефинитивно се разбере концептите,
се разбере она што се случува.
Пред да се движи, било какви прашања на недела 0 материјал?
Сите чувствуваат прилично добро?
Разбирање променливи и она што променлива е?
>> Преселба на. Недела 1.
Неколку работи тука дека не беа посебно опфатени
во квизот преглед нужно, а исто така се повеќе концептуални работи кои треба да се размислува за.
Првиот е ова сфаќање на она што се изворниот код, компајлери и објектниот код.
Никого? Босилек.
Е објектниот код-Мислам изворниот код е она што го стави во ѕвекот,
и објектниот код е она што ѕвекот гаси, така што вашиот компјутер може да се чита на програмата.
Точно.
Изворниот код е кодот Ц дека всушност напишеш.
Објектниот код е она што го добивате од ѕвекот.
Тоа е 0-ти и 1S во таа бинарен формат.
Тогаш она што се случува е кога имаш еден куп на објектот датотеки,
речеме сте составувањето на проект или програма која користи повеќе изворниот код на датотеки,
кои со конвенцијата им се дава. в наставката на датотеката.
Тоа е причината зошто имаме caesar.c, vigenère.c.
Ако сте пишување Јава програми ќе им даде на проширување. Java.
Пајтон програми имаат наставката. Py често.
>> Откако ќе имаат повеќе. В датотеки, можете да ги компајлирате.
Ѕвекот плука од сите овие бинарни сметот.
Тогаш затоа што само сакаат 1 програмата
имате linker врската сите овие објект додадени фајлови заедно
во 1 извршна датотека.
Ова е, исто така, она што се случува кога користите CS50 библиотеката, на пример.
Во библиотеката CS50 е и тоа. Ж хедер датотека
што ќе чита, дека # includecs50.h.
И тогаш тоа е исто така посебна бинарни библиотека датотека
тоа е се состави дека е 0-ти и 1S,
и дека-l знаме, па ако се вратиме на нашите простори и ние со нетрпение навистина брзо
во она што се случува тука, кога ќе погледнеме во нашите ѕвекот команда,
она што ние го добивме е ова е нашата изворниот код датотека овде.
Тоа се еден куп на компајлерот знамиња.
А потоа на самиот крај, овие-l знамиња линкот во
вистински бинарни датотеки за овие 2 библиотеки, CS50 библиотека, а потоа по математика библиотека.
>> Разбирање на секој тип на цел датотеки "
во компилација процес е нешто што ќе сакаат да бидат во можност да
даде најмалку високо ниво преглед на.
Изворниот код влегува внатре објектниот код излегува.
Објектниот код датотеки поврзат заедно, и ќе добиете убава, извршна датотека.
Кул.
Ова е исто така каде што можете да добиете грешки во повеќе точки
во компилација процес.
Ова е местото каде што, на пример, ако земете овој поврзува знаме,
на CS50 знаме, и ќе ја изостави во простори или кога сте водење на вашиот код,
ова е местото каде што ќе добиете грешка при поврзување фаза,
и linker ќе каже: "Еј, да те повика функција GetString
тоа е во CS50 библиотека. "
"Ти ми кажа дека е во CS50 библиотека, и не можам да најдам кодот за него."
Тоа е каде што треба да ја водат во, и тоа е посебна
од компајлерот грешка, бидејќи на компајлерот е во потрага на синтакса и тој вид на работи.
Добро е да знаете што се случува кога.
>> Други работи кои треба да знаат.
Јас би рекол дека дефинитивно ќе сакате да се погледне во краток за typecasting направено од страна на Јордан
да се разбере она ints се под хауба,
она што знаци се под хауба.
Кога зборуваме за ASCII и ние всушност се погледне на ASCII табелата,
она што го прави ни даваат под хауба изглед
како на компјутерот всушност претставува капитал и бројот 7
и запирка и знак прашалник.
На компјутер, исто така, има посебни начини да се претставуваат
бројот 7 како цел број.
Таа има посебен начин да претставува број 7 како децимален број,
и оние кои се многу различни.
Typecasting е како да му кажете на компјутерот "Еј, јас сакам да ги конвертирате
од една репрезентација на друга репрезентација. "
Зошто не можеме да ги разгледаме во тоа.
>> Јас исто така ќе ги разгледаме во краток за библиотеки и краток за компајлери.
Оние зборува за процесот на компилација,
што библиотеката е и одиме во текот на некои од овие прашања кои може да се праша.
Прашања на недела 1 материјал?
Дали има некои теми тука дека изгледа застрашувачки сакате да покрие?
Се обидувам да свират низ повеќето од овие претходно теми, така што можеме да дојдеме до
совети и направи малку на рекурзија.
Мисли?
Нешто да се покрие?
Време за некои чоколадо можеби?
Вие момци се работи преку него.
Одам да се задржи потпивнуваш на мојот кафе.
Недела 2.
Добар повик, добро повик.
Во Недела 2 зборувавме малку повеќе за функции.
>> Во првите неколку проблемот поставува ние навистина не пишувам функции на сите
освен што функција?
[Студентски] Мајна. >> Мајна, точно.
И така видовме различни костими дека главната носи.
Тука е онаа во која е потребно без аргументи,
и ние речеме празнина помеѓу заградите,
и потоа, тука е другиот каде што сакаат да ги преземат командната линија аргументи,
и како што видовме, тоа е каде што треба int argc и гудачки argv низа
или сега дека ние сме всушност изложени низа да биде char * дека тоа е
ние ќе почнете да пишувате како char * argv а потоа голема заграда.
Во Проблем Постави 3, вие момци видов еден куп функции,
и спроведува еден куп функции, црта, гледам нагоре, трка.
На прототипи беа напишани таму за вас.
>> Што сакав да зборувам за тука со функции навистина брзо
е дека постојат 3 делови за нив секогаш кога ќе се напише функција.
Мора да наведете враќање тип на функција.
Мора да одредите име за функцијата, а потоа ќе мора да се определи
аргументот листа или на параметарот листа.
На пример, ако јас да се напише функција да ги сумира еден куп на броеви
а потоа се врати да ме сумата што ќе биде моето враќање тип
ако сакав да ги сумира цели броеви, а потоа се врати на збирот?
Тогаш името на функцијата.
Ако одам напред и да пишуваат во зелена, овој дел е враќање тип.
Овој дел е името.
А потоа помеѓу загради
е местото каде што даде аргументи,
често скратено како аргументи, понекогаш се нарекува params за параметри.
И ако го имате, само наведете еден.
Ако имате повеќе те одделуваат секој со запирка.
И за секој аргумент го даде 2 работи кои се-Кевин?
[Кевин] Мора да се даде на видот и тогаш името.
А потоа името, а името е името што ви се случува да го користите
да се однесуваат на тој аргумент во рамките на збирот функција,
во рамките на функција која сте во моментов пишувам.
>> Вие не треба да се, на пример, ако јас одам да се сумира,
каже, низа од цели броеви-we'll направите int низа,
и јас ќе си даде некои големи загради не-
тогаш кога ќе помине низа на збирот функција
Јас го помине во првата позиција на аргументот листа.
Но низата дека јас помине во не мора да имаат име ТП.
ТП ќе биде како јас да се однесува на тој аргумент во телото на функцијата.
Од друга работа што треба да се земат предвид,
и ова е малку различен од функциите, но мислам дека тоа е важен момент,
е дека во C кога го пишувам функција вака
како можам да знам колку елементи се во оваа низа?
Ова е нешто на некој трик прашање.
Ние разговаравме за тоа малку во делот минатата недела.
Како да знам бројот на елементи во внатрешноста низа во C?
Дали постои начин?
>> Излегува дека не постои начин да се знае.
Мора да го помине во одделно.
Постои трик што можете да направите
ако сте во истата функција во која е низа прогласи,
и си работат со магацинот низа.
Но, тоа работи само ако сте во истата функција.
Откако ќе помине низа на друга функција или ако сте прогласи низа
и ќе се стави таа низа на грамада, сте користеле Примерок
и тој вид на работи, тогаш сите облози се исклучени.
Тогаш вие всушност треба да помине околу
посебен аргумент или друг параметар
ти го кажувам колку е голема низа е.
Во овој случај, јас би сакал да се користи запирки I'm жал, тоа се случува надвор од екранот овде-
и јас би помине во еден аргумент
и го нарекуваат int len ​​за должина.
>> Едно нешто што може да излезе на квиз
се бара да се напише или спроведување одредена функција наречена нешто.
Ако не ви даде прототип, па целата оваа работа тука,
целата оваа збрка се нарекува функција декларација или функција прототип,
ова е една од првите работи што ќе сакате да се помине долу, ако тоа не е дадена
за да ви веднаш на квизот.
Од друга трик научив е дека
велат дека ние не ви даде прототип за некоја функција, и ние велиме, "Еј, имаш да го пишувам."
Внатре во големи загради кои ги имате на квизот
ако забележите дека постои враќање тип и ќе забележите дека враќањето тип
е нешто друго од празнина, што значи дека функцијата не враќа ништо,
потоа една работа што дефинитивно ќе сакате да направите е да напишете
некој вид на враќање изјава на самиот крај на функцијата.
Враќање, и во овој случај, ние ќе се стави празно, бидејќи сакаме да се пополни во празно.
Но ова добива мислиш на вистинскиот начин за тоа како сум јас ќе им пријде на овој проблем?
И тоа ве потсетува сте ќе треба да се врати на вредност
на повикувачот на функцијата.
>> Да. >> [Студентски] Дали стил применуваат кога сме пишување код за квиз?
Како вовлекување и тој вид на работи? >> [Студентски] Да.
Не, не е толку многу.
Мислам дека многу-ова е нешто што ќе се разјаснат на квиз на денот на,
но обично се грижиш # вклучува и тој вид на работи, тоа е вид на надвор.
[Студентски] Дали треба да се коментира вашиот ракописна код?
Дали треба да се коментира вашиот ракописна код?
Коментирајќи е секогаш добра, ако сте загрижени за делумна кредит
или сакате да се комуницира вашата намера до два метра.
Но, јас, пак, ќе се разјаснат на квизот себе и на денот квиз,
но јас не верувам дека ќе се бара да напишете коментари, бр.
Обично не, но тоа е дефинитивно вид на работа, каде што
можете да комуницира вашата намера, како "Еј, ова е местото каде што ќе одам со него."
И понекогаш тоа може да помогне со делумно кредит.
Кул.
>> Босилек.
[Василиј] Која е разликата помеѓу прогласување, да речеме, int lang
во аргументите или параметри наспроти прогласување на променлива во функција?
Леле, кафе слезе на душникот.
[Василиј] Како што работите што сакате да се стави во аргументите.
Да, тоа е големо прашање.
Како да се избере она што сакате да се стави во аргументите
наспроти она што треба да направите внатрешноста на функција?
Во овој случај ние вклучени и двете од овие како аргументи
затоа што тие се нешто што секој кој ќе го користат збирот функција
треба да се определи тие работи.
>> Збирот функција, како што зборуваше, нема начин да се знае
колку е голема низа е што добива од своите повикувачот или кој е со користење на сума функција.
Тоа нема начин да се знае колку е голема таа низа е.
Причината поради која го помине во оваа должина, токму тука како аргумент
е бидејќи тоа е нешто што ние сме во основа кажува на повикувачот на функцијата,
кој се случува да се користи збирот функција, "Еј, не само што ќе треба да ни даде низа
на ints, исто така треба да ни кажете колку е голема низа што сте ни ја даде е. "
[Василиј] Оние двете ќе биде командната линија аргументи?
Не, тие се вистинските аргументи, кои ќе се пренесат и на функцијата.
>> Дозволете ми да се направи нова страница тука.
[Василиј] Како име ќе помине-
[Нејт Х] Ако имам int главната (празно),
и јас одам да се стави во моето враќање 0 тука долу на дното,
и да каже сакам да се јавите на сума функција.
Сакам да кажам int x = сума ();
За да ја користите сума функција треба да помине и во низа што сакам да ги сумира
и должината на низата, така што ова е местото каде што
претпоставувајќи имав низа на ints,
велат дека имав int numbaz [] = 1, 2, 3,
вид на користење дека пробиени до синтакса право таму,
тогаш што би го направил е во износ јас би сакал да помине во
и numbaz и бројот 3
да им кажам на сума функција "Океј, тука е низа сакам да резимираме."
"Тука е нејзината големина."
Дали тоа има смисла? Дали тоа одговори на вашето прашање?
>> На многу начини тоа го прави паралела она што го правиме со главните
кога имаме командната линија аргументи.
А програма како Цезар шифра, на пример, дека се потребни
командната линија аргументи не ќе бидат во можност да се направи нешто.
Тоа не би знаеле како да го криптирате ако не кажам дека она клуч за употреба
или ако не сте го кажам она што стринг си сакал да го криптирате.
Поттикнувајќи за влез, ова е местото каде имаме 2 различни механизми
за преземање на влез во од страна на корисникот, за преземање на информации од корисникот.
За Проблем Намести 1 видовме оваа GetInt, GetString, GetFloat начин
се прашува за влез, и дека се вика користејќи го стандардниот влезен поток.
Тоа е малку поинаква.
Тоа е нешто што можете да направите на едно време што е спротивно на
кога ќе се повика на програма, кога ќе ја стартувате програмата работи.
На командната линија аргументи сите се специфицирани кога ќе ја стартувате програмата работи.
Ние сме биле мешање на две од нив.
Кога ние ги користиме аргументи на функција, тоа е многу сличен на командната линија аргументи до главна.
Тоа е кога ќе се повика функцијата што треба да го каже
што точно треба со цел да ги извршува своите задачи.
Друга добра работа да се погледне и ќе ти дозволам да се погледне во него во слободното време,
и тоа беше покриена во квизот-е на овој поим на опсегот
и локални променливи наспроти глобални променливи.
Се обрне внимание на тоа.
>> Сега дека ние сме добивање на оваа други нешта,
во Недела 3 почнавме да зборуваме за пребарување и подредување.
Пребарување и подредување, барем во CS50,
е многу вовед во некои од теоретски делови на компјутерските науки.
Проблемот на пребарување, на проблемот на сортирање
се големи, канонски проблеми.
Како да не најдете одреден број во низа милијарди броеви?
Како да не најдете одредено име во внатрешноста на телефонот книга
кој е складирани на вашиот лаптоп?
И така ние се воведе на овој поим на асимптотска бегство пати
навистина да се измери колку долго, колку е тешко овие проблеми се,
колку долго тие се да се реши.
Во, верувам, 2011 во квизот има проблем кој мислам заслуги
покриваат многу брзо, што е овој, проблемот 12.
О, не, тоа е Омега.
>> Тука зборуваме за најбрз можен рок време
за одреден алгоритам а потоа најспоро можно кандидира време.
Ова Омега и О се навистина само кратенки.
Тие се нотационите кратенки за велејќи
колку брзо во најдобар можен случај ќе ни алгоритам рок,
и колку е бавно во најлош можен случај нашиот алгоритам ќе се кандидира?
Да направиме неколку од овие, а овие исто така беа опфатени
во краток за асимптотска нотација, која Силно препорачувам.
Џексон направи навистина добра работа.
Со бинарна пребарување, ние зборуваме за бинарни пребарување како алгоритам,
и ние обично зборуваат за тоа во однос на нејзината голема О
Што е голема О?
Што е најспоро можно бегство за време на бинарни пребарување?
[Студентски] N ²?
Затвори, претпоставувам слично на тоа.
Тоа е многу побрзо од тоа.
[Студентски] Бинарни? >> Да, бинарна пребарување.
[Студентски] Тоа е се најавите n.
Вклучи n, па она што го прави најавите n значи?
Тоа го половини секоја итерација.
Точно, така што во најмал можен случај,
велат ако имате решат низа
од еден милион броеви и бројот што го барате
или е првиот елемент во низа или последен елемент во низа.
Запомнете, бинарна пребарување алгоритам работи со гледање на средината елемент,
бидејќи ако тоа е натпревар кој го барате.
Ако е така, тогаш одлично, ќе ја најде.
>> Во најдобар можен случај, колку брзо го прави бинарни пребарување рок?
[Студентите] 1.
1, тоа е постојана време, голем О од 1. Да.
[Студентски] Имам едно прашање. Кога ќе се каже се логирате на n, што значи во однос на база 2, нели?
Да, тоа е друга работа.
Велиме најавите n и претпоставувам кога бев во средно училиште
Јас секогаш претпоставува дека се најавите беше база 10.
Да, така да, се најавите база 2 обично е она што ние го користите.
Повторно, да се вратам на бинарни пребарување, ако сте во потрага за или
елементот на самиот крај или елемент на самиот почеток,
затоа што започне во средината, а потоа ќе ги отфрлите
кое половина не ги исполнуваат критериумите што го барате,
и да одат во следната половина, а следниот половина, а следниот половина.
Ако сум во потрага за најголемиот елемент во милиони целобројна низа
Одам да го преполови најмногу најавите на 1 милион пати
пред конечно тестираат и да видат дека елемент Јас барам
е во најголемата или во највисок индекс на низата,
и дека ќе се најавите на n, се логирате на 1 милион пати.
>> Меур вид.
Дали вие момци се сеќавам на меурот вид алгоритам?
Кевин, може да ми даде брз повториме на она што се случи во балон вид алгоритам?
[Кевин] Во суштина тоа оди преку се што е во листата.
Тоа изгледа на првите две.
Ако првиот е поголем од вториот им свопови.
Потоа таа се споредува втората и третата, истото, свопови,
третата и четвртата, сите на патот надолу.
Поголем број ќе го следат до крајот.
И по меѓутоа многу рунди ќе завршиш.
Точно, така што Кевин каже е дека ние ќе се види поголема броеви
меур до крајот на низата.
На пример, дали ќе ти пречи одење нас преку овој пример, ако ова е нашата низа?
[Кевин] Ќе се 2 и 3.
3 е поголем од 2, па можете да ги трампа.
[Нејт Х] Право, па ние се разменуваат овие, и така ние се 2, 3, 6, 4 и 9.
[Кевин] Потоа ќе се споредат 3 и 6.
3 е помала од 6, па можете да ги оставиме,
и 6 и 4, ќе ги трампа, бидејќи 4 е помал од 6.
[Нејт Х] Право, па можам да добијам 2, 3, 4, 6, 9.
[Кевин] и 9 е поголем од 6, па можете да ја оставите.
И дека ќе се врати преку неа повторно.
>> [Нејт Х] Сум се направи во овој момент? >> [Кевин] бр
И зошто не сум јас направено во овој момент?
Поради тоа што изгледа како мојата низа е подредени. Јас барам во тоа.
[Кевин] Оди низ него повторно и бидете сигурни дека нема повеќе свопови
пред да може целосно да се запре.
Точно, така што треба да се оди преку и бидете сигурни дека не постојат свопови
дека можете да направите во овој момент.
Тоа беше навистина само среќа, како што рече, тоа што заврши
само ја да се направи 1 поминуваат низ и ние сме подредени.
Но, за да го направите тоа во општата случај ние всушност ќе треба да го направите ова одново и одново.
И всушност, ова е пример на најдобар можен случај,
како што видовме во проблемот.
Видовме дека на најдобар можен случај беше n.
Отидовме преку низа 1 време.
Што е најлошото можно случај за овој алгоритам?
[Кевин] N ².
И она што го прави тоа да изгледа? Што би низа изгледа дека ќе ја преземе n ² време?
[Кевин] [недоловим] подредени.
Точно, па ако имав низа 9, 7, 6, 5, 2,
прво на 9 би меур целиот пат до.
По 1 повторување би имале 7, 6, 5, 2, 9.
Тогаш 7 би меур нагоре, 6, 5, 2, 7, 9, и така натаму и така натаму.
>> Ние ќе мора да поминат низ целата низа n пати,
и ти всушност може да се добие малку попрецизно од овој
затоа што еднаш сме се пресели на 9 целиот пат до во својата последна можна положба
знаеме дека ние никогаш не треба да се споредат против тој елемент повторно.
Откако ќе почнете да жуборот на 7 до
знаеме дека ние може да го запре откако 7 е во право пред 9
бидејќи ние сме веќе во споредба со 9 до неа.
Ако го направите ова на паметен начин, тоа не е вистина, претпоставувам, дека многу време.
Вие нема да се споредат сите можни [недоловим] комбинации
секој пат кога ќе поминат низ секоја итерација.
Но, сепак, кога зборуваме за оваа горна граница велиме дека
што се гледа n ² споредби на целиот пат низ.
>> Да се ​​вратиме, и бидејќи ние сме почнуваат да се добие малку краток за време
Јас би рекол ти дефинитивно треба да поминат низ остатокот од оваа табела,
пополни сето тоа надвор.
Мислам на примери. Мислам на конкретни примери.
Тоа е навистина корисна и корисно да се направи.
Нацртај го ова.
Ова е вид на табела која како да одиш преку по компјутерски науки
навистина треба да започне да се знаат овие од срце.
Тоа се видови на прашања што се во интервјуа.
Овие се видови на работи кои се добри да се знае,
и мислам за оние работ случаи, навистина пронајдат начин да се размислува за
знаејќи дека за меур сортирање на најлош можен низа
да го решите со тоа е оној кој е во обратен редослед.
>> Покажувачи. Ајде да зборуваме малку за покажувачи.
Во последните неколку минути имаме тука
Знам дека ова е нешто заедно со датотека I / O која е прилично нова.
Кога зборуваме за покажувачи причина сакаме да зборуваме за покажувачи
е затоа што, еден, кога ние работиме во C
ние сме навистина во прилично ниско ниво во споредба со повеќето модерни програмски јазици.
Ние сме во можност да манипулира со променливи во меморијата,
дознаам каде тие всушност се наоѓа во рамките на нашите RAM меморија.
Откако ќе се качил на да се земе оперативен систем класи ќе видите
дека тоа е, пак, вид на апстракција.
Тоа не е всушност случај.
Имаме виртуелната меморија што се крие оние детали од нас.
>> Но, за сега може да се претпостави дека кога имате програма,
На пример, кога ќе почнат да оперираат вашиот Цезар шифра програма
Ќе се вратиш назад на мојот iPad навистина брзо-
дека на самиот почеток вашата програма, ако имате, да речеме,
4 гигабајти RAM меморија за вашиот лаптоп,
ќе се издвои овој дел, а ние ќе го наречеме овој RAM меморија.
И тоа почнува во место ние ќе се јавите 0,
и завршува на место кое ќе го наречеме 4 гигабајти.
Јас навистина не можам да пишувам. Човекот, кој е пробиени.
Кога вашата програма извршува
оперативниот систем длаби до RAM меморија,
и тоа одредува различни сегменти за различни делови од својата програма да живееме
Овде долу оваа област е вид на ничија земја.
Кога ќе одат нагоре малку подалеку тука
имаш всушност местото каде
кодот за вашата програма животи.
Дека вистинските бинарен код, што извршна датотека всушност добива вчитана во меморијата
кога ќе ја стартувате програмата, и тоа живее во кодот сегмент.
И како програма извршува процесор гледа овој код сегмент
да дознаам што е следната инструкција?
Што е следната линија на кодот што треба да се изврши?
>> Исто така има податочниот сегмент, а тоа е местото каде што тие низа константи
се чуваат дека сте биле користење.
А потоа подалеку таму е ова место наречено грамада.
Ние пристап меморија во таму со користење Примерок,
а потоа кон самиот врв на вашата програма
тука е оџакот,
и тоа е каде што ние сме во игра за повеќето од самиот почеток.
Ова не е да скала или ништо.
Многу од ова е вистинската пригодна машина зависни,
оперативен систем зависи, но ова е релативно како работите се chunked нагоре.
Кога ќе ја стартувате програмата и декларирате променлива наречена X-
Одам да се подготви друго поле долу, и ова ќе биде RAM меморија, како и.
И јас одам да се погледне.
Ќе се подготви остри линии за да се покаже ова е само мал дел од RAM меморија
и не сите на тоа како ние се подготви на врвот.
>> Ако Изјавувам целобројна променлива наречена x,
тогаш што всушност е мапирање
кои се чуваат во табелата на симболи од мојата програма
кој го поврзува името на X да овој регион на меморија што јас сум подготвен
токму тука помеѓу вертикална барови.
Ако имам линија код во мојата програма која се вели x = 7
процесор знае "О, добро, знам дека x животи во оваа локација во меморијата."
"Одам да се оди напред и да се напише 7 таму."
Како не го знам она што локацијата ова е во меморија?
Па, тоа е направено во компајлирате време.
Компајлерот се грижи за доделување каде што секоја од променливи се случува да одам
и создавање на специјални мапирање или подобро поврзување на точки
помеѓу симбол и каде тоа се случува, променлива името
и каде тоа се случува да живеат во меморија.
Но излегува дека ние всушност може да го пристап во нашите програми, како и.
Оваа добива важно кога ќе почнам да зборувам за некои од структури на податоци,
кој е концепт кој ние ќе се воведе подоцна.
>> Но, за сега, она што може да знам е дека може да се создаде покажувач на оваа локација, х.
На пример, јас може да се создаде покажувачот променлива.
Кога ќе се создаде покажувачот променлива ние ги користиме на ѕвезда нотација.
Во овој случај, тоа вели, ќе одам да се создаде покажувач на инт.
Тоа е еден вид како и секој друг.
Ние го даде променлива како y,
и потоа ставете ја еднаква на адреса, на адреса.
Во овој случај, ние може да се постави y да се укаже x
со преземање на адреса на x, што правиме со овој симболот,
а потоа ние во собата y да се укаже на тоа.
Што е ова во суштина не е ако ја гледаме нашата RAM меморија
ова создава посебна променлива.
Тоа се случува да го наречеме y,
и кога оваа линија на кодот се извршува
тоа е всушност се случува да се создаде малку покажувачот кои ние обично се подготви како стрела,
и го поставува y до точка на x.
Да.
[Студентски] Ако x е веќе покажувач, ќе ви само го прават
int * y = x наместо на симболот?
Да.
Ако x е веќе покажувач, а потоа можете да го поставите 2 совети еднакви едни на други,
во кој случај y не би укажуваат на x,
но за тоа ќе се укаже на она што x е да се покажува.
За жал, ние сме надвор од времето.
>> Што би рекол во овој момент, можеме да зборуваме за овој пат,
но јас би рекол да почне да работи преку овој проблем, # 14.
Можете да го видите тука е веќе малку пополнети за вас овде.
Можете да видите дека кога ќе прогласат 2 покажувачи, int * x и * y,
и се напомене дека укажува на * до променливата е нешто што е направено минатата година.
Излезе дека ова е слично на она што го правиме оваа година.
Тоа не е важно каде ќе напише * кога сте за прогласување на покажувачот.
Но ние имаме напишано * до видот
затоа што тоа го прави многу јасно дека сте прогласување на покажувачот променлива.
Можете да видите дека прогласување на 2 совети ни дава 2 кутии.
Еве кога ќе го поставите x еднаква Примерок
Што е ова велејќи дека се одвојуваат меморија во грамада.
Оваа мала кутија токму тука, овој круг, се наоѓа на грамада.
X е укажува на тоа.
Имајте на ум дека у се уште не укажува на ништо.
За да добиете меморија за чување на број 42 во х
ние ќе го користите она што нотација?
[Студентски] * x = 42.
Точно, * x = 42.
Тоа значи следат на стрелката и фрли 42 во таму.
Еве каде ние во собата y и x имаме y укажува на x.
Повторно, ова е исто како она што Кевин вели каде што ние во собата y еднаква на x.
Y не се укажува на x.
Напротив, тоа е укажува на она што x е да се покажува како добро.
>> А потоа конечно во оваа последна кутија има 2 можни работи што можеше да стори.
Една од нив е што може да се каже * x = 13.
Од друга работа е што може да се каже-Алекс, дали знаете што би можеле да го направите тука?
Може да се каже * x = 13 или-
[Студентски] Може да се каже int сеедно.
[Нејт Х] Ако ова се нарекува int променлива ние би можеле да го направите тоа.
Ние, исто така може да се каже * y = 13, бидејќи тие се двете укажува на истото место,
па ние може да го користи или променлива да одам таму.
Да. >> [Студентски] Што ќе изгледа како ако речеме int x е 13?
Тоа ќе биде декларативна нова променлива наречена X, кој не би сакал да работиш.
Би имале судир, бидејќи ние објави X да биде покажувачот се тука.
[Студентски] Ако имавме само таа изјава по себе она што ќе изгледа како во однос на кругот?
Ако имавме x = 13, тогаш би имале кутија, и наместо да стрела
доаѓаат надвор од кутијата би го нацрта тоа што само 13.
[Студентски] Во кутија. Во ред.
>> Ви благодариме за гледање, и со среќа на одбивање 0.
[CS50.TV]