1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Дел 4] [Помалку Комфорни] 2 00:00:02,000 --> 00:00:04,000 [Нејт Hardison] [Универзитетот Харвард] 3 00:00:04,000 --> 00:00:07,000 [Ова е CS50.] [CS50.TV] 4 00:00:07,000 --> 00:00:10,000 >> Добро, добредојде назад кон секција. 5 00:00:10,000 --> 00:00:13,000 Во делот оваа недела ние ќе направи неколку работи. 6 00:00:13,000 --> 00:00:17,000 Одиме прво да повториме Проблем Постави 2, 7 00:00:17,000 --> 00:00:20,000 кој е Цезар и Vigenère проблем во собата. 8 00:00:20,000 --> 00:00:23,000 А потоа ние ќе се нурне во квиз 0 преглед 9 00:00:23,000 --> 00:00:26,000 и да потрошат малку време recapping она што го зборуваше за 10 00:00:26,000 --> 00:00:30,000 во секоја од предавања досега, и ние исто така ќе направи неколку проблеми 11 00:00:30,000 --> 00:00:32,000 од квизови претходната година. 12 00:00:32,000 --> 00:00:36,000 На тој начин вие момци имаат добар начин да се подготват за тоа. 13 00:00:36,000 --> 00:00:40,000 >> За почеток, јас сум стартува неколку добри решенија 14 00:00:40,000 --> 00:00:45,000 за претходниот проблем во собата, проблемот Намести 2, во овој простор. 15 00:00:45,000 --> 00:00:48,000 Ако вие момци сите погоди овој линк, 16 00:00:48,000 --> 00:00:53,000 и ако кликнете моето име и кликнете на мојот прв ревизија 17 00:00:53,000 --> 00:00:56,000 ќе видите caesar.c, што е токму она што го барам во. 18 00:00:56,000 --> 00:01:00,000 Ајде да зборуваме за ова навистина брзо. 19 00:01:00,000 --> 00:01:02,000 Ова е само еден примерок решение. 20 00:01:02,000 --> 00:01:05,000 Ова не значи дека тоа е совршено решение. 21 00:01:05,000 --> 00:01:08,000 Постојат многу различни начини да се напише ова, 22 00:01:08,000 --> 00:01:10,000 но постојат неколку работи кои сакав да се потенцира 23 00:01:10,000 --> 00:01:13,000 што видов како ми беше степенување, вообичаени грешки што мислам 24 00:01:13,000 --> 00:01:18,000 ова решение не е многу добра работа за ракување. 25 00:01:18,000 --> 00:01:22,000 >> Првиот е да се има некој вид на насловот коментар на врвот. 26 00:01:22,000 --> 00:01:25,000 На линии 1 до 7 гледате детали, 27 00:01:25,000 --> 00:01:28,000 што точно оваа програма прави. 28 00:01:28,000 --> 00:01:32,000 Еден добар стандардна практика кога сте пишување C код 29 00:01:32,000 --> 00:01:35,000 без разлика дали вашата програма е содржан во една датотека или 30 00:01:35,000 --> 00:01:38,000 без разлика дали е поделена во текот на повеќе датотеки е да се има некој вид на 31 00:01:38,000 --> 00:01:40,000 Ориентирање коментар на врвот. 32 00:01:40,000 --> 00:01:43,000 Ова е исто така и за луѓето кои одат надвор и да пишувам кодот во реалниот свет. 33 00:01:43,000 --> 00:01:47,000 Ова е местото каде што тие ќе се стави информации за авторските права. 34 00:01:47,000 --> 00:01:50,000 Подолу е листа на # вклучува. 35 00:01:50,000 --> 00:01:55,000 On-line 16 има овој # define, која ќе се врати во само малку. 36 00:01:55,000 --> 00:01:59,000 А потоа еднаш функцијата започнува, откако главната започнува, 37 00:01:59,000 --> 00:02:03,000 затоа што оваа програма е сите се содржани во една функција 38 00:02:03,000 --> 00:02:09,000 Самиот првото нешто што се случува и ова е многу идиоматичен и типична за програмата C 39 00:02:09,000 --> 00:02:14,000 кој ги зема во командната линија аргументи-е тоа што веднаш ги проверува 40 00:02:14,000 --> 00:02:18,000 >> за аргумент брои, argc. 41 00:02:18,000 --> 00:02:24,000 Токму тука можеме да видиме дека оваа програма се очекува 2 аргументи точно. 42 00:02:24,000 --> 00:02:27,000 Запомнете тука е дека првиот аргумент тоа е еден посебен 43 00:02:27,000 --> 00:02:29,000 тоа е секогаш името на програмата и тоа е се кандидира, 44 00:02:29,000 --> 00:02:31,000 името на извршната датотека. 45 00:02:31,000 --> 00:02:36,000 И така што тоа не е тоа спречува корисникот водење на програма 46 00:02:36,000 --> 00:02:42,000 со повеќе или помалку аргументи. 47 00:02:42,000 --> 00:02:44,000 Причината сакаме да провериш за ова веднаш е затоа што 48 00:02:44,000 --> 00:02:52,000 ние, всушност, не може да пристапите до оваа argv низа тука сигурно 49 00:02:52,000 --> 00:02:55,000 додека ние Сум проверил за да видите колку е голема тоа е. 50 00:02:55,000 --> 00:02:58,000 >> Една од заедничките грешки видов беше народ веднаш ќе одат во 51 00:02:58,000 --> 00:03:01,000 и грабне avg [1]. 52 00:03:01,000 --> 00:03:06,000 Тие ќе го имате клучниот аргумент од низа и прават една да ми провери на неа, 53 00:03:06,000 --> 00:03:11,000 а потоа тие ќе се направи тестот за argc како и следниот тест, 54 00:03:11,000 --> 00:03:16,000 дали или не на првиот аргумент беше навистина целобројна во исто време, 55 00:03:16,000 --> 00:03:20,000 и тоа не функционира затоа што во случај дека не постојат аргументи доставени 56 00:03:20,000 --> 00:03:26,000 ќе се грабање аргументот дека не постои или се обидуваат да го зграби она што не е таму. 57 00:03:26,000 --> 00:03:29,000 >> Другата голема работа што треба да се забележи е дека 58 00:03:29,000 --> 00:03:32,000 вие секогаш сакате да се печати некој вид на корисни порака за грешка 59 00:03:32,000 --> 00:03:34,000 на корисникот да се ориентираат нив. 60 00:03:34,000 --> 00:03:37,000 Сигурен сум дека сите го стартувате програми каде што одеднаш ќе блокира, 61 00:03:37,000 --> 00:03:41,000 и ќе се добие оваа смешна малку дијалог што се појавува и вели 62 00:03:41,000 --> 00:03:44,000 нешто ужасно криптичната а можеби и ти дава грешка во кодот или нешто слично 63 00:03:44,000 --> 00:03:47,000 дека не прави никаква смисла. 64 00:03:47,000 --> 00:03:50,000 Ова е местото каде што навистина сакате да се обезбеди нешто корисно 65 00:03:50,000 --> 00:03:54,000 и насочени кон корисникот, така што кога ќе го стартувате тие одат "Ох", лицето дланка. 66 00:03:54,000 --> 00:03:58,000 "Знам точно што да правам. Знам како да го надминете овој." 67 00:03:58,000 --> 00:04:01,000 >> Ако не печати порака, тогаш ќе се заокружи всушност 68 00:04:01,000 --> 00:04:04,000 напуштање на корисникот да се оди испита вашиот изворен код 69 00:04:04,000 --> 00:04:07,000 да дознаам што не беше во ред. 70 00:04:07,000 --> 00:04:11,000 Исто така постојат и некои времиња кои ќе користат различни грешка кодови. 71 00:04:11,000 --> 00:04:14,000 Еве ние само се користи еден да се каже дека беше грешка, 72 00:04:14,000 --> 00:04:16,000 имаше грешка, имаше грешка. 73 00:04:16,000 --> 00:04:20,000 Поголеми програми, често програми кои се нарекуваат со други програми, 74 00:04:20,000 --> 00:04:25,000 ќе се врати некој вид на посебни грешка кодови во различни сценарија 75 00:04:25,000 --> 00:04:28,000 да програмски комуницираат она што би поинаку 76 00:04:28,000 --> 00:04:32,000 само користење убаво Македонски порака за. 77 00:04:32,000 --> 00:04:35,000 Кул. 78 00:04:35,000 --> 00:04:37,000 Како работиме долу, можете да видите ние се повлече клучот. 79 00:04:37,000 --> 00:04:40,000 Ние тест за да видите ако клучот одговара. 80 00:04:40,000 --> 00:04:42,000 Ние се добие порака од корисникот. 81 00:04:42,000 --> 00:04:46,000 Причината поради која го направи тоа во овој направите додека јамка-и ова е нешто што ќе се покрие 82 00:04:46,000 --> 00:04:50,000 во малку-но излегува дека ако го напишете контрола D 83 00:04:50,000 --> 00:04:54,000 кога ќе се добие дека GetString брза на терминалот 84 00:04:54,000 --> 00:04:59,000 она што всушност не е таа праќа специјален карактер 85 00:04:59,000 --> 00:05:01,000 на програмата. 86 00:05:01,000 --> 00:05:05,000 Таа се вика на ELF или на крајот на датотеката карактер. 87 00:05:05,000 --> 00:05:08,000 И во тој случај, нашата порака стринг ќе биде нула, 88 00:05:08,000 --> 00:05:14,000 па ова не е нешто што проверуваат во проблемот постави себе. 89 00:05:14,000 --> 00:05:17,000 >> Но, како да одиме на, сега дека ние сме отворени да се зборува за покажувачи 90 00:05:17,000 --> 00:05:21,000 и динамична алокација на меморија на грамада, 91 00:05:21,000 --> 00:05:25,000 проверка за нула кога имаш функција која може 92 00:05:25,000 --> 00:05:30,000 врати null како вредност е нешто што ќе сакате да се добие во навика да прави. 93 00:05:30,000 --> 00:05:33,000 Ова е овде пред се за илустрација. 94 00:05:33,000 --> 00:05:36,000 Но, кога ќе се направи видите GetString во иднина, 95 00:05:36,000 --> 00:05:41,000 па од Проблем Намести 4 па натаму, ќе сакате да се задржи ова на ум. 96 00:05:41,000 --> 00:05:44,000 Повторно, ова не е прашање за проблемот Намести 3 или бидејќи ние не се опфатени уште. 97 00:05:44,000 --> 00:05:53,000 Конечно, ние се да овој дел, каде што дојде до главниот енкрипција јамка, 98 00:05:53,000 --> 00:05:57,000 и постојат неколку работи се случува тука. 99 00:05:57,000 --> 00:06:02,000 Прво, ние iterate во текот на целата порака стринг себе. 100 00:06:02,000 --> 00:06:07,000 Еве ние се чуваат на strlen повик во состојба, 101 00:06:07,000 --> 00:06:12,000 што голем број од вас имаат посочи не е одличен начин да се оди. 102 00:06:12,000 --> 00:06:15,000 Излегува во овој случај тоа не е исто така голем, 103 00:06:15,000 --> 00:06:20,000 делумно затоа што ние сме менување на содржината на самата порака 104 00:06:20,000 --> 00:06:27,000 внатре во за телефонска линија, па ако имаме некоја порака која е 10 карактери, 105 00:06:27,000 --> 00:06:32,000 прв пат ќе го започнеме дека за јамка strlen ќе се вратат што? 106 00:06:32,000 --> 00:06:35,000 10. 107 00:06:35,000 --> 00:06:40,000 >> Но, ако тогаш ние менувате порака, велат дека ние ги менувате своите 5 карактер, 108 00:06:40,000 --> 00:06:46,000 и ние фрли во \ 0 лик во 5 позиција, 109 00:06:46,000 --> 00:06:49,000 на следните повторување strlen (порака) нема да се врати она што го правеше 110 00:06:49,000 --> 00:06:52,000 прв пат ние потврди, 111 00:06:52,000 --> 00:06:56,000 но наместо тоа ќе се вратат 5, бидејќи ние фрли во таа нула терминатор, 112 00:06:56,000 --> 00:06:59,000 и должината на стрингот е дефиниран 113 00:06:59,000 --> 00:07:03,000 од страна на позицијата на која \ 0. 114 00:07:03,000 --> 00:07:09,000 Во овој случај, ова е одличен начин да се оди затоа што ние сме го модифицира во место. 115 00:07:09,000 --> 00:07:13,000 Но ќе забележите дека ова е всушност изненадувачки едноставно да го криптирате 116 00:07:13,000 --> 00:07:16,000 ако може да се добијат по математика точни. 117 00:07:16,000 --> 00:07:19,000 Сите тоа е потребно е да се провери дали е или не на писмото што барате 118 00:07:19,000 --> 00:07:21,000 е големи или мали букви. 119 00:07:21,000 --> 00:07:24,000 >> Причината ние само треба да се провери за што и ние не треба да се провери за 120 00:07:24,000 --> 00:07:27,000 на е алфа случај е затоа што 121 00:07:27,000 --> 00:07:30,000 ако еден лик е големи или ако тоа е со мали букви 122 00:07:30,000 --> 00:07:33,000 тогаш тоа е дефинитивно буква, 123 00:07:33,000 --> 00:07:38,000 бидејќи ние немаме големи и мали бројки. 124 00:07:38,000 --> 00:07:41,000 Од друга работа што правиме и ова е малку незгодно- 125 00:07:41,000 --> 00:07:45,000 е ние пат е изменета на стандардните Цезар шифра формула 126 00:07:45,000 --> 00:07:49,000 дека дадовме во проблемот сет спецификација. 127 00:07:49,000 --> 00:07:52,000 Она што е различно тука е дека ние одземе 128 00:07:52,000 --> 00:07:58,000 во големи капиталот А, а потоа додаде капитал 129 00:07:58,000 --> 00:08:02,000 се врати во на крајот. 130 00:08:02,000 --> 00:08:05,000 >> Знам неколку ќе го направи тоа во вашиот код. 131 00:08:05,000 --> 00:08:09,000 Дали некој од вас го направите ова во вашата поднесоци? 132 00:08:09,000 --> 00:08:13,000 Си направил ова. Може да се објасни она што оваа не, Sahb? 133 00:08:13,000 --> 00:08:18,000 Со одземање тоа надвор, бидејќи си направил мод веднаш по неа, 134 00:08:18,000 --> 00:08:21,000 ќе мора да го извади, па на тој начин ќе добиете [кашлање] позиција. 135 00:08:21,000 --> 00:08:25,000 А потоа од страна додавајќи дека подоцна ќе се префрли во текот на еден што си сакал. 136 00:08:25,000 --> 00:08:27,000 Да, точно. 137 00:08:27,000 --> 00:08:32,000 Што Sahb рече беше дека кога ќе сакате да го додадете 138 00:08:32,000 --> 00:08:36,000 нашата порака и нашите клучни заедно 139 00:08:36,000 --> 00:08:42,000 а потоа МО дека МО дека со NUM_LETTERS, 140 00:08:42,000 --> 00:08:50,000 ако не скала нашата порака во соодветните 0-25 спектар прво, 141 00:08:50,000 --> 00:08:54,000 тогаш ние би можеле да завршат добивање на навистина чуден број 142 00:08:54,000 --> 00:08:59,000 бидејќи вредностите кои ние барате кога ќе погледнеме во пораката [i], 143 00:08:59,000 --> 00:09:03,000 кога ќе погледнеме во ith карактер на нашата обична текстуална порака, 144 00:09:03,000 --> 00:09:08,000 е вредност некаде во овој 65-122 опсег 145 00:09:08,000 --> 00:09:13,000 врз основа на ASCII вредности за големи А преку мали z. 146 00:09:13,000 --> 00:09:18,000 И така кога ја МО од 26 или од NUM_LETTERS, 147 00:09:18,000 --> 00:09:23,000 бидејќи тоа беше нашата # define во горниот десен агол се тука, 148 00:09:23,000 --> 00:09:28,000 тоа ќе ни даде вредност, која е во 0-25 спектар, 149 00:09:28,000 --> 00:09:30,000 и ние треба начин да потоа скала што се врати 150 00:09:30,000 --> 00:09:32,000 и да го во соодветните ASCII опсег. 151 00:09:32,000 --> 00:09:36,000 Најлесен начин да го направите тоа е само скала се надолу 152 00:09:36,000 --> 00:09:39,000 во 0-25 спектар да започне со тоа, 153 00:09:39,000 --> 00:09:43,000 а потоа се префрлат се врати на крајот. 154 00:09:43,000 --> 00:09:46,000 >> Уште една честа грешка дека го видов луѓе работат во е дека 155 00:09:46,000 --> 00:09:50,000 ако не всушност го направите ова скалирање веднаш 156 00:09:50,000 --> 00:09:53,000 и ќе додадам пораката и клучните заедно и ќе им додадете, да речеме, 157 00:09:53,000 --> 00:09:58,000 во знак променлива, проблем со тоа 158 00:09:58,000 --> 00:10:01,000 е од пораката [i] е релативно голем број за да започнете со- 159 00:10:01,000 --> 00:10:05,000 се сеќавам тоа е најмалку 65 ако тоа е голема буква- 160 00:10:05,000 --> 00:10:09,000 ако имате голем клуч, да речеме, нешто како 100, 161 00:10:09,000 --> 00:10:13,000 и ако додадете оние 2 заедно во потпишан знак си оди за да се добие претекување. 162 00:10:13,000 --> 00:10:17,000 Ви се случува да се добие вредност, која е поголема од 127, 163 00:10:17,000 --> 00:10:22,000 која е најголемата вредност што char променлива може да се одржи. 164 00:10:22,000 --> 00:10:26,000 Повторно, тоа е зошто вие би сакале да се направи тој вид на работа да почне. 165 00:10:26,000 --> 00:10:29,000 Некои луѓе доби околу тој случај со правење на ако друг и тестирање 166 00:10:29,000 --> 00:10:33,000 да се види дали тоа ќе претекување пред тоа го прават, 167 00:10:33,000 --> 00:10:36,000 но на овој начин добива околу тоа. 168 00:10:36,000 --> 00:10:40,000 А потоа во ова решение се отпечатени на цела низа на самиот крај. 169 00:10:40,000 --> 00:10:45,000 Други луѓе отпечатени лик во исто време. И двете се страшни. 170 00:10:45,000 --> 00:10:51,000 Во овој момент, дали вие момци имате било какви прашања, било какви коментари за ова? 171 00:10:51,000 --> 00:10:56,000 Работите ви се допаѓа, работите не ви се допаѓа? 172 00:10:56,000 --> 00:10:58,000 >> Имав прашање. 173 00:10:58,000 --> 00:11:01,000 Можеби и јас го пропушти во текот на вашето објаснување, но како го прави ова програма 174 00:11:01,000 --> 00:11:07,000 прескокнете празни места за поврзување клучот за должината на текстот? 175 00:11:07,000 --> 00:11:10,000 Ова е само Цезар број. >> О, извинете, да. 176 00:11:10,000 --> 00:11:13,000 Да, ние ќе се види тоа. 177 00:11:13,000 --> 00:11:16,000 Во шифра Цезар добивме околу тоа, бидејќи 178 00:11:16,000 --> 00:11:18,000 ние само flipped карактери. 179 00:11:18,000 --> 00:11:27,000 Ние само ги ротира, ако тие беа големи или мали букви. 180 00:11:27,000 --> 00:11:32,000 Вие момци чувство прилично добро за ова? 181 00:11:32,000 --> 00:11:34,000 Слободно можете да ја копирате на оваа дома, го земам, 182 00:11:34,000 --> 00:11:37,000 Спореди со што напиша вас момци. 183 00:11:37,000 --> 00:11:42,000 Дефинитивно се чувствуваат слободни да испрати прашања во врска со него. 184 00:11:42,000 --> 00:11:46,000 И повторно, сфати дека целта тука со вашиот проблем поставува 185 00:11:46,000 --> 00:11:50,000 не е да ви момци за да напишете добра код за вашиот проблем комплети. 186 00:11:50,000 --> 00:11:57,000 Тоа е учење. Да. 187 00:11:57,000 --> 00:12:01,000 >> Назад кон направите додека јамка, ако тоа е еднакво на нула, 188 00:12:01,000 --> 00:12:06,000 па нула само значи ништо, тие само притиснете ентер? 189 00:12:06,000 --> 00:12:12,000 Null е посебен покажувач вредност, 190 00:12:12,000 --> 00:12:17,000 и ние ги користиме нула кога сакаме да се каже 191 00:12:17,000 --> 00:12:23,000 имаме покажувачот променлива која е укажува на ништо. 192 00:12:23,000 --> 00:12:28,000 И така обично тоа значи дека оваа променлива, оваа порака променлива 193 00:12:28,000 --> 00:12:35,000 е празен, и тука, бидејќи ние сме со користење на CS50 специјалниот стринг тип, 194 00:12:35,000 --> 00:12:37,000 што е CS50 стринг тип? 195 00:12:37,000 --> 00:12:42,000 Дали сте виделе што е тоа кога Дејвид влечат назад хаубата во лекција? 196 00:12:42,000 --> 00:12:44,000 Тоа е фанки-тоа е покажувач, нели? 197 00:12:44,000 --> 00:12:48,000 Океј, да. >> Тоа е знак *. 198 00:12:48,000 --> 00:12:52,000 И така навистина можеме да го замени овој 199 00:12:52,000 --> 00:12:56,000 овде со char * пораката, 200 00:12:56,000 --> 00:13:04,000 и така GetString функција, ако не успешно се добие стринг од корисникот, 201 00:13:04,000 --> 00:13:08,000 тоа не може да се интерпретира стринг, и еден случај во кој не може да се интерпретира низа 202 00:13:08,000 --> 00:13:11,000 е ако корисникот типови на крајот на датотеката карактер, контролата D, 203 00:13:11,000 --> 00:13:17,000 која не е нешто што обично го прават, но ако тоа се случи 204 00:13:17,000 --> 00:13:20,000 тогаш функцијата ќе се врати оваа null вредност како начин да се каже 205 00:13:20,000 --> 00:13:23,000 "Еј, јас не добие стринг." 206 00:13:23,000 --> 00:13:27,000 Што ќе се случи ако не го стави пораката = нула, 207 00:13:27,000 --> 00:13:30,000 што е нешто што не сме го правеле уште? 208 00:13:30,000 --> 00:13:32,000 Зошто тоа би било проблем тука? 209 00:13:32,000 --> 00:13:38,000 Бидејќи знам дека ние разговаравме малку во предавање за меморија протекување. 210 00:13:38,000 --> 00:13:42,000 Да, ајде да го стори тоа и да видиме што се случува. 211 00:13:42,000 --> 00:13:44,000 >> Прашање Василиј беше она што се случува ако не всушност имаат 212 00:13:44,000 --> 00:13:48,000 оваа порака = NULL тест? 213 00:13:48,000 --> 00:13:51,000 Ајде да дојдете до врвот. 214 00:13:51,000 --> 00:13:53,000 Вие момци можат да коментираат ова. 215 00:13:53,000 --> 00:13:55,000 Всушност, јас ќе го зачувате во ревизија. 216 00:13:55,000 --> 00:13:58,000 Ова ќе биде верзии 3. 217 00:13:58,000 --> 00:14:02,000 Што ќе треба да направите за да ја извршите оваа програма е ќе мора да кликнете на оваа опрема икона се тука, 218 00:14:02,000 --> 00:14:04,000 и ќе треба да додадете аргумент за тоа. 219 00:14:04,000 --> 00:14:10,000 Ќе мора да го даде клучниот аргумент, бидејќи ние сакаме да помине во командата. 220 00:14:10,000 --> 00:14:13,000 Еве јас ќе одам да го даде бројот 3. Ми се допаѓа 3. 221 00:14:13,000 --> 00:14:19,000 Сега зумирање назад, водење на програма. 222 00:14:19,000 --> 00:14:24,000 Тоа е трчање, составувањето, градење. 223 00:14:24,000 --> 00:14:27,000 Еве ќе одиме. Тоа е чекаат да бидат прашани. 224 00:14:27,000 --> 00:14:33,000 Ако јас напишете нешто како здраво-каде што одиме? 225 00:14:33,000 --> 00:14:38,000 О, мојата програма требаше премногу време да се кандидира. Бев jawing за предолго. 226 00:14:38,000 --> 00:14:40,000 Еве оди. 227 00:14:40,000 --> 00:14:43,000 Сега јас напишете здраво. 228 00:14:43,000 --> 00:14:46,000 Гледаме дека енкриптира соодветно. 229 00:14:46,000 --> 00:14:52,000 Сега она што се случува ако правиме брза GetString да се врати нула? 230 00:14:52,000 --> 00:14:57,000 Запомнете, реков дека ние го сторивме тоа со притискање на контрола D во исто време. 231 00:14:57,000 --> 00:14:59,000 Ќе дојдете до тука. Ние ќе се кандидира повторно. 232 00:14:59,000 --> 00:15:01,000 Зграда. Таму оди. 233 00:15:01,000 --> 00:15:04,000 Сега кога ќе се погоди контрола D 234 00:15:04,000 --> 00:15:12,000 Ја добив оваа линија во која се вели opt/sandbox50/bin/run.sh, Сегментација на вина. 235 00:15:12,000 --> 00:15:15,000 Дали вие момци се гледа дека и пред тоа? 236 00:15:15,000 --> 00:15:17,000 >> [Студентски] Зошто нема->> Извини? 237 00:15:17,000 --> 00:15:20,000 [Студентски] Зошто нема основни депонија во овој случај? 238 00:15:20,000 --> 00:15:26,000 Основните депонија е-прашањето е зошто нема никакви основни депонија тука? 239 00:15:26,000 --> 00:15:29,000 Прашањето е дека може да има, но јадрото депонија е датотека 240 00:15:29,000 --> 00:15:31,000 кој добива зачувани на хард дискот. 241 00:15:31,000 --> 00:15:34,000 Во овој случај ние сме оневозможени основни депонии 242 00:15:34,000 --> 00:15:37,000 во бегство сервер, така што ние не сме луѓе секунда Разлом 243 00:15:37,000 --> 00:15:40,000 и градење тони основни депонии. 244 00:15:40,000 --> 00:15:46,000 Но, може да се добие една. 245 00:15:46,000 --> 00:15:48,000 Основни депонии се на вид на нешто што често може да се оневозможи, 246 00:15:48,000 --> 00:15:52,000 а понекогаш правиш. 247 00:15:52,000 --> 00:15:55,000 Сегментација грешка, да одговори на вашето прашање, Василиј, 248 00:15:55,000 --> 00:16:00,000 е велејќи дека ние обиделе да пристапите покажувач 249 00:16:00,000 --> 00:16:05,000 што не требаше да укаже на нешто. 250 00:16:05,000 --> 00:16:09,000 Запомни Binky во видеото кога Binky се обидува да 251 00:16:09,000 --> 00:16:12,000 одат пристап покажувач тоа не е укажува на нешто? 252 00:16:12,000 --> 00:16:16,000 Во овој случај Претпоставувам технички покажувачот е да се покажува кон нешто. 253 00:16:16,000 --> 00:16:20,000 Тоа укажува на нула, која е технички 0, 254 00:16:20,000 --> 00:16:25,000 но тоа е дефиниран да биде во еден сегмент кој не е достапен 255 00:16:25,000 --> 00:16:28,000 со вашата програма, па ќе добиете сегментација грешка 256 00:16:28,000 --> 00:16:31,000 затоа што не си пристап меморија, која е во валидна сегмент 257 00:16:31,000 --> 00:16:38,000 како грамада сегмент или стек сегментот или податоците сегмент. 258 00:16:38,000 --> 00:16:40,000 Кул. 259 00:16:40,000 --> 00:16:48,000 Повеќе прашања во врска со Цезар? 260 00:16:48,000 --> 00:16:51,000 >> Ајде да се движат натаму. Да ги погледнеме на верзии 2 навистина брзо. 261 00:16:51,000 --> 00:17:00,000 Тоа е Vigenère. 262 00:17:00,000 --> 00:17:04,000 Тука во Vigenère 263 00:17:04,000 --> 00:17:06,000 ние ќе одиме во текот на овој еден прилично брзо, бидејќи, повторно, 264 00:17:06,000 --> 00:17:10,000 Vigenère и Цезар се прилично слични. 265 00:17:10,000 --> 00:17:12,000 Насловот коментар е пред, 266 00:17:12,000 --> 00:17:17,000 # Define е пред да се избегне со користење на овие магија броеви. 267 00:17:17,000 --> 00:17:21,000 На убаво нешто е да се каже сакавме да се преселат во 268 00:17:21,000 --> 00:17:23,000 различна азбука или нешто слично. 269 00:17:23,000 --> 00:17:26,000 Наместо да одат рачно го промени сето на 26 во кодот 270 00:17:26,000 --> 00:17:30,000 ние би можеле да го промените ова на 27 или пуштете го надолу 271 00:17:30,000 --> 00:17:34,000 ако бевме користење на различни азбуки, на различни јазици. 272 00:17:34,000 --> 00:17:38,000 Повторно, ние го добивме ова проверка на аргумент брои, 273 00:17:38,000 --> 00:17:42,000 и навистина речиси може да се земе ова како шаблон. 274 00:17:42,000 --> 00:17:46,000 Доста секоја програма што пишува треба да има- 275 00:17:46,000 --> 00:17:50,000 ако е потребно командната линија аргументи кои некои низа на линии 276 00:17:50,000 --> 00:17:55,000 која гласи вака уште на самиот почеток. 277 00:17:55,000 --> 00:17:59,000 Тоа е една од првите разумност тестови сакате да го направите. 278 00:17:59,000 --> 00:18:03,000 >> Еве она што го правевме беше ние се сигурни дека 279 00:18:03,000 --> 00:18:06,000 клучниот збор е валидна, и тоа беше втората чек што ние го сторивме. 280 00:18:06,000 --> 00:18:11,000 Забележите еднаш дека ние се одделивме ова од argc и 2. 281 00:18:11,000 --> 00:18:14,000 Забележете дека во овој случај едно нешто што ние требаше да направи беше наместо 282 00:18:14,000 --> 00:18:18,000 на користење на на i сакавме да се провери целата низа, 283 00:18:18,000 --> 00:18:21,000 а со цел да се направи тоа навистина треба да се оди карактер по карактер 284 00:18:21,000 --> 00:18:23,000 во текот на стрингот. 285 00:18:23,000 --> 00:18:29,000 Нема добар начин да се јавите нешто на него 286 00:18:29,000 --> 00:18:31,000 бидејќи дури, на пример, да јас ќе се врати 0 287 00:18:31,000 --> 00:18:37,000 ако не може да се интерпретира цел број, така што дури и не работат. 288 00:18:37,000 --> 00:18:42,000 Повторно, убаво порака раскажување на корисникот токму она што се случило. 289 00:18:42,000 --> 00:18:45,000 Тогаш овде, повторно, ние исто така се справи со случајот каде 290 00:18:45,000 --> 00:18:50,000 корисникот видови во контрола D случаен карактер. 291 00:18:50,000 --> 00:18:54,000 >> А потоа Шарлот имаше прашање претходно за тоа како успееме да ја прескокнете простори 292 00:18:54,000 --> 00:18:57,000 во нашата низа тука. 293 00:18:57,000 --> 00:19:00,000 Ова е вид на слични на она што го правевме со Myspace програма 294 00:19:00,000 --> 00:19:04,000 дека ние го сторивме во делот, и начинот на кој тоа работи 295 00:19:04,000 --> 00:19:08,000 е дека ние следи бројот на букви кои би видел. 296 00:19:08,000 --> 00:19:13,000 Како што одеше преку порака стринг, како што одеше над карактер по карактер, 297 00:19:13,000 --> 00:19:16,000 ние следи индексот како дел од нашата за телефонска линија, а потоа ние, исто така, следи 298 00:19:16,000 --> 00:19:21,000 бројот на букви, па не специјални карактери, не-цифри, не-белиот простор 299 00:19:21,000 --> 00:19:27,000 дека ние ќе се гледа во посебна променлива. 300 00:19:27,000 --> 00:19:33,000 И тогаш ова решение модифицира клучот 301 00:19:33,000 --> 00:19:41,000 да се добие вистински клуч цел број, и го прави тоа во лет, 302 00:19:41,000 --> 00:19:47,000 право пред тоа, тогаш оди да го криптирате вистински порака карактер. 303 00:19:47,000 --> 00:19:50,000 Постојат некои решенија, кои биле совршено одлично премногу 304 00:19:50,000 --> 00:19:58,000 кој ќе се измени нагоре кога се тестира за валидноста на клучот е. 305 00:19:58,000 --> 00:20:01,000 Во прилог на што си сигурен дека ликот и клучни зборови 306 00:20:01,000 --> 00:20:05,000 беше една буква, исто така, покажа дека во цел број 307 00:20:05,000 --> 00:20:13,000 во 0-25 спектар на тогаш прескокнете морале да го направите тоа подоцна во ова за јамка. 308 00:20:13,000 --> 00:20:18,000 Повторно, ќе видите тука ова е навистина точно истиот код 309 00:20:18,000 --> 00:20:22,000 што се користеа во Цезар во овој момент. 310 00:20:22,000 --> 00:20:25,000 Правиш иста работа, па Вистинската трик е да пронајдат 311 00:20:25,000 --> 00:20:30,000 како да се претворат клучен збор во цел број. 312 00:20:30,000 --> 00:20:35,000 >> Едно нешто што ние го сторивме тука дека е малку густ 313 00:20:35,000 --> 00:20:39,000 е ние повтори оваа фраза, претпоставувам дека би можеле да го наречеме, 314 00:20:39,000 --> 00:20:45,000 3 одделни пати на 58 линии, 59 и 61. 315 00:20:45,000 --> 00:20:52,000 Може некој објасни што точно оваа фраза не? 316 00:20:52,000 --> 00:20:55,000 Тоа е пристап карактер, како што рече ти. 317 00:20:55,000 --> 00:20:59,000 Да, тоа е [недоловим] лик во клучниот збор, 318 00:20:59,000 --> 00:21:04,000 и така тоа е бројот на писма гледа затоа што ти си само се движи по 319 00:21:04,000 --> 00:21:06,000 клучниот збор еднаш сте виделе писмото, 320 00:21:06,000 --> 00:21:10,000 така што ќе ефикасно да прескокнете празни места и работи како што. 321 00:21:10,000 --> 00:21:12,000 Да, точно. 322 00:21:12,000 --> 00:21:16,000 А потоа еднаш сте виделе клучниот збор празно едноставно МО, па можете да се движи назад наоколу. 323 00:21:16,000 --> 00:21:18,000 Точно. Тоа е совршено објаснување. 324 00:21:18,000 --> 00:21:23,000 Што Кевин рече е дека ние сакаме да индексира во клучен збор. 325 00:21:23,000 --> 00:21:28,000 Ние сакаме да се добие num_letters_seen карактер, ако сакате, 326 00:21:28,000 --> 00:21:32,000 но ако num_letters_seen надминува должината на клучни зборови, 327 00:21:32,000 --> 00:21:37,000 начинот на кој ние се врати во соодветниот опсег е ние ги користиме на современи оператор 328 00:21:37,000 --> 00:21:40,000 ефикасно да се заврши околу. 329 00:21:40,000 --> 00:21:43,000 На пример, како на краток, нашиот збор е сланина, 330 00:21:43,000 --> 00:21:46,000 и тоа е 5 букви. 331 00:21:46,000 --> 00:21:50,000 Но, видовме 6 букви во нашата обичен текст во овој момент 332 00:21:50,000 --> 00:21:52,000 и шифрирана 6. 333 00:21:52,000 --> 00:21:57,000 Ние ќе завршат пристапуваат на num_letters_seen, 334 00:21:57,000 --> 00:22:00,000 која е 6, МО должината на клучни зборови, 5, 335 00:22:00,000 --> 00:22:04,000 и така ќе добие 1, и така што ќе направите е ние ќе 336 00:22:04,000 --> 00:22:14,000 пристапите на првиот карактер во внатрешноста на нашите клучни зборови во тој момент. 337 00:22:14,000 --> 00:22:21,000 >> Сите права, било какви прашања на Vigenère 338 00:22:21,000 --> 00:22:26,000 пред да се движи? 339 00:22:26,000 --> 00:22:31,000 Вие момци чувство прилично добро за ова? 340 00:22:31,000 --> 00:22:35,000 Кул, одлично. 341 00:22:35,000 --> 00:22:38,000 Сакам да бидете сигурни дека вие момци се добива шанса да се види кодот 342 00:22:38,000 --> 00:22:48,000 за кои мислиме дека изгледа добро и имаат шанса да учат од неа. 343 00:22:48,000 --> 00:22:53,000 Ова ќе биде последниот што ќе биде со користење простори засега, 344 00:22:53,000 --> 00:22:59,000 и ние ќе транзиција сега, и јас одам да одат на cs50.net/lectures 345 00:22:59,000 --> 00:23:06,000 така што може да се направи малку на квизот преглед. 346 00:23:06,000 --> 00:23:10,000 Најдобар начин мислам да се започне квиз преглед 347 00:23:10,000 --> 00:23:15,000 е да се дојде до оваа Предавања страница, cs50.net/lectures, 348 00:23:15,000 --> 00:23:20,000 и под секоја од недела наслови, па ако гледам тука во недела 0, 349 00:23:20,000 --> 00:23:27,000 Гледам дека имаме листа на теми кои што се опфатени во недела 0. 350 00:23:27,000 --> 00:23:31,000 >> Ако било кој од овие теми се чини непознат за вас 351 00:23:31,000 --> 00:23:34,000 вие дефинитивно ќе сакаат да одат назад и да Корито на материјалите и евентуално 352 00:23:34,000 --> 00:23:39,000 дури и обезмаслен преку предавања, да ги гледаш повторно, ако сакате 353 00:23:39,000 --> 00:23:44,000 да се добие чувство за она што се случува со секоја од овие теми. 354 00:23:44,000 --> 00:23:49,000 Јас нема да кажам дополнително оваа година еден од кул ресурси имаме 355 00:23:49,000 --> 00:23:55,000 е овие шорцеви дека ние сме создадени, и ако се погледне на недела 0, 356 00:23:55,000 --> 00:24:00,000 ние немаме сите теми се опфатени, но имаме неколку од нив, 357 00:24:00,000 --> 00:24:03,000 некои од сложени да ја формира оние, па гледањето на овие шорцеви повторно 358 00:24:03,000 --> 00:24:08,000 е добар начин за да добиете до брзина. 359 00:24:08,000 --> 00:24:15,000 Конкретно, јас одам да се стави во приклучок за 3 на дното, бидејќи јас не оние. 360 00:24:15,000 --> 00:24:20,000 Но, ако сте се борат со бинарни, битови, канаста, тој вид на работи, 361 00:24:20,000 --> 00:24:22,000 бинарни е одлично место за почеток. 362 00:24:22,000 --> 00:24:25,000 ASCII е уште еден што е добро за да ја видите премногу. 363 00:24:25,000 --> 00:24:31,000 Можете дури и да ме види во 1.5x брзина, ако јас одам премногу бавен за вас. 364 00:24:31,000 --> 00:24:35,000 Бидејќи е преглед, се чувствуваат слободни да го направите тоа. 365 00:24:35,000 --> 00:24:40,000 >> Само за да започнете многу брзо, ние ќе треба да поминат низ неколку од овие квиз проблеми 366 00:24:40,000 --> 00:24:44,000 само брзо да разпенвам преку овие. 367 00:24:44,000 --> 00:24:50,000 На пример, нека се погледне на проблемот 16 дека имам право тука на табла. 368 00:24:50,000 --> 00:24:54,000 Ние го добивме ова следниве пресметка во бинарна, 369 00:24:54,000 --> 00:24:56,000 и ние сакаме да ги покаже сите работа. 370 00:24:56,000 --> 00:24:59,000 Океј, јас ќе одам да им даде на оваа да се сними. 371 00:24:59,000 --> 00:25:01,000 Вие момци треба да го следат заедно со хартија, 372 00:25:01,000 --> 00:25:04,000 и ние ќе го направите ова навистина брзо. 373 00:25:04,000 --> 00:25:06,000 Ние сакаме да ги вршат следниве пресметка во бинарна. 374 00:25:06,000 --> 00:25:16,000 Имам 00.110.010. 375 00:25:16,000 --> 00:25:27,000 И јас одам да го додадете во неа 00.110.010. 376 00:25:27,000 --> 00:25:30,000 За математика гении следниве заедно дома, 377 00:25:30,000 --> 00:25:35,000 ова е стварно множење со 2. 378 00:25:35,000 --> 00:25:37,000 Да почнеме. 379 00:25:37,000 --> 00:25:39,000 Ние ќе го следат истиот Покрај алгоритам што го правиме 380 00:25:39,000 --> 00:25:43,000 Кога ќе се додаде децимални броеви заедно. 381 00:25:43,000 --> 00:25:46,000 Навистина единствената разлика тука е дека ние јамка назад околу 382 00:25:46,000 --> 00:25:51,000 еднаш имаме 1 + 1 наместо штом ќе го добиеме до 10. 383 00:25:51,000 --> 00:25:53,000 >> Ако тргнеме од правото, навистина брзо, што е првата цифра? 384 00:25:53,000 --> 00:25:55,000 [Студентски] 0. >> [Нејт Х] 0. 385 00:25:55,000 --> 00:25:58,000 Велики, втората цифра? 386 00:25:58,000 --> 00:26:00,000 [Студентски] 1. 387 00:26:00,000 --> 00:26:02,000 [Нејт Х] Дали е 1? 1 + 1 е? 388 00:26:02,000 --> 00:26:04,000 [Студентски] 10. 389 00:26:04,000 --> 00:26:08,000 [Нејт Х] Точно, така што е цифрен дека јас пишувам веднаш под 2 оние собираат заедно? 390 00:26:08,000 --> 00:26:11,000 [Студентски] 1, 0, или 0, а потоа го носат 1. 391 00:26:11,000 --> 00:26:15,000 [Нејт Х] 0 и носат 1, точно. 392 00:26:15,000 --> 00:26:18,000 Следниот нагоре, Василиј, вие сте. 393 00:26:18,000 --> 00:26:20,000 Што е третиот? >> [Василиј] 1. 394 00:26:20,000 --> 00:26:23,000 [Нејт Х] 1, совршена. Кевин? 395 00:26:23,000 --> 00:26:27,000 [Кевин] 0. >> [Нејт Х] 0, Шарлот? 396 00:26:27,000 --> 00:26:30,000 [Шарлот] 0. >> [Нејт Х] Да, и она што можам да направам? 397 00:26:30,000 --> 00:26:32,000 [Студентски] Во 1. 398 00:26:32,000 --> 00:26:34,000 [Нејт Х] И она што можам да направам? А потоа го носат 1. 399 00:26:34,000 --> 00:26:36,000 Совршен, Sahb? >> [Sahb] Сега имате 1. 400 00:26:36,000 --> 00:26:40,000 [Нејт Х] И да правам нешто тука? 401 00:26:40,000 --> 00:26:43,000 [Sahb] Потоа за следниот имате 1 затоа што пренесуваат 1. 402 00:26:43,000 --> 00:26:49,000 [Нејт Х] Велики, па овде можеме да го завршам. 403 00:26:49,000 --> 00:26:51,000 Кул. 404 00:26:51,000 --> 00:26:54,000 [Студентски] Дали 0 + 0 = 0? 405 00:26:54,000 --> 00:26:56,000 0 + 0 = 0. 406 00:26:56,000 --> 00:27:01,000 1 + 1, како што рече, е 10, или 1, 0, а. 407 00:27:01,000 --> 00:27:07,000 10 е погрешна употреба на израз, бидејќи за мене 10 значи дека бројот 10, 408 00:27:07,000 --> 00:27:12,000 и тоа е поврат на тоа како ние сме го претставуваат кога ние сме го пишувам. 409 00:27:12,000 --> 00:27:20,000 Ние претставува број 2 од 1, 0, а бројот 10 е малку поинаква. 410 00:27:20,000 --> 00:27:23,000 >> Што е вид на убаво за бинарни е дека навистина не се толку многу 411 00:27:23,000 --> 00:27:25,000 случаи што треба да дознаете. 412 00:27:25,000 --> 00:27:30,000 Има 0 + 0 = 0, 0 + 1 = 1, 413 00:27:30,000 --> 00:27:34,000 1 + 1 е 0, а потоа го носат 1, 414 00:27:34,000 --> 00:27:37,000 а потоа можете да видите тука на третата колона од десно 415 00:27:37,000 --> 00:27:40,000 имавме оваа 1, 1, и 1. 416 00:27:40,000 --> 00:27:43,000 И 1 + 1 + 1 е 1, 417 00:27:43,000 --> 00:27:45,000 и ти го носиш уште 1. 418 00:27:45,000 --> 00:27:48,000 Кога правиш бинарни Покрај тоа, прилично едноставна. 419 00:27:48,000 --> 00:27:51,000 Јас би го сторила уште неколку од овие да разумност себе провери 420 00:27:51,000 --> 00:27:54,000 пред да одите во затоа што ова е 421 00:27:54,000 --> 00:28:00,000 веројатно нешто што ќе видиме на квизот. 422 00:28:00,000 --> 00:28:03,000 Сега ајде да го направите ова следната, како и. 423 00:28:03,000 --> 00:28:06,000 Да направиме проблем 17. 424 00:28:06,000 --> 00:28:12,000 Ние ќе се конвертира следниве бинарен број на децимални. 425 00:28:12,000 --> 00:28:28,000 Имам 10100111001. 426 00:28:28,000 --> 00:28:33,000 Запомни во бинарен видео кое го направив 427 00:28:33,000 --> 00:28:36,000 Одев преку неколку примери, и јас покажа како 428 00:28:36,000 --> 00:28:41,000 се работи кога сте го прави тоа во децимални. 429 00:28:41,000 --> 00:28:45,000 Кога си работат во децимална застапеност Јас мислам дека ние сме 430 00:28:45,000 --> 00:28:48,000 во овој момент во нашите животи, па зборува тоа што 431 00:28:48,000 --> 00:28:53,000 тоа е прилично лесно да се притајуваат механика на тоа како всушност работи. 432 00:28:53,000 --> 00:28:59,000 >> Но да се направи брз повториме, ако имам бројот 137 433 00:28:59,000 --> 00:29:06,000 ова навистина значи и повторно, ова е во децимална застапеност- 434 00:29:06,000 --> 00:29:19,000 бројот 137 во децимални значи дека имам 1 x 100 + 3 x 10 + 7 x 1. 435 00:29:19,000 --> 00:29:22,000 Ова е за сите кои престојуваат на екранот. 436 00:29:22,000 --> 00:29:29,000 А потоа ако се погледне на овие броеви токму тука, 437 00:29:29,000 --> 00:29:34,000 100, 10 и 1, ќе видите дека тие се всушност сите овластувања на 10. 438 00:29:34,000 --> 00:29:43,000 Имам 10 ², 10 ¹, а 10 до нула. 439 00:29:43,000 --> 00:29:48,000 Имаме сличен вид на работа во бинарна, 440 00:29:48,000 --> 00:29:55,000 освен дека нашата база, како што го нарекуваат, е 2, наместо на 10. 441 00:29:55,000 --> 00:29:58,000 Овие 10s што напишав тука долу на дното, 442 00:29:58,000 --> 00:30:02,000 овој 10 ², 10 ¹, 10 до нула, 10 е нашата база, 443 00:30:02,000 --> 00:30:08,000 и експонент, 0, 1 или 2, 444 00:30:08,000 --> 00:30:14,000 се подразбира од страна на позицијата на бројот на бројот што пишувам. 445 00:30:14,000 --> 00:30:21,000 1, ако се погледне во него, овој 1 е во 2 позиција. 446 00:30:21,000 --> 00:30:27,000 На 3 е во 1 позиција, а 7 се во 0. позиција. 447 00:30:27,000 --> 00:30:35,000 Тоа е како ние се различни експонати подолу за нашите бази. 448 00:30:35,000 --> 00:30:40,000 >> По сето ова we'll-всушност, знаеш што? 449 00:30:40,000 --> 00:30:43,000 Ние ќе направиме се-каде ми го вратите копчето одиме? 450 00:30:43,000 --> 00:30:45,000 Таму оди. 451 00:30:45,000 --> 00:30:47,000 Го сакам овој вратите работа. 452 00:30:47,000 --> 00:30:51,000 По ова мислам дека за мене барем 453 00:30:51,000 --> 00:30:54,000 најлесниот начин за да започнете конвертирање бинарен број 454 00:30:54,000 --> 00:30:57,000 или хексадецимален број, каде што основата е 16 455 00:30:57,000 --> 00:31:02,000 а не 10 или 2 е да се оди напред и да пишува од 456 00:31:02,000 --> 00:31:09,000 основите и експоненти за сите броеви во мојата бинарен број на врвот. 457 00:31:09,000 --> 00:31:14,000 Ако тргнеме од лево кон десно, повторно, 458 00:31:14,000 --> 00:31:17,000 кој е вид на контра, 459 00:31:17,000 --> 00:31:23,000 Ќе се вратиме назад до црниот тука, имаме 2 до 0. позиција, 460 00:31:23,000 --> 00:31:27,000 а потоа имаме 2 ¹, 2 ², 461 00:31:27,000 --> 00:31:33,000 а потоа 2 до 3, 2 до 4, 2 до 5, 6, 462 00:31:33,000 --> 00:31:39,000 7, 8, 9 и 10. 463 00:31:39,000 --> 00:31:41,000 Овие бројки што сум напишал надвор се сите експоненти. 464 00:31:41,000 --> 00:31:48,000 Јас само напишав бази овде во првите 3 само за просторот. 465 00:31:48,000 --> 00:31:50,000 >> Во овој момент јас ќе одам да се оди напред и јас сум всушност се случува да се избрише 466 00:31:50,000 --> 00:31:53,000 работи кои што направивме во децимала, ако тоа е во ред. 467 00:31:53,000 --> 00:31:57,000 Вие сте сите добив тоа. 468 00:31:57,000 --> 00:32:05,000 Оние од вас гледање онлајн Сигурен сум дека ќе биде во можност да ми ја премотам касетата, ако сакате. 469 00:32:05,000 --> 00:32:07,000 Префрлување назад кон пенкало. 470 00:32:07,000 --> 00:32:12,000 Сега, она што можеме да направиме-ако вие момци не се целосно до брзина на вашите овластувања на 2, 471 00:32:12,000 --> 00:32:15,000 тоа е тотално кул. 472 00:32:15,000 --> 00:32:18,000 Тоа се случува. Јас разбирам. 473 00:32:18,000 --> 00:32:23,000 Јас еднаш имаше интервју каде што ми беше речено јас треба да ги знаат сите сили од 2 474 00:32:23,000 --> 00:32:26,000 до преку 2 до 30-ти. 475 00:32:26,000 --> 00:32:29,000 Тоа не беше работа добив. 476 00:32:29,000 --> 00:32:32,000 Како и да е, вие момци може да оди напред и направете математика тука, 477 00:32:32,000 --> 00:32:35,000 но со бинарни тоа не е никаква смисла, 478 00:32:35,000 --> 00:32:38,000 и ниту дали има смисла со децимална или хексадецимален или, 479 00:32:38,000 --> 00:32:43,000 да го направите математика каде имате нули. 480 00:32:43,000 --> 00:32:49,000 Можете да видите јас имам 0 тука, 0 тука 0 тука 0 тука 0 тука 0 тука. 481 00:32:49,000 --> 00:32:52,000 Зошто да не има смисла да го направите вистинскиот математика 482 00:32:52,000 --> 00:32:56,000 да се пресмета соодветно моќта на 2 за таа позиција? 483 00:32:56,000 --> 00:32:59,000 Точно, како Шарлот рече, тоа ќе биде 0. 484 00:32:59,000 --> 00:33:05,000 Како и да се спаси од времето, ако пресметување овластувањата на 2 не ви е силна одговараат. 485 00:33:05,000 --> 00:33:10,000 Во овој случај ние само треба да го пресмета за 2 до 0, која е-? 486 00:33:10,000 --> 00:33:12,000 [Студентски] 1. 487 00:33:12,000 --> 00:33:14,000 [Нејт Х] 1, 2 до 3 кој е-? 488 00:33:14,000 --> 00:33:16,000 [Студентски] 8. >> [Нејт Х] 8. 489 00:33:16,000 --> 00:33:18,000 2 до 4? 490 00:33:18,000 --> 00:33:21,000 [Студентски] 2. Жал ми е, 1. 491 00:33:21,000 --> 00:33:26,000 [Нејт Х] 2 до 4 е 16, точно. 492 00:33:26,000 --> 00:33:28,000 2 до 5, Кевин? >> 32. 493 00:33:28,000 --> 00:33:32,000 [Нејт Х] 32, 2 до 8? 494 00:33:32,000 --> 00:33:38,000 [Студентски] 32 х 8, 256. 495 00:33:38,000 --> 00:33:41,000 [Нејт Х] Совршен. 496 00:33:41,000 --> 00:33:43,000 И 2 на 10? 497 00:33:43,000 --> 00:33:45,000 [Студентски] 1024. 498 00:33:45,000 --> 00:33:49,000 [Нејт Х] Да, 1024. 499 00:33:49,000 --> 00:33:57,000 >> Откако имаме овие бројки можеме да заклучиме сите нив до. 500 00:33:57,000 --> 00:34:01,000 И ова е местото каде што тоа е навистина важно да се направи неколку работи. 501 00:34:01,000 --> 00:34:07,000 Еден е да се оди бавно и проверете ја вашата работа. 502 00:34:07,000 --> 00:34:10,000 Може да се каже дека има 1 на крајот од овој број, 503 00:34:10,000 --> 00:34:15,000 па јас дефинитивно треба да добие непарен број како мојот резултат, 504 00:34:15,000 --> 00:34:18,000 бидејќи сите други оние ќе бидат дури и броеви 505 00:34:18,000 --> 00:34:21,000 со оглед дека тоа е бинарен број. 506 00:34:21,000 --> 00:34:24,000 Од друга работа да направите е ако дојде до оваа точка на тест 507 00:34:24,000 --> 00:34:27,000 и сте го напишани на овој далеку 508 00:34:27,000 --> 00:34:30,000 и сте истекува времето 509 00:34:30,000 --> 00:34:33,000 погледне бројот на поени дека овој проблем е вреден. 510 00:34:33,000 --> 00:34:40,000 Овој проблем, како што можете да видите, ако јас флип назад кон мојот лаптоп навистина брзо- 511 00:34:40,000 --> 00:34:44,000 овој проблем е вреди 2 поени, така што ова не е вид на тоа 512 00:34:44,000 --> 00:34:47,000 треба да се оди преку ако сте навистина притисок за време. 513 00:34:47,000 --> 00:34:52,000 Но, ние ќе го вратите назад на iPad, и ќе одиме преку тоа навистина брзо. 514 00:34:52,000 --> 00:34:54,000 >> Ми се допаѓа прават мал број првата 515 00:34:54,000 --> 00:34:56,000 затоа што сметаат дека полесно. 516 00:34:56,000 --> 00:35:00,000 Ми се допаѓа 32 и 8, бидејќи тие одат заедно прилично лесно, и да добиеме 50. 517 00:35:00,000 --> 00:35:03,000 16 и 1 добива 17. 518 00:35:03,000 --> 00:35:05,000 Има добиеме 57, 519 00:35:05,000 --> 00:35:14,000 и потоа можеме да правиме на останатиот дел од ова, па можеме да направиме 57, 156. 520 00:35:14,000 --> 00:35:16,000 Ајде. 521 00:35:16,000 --> 00:35:19,000 Човекот, добро, ајде да видиме. 522 00:35:19,000 --> 00:35:27,000 Имавме 57, 256, и 1024. 523 00:35:27,000 --> 00:35:31,000 Во овој момент, Претпочитам само одат преку. 524 00:35:31,000 --> 00:35:35,000 Јас немам поим. Јас јасно треба да прочитате на овој. 525 00:35:35,000 --> 00:35:40,000 7, 6 и 4, ќе добиете 17. 526 00:35:40,000 --> 00:35:42,000 1, 5, 5, 2, 13. 527 00:35:42,000 --> 00:35:45,000 Потоа да добиеме 3, а потоа да добиеме 1. 528 00:35:45,000 --> 00:35:52,000 1337. 529 00:35:52,000 --> 00:35:55,000 Велигденското јајце, некој? 530 00:35:55,000 --> 00:35:59,000 Секој признае овој број? 531 00:35:59,000 --> 00:36:02,000 Крис признава број. Што значи тоа, Крис? 532 00:36:02,000 --> 00:36:04,000 [Крис] Leet. 533 00:36:04,000 --> 00:36:11,000 Leet, па ако се погледне на овој, тоа изгледа како leet. 534 00:36:11,000 --> 00:36:15,000 Хакер работи. Види надвор за тој вид на работи на среднорочни или квиз, а. 535 00:36:15,000 --> 00:36:19,000 Ако видите дека вид на работи и сте Прашувајќи "Ха" 536 00:36:19,000 --> 00:36:22,000 кои, всушност, може да значи нешто. 537 00:36:22,000 --> 00:36:24,000 Не знам. Дејвид сака да го стави внатре 538 00:36:24,000 --> 00:36:26,000 Тоа е добар начин да се здрав разум да го провериш. 539 00:36:26,000 --> 00:36:30,000 Како во ред, можам да видам што се случува. 540 00:36:30,000 --> 00:36:34,000 >> Тоа е недела 0/Week 1 нешта. 541 00:36:34,000 --> 00:36:39,000 Ако ние се вратиш назад кон нашите лаптоп сега, 542 00:36:39,000 --> 00:36:46,000 одзумирате, и неколку други работи. 543 00:36:46,000 --> 00:36:50,000 Има ASCII, кој го прави многу со проблемот комплети. 544 00:36:50,000 --> 00:36:55,000 Овој поим на капиталот А што е тоа навистина? 545 00:36:55,000 --> 00:36:57,000 Знаејќи дека тоа е децимална број. 546 00:36:57,000 --> 00:37:00,000 65 е она што е одбележан во ASCII табелата, 547 00:37:00,000 --> 00:37:03,000 и тоа е тоа како компјутерот го пишува, 548 00:37:03,000 --> 00:37:06,000 и тоа како сме се извлекуваат со всушност пишување 549 00:37:06,000 --> 00:37:09,000 ликот капитал и карактерот мали букви на 550 00:37:09,000 --> 00:37:14,000 во некои од овие решенија и проблемот поставува дека сте правеле. 551 00:37:14,000 --> 00:37:16,000 Неколку други работи. 552 00:37:16,000 --> 00:37:25,000 Имаме извештаи, рационален израз, услови, петелки, променливи и теми. 553 00:37:25,000 --> 00:37:29,000 >> Оние се чини да се направи смисла во најголем дел? 554 00:37:29,000 --> 00:37:35,000 Некои од оваа терминологија е малку фанки во пати. 555 00:37:35,000 --> 00:37:46,000 Сакам да мислам на изјава во најголем дел е нешто што завршува со точка-запирка. 556 00:37:46,000 --> 00:37:51,000 Изјави како x = 7, која поставува променлива, 557 00:37:51,000 --> 00:37:54,000 веројатно нарекува x = 7. 558 00:37:54,000 --> 00:38:01,000 Веројатно x е исто така еден вид кој може да се сместат на бројот 7, 559 00:38:01,000 --> 00:38:05,000 па тоа е int или можеби лебди или кратко или знак, 560 00:38:05,000 --> 00:38:07,000 нешто слично. 561 00:38:07,000 --> 00:38:12,000 А рационален израз е користење на овие двојно изнесува 562 00:38:12,000 --> 00:38:17,000 и тресне еднаква или не еднакви, помалку од, поголем од, 563 00:38:17,000 --> 00:38:22,000 помалку од или еднакво на сите тој вид на работи. 564 00:38:22,000 --> 00:38:28,000 Услови потоа се ако друг извештаи. 565 00:38:28,000 --> 00:38:32,000 Јас ќе се сеќава дека не може да има друго место без соодветните ако. 566 00:38:32,000 --> 00:38:37,000 Исто така, не може да има друго ако без соодветните ако. 567 00:38:37,000 --> 00:38:40,000 Петелки, се сети на 3 видови на јамки ние се ковале во тебе 568 00:38:40,000 --> 00:38:43,000 за последните неколку секции и проблемот комплети. 569 00:38:43,000 --> 00:38:46,000 Користејќи се додека кога сте добивање корисник влез, 570 00:38:46,000 --> 00:38:51,000 користење додека петелки до одредена состојба е точно, 571 00:38:51,000 --> 00:38:56,000 а потоа со помош оние за петелки, ако треба да 572 00:38:56,000 --> 00:39:01,000 знае кои повторување на јамка која моментално се наоѓате е како јас размислувам за тоа. 573 00:39:01,000 --> 00:39:07,000 Или ако правиш за секој лик во серијата сакам да направам нешто, 574 00:39:07,000 --> 00:39:15,000 за секој елемент во низа сакам да направам нешто на тој елемент. 575 00:39:15,000 --> 00:39:18,000 >> Теми и настани. 576 00:39:18,000 --> 00:39:21,000 Овие не се опфатени толку експлицитно во C, 577 00:39:21,000 --> 00:39:23,000 но запомнете ова од нула. 578 00:39:23,000 --> 00:39:26,000 Ова е идејата на постоење на различни сценарија. 579 00:39:26,000 --> 00:39:32,000 Ова е, исто така, овој поим на емитување на настанот. 580 00:39:32,000 --> 00:39:37,000 Некои луѓе не ги користат емитување во нивните проекти на почетокот, 581 00:39:37,000 --> 00:39:40,000 која е тотално кул, 582 00:39:40,000 --> 00:39:46,000 но овие се 2 различни начини на справување со овој поголем проблем наречен конкурентноста, 583 00:39:46,000 --> 00:39:49,000 кој е како да добиете програми за извршување на 584 00:39:49,000 --> 00:39:54,000 или навидум изврши во исто време? 585 00:39:54,000 --> 00:39:59,000 Различни задачи работи додека другите задачи се, исто така, работи. 586 00:39:59,000 --> 00:40:01,000 Ова е како вашиот оперативен систем изгледа да се работи. 587 00:40:01,000 --> 00:40:04,000 Ова е причината зошто, иако, на пример, 588 00:40:04,000 --> 00:40:10,000 Имам мојот интернет пребарувач работи, јас, исто така, може да се претвори во Spotify и пуштите песна. 589 00:40:10,000 --> 00:40:14,000 Тоа е повеќе од концептуална нешто да се разбере. 590 00:40:14,000 --> 00:40:17,000 Јас ќе се погледне на теми кратко 591 00:40:17,000 --> 00:40:21,000 ако сакате да дознаете повеќе за тоа. 592 00:40:21,000 --> 00:40:26,000 >> Ајде да видиме, верувам дека би можело да се 593 00:40:26,000 --> 00:40:31,000 проблем на овој во една од овие. 594 00:40:31,000 --> 00:40:35,000 Повторно, мислам теми и настани не се нешто што ние ќе ги покрие во C 595 00:40:35,000 --> 00:40:41,000 само затоа што е значително потешко отколку во нула. 596 00:40:41,000 --> 00:40:44,000 Вие не треба да се грижите за него, но дефинитивно се разбере концептите, 597 00:40:44,000 --> 00:40:47,000 се разбере она што се случува. 598 00:40:47,000 --> 00:40:52,000 Пред да се движи, било какви прашања на недела 0 материјал? 599 00:40:52,000 --> 00:40:55,000 Сите чувствуваат прилично добро? 600 00:40:55,000 --> 00:41:03,000 Разбирање променливи и она што променлива е? 601 00:41:03,000 --> 00:41:08,000 >> Преселба на. Недела 1. 602 00:41:08,000 --> 00:41:12,000 Неколку работи тука дека не беа посебно опфатени 603 00:41:12,000 --> 00:41:21,000 во квизот преглед нужно, а исто така се повеќе концептуални работи кои треба да се размислува за. 604 00:41:21,000 --> 00:41:30,000 Првиот е ова сфаќање на она што се изворниот код, компајлери и објектниот код. 605 00:41:30,000 --> 00:41:32,000 Никого? Босилек. 606 00:41:32,000 --> 00:41:37,000 Е објектниот код-Мислам изворниот код е она што го стави во ѕвекот, 607 00:41:37,000 --> 00:41:42,000 и објектниот код е она што ѕвекот гаси, така што вашиот компјутер може да се чита на програмата. 608 00:41:42,000 --> 00:41:44,000 Точно. 609 00:41:44,000 --> 00:41:47,000 Изворниот код е кодот Ц дека всушност напишеш. 610 00:41:47,000 --> 00:41:50,000 Објектниот код е она што го добивате од ѕвекот. 611 00:41:50,000 --> 00:41:54,000 Тоа е 0-ти и 1S во таа бинарен формат. 612 00:41:54,000 --> 00:41:59,000 Тогаш она што се случува е кога имаш еден куп на објектот датотеки, 613 00:41:59,000 --> 00:42:04,000 речеме сте составувањето на проект или програма која користи повеќе изворниот код на датотеки, 614 00:42:04,000 --> 00:42:09,000 кои со конвенцијата им се дава. в наставката на датотеката. 615 00:42:09,000 --> 00:42:13,000 Тоа е причината зошто имаме caesar.c, vigenère.c. 616 00:42:13,000 --> 00:42:18,000 Ако сте пишување Јава програми ќе им даде на проширување. Java. 617 00:42:18,000 --> 00:42:24,000 Пајтон програми имаат наставката. Py често. 618 00:42:24,000 --> 00:42:26,000 >> Откако ќе имаат повеќе. В датотеки, можете да ги компајлирате. 619 00:42:26,000 --> 00:42:29,000 Ѕвекот плука од сите овие бинарни сметот. 620 00:42:29,000 --> 00:42:33,000 Тогаш затоа што само сакаат 1 програмата 621 00:42:33,000 --> 00:42:37,000 имате linker врската сите овие објект додадени фајлови заедно 622 00:42:37,000 --> 00:42:40,000 во 1 извршна датотека. 623 00:42:40,000 --> 00:42:45,000 Ова е, исто така, она што се случува кога користите CS50 библиотеката, на пример. 624 00:42:45,000 --> 00:42:50,000 Во библиотеката CS50 е и тоа. Ж хедер датотека 625 00:42:50,000 --> 00:42:53,000 што ќе чита, дека # includecs50.h. 626 00:42:53,000 --> 00:42:58,000 И тогаш тоа е исто така посебна бинарни библиотека датотека 627 00:42:58,000 --> 00:43:02,000 тоа е се состави дека е 0-ти и 1S, 628 00:43:02,000 --> 00:43:08,000 и дека-l знаме, па ако се вратиме на нашите простори и ние со нетрпение навистина брзо 629 00:43:08,000 --> 00:43:11,000 во она што се случува тука, кога ќе погледнеме во нашите ѕвекот команда, 630 00:43:11,000 --> 00:43:15,000 она што ние го добивме е ова е нашата изворниот код датотека овде. 631 00:43:15,000 --> 00:43:18,000 Тоа се еден куп на компајлерот знамиња. 632 00:43:18,000 --> 00:43:22,000 А потоа на самиот крај, овие-l знамиња линкот во 633 00:43:22,000 --> 00:43:30,000 вистински бинарни датотеки за овие 2 библиотеки, CS50 библиотека, а потоа по математика библиотека. 634 00:43:30,000 --> 00:43:35,000 >> Разбирање на секој тип на цел датотеки " 635 00:43:35,000 --> 00:43:38,000 во компилација процес е нешто што ќе сакаат да бидат во можност да 636 00:43:38,000 --> 00:43:43,000 даде најмалку високо ниво преглед на. 637 00:43:43,000 --> 00:43:46,000 Изворниот код влегува внатре објектниот код излегува. 638 00:43:46,000 --> 00:43:53,000 Објектниот код датотеки поврзат заедно, и ќе добиете убава, извршна датотека. 639 00:43:53,000 --> 00:43:55,000 Кул. 640 00:43:55,000 --> 00:43:58,000 Ова е исто така каде што можете да добиете грешки во повеќе точки 641 00:43:58,000 --> 00:44:00,000 во компилација процес. 642 00:44:00,000 --> 00:44:04,000 Ова е местото каде што, на пример, ако земете овој поврзува знаме, 643 00:44:04,000 --> 00:44:10,000 на CS50 знаме, и ќе ја изостави во простори или кога сте водење на вашиот код, 644 00:44:10,000 --> 00:44:13,000 ова е местото каде што ќе добиете грешка при поврзување фаза, 645 00:44:13,000 --> 00:44:18,000 и linker ќе каже: "Еј, да те повика функција GetString 646 00:44:18,000 --> 00:44:20,000 тоа е во CS50 библиотека. " 647 00:44:20,000 --> 00:44:25,000 "Ти ми кажа дека е во CS50 библиотека, и не можам да најдам кодот за него." 648 00:44:25,000 --> 00:44:28,000 Тоа е каде што треба да ја водат во, и тоа е посебна 649 00:44:28,000 --> 00:44:33,000 од компајлерот грешка, бидејќи на компајлерот е во потрага на синтакса и тој вид на работи. 650 00:44:33,000 --> 00:44:38,000 Добро е да знаете што се случува кога. 651 00:44:38,000 --> 00:44:42,000 >> Други работи кои треба да знаат. 652 00:44:42,000 --> 00:44:49,000 Јас би рекол дека дефинитивно ќе сакате да се погледне во краток за typecasting направено од страна на Јордан 653 00:44:49,000 --> 00:44:55,000 да се разбере она ints се под хауба, 654 00:44:55,000 --> 00:44:58,000 она што знаци се под хауба. 655 00:44:58,000 --> 00:45:02,000 Кога зборуваме за ASCII и ние всушност се погледне на ASCII табелата, 656 00:45:02,000 --> 00:45:07,000 она што го прави ни даваат под хауба изглед 657 00:45:07,000 --> 00:45:13,000 како на компјутерот всушност претставува капитал и бројот 7 658 00:45:13,000 --> 00:45:17,000 и запирка и знак прашалник. 659 00:45:17,000 --> 00:45:20,000 На компјутер, исто така, има посебни начини да се претставуваат 660 00:45:20,000 --> 00:45:23,000 бројот 7 како цел број. 661 00:45:23,000 --> 00:45:27,000 Таа има посебен начин да претставува број 7 како децимален број, 662 00:45:27,000 --> 00:45:29,000 и оние кои се многу различни. 663 00:45:29,000 --> 00:45:32,000 Typecasting е како да му кажете на компјутерот "Еј, јас сакам да ги конвертирате 664 00:45:32,000 --> 00:45:37,000 од една репрезентација на друга репрезентација. " 665 00:45:37,000 --> 00:45:40,000 Зошто не можеме да ги разгледаме во тоа. 666 00:45:40,000 --> 00:45:44,000 >> Јас исто така ќе ги разгледаме во краток за библиотеки и краток за компајлери. 667 00:45:44,000 --> 00:45:47,000 Оние зборува за процесот на компилација, 668 00:45:47,000 --> 00:45:53,000 што библиотеката е и одиме во текот на некои од овие прашања кои може да се праша. 669 00:45:53,000 --> 00:45:55,000 Прашања на недела 1 материјал? 670 00:45:55,000 --> 00:46:03,000 Дали има некои теми тука дека изгледа застрашувачки сакате да покрие? 671 00:46:03,000 --> 00:46:07,000 Се обидувам да свират низ повеќето од овие претходно теми, така што можеме да дојдеме до 672 00:46:07,000 --> 00:46:13,000 совети и направи малку на рекурзија. 673 00:46:13,000 --> 00:46:15,000 Мисли? 674 00:46:15,000 --> 00:46:19,000 Нешто да се покрие? 675 00:46:19,000 --> 00:46:21,000 Време за некои чоколадо можеби? 676 00:46:21,000 --> 00:46:23,000 Вие момци се работи преку него. 677 00:46:23,000 --> 00:46:26,000 Одам да се задржи потпивнуваш на мојот кафе. 678 00:46:26,000 --> 00:46:31,000 Недела 2. 679 00:46:31,000 --> 00:46:34,000 Добар повик, добро повик. 680 00:46:34,000 --> 00:46:38,000 Во Недела 2 зборувавме малку повеќе за функции. 681 00:46:38,000 --> 00:46:43,000 >> Во првите неколку проблемот поставува ние навистина не пишувам функции на сите 682 00:46:43,000 --> 00:46:45,000 освен што функција? 683 00:46:45,000 --> 00:46:47,000 [Студентски] Мајна. >> Мајна, точно. 684 00:46:47,000 --> 00:46:51,000 И така видовме различни костими дека главната носи. 685 00:46:51,000 --> 00:46:54,000 Тука е онаа во која е потребно без аргументи, 686 00:46:54,000 --> 00:46:58,000 и ние речеме празнина помеѓу заградите, 687 00:46:58,000 --> 00:47:01,000 и потоа, тука е другиот каде што сакаат да ги преземат командната линија аргументи, 688 00:47:01,000 --> 00:47:08,000 и како што видовме, тоа е каде што треба int argc и гудачки argv низа 689 00:47:08,000 --> 00:47:13,000 или сега дека ние сме всушност изложени низа да биде char * дека тоа е 690 00:47:13,000 --> 00:47:20,000 ние ќе почнете да пишувате како char * argv а потоа голема заграда. 691 00:47:20,000 --> 00:47:22,000 Во Проблем Постави 3, вие момци видов еден куп функции, 692 00:47:22,000 --> 00:47:27,000 и спроведува еден куп функции, црта, гледам нагоре, трка. 693 00:47:27,000 --> 00:47:31,000 На прототипи беа напишани таму за вас. 694 00:47:31,000 --> 00:47:33,000 >> Што сакав да зборувам за тука со функции навистина брзо 695 00:47:33,000 --> 00:47:38,000 е дека постојат 3 делови за нив секогаш кога ќе се напише функција. 696 00:47:38,000 --> 00:47:43,000 Мора да наведете враќање тип на функција. 697 00:47:43,000 --> 00:47:46,000 Мора да одредите име за функцијата, а потоа ќе мора да се определи 698 00:47:46,000 --> 00:47:51,000 аргументот листа или на параметарот листа. 699 00:47:51,000 --> 00:47:57,000 На пример, ако јас да се напише функција да ги сумира еден куп на броеви 700 00:47:57,000 --> 00:48:03,000 а потоа се врати да ме сумата што ќе биде моето враќање тип 701 00:48:03,000 --> 00:48:06,000 ако сакав да ги сумира цели броеви, а потоа се врати на збирот? 702 00:48:06,000 --> 00:48:12,000 Тогаш името на функцијата. 703 00:48:12,000 --> 00:48:27,000 Ако одам напред и да пишуваат во зелена, овој дел е враќање тип. 704 00:48:27,000 --> 00:48:34,000 Овој дел е името. 705 00:48:34,000 --> 00:48:40,000 А потоа помеѓу загради 706 00:48:40,000 --> 00:48:46,000 е местото каде што даде аргументи, 707 00:48:46,000 --> 00:48:56,000 често скратено како аргументи, понекогаш се нарекува params за параметри. 708 00:48:56,000 --> 00:49:00,000 И ако го имате, само наведете еден. 709 00:49:00,000 --> 00:49:06,000 Ако имате повеќе те одделуваат секој со запирка. 710 00:49:06,000 --> 00:49:13,000 И за секој аргумент го даде 2 работи кои се-Кевин? 711 00:49:13,000 --> 00:49:18,000 [Кевин] Мора да се даде на видот и тогаш името. 712 00:49:18,000 --> 00:49:21,000 А потоа името, а името е името што ви се случува да го користите 713 00:49:21,000 --> 00:49:25,000 да се однесуваат на тој аргумент во рамките на збирот функција, 714 00:49:25,000 --> 00:49:27,000 во рамките на функција која сте во моментов пишувам. 715 00:49:27,000 --> 00:49:32,000 >> Вие не треба да се, на пример, ако јас одам да се сумира, 716 00:49:32,000 --> 00:49:41,000 каже, низа од цели броеви-we'll направите int низа, 717 00:49:41,000 --> 00:49:46,000 и јас ќе си даде некои големи загради не- 718 00:49:46,000 --> 00:49:51,000 тогаш кога ќе помине низа на збирот функција 719 00:49:51,000 --> 00:49:55,000 Јас го помине во првата позиција на аргументот листа. 720 00:49:55,000 --> 00:49:59,000 Но низата дека јас помине во не мора да имаат име ТП. 721 00:49:59,000 --> 00:50:07,000 ТП ќе биде како јас да се однесува на тој аргумент во телото на функцијата. 722 00:50:07,000 --> 00:50:10,000 Од друга работа што треба да се земат предвид, 723 00:50:10,000 --> 00:50:14,000 и ова е малку различен од функциите, но мислам дека тоа е важен момент, 724 00:50:14,000 --> 00:50:20,000 е дека во C кога го пишувам функција вака 725 00:50:20,000 --> 00:50:29,000 како можам да знам колку елементи се во оваа низа? 726 00:50:29,000 --> 00:50:31,000 Ова е нешто на некој трик прашање. 727 00:50:31,000 --> 00:50:35,000 Ние разговаравме за тоа малку во делот минатата недела. 728 00:50:35,000 --> 00:50:40,000 Како да знам бројот на елементи во внатрешноста низа во C? 729 00:50:40,000 --> 00:50:44,000 Дали постои начин? 730 00:50:44,000 --> 00:50:49,000 >> Излегува дека не постои начин да се знае. 731 00:50:49,000 --> 00:50:52,000 Мора да го помине во одделно. 732 00:50:52,000 --> 00:50:55,000 Постои трик што можете да направите 733 00:50:55,000 --> 00:51:00,000 ако сте во истата функција во која е низа прогласи, 734 00:51:00,000 --> 00:51:04,000 и си работат со магацинот низа. 735 00:51:04,000 --> 00:51:06,000 Но, тоа работи само ако сте во истата функција. 736 00:51:06,000 --> 00:51:09,000 Откако ќе помине низа на друга функција или ако сте прогласи низа 737 00:51:09,000 --> 00:51:12,000 и ќе се стави таа низа на грамада, сте користеле Примерок 738 00:51:12,000 --> 00:51:15,000  и тој вид на работи, тогаш сите облози се исклучени. 739 00:51:15,000 --> 00:51:18,000 Тогаш вие всушност треба да помине околу 740 00:51:18,000 --> 00:51:21,000 посебен аргумент или друг параметар 741 00:51:21,000 --> 00:51:23,000 ти го кажувам колку е голема низа е. 742 00:51:23,000 --> 00:51:28,000 Во овој случај, јас би сакал да се користи запирки I'm жал, тоа се случува надвор од екранот овде- 743 00:51:28,000 --> 00:51:32,000 и јас би помине во еден аргумент 744 00:51:32,000 --> 00:51:40,000  и го нарекуваат int len ​​за должина. 745 00:51:40,000 --> 00:51:44,000 >> Едно нешто што може да излезе на квиз 746 00:51:44,000 --> 00:51:49,000 се бара да се напише или спроведување одредена функција наречена нешто. 747 00:51:49,000 --> 00:51:54,000 Ако не ви даде прототип, па целата оваа работа тука, 748 00:51:54,000 --> 00:51:58,000 целата оваа збрка се нарекува функција декларација или функција прототип, 749 00:51:58,000 --> 00:52:01,000 ова е една од првите работи што ќе сакате да се помине долу, ако тоа не е дадена 750 00:52:01,000 --> 00:52:03,000 за да ви веднаш на квизот. 751 00:52:03,000 --> 00:52:06,000 Од друга трик научив е дека 752 00:52:06,000 --> 00:52:11,000 велат дека ние не ви даде прототип за некоја функција, и ние велиме, "Еј, имаш да го пишувам." 753 00:52:11,000 --> 00:52:16,000 Внатре во големи загради кои ги имате на квизот 754 00:52:16,000 --> 00:52:20,000 ако забележите дека постои враќање тип и ќе забележите дека враќањето тип 755 00:52:20,000 --> 00:52:25,000 е нешто друго од празнина, што значи дека функцијата не враќа ништо, 756 00:52:25,000 --> 00:52:28,000 потоа една работа што дефинитивно ќе сакате да направите е да напишете 757 00:52:28,000 --> 00:52:33,000 некој вид на враќање изјава на самиот крај на функцијата. 758 00:52:33,000 --> 00:52:40,000 Враќање, и во овој случај, ние ќе се стави празно, бидејќи сакаме да се пополни во празно. 759 00:52:40,000 --> 00:52:44,000 Но ова добива мислиш на вистинскиот начин за тоа како сум јас ќе им пријде на овој проблем? 760 00:52:44,000 --> 00:52:49,000 И тоа ве потсетува сте ќе треба да се врати на вредност 761 00:52:49,000 --> 00:52:51,000 на повикувачот на функцијата. 762 00:52:51,000 --> 00:52:54,000 >> Да. >> [Студентски] Дали стил применуваат кога сме пишување код за квиз? 763 00:52:54,000 --> 00:52:58,000 Како вовлекување и тој вид на работи? >> [Студентски] Да. 764 00:52:58,000 --> 00:53:00,000 Не, не е толку многу. 765 00:53:00,000 --> 00:53:09,000 Мислам дека многу-ова е нешто што ќе се разјаснат на квиз на денот на, 766 00:53:09,000 --> 00:53:15,000 но обично се грижиш # вклучува и тој вид на работи, тоа е вид на надвор. 767 00:53:15,000 --> 00:53:17,000 [Студентски] Дали треба да се коментира вашиот ракописна код? 768 00:53:17,000 --> 00:53:19,000 Дали треба да се коментира вашиот ракописна код? 769 00:53:19,000 --> 00:53:24,000 Коментирајќи е секогаш добра, ако сте загрижени за делумна кредит 770 00:53:24,000 --> 00:53:29,000 или сакате да се комуницира вашата намера до два метра. 771 00:53:29,000 --> 00:53:33,000 Но, јас, пак, ќе се разјаснат на квизот себе и на денот квиз, 772 00:53:33,000 --> 00:53:39,000 но јас не верувам дека ќе се бара да напишете коментари, бр. 773 00:53:39,000 --> 00:53:42,000 Обично не, но тоа е дефинитивно вид на работа, каде што 774 00:53:42,000 --> 00:53:45,000 можете да комуницира вашата намера, како "Еј, ова е местото каде што ќе одам со него." 775 00:53:45,000 --> 00:53:49,000 И понекогаш тоа може да помогне со делумно кредит. 776 00:53:49,000 --> 00:53:51,000 Кул. 777 00:53:51,000 --> 00:53:53,000 >> Босилек. 778 00:53:53,000 --> 00:53:56,000 [Василиј] Која е разликата помеѓу прогласување, да речеме, int lang 779 00:53:56,000 --> 00:54:03,000 во аргументите или параметри наспроти прогласување на променлива во функција? 780 00:54:03,000 --> 00:54:05,000 Леле, кафе слезе на душникот. 781 00:54:05,000 --> 00:54:07,000 [Василиј] Како што работите што сакате да се стави во аргументите. 782 00:54:07,000 --> 00:54:09,000 Да, тоа е големо прашање. 783 00:54:09,000 --> 00:54:11,000 Како да се избере она што сакате да се стави во аргументите 784 00:54:11,000 --> 00:54:17,000 наспроти она што треба да направите внатрешноста на функција? 785 00:54:17,000 --> 00:54:24,000 Во овој случај ние вклучени и двете од овие како аргументи 786 00:54:24,000 --> 00:54:29,000 затоа што тие се нешто што секој кој ќе го користат збирот функција 787 00:54:29,000 --> 00:54:32,000 треба да се определи тие работи. 788 00:54:32,000 --> 00:54:35,000 >> Збирот функција, како што зборуваше, нема начин да се знае 789 00:54:35,000 --> 00:54:40,000 колку е голема низа е што добива од своите повикувачот или кој е со користење на сума функција. 790 00:54:40,000 --> 00:54:44,000 Тоа нема начин да се знае колку е голема таа низа е. 791 00:54:44,000 --> 00:54:48,000 Причината поради која го помине во оваа должина, токму тука како аргумент 792 00:54:48,000 --> 00:54:51,000 е бидејќи тоа е нешто што ние сме во основа кажува на повикувачот на функцијата, 793 00:54:51,000 --> 00:54:55,000 кој се случува да се користи збирот функција, "Еј, не само што ќе треба да ни даде низа 794 00:54:55,000 --> 00:54:59,000 на ints, исто така треба да ни кажете колку е голема низа што сте ни ја даде е. " 795 00:54:59,000 --> 00:55:03,000 [Василиј] Оние двете ќе биде командната линија аргументи? 796 00:55:03,000 --> 00:55:06,000 Не, тие се вистинските аргументи, кои ќе се пренесат и на функцијата. 797 00:55:06,000 --> 00:55:10,000 >> Дозволете ми да се направи нова страница тука. 798 00:55:10,000 --> 00:55:13,000 [Василиј] Како име ќе помине- 799 00:55:13,000 --> 00:55:24,000 [Нејт Х] Ако имам int главната (празно), 800 00:55:24,000 --> 00:55:27,000 и јас одам да се стави во моето враќање 0 тука долу на дното, 801 00:55:27,000 --> 00:55:31,000 и да каже сакам да се јавите на сума функција. 802 00:55:31,000 --> 00:55:42,000 Сакам да кажам int x = сума (); 803 00:55:42,000 --> 00:55:46,000 За да ја користите сума функција треба да помине и во низа што сакам да ги сумира 804 00:55:46,000 --> 00:55:51,000 и должината на низата, така што ова е местото каде што 805 00:55:51,000 --> 00:55:54,000 претпоставувајќи имав низа на ints, 806 00:55:54,000 --> 00:56:12,000 велат дека имав int numbaz [] = 1, 2, 3, 807 00:56:12,000 --> 00:56:16,000 вид на користење дека пробиени до синтакса право таму, 808 00:56:16,000 --> 00:56:21,000 тогаш што би го направил е во износ јас би сакал да помине во 809 00:56:21,000 --> 00:56:27,000 и numbaz и бројот 3 810 00:56:27,000 --> 00:56:30,000 да им кажам на сума функција "Океј, тука е низа сакам да резимираме." 811 00:56:30,000 --> 00:56:34,000 "Тука е нејзината големина." 812 00:56:34,000 --> 00:56:39,000 Дали тоа има смисла? Дали тоа одговори на вашето прашање? 813 00:56:39,000 --> 00:56:42,000 >> На многу начини тоа го прави паралела она што го правиме со главните 814 00:56:42,000 --> 00:56:44,000 кога имаме командната линија аргументи. 815 00:56:44,000 --> 00:56:47,000 А програма како Цезар шифра, на пример, дека се потребни 816 00:56:47,000 --> 00:56:53,000 командната линија аргументи не ќе бидат во можност да се направи нешто. 817 00:56:53,000 --> 00:56:57,000 Тоа не би знаеле како да го криптирате ако не кажам дека она клуч за употреба 818 00:56:57,000 --> 00:57:03,000 или ако не сте го кажам она што стринг си сакал да го криптирате. 819 00:57:03,000 --> 00:57:08,000 Поттикнувајќи за влез, ова е местото каде имаме 2 различни механизми 820 00:57:08,000 --> 00:57:14,000 за преземање на влез во од страна на корисникот, за преземање на информации од корисникот. 821 00:57:14,000 --> 00:57:19,000 За Проблем Намести 1 видовме оваа GetInt, GetString, GetFloat начин 822 00:57:19,000 --> 00:57:26,000 се прашува за влез, и дека се вика користејќи го стандардниот влезен поток. 823 00:57:26,000 --> 00:57:28,000 Тоа е малку поинаква. 824 00:57:28,000 --> 00:57:31,000 Тоа е нешто што можете да направите на едно време што е спротивно на 825 00:57:31,000 --> 00:57:35,000 кога ќе се повика на програма, кога ќе ја стартувате програмата работи. 826 00:57:35,000 --> 00:57:41,000 На командната линија аргументи сите се специфицирани кога ќе ја стартувате програмата работи. 827 00:57:41,000 --> 00:57:47,000 Ние сме биле мешање на две од нив. 828 00:57:47,000 --> 00:57:52,000 Кога ние ги користиме аргументи на функција, тоа е многу сличен на командната линија аргументи до главна. 829 00:57:52,000 --> 00:57:56,000 Тоа е кога ќе се повика функцијата што треба да го каже 830 00:57:56,000 --> 00:58:05,000 што точно треба со цел да ги извршува своите задачи. 831 00:58:05,000 --> 00:58:08,000 Друга добра работа да се погледне и ќе ти дозволам да се погледне во него во слободното време, 832 00:58:08,000 --> 00:58:11,000 и тоа беше покриена во квизот-е на овој поим на опсегот 833 00:58:11,000 --> 00:58:15,000 и локални променливи наспроти глобални променливи. 834 00:58:15,000 --> 00:58:18,000 Се обрне внимание на тоа. 835 00:58:18,000 --> 00:58:23,000 >> Сега дека ние сме добивање на оваа други нешта, 836 00:58:23,000 --> 00:58:27,000 во Недела 3 почнавме да зборуваме за пребарување и подредување. 837 00:58:27,000 --> 00:58:32,000 Пребарување и подредување, барем во CS50, 838 00:58:32,000 --> 00:58:39,000 е многу вовед во некои од теоретски делови на компјутерските науки. 839 00:58:39,000 --> 00:58:42,000 Проблемот на пребарување, на проблемот на сортирање 840 00:58:42,000 --> 00:58:46,000 се големи, канонски проблеми. 841 00:58:46,000 --> 00:58:52,000 Како да не најдете одреден број во низа милијарди броеви? 842 00:58:52,000 --> 00:58:55,000 Како да не најдете одредено име во внатрешноста на телефонот книга 843 00:58:55,000 --> 00:58:59,000 кој е складирани на вашиот лаптоп? 844 00:58:59,000 --> 00:59:04,000 И така ние се воведе на овој поим на асимптотска бегство пати 845 00:59:04,000 --> 00:59:11,000 навистина да се измери колку долго, колку е тешко овие проблеми се, 846 00:59:11,000 --> 00:59:14,000 колку долго тие се да се реши. 847 00:59:14,000 --> 00:59:20,000 Во, верувам, 2011 во квизот има проблем кој мислам заслуги 848 00:59:20,000 --> 00:59:27,000 покриваат многу брзо, што е овој, проблемот 12. 849 00:59:27,000 --> 00:59:32,000 О, не, тоа е Омега. 850 00:59:32,000 --> 00:59:41,000 >> Тука зборуваме за најбрз можен рок време 851 00:59:41,000 --> 00:59:46,000 за одреден алгоритам а потоа најспоро можно кандидира време. 852 00:59:46,000 --> 00:59:52,000 Ова Омега и О се навистина само кратенки. 853 00:59:52,000 --> 00:59:55,000 Тие се нотационите кратенки за велејќи 854 00:59:55,000 --> 00:59:59,000 колку брзо во најдобар можен случај ќе ни алгоритам рок, 855 00:59:59,000 --> 01:00:06,000 и колку е бавно во најлош можен случај нашиот алгоритам ќе се кандидира? 856 01:00:06,000 --> 01:00:10,000 Да направиме неколку од овие, а овие исто така беа опфатени 857 01:00:10,000 --> 01:00:13,000 во краток за асимптотска нотација, која Силно препорачувам. 858 01:00:13,000 --> 01:00:17,000 Џексон направи навистина добра работа. 859 01:00:17,000 --> 01:00:23,000 Со бинарна пребарување, ние зборуваме за бинарни пребарување како алгоритам, 860 01:00:23,000 --> 01:00:28,000 и ние обично зборуваат за тоа во однос на нејзината голема О 861 01:00:28,000 --> 01:00:30,000 Што е голема О? 862 01:00:30,000 --> 01:00:34,000 Што е најспоро можно бегство за време на бинарни пребарување? 863 01:00:34,000 --> 01:00:36,000 [Студентски] N ²? 864 01:00:36,000 --> 01:00:41,000 Затвори, претпоставувам слично на тоа. 865 01:00:41,000 --> 01:00:43,000 Тоа е многу побрзо од тоа. 866 01:00:43,000 --> 01:00:45,000 [Студентски] Бинарни? >> Да, бинарна пребарување. 867 01:00:45,000 --> 01:00:47,000 [Студентски] Тоа е се најавите n. 868 01:00:47,000 --> 01:00:49,000 Вклучи n, па она што го прави најавите n значи? 869 01:00:49,000 --> 01:00:51,000 Тоа го половини секоја итерација. 870 01:00:51,000 --> 01:00:56,000 Точно, така што во најмал можен случај, 871 01:00:56,000 --> 01:01:00,000 велат ако имате решат низа 872 01:01:00,000 --> 01:01:08,000 од еден милион броеви и бројот што го барате 873 01:01:08,000 --> 01:01:14,000 или е првиот елемент во низа или последен елемент во низа. 874 01:01:14,000 --> 01:01:18,000 Запомнете, бинарна пребарување алгоритам работи со гледање на средината елемент, 875 01:01:18,000 --> 01:01:21,000 бидејќи ако тоа е натпревар кој го барате. 876 01:01:21,000 --> 01:01:23,000 Ако е така, тогаш одлично, ќе ја најде. 877 01:01:23,000 --> 01:01:27,000 >> Во најдобар можен случај, колку брзо го прави бинарни пребарување рок? 878 01:01:27,000 --> 01:01:29,000 [Студентите] 1. 879 01:01:29,000 --> 01:01:32,000 1, тоа е постојана време, голем О од 1. Да. 880 01:01:32,000 --> 01:01:36,000 [Студентски] Имам едно прашање. Кога ќе се каже се логирате на n, што значи во однос на база 2, нели? 881 01:01:36,000 --> 01:01:40,000 Да, тоа е друга работа. 882 01:01:40,000 --> 01:01:44,000 Велиме најавите n и претпоставувам кога бев во средно училиште 883 01:01:44,000 --> 01:01:48,000 Јас секогаш претпоставува дека се најавите беше база 10. 884 01:01:48,000 --> 01:01:57,000 Да, така да, се најавите база 2 обично е она што ние го користите. 885 01:01:57,000 --> 01:02:02,000 Повторно, да се вратам на бинарни пребарување, ако сте во потрага за или 886 01:02:02,000 --> 01:02:05,000 елементот на самиот крај или елемент на самиот почеток, 887 01:02:05,000 --> 01:02:08,000 затоа што започне во средината, а потоа ќе ги отфрлите 888 01:02:08,000 --> 01:02:13,000 кое половина не ги исполнуваат критериумите што го барате, 889 01:02:13,000 --> 01:02:15,000 и да одат во следната половина, а следниот половина, а следниот половина. 890 01:02:15,000 --> 01:02:19,000 Ако сум во потрага за најголемиот елемент во милиони целобројна низа 891 01:02:19,000 --> 01:02:25,000 Одам да го преполови најмногу најавите на 1 милион пати 892 01:02:25,000 --> 01:02:28,000 пред конечно тестираат и да видат дека елемент Јас барам 893 01:02:28,000 --> 01:02:33,000 е во најголемата или во највисок индекс на низата, 894 01:02:33,000 --> 01:02:38,000 и дека ќе се најавите на n, се логирате на 1 милион пати. 895 01:02:38,000 --> 01:02:40,000 >> Меур вид. 896 01:02:40,000 --> 01:02:43,000 Дали вие момци се сеќавам на меурот вид алгоритам? 897 01:02:43,000 --> 01:02:47,000 Кевин, може да ми даде брз повториме на она што се случи во балон вид алгоритам? 898 01:02:47,000 --> 01:02:50,000 [Кевин] Во суштина тоа оди преку се што е во листата. 899 01:02:50,000 --> 01:02:52,000 Тоа изгледа на првите две. 900 01:02:52,000 --> 01:02:55,000 Ако првиот е поголем од вториот им свопови. 901 01:02:55,000 --> 01:02:58,000 Потоа таа се споредува втората и третата, истото, свопови, 902 01:02:58,000 --> 01:03:00,000 третата и четвртата, сите на патот надолу. 903 01:03:00,000 --> 01:03:03,000 Поголем број ќе го следат до крајот. 904 01:03:03,000 --> 01:03:07,000 И по меѓутоа многу рунди ќе завршиш. 905 01:03:07,000 --> 01:03:11,000 Точно, така што Кевин каже е дека ние ќе се види поголема броеви 906 01:03:11,000 --> 01:03:15,000 меур до крајот на низата. 907 01:03:15,000 --> 01:03:19,000 На пример, дали ќе ти пречи одење нас преку овој пример, ако ова е нашата низа? 908 01:03:19,000 --> 01:03:21,000 [Кевин] Ќе се 2 и 3. 909 01:03:21,000 --> 01:03:23,000 3 е поголем од 2, па можете да ги трампа. 910 01:03:23,000 --> 01:03:29,000 [Нејт Х] Право, па ние се разменуваат овие, и така ние се 2, 3, 6, 4 и 9. 911 01:03:29,000 --> 01:03:31,000 [Кевин] Потоа ќе се споредат 3 и 6. 912 01:03:31,000 --> 01:03:33,000 3 е помала од 6, па можете да ги оставиме, 913 01:03:33,000 --> 01:03:37,000 и 6 и 4, ќе ги трампа, бидејќи 4 е помал од 6. 914 01:03:37,000 --> 01:03:42,000 [Нејт Х] Право, па можам да добијам 2, 3, 4, 6, 9. 915 01:03:42,000 --> 01:03:46,000 [Кевин] и 9 е поголем од 6, па можете да ја оставите. 916 01:03:46,000 --> 01:03:48,000 И дека ќе се врати преку неа повторно. 917 01:03:48,000 --> 01:03:50,000 >> [Нејт Х] Сум се направи во овој момент? >> [Кевин] бр 918 01:03:50,000 --> 01:03:52,000 И зошто не сум јас направено во овој момент? 919 01:03:52,000 --> 01:03:54,000 Поради тоа што изгледа како мојата низа е подредени. Јас барам во тоа. 920 01:03:54,000 --> 01:03:57,000 [Кевин] Оди низ него повторно и бидете сигурни дека нема повеќе свопови 921 01:03:57,000 --> 01:04:00,000 пред да може целосно да се запре. 922 01:04:00,000 --> 01:04:04,000 Точно, така што треба да се оди преку и бидете сигурни дека не постојат свопови 923 01:04:04,000 --> 01:04:06,000 дека можете да направите во овој момент. 924 01:04:06,000 --> 01:04:08,000 Тоа беше навистина само среќа, како што рече, тоа што заврши 925 01:04:08,000 --> 01:04:12,000 само ја да се направи 1 поминуваат низ и ние сме подредени. 926 01:04:12,000 --> 01:04:16,000 Но, за да го направите тоа во општата случај ние всушност ќе треба да го направите ова одново и одново. 927 01:04:16,000 --> 01:04:20,000 И всушност, ова е пример на најдобар можен случај, 928 01:04:20,000 --> 01:04:24,000 како што видовме во проблемот. 929 01:04:24,000 --> 01:04:28,000 Видовме дека на најдобар можен случај беше n. 930 01:04:28,000 --> 01:04:32,000 Отидовме преку низа 1 време. 931 01:04:32,000 --> 01:04:35,000 Што е најлошото можно случај за овој алгоритам? 932 01:04:35,000 --> 01:04:37,000 [Кевин] N ². 933 01:04:37,000 --> 01:04:41,000 И она што го прави тоа да изгледа? Што би низа изгледа дека ќе ја преземе n ² време? 934 01:04:41,000 --> 01:04:43,000 [Кевин] [недоловим] подредени. 935 01:04:43,000 --> 01:04:51,000 Точно, па ако имав низа 9, 7, 6, 5, 2, 936 01:04:51,000 --> 01:04:54,000 прво на 9 би меур целиот пат до. 937 01:04:54,000 --> 01:04:59,000 По 1 повторување би имале 7, 6, 5, 2, 9. 938 01:04:59,000 --> 01:05:07,000 Тогаш 7 би меур нагоре, 6, 5, 2, 7, 9, и така натаму и така натаму. 939 01:05:07,000 --> 01:05:13,000 >> Ние ќе мора да поминат низ целата низа n пати, 940 01:05:13,000 --> 01:05:16,000 и ти всушност може да се добие малку попрецизно од овој 941 01:05:16,000 --> 01:05:23,000 затоа што еднаш сме се пресели на 9 целиот пат до во својата последна можна положба 942 01:05:23,000 --> 01:05:26,000 знаеме дека ние никогаш не треба да се споредат против тој елемент повторно. 943 01:05:26,000 --> 01:05:29,000 Откако ќе почнете да жуборот на 7 до 944 01:05:29,000 --> 01:05:35,000 знаеме дека ние може да го запре откако 7 е во право пред 9 945 01:05:35,000 --> 01:05:37,000 бидејќи ние сме веќе во споредба со 9 до неа. 946 01:05:37,000 --> 01:05:46,000 Ако го направите ова на паметен начин, тоа не е вистина, претпоставувам, дека многу време. 947 01:05:46,000 --> 01:05:49,000 Вие нема да се споредат сите можни [недоловим] комбинации 948 01:05:49,000 --> 01:05:55,000 секој пат кога ќе поминат низ секоја итерација. 949 01:05:55,000 --> 01:05:59,000 Но, сепак, кога зборуваме за оваа горна граница велиме дека 950 01:05:59,000 --> 01:06:04,000 што се гледа n ² споредби на целиот пат низ. 951 01:06:04,000 --> 01:06:12,000 >> Да се ​​вратиме, и бидејќи ние сме почнуваат да се добие малку краток за време 952 01:06:12,000 --> 01:06:15,000 Јас би рекол ти дефинитивно треба да поминат низ остатокот од оваа табела, 953 01:06:15,000 --> 01:06:17,000 пополни сето тоа надвор. 954 01:06:17,000 --> 01:06:20,000 Мислам на примери. Мислам на конкретни примери. 955 01:06:20,000 --> 01:06:22,000 Тоа е навистина корисна и корисно да се направи. 956 01:06:22,000 --> 01:06:25,000 Нацртај го ова. 957 01:06:25,000 --> 01:06:28,000 Ова е вид на табела која како да одиш преку по компјутерски науки 958 01:06:28,000 --> 01:06:32,000 навистина треба да започне да се знаат овие од срце. 959 01:06:32,000 --> 01:06:34,000 Тоа се видови на прашања што се во интервјуа. 960 01:06:34,000 --> 01:06:36,000 Овие се видови на работи кои се добри да се знае, 961 01:06:36,000 --> 01:06:41,000 и мислам за оние работ случаи, навистина пронајдат начин да се размислува за 962 01:06:41,000 --> 01:06:45,000 знаејќи дека за меур сортирање на најлош можен низа 963 01:06:45,000 --> 01:06:52,000 да го решите со тоа е оној кој е во обратен редослед. 964 01:06:52,000 --> 01:06:58,000 >> Покажувачи. Ајде да зборуваме малку за покажувачи. 965 01:06:58,000 --> 01:07:03,000 Во последните неколку минути имаме тука 966 01:07:03,000 --> 01:07:11,000 Знам дека ова е нешто заедно со датотека I / O која е прилично нова. 967 01:07:11,000 --> 01:07:19,000 Кога зборуваме за покажувачи причина сакаме да зборуваме за покажувачи 968 01:07:19,000 --> 01:07:24,000 е затоа што, еден, кога ние работиме во C 969 01:07:24,000 --> 01:07:33,000 ние сме навистина во прилично ниско ниво во споредба со повеќето модерни програмски јазици. 970 01:07:33,000 --> 01:07:38,000 Ние сме во можност да манипулира со променливи во меморијата, 971 01:07:38,000 --> 01:07:43,000 дознаам каде тие всушност се наоѓа во рамките на нашите RAM меморија. 972 01:07:43,000 --> 01:07:46,000 Откако ќе се качил на да се земе оперативен систем класи ќе видите 973 01:07:46,000 --> 01:07:48,000 дека тоа е, пак, вид на апстракција. 974 01:07:48,000 --> 01:07:50,000 Тоа не е всушност случај. 975 01:07:50,000 --> 01:07:52,000 Имаме виртуелната меморија што се крие оние детали од нас. 976 01:07:52,000 --> 01:07:58,000 >> Но, за сега може да се претпостави дека кога имате програма, 977 01:07:58,000 --> 01:08:02,000 На пример, кога ќе почнат да оперираат вашиот Цезар шифра програма 978 01:08:02,000 --> 01:08:06,000 Ќе се вратиш назад на мојот iPad навистина брзо- 979 01:08:06,000 --> 01:08:12,000 дека на самиот почеток вашата програма, ако имате, да речеме, 980 01:08:12,000 --> 01:08:15,000 4 гигабајти RAM меморија за вашиот лаптоп, 981 01:08:15,000 --> 01:08:21,000 ќе се издвои овој дел, а ние ќе го наречеме овој RAM меморија. 982 01:08:21,000 --> 01:08:25,000 И тоа почнува во место ние ќе се јавите 0, 983 01:08:25,000 --> 01:08:30,000 и завршува на место кое ќе го наречеме 4 гигабајти. 984 01:08:30,000 --> 01:08:37,000 Јас навистина не можам да пишувам. Човекот, кој е пробиени. 985 01:08:37,000 --> 01:08:40,000 Кога вашата програма извршува 986 01:08:40,000 --> 01:08:44,000 оперативниот систем длаби до RAM меморија, 987 01:08:44,000 --> 01:08:51,000 и тоа одредува различни сегменти за различни делови од својата програма да живееме 988 01:08:51,000 --> 01:08:58,000 Овде долу оваа област е вид на ничија земја. 989 01:08:58,000 --> 01:09:02,000 Кога ќе одат нагоре малку подалеку тука 990 01:09:02,000 --> 01:09:05,000 имаш всушност местото каде 991 01:09:05,000 --> 01:09:09,000 кодот за вашата програма животи. 992 01:09:09,000 --> 01:09:13,000 Дека вистинските бинарен код, што извршна датотека всушност добива вчитана во меморијата 993 01:09:13,000 --> 01:09:17,000 кога ќе ја стартувате програмата, и тоа живее во кодот сегмент. 994 01:09:17,000 --> 01:09:22,000 И како програма извршува процесор гледа овој код сегмент 995 01:09:22,000 --> 01:09:24,000 да дознаам што е следната инструкција? 996 01:09:24,000 --> 01:09:27,000 Што е следната линија на кодот што треба да се изврши? 997 01:09:27,000 --> 01:09:31,000 >> Исто така има податочниот сегмент, а тоа е местото каде што тие низа константи 998 01:09:31,000 --> 01:09:34,000 се чуваат дека сте биле користење. 999 01:09:34,000 --> 01:09:42,000 А потоа подалеку таму е ова место наречено грамада. 1000 01:09:42,000 --> 01:09:46,000 Ние пристап меморија во таму со користење Примерок, 1001 01:09:46,000 --> 01:09:49,000 а потоа кон самиот врв на вашата програма 1002 01:09:49,000 --> 01:09:52,000 тука е оџакот, 1003 01:09:52,000 --> 01:09:57,000 и тоа е каде што ние сме во игра за повеќето од самиот почеток. 1004 01:09:57,000 --> 01:09:59,000 Ова не е да скала или ништо. 1005 01:09:59,000 --> 01:10:03,000 Многу од ова е вистинската пригодна машина зависни, 1006 01:10:03,000 --> 01:10:10,000 оперативен систем зависи, но ова е релативно како работите се chunked нагоре. 1007 01:10:10,000 --> 01:10:17,000 Кога ќе ја стартувате програмата и декларирате променлива наречена X- 1008 01:10:17,000 --> 01:10:27,000 Одам да се подготви друго поле долу, и ова ќе биде RAM меморија, како и. 1009 01:10:27,000 --> 01:10:29,000 И јас одам да се погледне. 1010 01:10:29,000 --> 01:10:34,000 Ќе се подготви остри линии за да се покаже ова е само мал дел од RAM меморија 1011 01:10:34,000 --> 01:10:38,000 и не сите на тоа како ние се подготви на врвот. 1012 01:10:38,000 --> 01:10:43,000 >> Ако Изјавувам целобројна променлива наречена x, 1013 01:10:43,000 --> 01:10:49,000 тогаш што всушност е мапирање 1014 01:10:49,000 --> 01:10:54,000 кои се чуваат во табелата на симболи од мојата програма 1015 01:10:54,000 --> 01:11:00,000 кој го поврзува името на X да овој регион на меморија што јас сум подготвен 1016 01:11:00,000 --> 01:11:03,000 токму тука помеѓу вертикална барови. 1017 01:11:03,000 --> 01:11:08,000 Ако имам линија код во мојата програма која се вели x = 7 1018 01:11:08,000 --> 01:11:15,000 процесор знае "О, добро, знам дека x животи во оваа локација во меморијата." 1019 01:11:15,000 --> 01:11:25,000 "Одам да се оди напред и да се напише 7 таму." 1020 01:11:25,000 --> 01:11:28,000 Како не го знам она што локацијата ова е во меморија? 1021 01:11:28,000 --> 01:11:30,000 Па, тоа е направено во компајлирате време. 1022 01:11:30,000 --> 01:11:34,000 Компајлерот се грижи за доделување каде што секоја од променливи се случува да одам 1023 01:11:34,000 --> 01:11:40,000 и создавање на специјални мапирање или подобро поврзување на точки 1024 01:11:40,000 --> 01:11:43,000 помеѓу симбол и каде тоа се случува, променлива името 1025 01:11:43,000 --> 01:11:46,000 и каде тоа се случува да живеат во меморија. 1026 01:11:46,000 --> 01:11:50,000 Но излегува дека ние всушност може да го пристап во нашите програми, како и. 1027 01:11:50,000 --> 01:11:55,000 Оваа добива важно кога ќе почнам да зборувам за некои од структури на податоци, 1028 01:11:55,000 --> 01:11:58,000 кој е концепт кој ние ќе се воведе подоцна. 1029 01:11:58,000 --> 01:12:09,000 >> Но, за сега, она што може да знам е дека може да се создаде покажувач на оваа локација, х. 1030 01:12:09,000 --> 01:12:12,000 На пример, јас може да се создаде покажувачот променлива. 1031 01:12:12,000 --> 01:12:16,000 Кога ќе се создаде покажувачот променлива ние ги користиме на ѕвезда нотација. 1032 01:12:16,000 --> 01:12:21,000 Во овој случај, тоа вели, ќе одам да се создаде покажувач на инт. 1033 01:12:21,000 --> 01:12:24,000 Тоа е еден вид како и секој друг. 1034 01:12:24,000 --> 01:12:27,000 Ние го даде променлива како y, 1035 01:12:27,000 --> 01:12:32,000 и потоа ставете ја еднаква на адреса, на адреса. 1036 01:12:32,000 --> 01:12:38,000 Во овој случај, ние може да се постави y да се укаже x 1037 01:12:38,000 --> 01:12:43,000 со преземање на адреса на x, што правиме со овој симболот, 1038 01:12:43,000 --> 01:12:55,000 а потоа ние во собата y да се укаже на тоа. 1039 01:12:55,000 --> 01:12:59,000 Што е ова во суштина не е ако ја гледаме нашата RAM меморија 1040 01:12:59,000 --> 01:13:02,000 ова создава посебна променлива. 1041 01:13:02,000 --> 01:13:04,000 Тоа се случува да го наречеме y, 1042 01:13:04,000 --> 01:13:06,000 и кога оваа линија на кодот се извршува 1043 01:13:06,000 --> 01:13:13,000 тоа е всушност се случува да се создаде малку покажувачот кои ние обично се подготви како стрела, 1044 01:13:13,000 --> 01:13:15,000 и го поставува y до точка на x. 1045 01:13:15,000 --> 01:13:17,000 Да. 1046 01:13:17,000 --> 01:13:19,000 [Студентски] Ако x е веќе покажувач, ќе ви само го прават 1047 01:13:19,000 --> 01:13:22,000 int * y = x наместо на симболот? 1048 01:13:22,000 --> 01:13:24,000 Да. 1049 01:13:24,000 --> 01:13:27,000 Ако x е веќе покажувач, а потоа можете да го поставите 2 совети еднакви едни на други, 1050 01:13:27,000 --> 01:13:30,000 во кој случај y не би укажуваат на x, 1051 01:13:30,000 --> 01:13:34,000 но за тоа ќе се укаже на она што x е да се покажува. 1052 01:13:34,000 --> 01:13:37,000 За жал, ние сме надвор од времето. 1053 01:13:37,000 --> 01:13:44,000 >> Што би рекол во овој момент, можеме да зборуваме за овој пат, 1054 01:13:44,000 --> 01:13:49,000 но јас би рекол да почне да работи преку овој проблем, # 14. 1055 01:13:49,000 --> 01:13:53,000 Можете да го видите тука е веќе малку пополнети за вас овде. 1056 01:13:53,000 --> 01:13:57,000 Можете да видите дека кога ќе прогласат 2 покажувачи, int * x и * y, 1057 01:13:57,000 --> 01:14:01,000 и се напомене дека укажува на * до променливата е нешто што е направено минатата година. 1058 01:14:01,000 --> 01:14:05,000 Излезе дека ова е слично на она што го правиме оваа година. 1059 01:14:05,000 --> 01:14:11,000 Тоа не е важно каде ќе напише * кога сте за прогласување на покажувачот. 1060 01:14:11,000 --> 01:14:17,000 Но ние имаме напишано * до видот 1061 01:14:17,000 --> 01:14:24,000 затоа што тоа го прави многу јасно дека сте прогласување на покажувачот променлива. 1062 01:14:24,000 --> 01:14:27,000 Можете да видите дека прогласување на 2 совети ни дава 2 кутии. 1063 01:14:27,000 --> 01:14:31,000 Еве кога ќе го поставите x еднаква Примерок 1064 01:14:31,000 --> 01:14:34,000 Што е ова велејќи дека се одвојуваат меморија во грамада. 1065 01:14:34,000 --> 01:14:41,000 Оваа мала кутија токму тука, овој круг, се наоѓа на грамада. 1066 01:14:41,000 --> 01:14:43,000 X е укажува на тоа. 1067 01:14:43,000 --> 01:14:46,000 Имајте на ум дека у се уште не укажува на ништо. 1068 01:14:46,000 --> 01:14:50,000 За да добиете меморија за чување на број 42 во х 1069 01:14:50,000 --> 01:14:55,000 ние ќе го користите она што нотација? 1070 01:14:55,000 --> 01:14:59,000 [Студентски] * x = 42. 1071 01:14:59,000 --> 01:15:01,000 Точно, * x = 42. 1072 01:15:01,000 --> 01:15:06,000 Тоа значи следат на стрелката и фрли 42 во таму. 1073 01:15:06,000 --> 01:15:09,000 Еве каде ние во собата y и x имаме y укажува на x. 1074 01:15:09,000 --> 01:15:13,000 Повторно, ова е исто како она што Кевин вели каде што ние во собата y еднаква на x. 1075 01:15:13,000 --> 01:15:15,000 Y не се укажува на x. 1076 01:15:15,000 --> 01:15:19,000 Напротив, тоа е укажува на она што x е да се покажува како добро. 1077 01:15:19,000 --> 01:15:24,000 >> А потоа конечно во оваа последна кутија има 2 можни работи што можеше да стори. 1078 01:15:24,000 --> 01:15:28,000 Една од нив е што може да се каже * x = 13. 1079 01:15:28,000 --> 01:15:33,000 Од друга работа е што може да се каже-Алекс, дали знаете што би можеле да го направите тука? 1080 01:15:33,000 --> 01:15:37,000 Може да се каже * x = 13 или- 1081 01:15:37,000 --> 01:15:41,000 [Студентски] Може да се каже int сеедно. 1082 01:15:41,000 --> 01:15:45,000 [Нејт Х] Ако ова се нарекува int променлива ние би можеле да го направите тоа. 1083 01:15:45,000 --> 01:15:49,000 Ние, исто така може да се каже * y = 13, бидејќи тие се двете укажува на истото место, 1084 01:15:49,000 --> 01:15:51,000 па ние може да го користи или променлива да одам таму. 1085 01:15:51,000 --> 01:15:56,000 Да. >> [Студентски] Што ќе изгледа како ако речеме int x е 13? 1086 01:15:56,000 --> 01:16:00,000 Тоа ќе биде декларативна нова променлива наречена X, кој не би сакал да работиш. 1087 01:16:00,000 --> 01:16:04,000 Би имале судир, бидејќи ние објави X да биде покажувачот се тука. 1088 01:16:04,000 --> 01:16:10,000 [Студентски] Ако имавме само таа изјава по себе она што ќе изгледа како во однос на кругот? 1089 01:16:10,000 --> 01:16:14,000 Ако имавме x = 13, тогаш би имале кутија, и наместо да стрела 1090 01:16:14,000 --> 01:16:16,000 доаѓаат надвор од кутијата би го нацрта тоа што само 13. 1091 01:16:16,000 --> 01:16:19,000 [Студентски] Во кутија. Во ред. 1092 01:16:19,000 --> 01:16:24,000 >> Ви благодариме за гледање, и со среќа на одбивање 0. 1093 01:16:24,000 --> 01:16:28,000 [CS50.TV]