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 И тогава ние ще се потопите в Quiz преглед 0 9 00:00:23,000 --> 00:00:26,000 и да прекарат малко време регенериране какво сме говорили за 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 На линия 16 има тази # определят, ние ще се върнем в само малко. 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 първото нещо, което се случва и това е много идиоматичен и типични за програма на С 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 и вземете argv [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 Cool. 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 върне нула, като стойността е нещо, което вие ще искате да получите в навик за правене. 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 Отново, това не е проблем за Проблем Set 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 Първо, ние обхождане на цялото съобщение себе си низ. 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 но вместо това ще се върне пет, защото ние хвърли в тази нула терминатор, 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 тъй като това ни беше # определят в горния десен ъгъл тук, 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 е, тъй като съобщението [] е относително голям брой, за да започнем с 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 и добавите тези две заедно в знаковият символ ти започваш да се получи преливане. 162 00:10:13,000 --> 00:10:17,000 Вие ще получите стойност, която е по-голяма от 127, 163 00:10:17,000 --> 00:10:22,000 , която е най-голямата стойност, че Чар променлива може да побере. 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 само обърна знака. 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 тук с Чар * съобщение, 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 тогава функцията ще върне тази нищожна стойност като начин да се каже 205 00:13:20,000 --> 00:13:23,000 "Хей, аз не се получи низ." 206 00:13:23,000 --> 00:13:27,000 Какво би станало, ако ние не поставяме съобщение = NULL, 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 Here It Goes. 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 >> [Student] Защо има не >> Съжаляваме? 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 по план сървър, така че ние не са хора Seg Faulting 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 Запомни Бинки във видеото, когато Бинки се опитва да 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 Cool. 259 00:16:40,000 --> 00:16:48,000 Повече въпроси относно Цезар? 260 00:16:48,000 --> 00:16:51,000 >> Нека продължим нататък. Нека разгледаме Revision 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 Header коментар преди, 266 00:17:12,000 --> 00:17:17,000 # Определят преди да се избегне използването на тези магически числа. 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 използва и ние искахме да валидира целия низ, 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 Три пъти по линии 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 и така ще получите една и така, това, което ние ще направим, е, че ние ще 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 Cool, чудесно. 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 По-специално, аз отивам да се сложи в щепсела за три на дъното, тъй като тези. 360 00:24:15,000 --> 00:24:20,000 Но ако сте се борят с двоичен, бита, HEX, че такива неща, 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 Имам 00110010. 375 00:25:16,000 --> 00:25:27,000 И аз отивам да го 00110010. 376 00:25:27,000 --> 00:25:30,000 За по математика гении след заедно у дома, 377 00:25:30,000 --> 00:25:35,000 това е ефективно да се умножи по две. 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 [Student] 0. >> [Нейт H.] 0. 385 00:25:55,000 --> 00:25:58,000 Велики, втората цифра? 386 00:25:58,000 --> 00:26:00,000 [Student] 1. 387 00:26:00,000 --> 00:26:02,000 [Нейт H.] Дали това е 1? 1 + 1? 388 00:26:02,000 --> 00:26:04,000 [Student] 10. 389 00:26:04,000 --> 00:26:08,000 [Нейт H.] точно, така че това е цифрата, че аз пиша точно под 2 сумират? 390 00:26:08,000 --> 00:26:11,000 [Студентска 1, 0, 0 и след това носят 1. 391 00:26:11,000 --> 00:26:15,000 [Нейт H.] 0 и носи една точно. 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 [Нейт H.] 1, перфектно. Кевин? 395 00:26:23,000 --> 00:26:27,000 [Кевин] 0. >> [Нейт H.] 0, Шарлот? 396 00:26:27,000 --> 00:26:30,000 [Шарлот] 0. >> [Нейт H.] Да, и какво да правя? 397 00:26:30,000 --> 00:26:32,000 [Student] 1. 398 00:26:32,000 --> 00:26:34,000 [Nate Х. И какво да правя? И тогава аз нося 1. 399 00:26:34,000 --> 00:26:36,000 Perfect, Sahb? >> Sahb Сега имате 1. 400 00:26:36,000 --> 00:26:40,000 [Нейт H. И да правя нещо тук? 401 00:26:40,000 --> 00:26:43,000 [Sahb] Тогава за следващия имате 1, защото пренесени 1. 402 00:26:43,000 --> 00:26:49,000 [Нейт H. Велики, така че тук можем да го завършим до. 403 00:26:49,000 --> 00:26:51,000 Cool. 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 х 100 + 3 х 10 + 7 х 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 в 0th позиция. 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 Ще се върнете към черно тук, ние имаме два на 0th позиция, 460 00:31:23,000 --> 00:31:27,000 и след това имаме два ¹, 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 Сега, това, което ние можем да направим, ако вие не сте напълно до ускоряване на вашите правомощия на две, 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 Веднъж имах интервю за работа, където ми беше казано, трябва да знам всички правомощия на две 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 Както и да си спестите време, ако изчисляване на правомощията на две не е вашата силна костюм. 485 00:33:05,000 --> 00:33:10,000 В този случай, ние само трябва да се изчисли за 2 до 0, което е? 486 00:33:10,000 --> 00:33:12,000 [Student] 1. 487 00:33:12,000 --> 00:33:14,000 , [Нейт H.] 1, 2 до 3, което е? 488 00:33:14,000 --> 00:33:16,000 [Student] 8. >> Нейт H.] 8. 489 00:33:16,000 --> 00:33:18,000 2 до 4? 490 00:33:18,000 --> 00:33:21,000 Student [2]. Съжалявам, 1. 491 00:33:21,000 --> 00:33:26,000 [Нейт H.] 2 до 4 е 16, точно така. 492 00:33:26,000 --> 00:33:28,000 От 2 до 5, Кевин? >> 32. 493 00:33:28,000 --> 00:33:32,000 , [Нейт H.] 32, от 2 до 8? 494 00:33:32,000 --> 00:33:38,000 [Student] 32 х 8, 256. 495 00:33:38,000 --> 00:33:41,000 [Нейт H.] Perfect. 496 00:33:41,000 --> 00:33:43,000 И 2 до 10? 497 00:33:43,000 --> 00:33:45,000 [Student 1024. 498 00:33:45,000 --> 00:33:49,000 [Нейт H.] Да, 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 Можете да кажете, че има една в края на този номер, 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 Hacker неща. Внимавай за този вид неща в средносрочен план или викторина, а. 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 Твърдения като х = 7, която определя променлива, 557 00:37:51,000 --> 00:37:54,000 вероятно нарича х = 7. 558 00:37:54,000 --> 00:38:01,000 Вероятно х също е един вид, който може да съхранява числото 7, 559 00:38:01,000 --> 00:38:05,000 така че това е вътр или евентуално с плаваща запетая или кратък или по-Чар, 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 Loops, припомни 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 но това са два различни начина на работа с този голям проблем, наречен едновременност, 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 просто защото това е значително по-трудно, отколкото в Scratch. 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 Изходен код е кода на C, която всъщност въвежда. 610 00:41:47,000 --> 00:41:50,000 Обектен код е това, което получавате от ехтя. 611 00:41:50,000 --> 00:41:54,000 Това е 0s и 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 програми, които ги дават разширение. Java. 617 00:42:18,000 --> 00:42:24,000 Python програми имат разширение. Пи често. 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 имате Хеалатно връзка, всички от тях обект подава заедно 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 , който е бил съставен, че е 0s и 1s, 628 00:43:02,000 --> 00:43:08,000 и че л флаг, така че, ако се върнем към нашите пространства и ние с нетърпение наистина бързо 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 И тогава в самия край, те-л знамена връзка 633 00:43:22,000 --> 00:43:30,000 реалните двоични файлове за тези две библиотеки, 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 Cool. 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 и свързващата програма ще каже: "Хей, ти се обади функция 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 Бих казал, вие определено искате да погледнете в краткосрочен типаж, направено от Йордания 653 00:44:49,000 --> 00:44:55,000 да се разбере какво цели числа са под капака, 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 Типаж е как да кажеш на компютъра "Хей, аз искам да конвертирате 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 През седмица две говорихме малко повече за функциите. 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 [Student] Майн. >> Майн, точно така. 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 или, че сега сме в действителност изложени низ да бъде знак *, че това е 690 00:47:13,000 --> 00:47:20,000 ние ще започнем да я пиша като знак * 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 е, че има три части за тях, когато пишете функция. 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 И за всеки аргумент ти я дам две неща, които са Кевин? 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 масив от цели числа Ще 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 Но масив, който минавам с не трябва да имат ARR име. 721 00:49:59,000 --> 00:50:07,000 Arr ще бъде, как се отнасят до този аргумент в тялото на функцията. 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 В този случай, щях да искам да се използва запетая - Съжалявам, но ще екрана тук 743 00:51:28,000 --> 00:51:32,000 и аз ще премине в друг аргумент, 744 00:51:32,000 --> 00:51:40,000  и го наричат ​​INT дъл за дължината. 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 Cool. 777 00:53:51,000 --> 00:53:53,000 >> Базил. 778 00:53:53,000 --> 00:53:56,000 [Василий] Каква е разликата между деклариране, да речем, вътр 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 от цели числа, вие също трябва да ни кажете колко голям масив, който сте ни дали е ". 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 [Нейт H.] Ако имам Int основната (Void), 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 Искам да кажа, вътр х = SUM (); 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 ако имах масив от цели числа, 806 00:55:54,000 --> 00:56:12,000 казват, че имах вътр 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 Подтик за вход, това е мястото, където ние имаме две различни механизми 820 00:57:08,000 --> 00:57:14,000 за вземане на вход от потребителя, за вземане на информация от потребителя. 821 00:57:14,000 --> 00:57:19,000 Проблем Задайте една видяхме този 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 Това Омега и O са наистина само комбинации. 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 и обикновено говорим за това по отношение на голямата си O. 861 01:00:28,000 --> 01:00:30,000 Каква е голяма O? 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 [Student] Binary? >> Да, двоично търсене. 867 01:00:45,000 --> 01:00:47,000 [Student] Това е дневник н. 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, това е константно време, голяма O от 1. Да. 880 01:01:32,000 --> 01:01:36,000 [Student] Аз имам един въпрос. Когато казвате, влезте на 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 >> Bubble вид. 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 [Нейт H.] Право, така че ние суап тях, така че да получите 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 е по-малък от шест. 914 01:03:37,000 --> 01:03:42,000 [Нейт H. надясно, така че да получите 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 >> [Нейт H.] съм направил в този момент? >> Кевин] Не 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 И това, което изглежда това? Какво би поглед масив като това ще отнеме н време ²? 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 е точно преди девет 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 операционната система зависима, но това е относително как нещата се състоят от. 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 , който свързва името на Х към този район на паметта, че съм съставен 1016 01:11:00,000 --> 01:11:03,000 между вертикалните линии. 1017 01:11:03,000 --> 01:11:08,000 Ако имам линия на код в моята програма, която казва х = 7 1018 01:11:08,000 --> 01:11:15,000 процесор си знае "О, добре, знам, че рентгеновите живота на това място в паметта." 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 Ние го дадат променлива като у 1035 01:12:27,000 --> 01:12:32,000 и тогава ние, равна на адреса, на адрес. 1036 01:12:32,000 --> 01:12:38,000 В този случай, ние можем да настроите години да сочи към х 1037 01:12:38,000 --> 01:12:43,000 , като адрес на х, което правим с този символ, 1038 01:12:43,000 --> 01:12:55,000 и тогава ние години да сочи към него. 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 Това ще да го наричат ​​г., 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 и го постави г. да сочи към х. 1045 01:13:15,000 --> 01:13:17,000 Да. 1046 01:13:17,000 --> 01:13:19,000 [Student] Ако х е вече показалеца, бихте просто правя 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 Ако х е вече показалеца, след това можете да зададете два указатели равни един с друг, 1050 01:13:27,000 --> 01:13:30,000 в този случай Y не би х 1051 01:13:30,000 --> 01:13:34,000 но това ще посоча какъвто и да е х е насочена към. 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 указатели, вътр Х и 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 кутии. 1063 01:14:27,000 --> 01:14:31,000 Тук, когато ние х равна на изчистване 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 [Student] * х = 42. 1071 01:14:59,000 --> 01:15:01,000 Точно така, * х = 42. 1072 01:15:01,000 --> 01:15:06,000 Това означава, че следваш стрелката и хвърлят 42 там. 1073 01:15:06,000 --> 01:15:09,000 Тук, където ние ш и х Y сочи към х. 1074 01:15:09,000 --> 01:15:13,000 Отново, това е точно като това, което каза Кевин, където ние Y равна на х. 1075 01:15:13,000 --> 01:15:15,000 Y не е насочен към х. 1076 01:15:15,000 --> 01:15:19,000 Вместо това, тя сочи какво х е насочена както и. 1077 01:15:19,000 --> 01:15:24,000 >> И накрая в този последен прозорец има два възможни неща, които можем да направим. 1078 01:15:24,000 --> 01:15:28,000 Един от тях е, бихме могли да кажем * х = 13. 1079 01:15:28,000 --> 01:15:33,000 Другото нещо е, бихме могли да кажем Алекс, не знаеш какво можем да направим тук? 1080 01:15:33,000 --> 01:15:37,000 Може да се каже * х = 13 или 1081 01:15:37,000 --> 01:15:41,000 [Student] Може да се каже INT каквото. 1082 01:15:41,000 --> 01:15:45,000 [Нейт H.] Ако това беше посочено като едно цяло число променлива бихме могли да направим това. 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 х е 13? 1086 01:15:56,000 --> 01:16:00,000 Това ще бъде за обявяване на нова променлива, наречена Х, който няма да работи. 1087 01:16:00,000 --> 01:16:04,000 Ще имаме сблъсък, защото ние декларирахме, за да бъде показалеца тук. 1088 01:16:04,000 --> 01:16:10,000 Студентски] Ако ние просто трябваше това твърдение само по себе си какво щеше да изглежда по отношение на кръга? 1089 01:16:10,000 --> 01:16:14,000 Ако имахме х = 13 тогава ние ще трябва кутия, и по-скоро, отколкото като стрела 1090 01:16:14,000 --> 01:16:16,000 излиза от кутията, ние ще го привлече като само на 13. 1091 01:16:16,000 --> 01:16:19,000 [Student] В кутията. Добре. 1092 01:16:19,000 --> 01:16:24,000 >> Благодаря ви за гледане и късмет на Quiz 0. 1093 01:16:24,000 --> 01:16:28,000 [CS50.TV]