1 00:00:00,000 --> 00:00:00,000 2 00:00:00,000 --> 00:00:00,000 [МУЗИКА] 3 00:00:00,000 --> 00:00:13,950 4 00:00:13,950 --> 00:00:16,240 >> DAVID J. Малан: Добре, це CS50. 5 00:00:16,240 --> 00:00:18,010 І це один тиждень. 6 00:00:18,010 --> 00:00:22,050 Так Нагадаємо, що в останній раз в нульовий тижня, ми зосередилися на обчислювальної мислення. 7 00:00:22,050 --> 00:00:25,440 І ми перейшли від того, щоб Подряпини, графічне програмування 8 00:00:25,440 --> 00:00:27,360 мова від наших друзів в медіа-лабораторії Массачусетського технологічного інституту. 9 00:00:27,360 --> 00:00:31,730 >> І з нуля, так і ми досліджуємо ідеї, як функції і умови, 10 00:00:31,730 --> 00:00:35,210 і петлі, і змінні, і навіть події та теми, і багато іншого. 11 00:00:35,210 --> 00:00:37,880 І сьогодні, ми будемо продовжувати використовувати ці ідеї, 12 00:00:37,880 --> 00:00:40,630 і дійсно приймаючи їх за як належне, але перевести їх 13 00:00:40,630 --> 00:00:44,220 на іншу мову, відомий як C. Тепер, C являє собою більш традиційний мову. 14 00:00:44,220 --> 00:00:46,020 Це нижчий рівень мова, якщо ви будете. 15 00:00:46,020 --> 00:00:47,300 >> Це чисто текстуально. 16 00:00:47,300 --> 00:00:49,910 І так, на перший погляд, це все буде виглядати досить загадковим 17 00:00:49,910 --> 00:00:51,430 якщо ви ніколи не програмували раніше. 18 00:00:51,430 --> 00:00:53,530 Ми будемо мати крапка з комою, і круглі дужки, 19 00:00:53,530 --> 00:00:55,150 і фігурні дужки, і багато іншого. 20 00:00:55,150 --> 00:00:57,240 Але зрозумійте, що навіть хоча синтаксис 21 00:00:57,240 --> 00:01:00,600 про те, щоб виглядати трохи незнайомій більшості з вас, бачити минуле. 22 00:01:00,600 --> 00:01:03,220 І спробувати побачити ідеї що, дійсно, знайомі, 23 00:01:03,220 --> 00:01:06,750 тому що тут, в тиждень один, що ми почнемо робити це порівняння, 24 00:01:06,750 --> 00:01:08,980 Спочатку, Подряпини в порівнянні з C. 25 00:01:08,980 --> 00:01:12,350 >> Так, наприклад, згадати, що, коли ми реалізований перший з наших програм 26 00:01:12,350 --> 00:01:16,220 в минулий раз, у нас був блок, який виглядав трохи щось на зразок this-- коли це 27 00:01:16,220 --> 00:01:19,990 зелений прапор клацнув, а потім ми мали один або більше частин головоломки під ним, 28 00:01:19,990 --> 00:01:22,150 в цьому випадку, скажімо, привіт світ. 29 00:01:22,150 --> 00:01:24,870 Так що, насправді, в порожньому місці, коли я натискаю, що зелений прапор 30 00:01:24,870 --> 00:01:27,390 щоб запустити свою програму, так говорити, це 31 00:01:27,390 --> 00:01:29,520 блоки, які отримують виконуються, або бігти. 32 00:01:29,520 --> 00:01:32,230 І, зокрема, до подряпин сказав, привіт, світ. 33 00:01:32,230 --> 00:01:35,377 >> Тепер, я міг би уточнили різні слова тут. 34 00:01:35,377 --> 00:01:37,960 Але ми бачимо, що, дійсно, багато з цих blocks-- і насправді, 35 00:01:37,960 --> 00:01:41,880 в C багато functions-- може бути параметризрвані або замовний 36 00:01:41,880 --> 00:01:43,150 робити різні речі. 37 00:01:43,150 --> 00:01:45,520 Справді, в C, якщо ми хочете конвертувати, в даний час, 38 00:01:45,520 --> 00:01:47,567 ця програма Царапина на цей іншу мову, 39 00:01:47,567 --> 00:01:49,650 ми збираємося написати мало щось на зразок цього. 40 00:01:49,650 --> 00:01:52,540 >> Звичайно, є деякі незнайомі синтаксис там, швидше за все, Int, 41 00:01:52,540 --> 00:01:54,380 і круглі дужки і недійсними. 42 00:01:54,380 --> 00:01:57,740 Але printf-- навіть якщо ви б думаю, що це буде просто роздрукувати. 43 00:01:57,740 --> 00:02:00,120 Але друк означає друк відформатований, як ми скоро побачимо. 44 00:02:00,120 --> 00:02:02,140 Це в буквальному сенсі буде друкувати до екрана незалежно 45 00:02:02,140 --> 00:02:05,990 знаходиться всередині цих дужок, яка Звичайно, в даному випадку, привіт світ. 46 00:02:05,990 --> 00:02:09,290 >> Але ви помітите деякі інші Синтаксис, деякі подвійні лапки, 47 00:02:09,290 --> 00:02:11,890 що круглі дужки в кінці, напів-ободової кишки тощо. 48 00:02:11,890 --> 00:02:15,027 Таким чином, є кілька накладних витрат, так би мовити, як пізнавально 49 00:02:15,027 --> 00:02:17,860 і синтаксично, що ми збираємося щоб пам'ятати, перш ніж довго. 50 00:02:17,860 --> 00:02:20,720 Але розумію, що з практикою, це почне вискакувати на вас. 51 00:02:20,720 --> 00:02:24,920 >> Насправді, давайте зосередимося на тому Функція specifically-- в цьому випадку, 52 00:02:24,920 --> 00:02:26,290 сказати привіт світ. 53 00:02:26,290 --> 00:02:27,560 Так би мовити, це функція. 54 00:02:27,560 --> 00:02:31,320 Привіт світ є параметром, або аргумент, його налаштування. 55 00:02:31,320 --> 00:02:34,320 >> І еквівалентність в С просто буде це один рядок тут, 56 00:02:34,320 --> 00:02:38,710 де Printf еквівалентно, скажімо, подвійної лапки, привіт 57 00:02:38,710 --> 00:02:41,470 світ еквівалентно, звичайно ж, до того, що в білій коробці там. 58 00:02:41,470 --> 00:02:45,680 І зворотний слеш н, хоч скільки-небудь дивно і відсутній на порожньому місці, 59 00:02:45,680 --> 00:02:49,380 просто буде мати ефект, ми будемо см в комп'ютері, як мій Mac або PC, 60 00:02:49,380 --> 00:02:51,660 просто переміщуючи курсор на наступний рядок. 61 00:02:51,660 --> 00:02:53,970 Це як удар Введіть на клавіатурі. 62 00:02:53,970 --> 00:02:55,580 >> Таким чином, ми бачимо, що знову незабаром. 63 00:02:55,580 --> 00:02:58,640 Але по-перше, давайте поглянемо на це Інший приклад, в разі петель. 64 00:02:58,640 --> 00:03:02,830 Ми повинні були це назавжди петлю в останній раз, який був ряд головоломки 65 00:03:02,830 --> 00:03:05,490 що зробив щось в буквальному сенсі forever-- в даному випадку, 66 00:03:05,490 --> 00:03:08,360 сказати, привіт світ, привіт світ, привіт світ, привіт світ. 67 00:03:08,360 --> 00:03:10,350 Так що це нескінченний цикл, відповідно до проекту. 68 00:03:10,350 --> 00:03:14,580 >> У C, якщо ми хочемо, щоб це реалізувати Та ж ідея, ми могли б просто зробити це. 69 00:03:14,580 --> 00:03:19,570 У той час як вірно, Printf привіт world-- прямо зараз в той час, як раз семантично, вид 70 00:03:19,570 --> 00:03:23,090 навіває думка робити щось знову, і знову, і знову, 71 00:03:23,090 --> 00:03:23,980 і як довго? 72 00:03:23,980 --> 00:03:27,990 Що ж, нагадаємо, що true-- правда, це тільки на один або. 73 00:03:27,990 --> 00:03:30,660 >> І правда, це, звичайно ж, завжди вірно. 74 00:03:30,660 --> 00:03:33,060 Так що це свого роду безглузда заяву просто сказати, правда. 75 00:03:33,060 --> 00:03:36,890 Але насправді, це навмисне, тому що, якщо правда, то як раз завжди вірно, 76 00:03:36,890 --> 00:03:40,850 ніж в той час як вірно якраз має на увазі, якщо трохи побічно, 77 00:03:40,850 --> 00:03:44,070 що такі рядки коду між цими фігурними дужками 78 00:03:44,070 --> 00:03:48,320 потрібно просто виконати знову, і знову, і знову, і ніколи не зупинятися. 79 00:03:48,320 --> 00:03:50,230 >> Але якщо ви хочете, щоб ваші петля, щоб зупинити, як ми 80 00:03:50,230 --> 00:03:54,500 в минулий раз з чимось на зразок це, повторіть наступні 50 разів, 81 00:03:54,500 --> 00:03:57,700 в С ми можемо зробити те ж саме з тим, що називається для loop-- ключове слово 82 00:03:57,700 --> 00:03:59,330 не будучи в той час як, але для. 83 00:03:59,330 --> 00:04:03,290 І тоді у нас є деякий новий синтаксис тут, з міжнар я дорівнює 0, я менше, ніж 50, 84 00:04:03,290 --> 00:04:03,880 я ++. 85 00:04:03,880 --> 00:04:05,430 І ми повернемося до цього. 86 00:04:05,430 --> 00:04:09,660 Але це просто як би ми перевести безліч блоків схрестити 87 00:04:09,660 --> 00:04:13,079 до набору C рядків коду. 88 00:04:13,079 --> 00:04:14,450 >> У той же час, розглядати змінні. 89 00:04:14,450 --> 00:04:16,540 І справді, ми просто бачив один хвилину назад. 90 00:04:16,540 --> 00:04:21,220 І в разі нуля, якщо ми хотів оголосити змінну I 91 00:04:21,220 --> 00:04:24,590 для я бути цілим числом, просто число, і ми хочемо, щоб встановити його до деякого значення, 92 00:04:24,590 --> 00:04:28,410 ми будемо використовувати цей помаранчевий блок here-- встановити я до 0. 93 00:04:28,410 --> 00:04:30,800 >> І ми бачимо сьогодні і за його межами, так само, як минулого тижня, 94 00:04:30,800 --> 00:04:33,850 програмісти роблять майже завжди почати відлік з нуля, насправді 95 00:04:33,850 --> 00:04:34,950 відповідно до угоди. 96 00:04:34,950 --> 00:04:37,250 А й тому, що відкликає наше обговорення двійковій, 97 00:04:37,250 --> 00:04:39,990 найменше число ви можете представляти з будь-якою кількістю бітів 98 00:04:39,990 --> 00:04:41,640 тільки збирається бути 0 сама. 99 00:04:41,640 --> 00:04:45,190 І тому ми як правило, починають ініціалізувавши навіть наші змінні 0. 100 00:04:45,190 --> 00:04:47,710 >> А в С, щоб зробити те ж саме, ми будемо говорити Int 101 00:04:47,710 --> 00:04:50,110 для цілого числа, я тільки за згодою. 102 00:04:50,110 --> 00:04:53,390 Я міг би назвати цю змінну все, що я хочу, так само, як в порожньому місці. 103 00:04:53,390 --> 00:04:57,770 І тоді дорівнює 0 тільки правонаступників значення 0 з правого боку 104 00:04:57,770 --> 00:05:01,319 і поміщає його в змінну, або контейнер для зберігання там, на лівій стороні. 105 00:05:01,319 --> 00:05:04,360 І напів-ободової кишки, як ми see-- і ми вже бачили деякі з цих already-- 106 00:05:04,360 --> 00:05:06,530 просто означає кінець думки. 107 00:05:06,530 --> 00:05:09,430 Продовжуйте робити щось інше на лініях, які слідують. 108 00:05:09,430 --> 00:05:11,330 >> Тепер, що стосується логічних виразів? 109 00:05:11,330 --> 00:05:14,320 Нагадаємо, що в порожньому місці, вони були вираженням 110 00:05:14,320 --> 00:05:16,740 які є або істинними або false-- питання, 111 00:05:16,740 --> 00:05:18,910 насправді, які є або істинними, або хибними. 112 00:05:18,910 --> 00:05:21,960 Таким чином, в разі нуля, ми могли б задати просте запитання, як це, 113 00:05:21,960 --> 00:05:24,586 це я менше, ніж 50? 114 00:05:24,586 --> 00:05:25,710 Так що я, знову ж таки, є цілим числом. 115 00:05:25,710 --> 00:05:27,210 Може бути, ми використовуємо його в програмі Скретч 116 00:05:27,210 --> 00:05:29,310 стежити за рахунком або щось в цьому роді. 117 00:05:29,310 --> 00:05:33,810 Так що цей синтаксис тут в порожньому місці просто означає, це я менше, ніж 50? 118 00:05:33,810 --> 00:05:37,330 Ну, на щастя, щось простий в C. І переводити, 119 00:05:37,330 --> 00:05:41,780 це ми б просто сказати, що я менше ніж 50, використовуючи знайомий ключ 120 00:05:41,780 --> 00:05:42,850 на клавіатурі. 121 00:05:42,850 --> 00:05:45,141 >> У той же час, якщо ви хочете сказати щось більш загальне, 122 00:05:45,141 --> 00:05:49,890 як, добре, х менше у, де кожен х і у самі по собі є змінними? 123 00:05:49,890 --> 00:05:52,280 Ми можемо зробити те ж саме в С, до тих пір, як ми 124 00:05:52,280 --> 00:05:53,942 створили ці змінні вже. 125 00:05:53,942 --> 00:05:55,650 І ми побачимо, як зробити це незабаром. 126 00:05:55,650 --> 00:05:58,590 Ми просто сказали б х менше у. 127 00:05:58,590 --> 00:06:00,530 >> Таким чином, ви починаєте побачити деякі загальні риси. 128 00:06:00,530 --> 00:06:03,490 І ті люди, які зробили Подряпини були, звичайно, 129 00:06:03,490 --> 00:06:05,250 натхненні деякі з цих основних ідей. 130 00:06:05,250 --> 00:06:10,350 І ви побачите, цей вид Синтаксис у багатьох languages-- 131 00:06:10,350 --> 00:06:12,160 а не просто на порожньому місці, не просто C, але Python, 132 00:06:12,160 --> 00:06:14,790 і JavaScript, і інші мови досі. 133 00:06:14,790 --> 00:06:18,270 >> Розглянемо іншу конструкцію від C, поняття стану, 134 00:06:18,270 --> 00:06:20,370 робити щось умовно. 135 00:06:20,370 --> 00:06:22,720 Якщо щось вірно, то це зробити. 136 00:06:22,720 --> 00:06:24,457 Якщо щось ще, правда, зробити це. 137 00:06:24,457 --> 00:06:27,040 Це свого роду програмування еквівалент розвилки. 138 00:06:27,040 --> 00:06:29,730 Може бути, це двостороння вилка, триходовий вилка, або більше. 139 00:06:29,730 --> 00:06:32,800 І в порожньому місці, ми могли б мати бачив щось подібне до цього. 140 00:06:32,800 --> 00:06:34,010 >> Так що це одна велика одна. 141 00:06:34,010 --> 00:06:36,750 Але розглянемо відносне Простота логіки. 142 00:06:36,750 --> 00:06:44,010 Якщо х менше у, то говорять х менше ніж у, інакше, якщо х більше у, 143 00:06:44,010 --> 00:06:46,230 то кажуть х більше у. 144 00:06:46,230 --> 00:06:48,300 І тоді, за логікою речей, якщо ви згадайте нуля 145 00:06:48,300 --> 00:06:52,610 або просто свій власний людської інтуїції, добре, якщо х не більш, ніж у, і х 146 00:06:52,610 --> 00:06:57,000 не менш, ніж у, то, звичайно, х буде дорівнює у. 147 00:06:57,000 --> 00:06:59,690 Так що в цьому випадку, по вкладеності ці Скретч блоки, 148 00:06:59,690 --> 00:07:02,580 ми можемо досягти трьох спосіб розвилка? 149 00:07:02,580 --> 00:07:04,980 >> У той же час, якщо ми хочемо зробити це в C, це можливо 150 00:07:04,980 --> 00:07:08,420 виглядає трохи simpler-- принаймні, як тільки ви отримаєте знайомі з синтаксисом. 151 00:07:08,420 --> 00:07:12,050 Якщо х менше у, Printf х менше у. 152 00:07:12,050 --> 00:07:16,140 Інакше, якщо х більше у, Printf х більше у. 153 00:07:16,140 --> 00:07:21,210 Інакше Printf х одно y-- і, знову ж таки, з тими, зворотна коса риска закінчується просто 154 00:07:21,210 --> 00:07:24,160 для тих нових ліній, так що якщо ви насправді запустили цей вид програми 155 00:07:24,160 --> 00:07:25,940 було б просто перемістити курсор в кінцевому рахунку, 156 00:07:25,940 --> 00:07:28,100 до наступного рядка екрану. 157 00:07:28,100 --> 00:07:31,270 >> Тепер, тим часом Царапина була інша складніші функції, тільки 158 00:07:31,270 --> 00:07:34,320 деякі з яких ми збираємося спочатку рухатися по всьому світу, С. 159 00:07:34,320 --> 00:07:37,010 І один з них був називається списком в порожньому місці. 160 00:07:37,010 --> 00:07:39,100 І це був особливий тип змінної, 161 00:07:39,100 --> 00:07:42,840 дозволило зберігати кілька речей в ньому назад, до спини, до спини, до спини. 162 00:07:42,840 --> 00:07:45,540 >> У C, він не має списки, самі по собі, але щось 163 00:07:45,540 --> 00:07:48,090 які в більш загальному сенсі називається масиви, хоча ми 164 00:07:48,090 --> 00:07:50,590 повернутися пізніше в цьому семестрі дивитися на щось 165 00:07:50,590 --> 00:07:52,780 називається список, або дійсно пов'язаний список. 166 00:07:52,780 --> 00:07:55,510 Але зараз, найближче еквівалент в C для нас 167 00:07:55,510 --> 00:07:57,345 буде щось називається масивом. 168 00:07:57,345 --> 00:07:59,740 І масив просто особливий тип змінної 169 00:07:59,740 --> 00:08:03,160 що дозволяє зберігати дані тому, до спини, до спини, до спини. 170 00:08:03,160 --> 00:08:05,840 >> І дійсно, в порожньому місці, якщо ми хочемо отримати доступ 171 00:08:05,840 --> 00:08:09,030 перший елемент масиву або list-- і я буду називати його, 172 00:08:09,030 --> 00:08:13,600 За угодою, ARGV, аргумент вектор, але про це незабаром. 173 00:08:13,600 --> 00:08:17,090 Якщо я хочу, щоб отримати на першому елементі з ARGV, в світі нуля 174 00:08:17,090 --> 00:08:20,930 ви насправді, як правило, почати відлік з 1. 175 00:08:20,930 --> 00:08:22,850 >> І таким чином я міг би отримати пункт 1 ARGV. 176 00:08:22,850 --> 00:08:26,310 Це просто, як реалізується MIT поняття списків. 177 00:08:26,310 --> 00:08:29,860 Але в C, я збираюся простіше просто сказати, ARGV, 178 00:08:29,860 --> 00:08:32,758 що знову-таки це ім'я мого list-- або бути ясно, масив. 179 00:08:32,758 --> 00:08:34,549 А якщо я хочу першим елементи, я збираюся 180 00:08:34,549 --> 00:08:37,890 використовувати квадратні дужки, яких ви можливо, не часто використовується під клавіатурою. 181 00:08:37,890 --> 00:08:40,150 >> Але 0 просто означає, зрозумійте мене першим. 182 00:08:40,150 --> 00:08:42,160 Так що в деяких випадках, і як проходить час, ми будемо 183 00:08:42,160 --> 00:08:44,570 щоб почати бачити ці дихотомії між нуля і С, 184 00:08:44,570 --> 00:08:46,070 в результаті чого Царапина використовує один. 185 00:08:46,070 --> 00:08:47,670 Ми в C використовувати 0 тут. 186 00:08:47,670 --> 00:08:49,420 Але ви швидко зрозумієте, як тільки ви розумієте 187 00:08:49,420 --> 00:08:52,920 основи кожної мови, тобто ці речі починають ставати все більш 188 00:08:52,920 --> 00:08:56,860 знайому по практиці і практиці. 189 00:08:56,860 --> 00:08:59,700 >> Так що давайте насправді тепер подивіться на програму. 190 00:08:59,700 --> 00:09:04,031 Тут має бути першим з нашої C Вихідний код для повних програм. 191 00:09:04,031 --> 00:09:06,280 А програма, яку ми запропонувати для розгляду 192 00:09:06,280 --> 00:09:09,340 це той, який еквівалентний до цього раніше Скретч шматок. 193 00:09:09,340 --> 00:09:13,210 >> Так що тут, у нас є те, що можливо, найпростіша програма C 194 00:09:13,210 --> 00:09:15,410 Ви можете написати, що насправді щось робить. 195 00:09:15,410 --> 00:09:18,250 Тепер ми розглянемо минуле, на даний момент, вже включають в себе, 196 00:09:18,250 --> 00:09:21,190 стандарт io.h, і ці кут дужки, і INT, і порожнеча, 197 00:09:21,190 --> 00:09:22,840 і фігурних дужок, тощо. 198 00:09:22,840 --> 00:09:25,390 >> І давайте просто зосередитися на то, що, принаймні, інтуїтивно, 199 00:09:25,390 --> 00:09:26,860 може вискочити на тебе вже. 200 00:09:26,860 --> 00:09:30,300 Насправді, головним чином, я не обов'язково знати, що це таке, 201 00:09:30,300 --> 00:09:34,580 але так само, як було нуля, що, коли зелений прапор клацнув шматок головоломки, 202 00:09:34,580 --> 00:09:39,070 так що робить C в якості мови програмування мають основну частину коду, який 203 00:09:39,070 --> 00:09:43,380 запускається на виконання за замовчуванням. І дійсно, це в буквальному сенсі буде називатися головною. 204 00:09:43,380 --> 00:09:44,720 >> Таким чином, основна функція. 205 00:09:44,720 --> 00:09:48,720 І це спеціальна функція, яка існує в C, що при запуску програми, 206 00:09:48,720 --> 00:09:52,720 це головний, який отримує у веденні за замовчуванням. У світі нуля, 207 00:09:52,720 --> 00:09:56,970 це, як правило, коли зелений прапор натиснув, що отримав за замовчуванням запускається. 208 00:09:56,970 --> 00:10:01,130 >> У той же час, ми вже бачили це раніше, Printf або друк відформатований, це 209 00:10:01,130 --> 00:10:05,620 буде функція, яка поставляється з C, поряд з цілим букетом інших, 210 00:10:05,620 --> 00:10:10,140 що буде час і час від знову ж таки, для того, щоб зробити точно 211 00:10:10,140 --> 00:10:12,450 як припускає його назва, надрукувати що-небудь. 212 00:10:12,450 --> 00:10:13,500 Що ми хочемо надрукувати? 213 00:10:13,500 --> 00:10:15,770 Ну, ми побачимо, що укладаючи символів 214 00:10:15,770 --> 00:10:18,680 як these-- привіт світ, зворотна коса п в подвійних лапках, 215 00:10:18,680 --> 00:10:23,040 ми можемо сказати точно Printf що друкувати на екрані. 216 00:10:23,040 --> 00:10:26,430 >> Але для того, щоб зробити що ми, на жаль, 217 00:10:26,430 --> 00:10:30,010 потрібно взяти щось вже загадковим для нас, людей, 218 00:10:30,010 --> 00:10:34,510 але принаймні це кілька readable-- гострі включають, стандарт io.h, INT, 219 00:10:34,510 --> 00:10:39,340 Основний, недійсним, Printf, всі магічні змови ми тільки що бачили на екрані. 220 00:10:39,340 --> 00:10:42,470 Але ми насправді повинні піти більш аркан досі. 221 00:10:42,470 --> 00:10:47,140 Спочатку потрібно перевести код що ми пишемо в машинний код. 222 00:10:47,140 --> 00:10:51,370 І пам'ятайте з минулого тижня, що машини, по крайней мере, ті, які ми знаємо тут, 223 00:10:51,370 --> 00:10:54,450 в кінці дня тільки розуміти, нулі і одиниці. 224 00:10:54,450 --> 00:10:58,100 >> І, Боже мій, якби нам довелося писати ці нулі і одиниці насправді програми, 225 00:10:58,100 --> 00:11:01,260 це було б дуже, дуже швидко прийняти задоволення від чого-небудь. 226 00:11:01,260 --> 00:11:05,150 Але виявляється, за останній тиждень, що ці моделі нулів і одиниць 227 00:11:05,150 --> 00:11:06,400 просто мають особливе значення. 228 00:11:06,400 --> 00:11:08,500 У деяких контекстах, вони можуть означати число. 229 00:11:08,500 --> 00:11:11,840 >> У деяких випадках, вони можуть означати літери, або кольору, або будь-яку кількість 230 00:11:11,840 --> 00:11:14,710 інших абстракцій там на. 231 00:11:14,710 --> 00:11:18,450 Але так само, як ваш комп'ютер має центральний процесор, центральний процесор, 232 00:11:18,450 --> 00:11:20,390 або мізки всередині вашого комп'ютера. 233 00:11:20,390 --> 00:11:22,240 Це, як правило, Intel всередині, тому що це 234 00:11:22,240 --> 00:11:24,900 одна з найбільших компаній що робить процесори для комп'ютерів. 235 00:11:24,900 --> 00:11:28,910 >> Ну, процесори Intel і інші просто вирішили заздалегідь 236 00:11:28,910 --> 00:11:33,970 що деякі моделі нулів і з них означають конкретні речі. 237 00:11:33,970 --> 00:11:37,040 Деякі моделі нулів і одиниць означатиме, роздрукувати це на екран, 238 00:11:37,040 --> 00:11:39,710 або додати ці два числа, або відняти ці два числа, 239 00:11:39,710 --> 00:11:43,310 або перемістити цю частину даних з пам'ять мого комп'ютера тут, 240 00:11:43,310 --> 00:11:47,870 або будь-яку кількість інших дуже низького рівня, але в кінцевому рахунку, корисно, операції. 241 00:11:47,870 --> 00:11:53,022 Але, на щастя, ми, люди не збираються необхідно знати цей рівень деталізації. 242 00:11:53,022 --> 00:11:56,230 Справді, так само, як в минулий раз, коли ми абстрагується знову, і знову, і знову, 243 00:11:56,230 --> 00:11:58,930 Будівля з дуже низького рівня примітиви як нулів і одиниць 244 00:11:58,930 --> 00:12:01,160 до підвищення рівня понять як цифри і букви, 245 00:12:01,160 --> 00:12:04,330 і кольору, і багато іншого, так ми можемо як програмісти 246 00:12:04,330 --> 00:12:07,080 стояти на плечах інші, які приходять перед нами 247 00:12:07,080 --> 00:12:11,260 і використовувати програмне забезпечення, що і інші люди писали раніше us-- 248 00:12:11,260 --> 00:12:14,340 а саме програми називається компілятори. 249 00:12:14,340 --> 00:12:17,770 >> C є мовою, який як правило, складаються, 250 00:12:17,770 --> 00:12:22,130 що означає перетворені з Вихідний код в машинний код. 251 00:12:22,130 --> 00:12:25,230 Зокрема, це означає, що в тому, що якщо у вас є своє джерело 252 00:12:25,230 --> 00:12:29,530 код, який ви самі пишете, як ми скоро буде через мить на екрані, 253 00:12:29,530 --> 00:12:33,140 і ви хочете, щоб перетворити його в кінцевому рахунку, до машини code-- 254 00:12:33,140 --> 00:12:37,100 ці нулі і одиниці, які тільки ваш Mac або ваш комп'ютер 255 00:12:37,100 --> 00:12:41,230 understands-- ви отримали перший годувати цей вихідний код в якості 256 00:12:41,230 --> 00:12:46,340 вхід в спеціальний Програма під назвою компілятор, 257 00:12:46,340 --> 00:12:48,974 вихід якого ми побачимо це машинний код. 258 00:12:48,974 --> 00:12:51,890 І, дійсно, в минулий раз ми говорили о, насправді, в кінці кінців, 259 00:12:51,890 --> 00:12:52,610 вирішення проблем. 260 00:12:52,610 --> 00:12:53,360 У вас є входи. 261 00:12:53,360 --> 00:12:54,318 І у вас є виходи. 262 00:12:54,318 --> 00:12:56,560 І у вас є якісь алгоритму в середині. 263 00:12:56,560 --> 00:12:59,830 >> Алгоритми можуть бути, звичайно, реалізовані в програмному забезпеченні, 264 00:12:59,830 --> 00:13:02,900 як ми бачили з псевдокоду минулого тижня і, як ми побачимо, з фактичним кодом 265 00:13:02,900 --> 00:13:03,490 цього тижня. 266 00:13:03,490 --> 00:13:06,430 І тому компілятор насправді просто має набір алгоритмів всередині 267 00:13:06,430 --> 00:13:10,060 про це, що знають, як перетворити спеціальні ключові слова, 268 00:13:10,060 --> 00:13:12,180 як основний, і Printf, та інші, які ми просто 269 00:13:12,180 --> 00:13:17,620 побачив в узорах і нулів ті, що Intel всередині і інші процесори 270 00:13:17,620 --> 00:13:20,020 насправді розуміє. 271 00:13:20,020 --> 00:13:22,460 Так як же ми це робимо? 272 00:13:22,460 --> 00:13:24,470 Звідки ми отримуємо компілятор? 273 00:13:24,470 --> 00:13:26,400 >> Більшість з нас тут є Mac або ПК. 274 00:13:26,400 --> 00:13:29,152 І ви працюєте Mac OS, або Для Windows або Linux або Solaris, 275 00:13:29,152 --> 00:13:30,860 або будь-яку кількість інших операційні системи. 276 00:13:30,860 --> 00:13:32,568 І дійсно, ми могли б вийти на мережу 277 00:13:32,568 --> 00:13:35,710 і завантажити компілятор для вашого Mac або ПК 278 00:13:35,710 --> 00:13:37,360 для конкретної операційної системи. 279 00:13:37,360 --> 00:13:39,617 Але ми всі були б на різні сторінки, так би мовити. 280 00:13:39,617 --> 00:13:41,450 Ми повинні були б трохи різні конфігурації. 281 00:13:41,450 --> 00:13:43,210 І речі не будуть працювати однаково. 282 00:13:43,210 --> 00:13:45,280 І, дійсно, в ці дні багато з нас не використовують 283 00:13:45,280 --> 00:13:47,516 програмне забезпечення, яке працює тільки на наших ноутбуках. 284 00:13:47,516 --> 00:13:49,390 Замість цього ми використовуємо щось як в браузері, 285 00:13:49,390 --> 00:13:52,930 дозволяє нам отримати доступ до веб- додатки в хмарі. 286 00:13:52,930 --> 00:13:55,630 А пізніше в цьому семестрі, ми будемо робити саме це. 287 00:13:55,630 --> 00:13:59,660 Ми будемо писати програми або програмного забезпечення з використанням code-- НЕ C, 288 00:13:59,660 --> 00:14:02,860 але й інші мови, такі як Python і JavaScript--, які працюють в хмарі. 289 00:14:02,860 --> 00:14:05,860 >> І зробити це, ми самі протягом семестру 290 00:14:05,860 --> 00:14:11,890 буде насправді використовувати хмара основі Серед відомих як CS50 IDE. 291 00:14:11,890 --> 00:14:16,030 Це веб-програмування охорона навколишнього середовища, або комплексний розвиток 292 00:14:16,030 --> 00:14:20,610 среда, язь, який побудований на вершині деяких Програмне забезпечення з відкритим вихідним кодом під назвою Cloud 9. 293 00:14:20,610 --> 00:14:22,966 І ми зробили деякі педагогічні спрощень до нього 294 00:14:22,966 --> 00:14:25,840 з тим, щоб приховати певні риси перші тижні, які нам не потрібні, 295 00:14:25,840 --> 00:14:27,770 після чого ви можете розкрити їх і зробити більшість 296 00:14:27,770 --> 00:14:29,400 все, що ви хочете з навколишнім середовищем. 297 00:14:29,400 --> 00:14:32,470 >> І це дозволяє нам, теж, щоб попередньо встановити певному програмному забезпеченню. 298 00:14:32,470 --> 00:14:35,330 Такі речі, як так званий CS50 бібліотека, яку ми скоро побачимо 299 00:14:35,330 --> 00:14:39,210 дає нам в C з деякими додаткові функціональні можливості. 300 00:14:39,210 --> 00:14:44,392 Так що якщо ви йдете, в кінцевому рахунку, CS50.io, Вам буде запропоновано увійти в систему, 301 00:14:44,392 --> 00:14:46,350 і як тільки ви робите, і створити рахунок безкоштовно, 302 00:14:46,350 --> 00:14:52,150 ви будете мати можливість отримання доступу до середовище, яке виглядає зовсім так. 303 00:14:52,150 --> 00:14:53,760 >> Тепер, це знаходиться в режимі за замовчуванням. 304 00:14:53,760 --> 00:14:55,650 Все красиво і яскраво на екрані. 305 00:14:55,650 --> 00:14:57,941 Багато з нас мають звичку працюючих на CS50 шматок, що це 306 00:14:57,941 --> 00:14:59,150 досить пізно в ніч. 307 00:14:59,150 --> 00:15:02,400 І ось деякі з вас могли б віддати перевагу перетворити його в нічний режим, якщо можна так висловитися. 308 00:15:02,400 --> 00:15:05,550 >> Але, в кінцевому рахунку, що ви збирається побачити в CS50 IDE 309 00:15:05,550 --> 00:15:08,340 є три різних areas-- область на лівій частині, де 310 00:15:08,340 --> 00:15:12,604 ваші файли будуть в хмара, область в правому верхньому куті 311 00:15:12,604 --> 00:15:14,270 де ваш код буде редагувати. 312 00:15:14,270 --> 00:15:16,650 Ви зможете відкрити окремі вкладки для будь-якої програми 313 00:15:16,650 --> 00:15:19,670 що ви пишете в цьому семестрі всередині цього у верхньому правому куті. 314 00:15:19,670 --> 00:15:23,070 І тоді самий arcanely, і тим не менше потужно, 315 00:15:23,070 --> 00:15:26,610 чи буде це бути на знизу відомий як вікно терміналу. 316 00:15:26,610 --> 00:15:29,450 >> Це стара школа Інтерфейс командного рядка, 317 00:15:29,450 --> 00:15:32,240 або CLI, що дозволяє виконувати команди 318 00:15:32,240 --> 00:15:35,260 на computer-- в даному випадку, комп'ютер в cloud-- 319 00:15:35,260 --> 00:15:39,090 робити такі речі, як скомпілювати код з вихідного коду в машинний код, 320 00:15:39,090 --> 00:15:43,600 запускати програми, або почати свій веб-сервер, або для доступу до бази даних, 321 00:15:43,600 --> 00:15:47,454 і будь-яку кількість інших методів що ми почнемо використовувати незабаром. 322 00:15:47,454 --> 00:15:49,370 Але щоб потрапити туди, ми збирається насправді є 323 00:15:49,370 --> 00:15:51,240 виходити в інтернет і почати грати. 324 00:15:51,240 --> 00:15:54,399 І зробити це, давайте спочатку почати майструвати з головною, 325 00:15:54,399 --> 00:15:55,940 і написати основну частину програми. 326 00:15:55,940 --> 00:15:59,170 І давайте використовувати цю функцію Printf, який ми використовували раніше, 327 00:15:59,170 --> 00:16:01,050 просто щось сказати. 328 00:16:01,050 --> 00:16:04,910 >> Так ось я вже всередині CS50 IDE. 329 00:16:04,910 --> 00:16:05,930 Я увійшов заздалегідь. 330 00:16:05,930 --> 00:16:07,360 І я повний скринінг вікно. 331 00:16:07,360 --> 00:16:09,670 І так, в кінцевому рахунку, ви теж в найближчі проблеми 332 00:16:09,670 --> 00:16:12,960 слідуватимуть аналогічні кроки, надасть документацію. 333 00:16:12,960 --> 00:16:16,360 Так що вам не потрібно турбуватися про поглинаючи кожен маленький технічний крок 334 00:16:16,360 --> 00:16:17,730 що я роблю тут сьогодні. 335 00:16:17,730 --> 00:16:19,222 >> Але ви отримаєте екран, як це. 336 00:16:19,222 --> 00:16:20,430 Я, трапляється в нічному режимі. 337 00:16:20,430 --> 00:16:22,944 І ви можете прикрасити все вгору шляхом відключення нічного режиму. 338 00:16:22,944 --> 00:16:24,860 І в кінці день, ви будете бачити 339 00:16:24,860 --> 00:16:30,090 ці три основних areas-- файлу браузер зліва, кодові вкладки нагорі, 340 00:16:30,090 --> 00:16:32,430 і вікно терміналу в нижній частині. 341 00:16:32,430 --> 00:16:34,890 >> Дозвольте мені йти вперед і написати свою першу програму. 342 00:16:34,890 --> 00:16:42,300 Я збираюся превентивно йти в файл, Зберегти та збережіть свій файл як hello.c. 343 00:16:42,300 --> 00:16:46,850 Дійсно, відповідно до угоди, будь-яка програма, яку ми пишуть, що написано на мові C 344 00:16:46,850 --> 00:16:49,739 повинен бути названий щось точка с, відповідно до угоди. 345 00:16:49,739 --> 00:16:53,030 Так що я збираюся назвати його hello.c, тому що Я просто хочу сказати привіт до світу. 346 00:16:53,030 --> 00:16:54,820 Тепер я збираюся збільшити , І натисніть кнопку Зберегти. 347 00:16:54,820 --> 00:16:58,180 І все, що я зараз тут вкладка в якому я можу почати писати код. 348 00:16:58,180 --> 00:16:59,490 >> Це не буде компілювати. 349 00:16:59,490 --> 00:17:00,300 Це нічого не означає. 350 00:17:00,300 --> 00:17:02,750 І тому навіть якщо я перетворив це нулів і одиниць, 351 00:17:02,750 --> 00:17:05,390 процесор матиме не Ідея, що відбувається навколо. 352 00:17:05,390 --> 00:17:14,170 Але якщо я пишу рядки, які відповідають з conventions-- C представляють собою С, в 353 00:17:14,170 --> 00:17:20,150 знову ж таки, це language-- з синтаксисом, як це, Printf привіт world-- і я маю 354 00:17:20,150 --> 00:17:22,210 отримали комфортно роблячи це протягом довгого часу. 355 00:17:22,210 --> 00:17:24,510 Так що я не думаю, що я зробив будь-які друкарські помилки. 356 00:17:24,510 --> 00:17:27,910 >> Але незмінно, найперший раз, коли ви зробите це, ви будете. 357 00:17:27,910 --> 00:17:31,090 І те, що я збираюся зробити, може дуже а не працювати для вас в перший раз. 358 00:17:31,090 --> 00:17:33,610 І це абсолютно нормально, тому що прямо зараз ви 359 00:17:33,610 --> 00:17:37,662 може просто побачити цілу багато новизни, але з плином часу, як тільки ви звикнете 360 00:17:37,662 --> 00:17:39,870 з цим середовищем, і ця мова, і інші, 361 00:17:39,870 --> 00:17:42,370 ви почнете бачити речі, які або правильно або неправильно. 362 00:17:42,370 --> 00:17:44,369 >> І це те, що навчання стипендіатів і звичайно 363 00:17:44,369 --> 00:17:48,780 помічники отримують так добре протягом довгого часу, є плямистість помилки або помилки в коді. 364 00:17:48,780 --> 00:17:52,110 Але я стверджую, що є немає помилок в цьому коді. 365 00:17:52,110 --> 00:17:53,990 Так що я тепер хочу, щоб запустити цю програму. 366 00:17:53,990 --> 00:17:57,440 >> Тепер на моєму власному Mac або PC, я в звичка подвійних ікон клацаючи 367 00:17:57,440 --> 00:17:59,350 коли я хочу, щоб запустити якусь програму. 368 00:17:59,350 --> 00:18:01,080 Але це не модель тут. 369 00:18:01,080 --> 00:18:04,570 У цьому середовищі, яка є CS50 IDE. 370 00:18:04,570 --> 00:18:07,192 Ми використовуємо операційну Система під назвою Linux. 371 00:18:07,192 --> 00:18:09,900 Linux нагадує інше операційна система, як правило, відомі 372 00:18:09,900 --> 00:18:10,850 в Unix. 373 00:18:10,850 --> 00:18:16,340 І Linux особливо відомий має командного рядка з навколишнього середовища, CLI. 374 00:18:16,340 --> 00:18:20,070 Тепер ми використовуємо специфічно смак Linux під назвою Ubuntu. 375 00:18:20,070 --> 00:18:22,770 І Ubuntu просто певна версія Linux. 376 00:18:22,770 --> 00:18:27,900 >> Але ці системи Linux в ці дні роблять насправді поставляються з графічним інтерфейсом користувача. 377 00:18:27,900 --> 00:18:30,360 І той, який ми, трапляється, використовувати тут веб-. 378 00:18:30,360 --> 00:18:32,735 Так що це може виглядати навіть трохи відрізняється від чогось 379 00:18:32,735 --> 00:18:35,310 Ви самі могли б мати бачив або запустити в минулому. 380 00:18:35,310 --> 00:18:37,910 >> Так що я збираюся йти вперед Зараз і зробіть наступне. 381 00:18:37,910 --> 00:18:40,950 Я зберіг цей файл як hello.c. 382 00:18:40,950 --> 00:18:47,350 Я збираюся йти вперед і Тип clanghello.c Так Clang 383 00:18:47,350 --> 00:18:49,850 для мови C є компілятор. 384 00:18:49,850 --> 00:18:51,952 Це попередньо встановлена ​​в CS50 IDE. 385 00:18:51,952 --> 00:18:54,910 І ви можете завантажити і абсолютно встановити це на вашому власному Mac або PC. 386 00:18:54,910 --> 00:18:57,910 >> Але, знову ж таки, ви б не все попередня конфігурація робиться для вас. 387 00:18:57,910 --> 00:19:00,940 Так що на даний момент, я просто збирається запустити clanghello.c. 388 00:19:00,940 --> 00:19:03,240 А тепер зверніть увагу цей синтаксис тут, в кінцевому рахунку 389 00:19:03,240 --> 00:19:06,930 розуміють, просто означає, що я перебуваю в папку або каталог з ім'ям робочого простору. 390 00:19:06,930 --> 00:19:11,030 Цей знак долара просто конвенція сенсу, введіть ваші команди тут. 391 00:19:11,030 --> 00:19:14,560 >> Це те, що називається швидке, просто за угодою є знак долара. 392 00:19:14,560 --> 00:19:19,130 І якщо я йду вперед зараз і натисніть Enter, нічого, здається, не відбулося. 393 00:19:19,130 --> 00:19:20,930 Але це насправді хороша річ. 394 00:19:20,930 --> 00:19:23,650 Чим менше, що відбувається на ваш екран, тим більше ймовірно, 395 00:19:23,650 --> 00:19:26,710 ваш код повинен бути правильним, по крайней мере, синтаксично. 396 00:19:26,710 --> 00:19:29,120 >> Так що, якщо я хочу, щоб запустити цю програма, що мені робити? 397 00:19:29,120 --> 00:19:33,770 Що ж, виходить, що ім'я за замовчуванням відповідно до угоди 398 00:19:33,770 --> 00:19:38,854 для програм, коли ви не вкажете Прізвище, ім'я, ваша програма просто a.out. 399 00:19:38,854 --> 00:19:41,270 І цей синтаксис теж, ви будете ознайомитися з раніше довго. 400 00:19:41,270 --> 00:19:47,500 >> Дот слеш просто означає, агов, CS50 IDE, запустіть програму під назвою a.out 401 00:19:47,500 --> 00:19:49,400 що всередині мого поточного каталогу. 402 00:19:49,400 --> 00:19:51,520 Це точка означає поточний каталог. 403 00:19:51,520 --> 00:19:55,040 І ми подивимося, що інші такі послідовності символів означає, незабаром. 404 00:19:55,040 --> 00:19:58,430 >> Так що тут ми йдемо, Enter, привіт світ. 405 00:19:58,430 --> 00:20:00,080 І ви помітите, що трапилося? 406 00:20:00,080 --> 00:20:01,580 Мало того, що це надрукувати привіт світ. 407 00:20:01,580 --> 00:20:05,990 Він також перемістив курсор на наступний рядок. 408 00:20:05,990 --> 00:20:07,160 >> І чому це було? 409 00:20:07,160 --> 00:20:12,400 Які символи ви бачите, який ми писали раніше що гарантував, що курсор буде 410 00:20:12,400 --> 00:20:14,882 перейти на наступний рядок? 411 00:20:14,882 --> 00:20:16,840 Забавно, що про комп'ютер це тільки збирається 412 00:20:16,840 --> 00:20:18,570 робити буквально те, що ви скажете їй зробити. 413 00:20:18,570 --> 00:20:26,050 >> Так що якщо ви скажіть йому PRINTF привіт, кома, пробіл, світ, близько цитати, 414 00:20:26,050 --> 00:20:29,090 це буквально тільки збирається друкувати ці символи. 415 00:20:29,090 --> 00:20:31,980 Але у мене був цей особливий характер в кінці, нагадаємо, зворотної косої п. 416 00:20:31,980 --> 00:20:34,230 І ось що забезпечило що персонаж пішов 417 00:20:34,230 --> 00:20:36,570 до наступного рядка екрану. 418 00:20:36,570 --> 00:20:38,097 >> Насправді, дозвольте мені піти і зробити це. 419 00:20:38,097 --> 00:20:39,430 Дозвольте мені йти вперед і видалити це. 420 00:20:39,430 --> 00:20:41,180 Тепер, зверніть увагу, що Верхня частина мого екрану є 421 00:20:41,180 --> 00:20:42,890 маленький червоне світло в вкладка із зазначенням, 422 00:20:42,890 --> 00:20:45,047 Гей, ви не зберегли файл. 423 00:20:45,047 --> 00:20:47,880 Так що я збираюся йти вперед з контролем S або команду S, збережіть файл. 424 00:20:47,880 --> 00:20:51,130 Тепер goes-- пішов на moment-- зелений. 425 00:20:51,130 --> 00:20:53,760 А тепер він повернувся до просто бути поруч значок. 426 00:20:53,760 --> 00:21:01,860 >> Якщо я тепер запустити clanghello.c знову, Enter, точка слеш, a.out, Enter, 427 00:21:01,860 --> 00:21:04,110 ви побачите, що вона як і раніше працює. 428 00:21:04,110 --> 00:21:06,020 Але це, можливо, трохи глючить. 429 00:21:06,020 --> 00:21:08,714 Зараз мій prompt-- робочий простір, а потім, що знак долара, 430 00:21:08,714 --> 00:21:10,880 а потім мій фактичний prompt-- все в тому ж рядку. 431 00:21:10,880 --> 00:21:14,540 Так що це, звичайно, естетична помилка, навіть якщо це насправді не логічна помилка. 432 00:21:14,540 --> 00:21:16,250 >> Так що я збираюся скасувати те, що я тільки що зробив. 433 00:21:16,250 --> 00:21:18,560 Я збираюся повторно запустити a.out. 434 00:21:18,560 --> 00:21:22,710 Зверніть увагу, я додав символ нового рядка назад. 435 00:21:22,710 --> 00:21:24,280 Я зберіг файл. 436 00:21:24,280 --> 00:21:31,630 >> Так що я збираюся повторно запустити a.out, і-- Прокляття, помилка, помилка, це означає помилку. 437 00:21:31,630 --> 00:21:35,020 Таким чином, помилка в тому, що незважаючи на те, Я додав зворотний слеш н там, 438 00:21:35,020 --> 00:21:41,180 повторно збережені, повторно запустив програму, поведінка було те ж саме. 439 00:21:41,180 --> 00:21:42,640 Чому б це? 440 00:21:42,640 --> 00:21:43,910 >> Я відсутній крок, чи не так? 441 00:21:43,910 --> 00:21:47,620 Це ключовий крок раніше було те, що у вас є коли ви, метою яких змінити вихідний код, 442 00:21:47,620 --> 00:21:49,610 виявляється також запустити це через компілятор 443 00:21:49,610 --> 00:21:51,102 знову так що ви отримаєте новий машинний код. 444 00:21:51,102 --> 00:21:52,810 І машинний код, нулі і одиниці, 445 00:21:52,810 --> 00:21:56,260 будуть майже ідентичні, але не зовсім так, тому що нам потрібно, 446 00:21:56,260 --> 00:21:57,510 звичайно, що нова лінія. 447 00:21:57,510 --> 00:22:02,640 >> Таким чином, щоб виправити це, я буду потребувати перезапускати clanghello.c, введіть, точка 448 00:22:02,640 --> 00:22:03,800 слеш, a.out. 449 00:22:03,800 --> 00:22:08,402 І тепер, привіт світ повернувся туди, де я очікую, що це буде. 450 00:22:08,402 --> 00:22:09,610 Так що це все прекрасно і добре. 451 00:22:09,610 --> 00:22:13,150 Але a.out це досить дурне ім'я для програма, навіть якщо це трапляється, 452 00:22:13,150 --> 00:22:16,530 з історичних причин, default-- означає монтажні виходи. 453 00:22:16,530 --> 00:22:20,780 >> Але дозвольте мені йти вперед тут і робити це по-різному. 454 00:22:20,780 --> 00:22:24,760 Я хочу, щоб мій привіт світ програма насправді можна назвати привіт. 455 00:22:24,760 --> 00:22:28,320 Так що, якщо б це був значок на моєму робочий стіл, він не буде a.out. 456 00:22:28,320 --> 00:22:29,730 Це буде називатися привіт. 457 00:22:29,730 --> 00:22:33,660 >> Таким чином, щоб зробити це, виявляється, що Clang, як і багато інших програм, 458 00:22:33,660 --> 00:22:37,980 підтримує аргументи командного рядка, або прапори, або перемикачі, 459 00:22:37,980 --> 00:22:39,600 які просто впливають на його поведінку. 460 00:22:39,600 --> 00:22:45,160 Зокрема, Clang підтримує тире O прапор, який потім займає друге слово. 461 00:22:45,160 --> 00:22:48,190 У цьому випадку, я буду як завгодно, але розумно, назвати це привіт. 462 00:22:48,190 --> 00:22:50,710 Але я міг би назвати це нічого Я хочу, за винятком того, що a.out 463 00:22:50,710 --> 00:22:52,390 б швидше до того ж точки. 464 00:22:52,390 --> 00:22:55,640 >> А потім просто вказати ім'я файлу я хочу зібрати. 465 00:22:55,640 --> 00:22:59,190 Так що тепер, навіть якщо на початку команди я до сих пір є Clang, 466 00:22:59,190 --> 00:23:01,410 в кінці команди Я до сих пір ім'я файлу, 467 00:23:01,410 --> 00:23:05,520 Тепер у мене є ці командного рядка аргументи, ці прапори, які говорять, 468 00:23:05,520 --> 00:23:11,180 ой, до речі, висновок-о, файл називається привіт, а не a.out за замовчуванням. 469 00:23:11,180 --> 00:23:13,810 >> Так що, якщо я вдарив Введіть зараз, нічого мабуть, сталося. 470 00:23:13,810 --> 00:23:17,900 І, тим не менше, тепер я можу зробити точковий слеш привіт. 471 00:23:17,900 --> 00:23:19,089 Так що це та ж програма. 472 00:23:19,089 --> 00:23:21,380 Нулі і одиниці ідентичні в кінці дня. 473 00:23:21,380 --> 00:23:24,210 >> Але вони в двох різні files-- a.out, 474 00:23:24,210 --> 00:23:26,490 яка є першою версією і просто по-дурному імені, 475 00:23:26,490 --> 00:23:30,250 і тепер алло, який є набагато більш переконливим назва програми. 476 00:23:30,250 --> 00:23:33,195 Але, якщо чесно, я ніколи пам'ятатиме це знову, 477 00:23:33,195 --> 00:23:34,070 і знову, і знову. 478 00:23:34,070 --> 00:23:36,411 І, насправді, як ми пишемо складніші програми, 479 00:23:36,411 --> 00:23:38,160 команди, які ви будете доведеться написати 480 00:23:38,160 --> 00:23:40,920 збираються отримати навіть Чим складніше ще. 481 00:23:40,920 --> 00:23:41,940 >> І так, щоб не хвилюватися. 482 00:23:41,940 --> 00:23:46,220 Виявляється, що люди, перш ніж ми зрозуміли, що вони занадто 483 00:23:46,220 --> 00:23:47,530 було це точно така ж проблема. 484 00:23:47,530 --> 00:23:50,900 Вони теж не отримали того, щоб типу досить довгі, загадкові команди, 485 00:23:50,900 --> 00:23:52,200 не кажучи вже пам'ятаю їх. 486 00:23:52,200 --> 00:23:56,070 І так люди перед нами зробили інші програми, які полегшують 487 00:23:56,070 --> 00:23:57,670 для компіляції програмного забезпечення. 488 00:23:57,670 --> 00:24:01,609 >> І справді, одним з таких Програма називається Make. 489 00:24:01,609 --> 00:24:03,150 Так що я збираюся йти вперед і робити це. 490 00:24:03,150 --> 00:24:05,691 Я збираюся скасувати всі, що я тільки що зробив такий спосіб. 491 00:24:05,691 --> 00:24:07,690 Дозвольте мені типу LS. 492 00:24:07,690 --> 00:24:10,980 І ви помітите три things-- a.out, і зірка, привіт 493 00:24:10,980 --> 00:24:12,810 і зірка, і hello.c. 494 00:24:12,810 --> 00:24:14,730 Будемо сподіватися, що це повинно бути трохи інтуїтивними, 495 00:24:14,730 --> 00:24:18,220 оскільки раніше було немає нічого в цьому робочому просторі. 496 00:24:18,220 --> 00:24:21,240 Там не було нічого, що у мене було створений, поки ми не почали клас. 497 00:24:21,240 --> 00:24:22,840 >> І я створив hello.c. 498 00:24:22,840 --> 00:24:24,544 Потім я скомпілював його, і назвав його a.out. 499 00:24:24,544 --> 00:24:27,460 А потім я скомпілював його знову злегка по-іншому і назвав його привіт. 500 00:24:27,460 --> 00:24:32,830 Тому у мене є три файли в цьому каталозі, в цій папці під назвою Workspace. 501 00:24:32,830 --> 00:24:35,005 Тепер я можу бачити, що а якщо я насправді зменшення зображення. 502 00:24:35,005 --> 00:24:37,530 >> Якщо я просигналити тут і дивитися на цю верхню праву руку 503 00:24:37,530 --> 00:24:39,940 кут, як і обіцяв лівий права частина екрану 504 00:24:39,940 --> 00:24:42,990 завжди збирається показати вам, що ваш обліковий запис, що 505 00:24:42,990 --> 00:24:44,790 всередині CS50 IDE. 506 00:24:44,790 --> 00:24:46,680 І є три файли там. 507 00:24:46,680 --> 00:24:49,070 >> Тому я хочу, щоб позбутися від a.out і привіт. 508 00:24:49,070 --> 00:24:51,275 І, як ви могли б уявіть собі інтуїтивно, вам 509 00:24:51,275 --> 00:24:53,400 може сортувати контрольної миші або натисніть правою кнопкою миші на цьому. 510 00:24:53,400 --> 00:24:54,590 І це маленьке спливаюче меню. 511 00:24:54,590 --> 00:24:57,170 Ви можете завантажити файл, запустіть вона, переглянути його, оновити, перейменувати, 512 00:24:57,170 --> 00:24:57,700 або що немає. 513 00:24:57,700 --> 00:25:00,260 >> І я міг би просто видалити, і він піде. 514 00:25:00,260 --> 00:25:05,260 Але давайте робити речі з командою лінія на даний момент, з тим, щоб отримати зручний 515 00:25:05,260 --> 00:25:07,010 з цим, і зробіть наступне. 516 00:25:07,010 --> 00:25:12,345 Я збираюся йти вперед і видалити a.out, ввівши буквально rma.out. 517 00:25:12,345 --> 00:25:14,890 Виявляється, команду для видалення або видалення щось, 518 00:25:14,890 --> 00:25:16,280 не видалити або видалити. 519 00:25:16,280 --> 00:25:21,260 >> Це більш лаконічно RM, щоб заощадити ви кілька натискань клавіш, і натисніть Enter. 520 00:25:21,260 --> 00:25:24,707 Тепер ми збираємося бути кілька загадково видалити регулярні a.out файл. 521 00:25:24,707 --> 00:25:27,040 Я дійсно не знаю, що таке нерегулярні файл буде ще. 522 00:25:27,040 --> 00:25:28,660 Але я хочу, щоб видалити його. 523 00:25:28,660 --> 00:25:30,150 >> Так що я збираюся ввести у для да. 524 00:25:30,150 --> 00:25:31,940 Або я міг би ввести його, і натиснути клавішу Enter. 525 00:25:31,940 --> 00:25:33,440 І, знову ж таки, нічого не здається, трапляється. 526 00:25:33,440 --> 00:25:35,840 Але це, як правило, хороша річ. 527 00:25:35,840 --> 00:25:40,490 >> Якщо я типу LS на цей раз, що я повинен бачити? 528 00:25:40,490 --> 00:25:44,930 Будемо сподіватися, що просто привіт і hello.c. 529 00:25:44,930 --> 00:25:47,286 Тепер, як в сторону, ви будете помітити цю зірку, зірочки, 530 00:25:47,286 --> 00:25:48,660 що це в кінці моїх програм. 531 00:25:48,660 --> 00:25:50,201 І вони також демонструють в зелений колір. 532 00:25:50,201 --> 00:25:53,970 Це просто спосіб CS50 середовища IDE з cluing вас в тому, 533 00:25:53,970 --> 00:25:55,280 що це не вихідний код. 534 00:25:55,280 --> 00:25:58,880 Це виконуваний файл, що запускається програма, яку можна реально працювати 535 00:25:58,880 --> 00:26:01,020 роблячи точковий слеш, а потім його ім'я. 536 00:26:01,020 --> 00:26:05,860 >> Тепер, дозвольте мені йти вперед і видалити це, гт привіт, Enter, видалити регулярні 537 00:26:05,860 --> 00:26:08,010 подати привіт, так. 538 00:26:08,010 --> 00:26:11,180 А тепер, якщо я типу LS, ми повернулися до hello.c. 539 00:26:11,180 --> 00:26:13,917 Намагайтеся не повністю видалити фактичний вихідний код. 540 00:26:13,917 --> 00:26:16,250 Незважаючи на те, є особливості вбудований в CS50 IDE де 541 00:26:16,250 --> 00:26:19,870 ви можете пройти через історію змін і тому в часі, якщо ви випадково 542 00:26:19,870 --> 00:26:23,660 видалити щось, робити мати на увазі відповідно до цих підказками так чи ні, 543 00:26:23,660 --> 00:26:25,381 від того, що ви насправді хочете зробити. 544 00:26:25,381 --> 00:26:27,380 І якщо я йду до вершини лівий кут тут, 545 00:26:27,380 --> 00:26:30,696 все, що залишається hello.c. 546 00:26:30,696 --> 00:26:32,570 Таким чином, є згустки інші команди, які ви 547 00:26:32,570 --> 00:26:37,550 може виконувати в світі Linux, один з яких, знову ж таки, зробити. 548 00:26:37,550 --> 00:26:40,180 І ми збираємося зробити моя програма в даний час в такий спосіб. 549 00:26:40,180 --> 00:26:43,270 >> Замість того щоб робити брязкіт, замість того, щоб робити брязкіт-о, 550 00:26:43,270 --> 00:26:45,860 Я збираюся просто в буквальному сенсі типу, зробити привіт. 551 00:26:45,860 --> 00:26:49,630 А тепер зверніть увагу, я Не друкує зробити hello.c. 552 00:26:49,630 --> 00:26:50,910 Я друкую зробити привіт. 553 00:26:50,910 --> 00:26:54,840 >> І ця програма зробити що поставляється з CS50 IDE і багато іншого 554 00:26:54,840 --> 00:26:57,090 як правило, з Linux, це програма, яка це 555 00:26:57,090 --> 00:26:59,120 збирається зробити програму під назвою Hello. 556 00:26:59,120 --> 00:27:03,680 І він збирається взяти на себе, за згодою, що якщо ця програма може бути зроблено, 557 00:27:03,680 --> 00:27:09,030 це буде зроблено з джерела код файл, який закінчується на дот с, hello.c. 558 00:27:09,030 --> 00:27:12,210 >> Так що, якщо я вдарив Enter Тепер, зверніть увагу, що команда, яка запускається на виконання 559 00:27:12,210 --> 00:27:14,340 насправді навіть більше до того, чим раніше. 560 00:27:14,340 --> 00:27:16,670 І це тому, що ми попередньо CS50 IDE, щоб мати 561 00:27:16,670 --> 00:27:19,878 деякі додаткові функції, вбудовані в тому, що нам не потрібно просто ще, але скоро буде. 562 00:27:19,878 --> 00:27:23,470 Але головне, щоб зрозуміти, Тепер у мене є програма Hello. 563 00:27:23,470 --> 00:27:27,080 >> Якщо я знову ввести LS, я є програма привітання. 564 00:27:27,080 --> 00:27:32,070 І я можу запустити його з точка слеш a.out, немає, 565 00:27:32,070 --> 00:27:35,590 так як весь сенс цього вправа була точка слеш привіт. 566 00:27:35,590 --> 00:27:38,089 А тепер у мене є свій привіт світ програма. 567 00:27:38,089 --> 00:27:39,880 Так рухатися вперед, ми майже завжди тільки 568 00:27:39,880 --> 00:27:42,088 збирається зібрати наші програми використовуючи команду Make. 569 00:27:42,088 --> 00:27:45,300 І тоді ми будемо запускати їх точка слеш, і назва програми. 570 00:27:45,300 --> 00:27:49,610 Але розумію, що робить робить для Ви, це сама не компілятор. 571 00:27:49,610 --> 00:27:53,310 Це просто програма зручності що знає, як викликати компілятор 572 00:27:53,310 --> 00:27:56,470 бігти так, що ви самі можете використовувати його. 573 00:27:56,470 --> 00:28:00,220 >> Які існують інші команди в Linux, і в свою чергу CS50 IDE? 574 00:28:00,220 --> 00:28:03,107 Ми скоро побачимо, що є Команда CD, Змінити каталог. 575 00:28:03,107 --> 00:28:05,190 Це дозволяє в лічені ваш інтерфейс командного рядка 576 00:28:05,190 --> 00:28:07,610 щоб рухатися вперед і назад, і відкрити різні папки 577 00:28:07,610 --> 00:28:08,860 без використання миші. 578 00:28:08,860 --> 00:28:12,470 >> LS ми бачили, який виступає за список файли в поточному каталозі. 579 00:28:12,470 --> 00:28:14,650 Зробіть Dir, ви можете ймовірно, починають виведення 580 00:28:14,650 --> 00:28:18,150 що вони означають now-- зробити каталог, якщо ви хочете створити папку. 581 00:28:18,150 --> 00:28:21,270 RM для видалити, RM Dir для видалити directory-- і вони, 582 00:28:21,270 --> 00:28:24,160 знову ж таки, це командний рядок еквіваленти того, що ви 583 00:28:24,160 --> 00:28:26,945 могли б зробити в CS50 IDE за допомогою миші. 584 00:28:26,945 --> 00:28:28,820 Але ви скоро знайдете що іноді це просто 585 00:28:28,820 --> 00:28:30,610 набагато швидше, щоб зробити речі з клавіатури, 586 00:28:30,610 --> 00:28:33,690 і в кінцевому рахунку набагато потужнішим. 587 00:28:33,690 --> 00:28:36,440 >> Але це важко стверджувати, що все, що ми робили досі 588 00:28:36,440 --> 00:28:39,990 це все, що потужні, коли все ми говорили є привіт світ. 589 00:28:39,990 --> 00:28:43,740 І справді, я жорстко закодував Слова вітання світ в моїй програмі. 590 00:28:43,740 --> 00:28:45,530 Там немає динамічність ще. 591 00:28:45,530 --> 00:28:49,320 Подряпина була на порядок цікавішим минулого тижня. 592 00:28:49,320 --> 00:28:51,220 >> І так давайте там. 593 00:28:51,220 --> 00:28:55,310 Давайте крок до що шлях деяких з цих функцій. 594 00:28:55,310 --> 00:28:59,470 Так що не тільки C поставляються з Printf, і грона інших функцій 595 00:28:59,470 --> 00:29:01,850 деякі з яких ми побачимо протягом довгого часу, це не має 596 00:29:01,850 --> 00:29:05,760 зробити все, що легко прямо воріт в отриманні введення даних користувачем. 597 00:29:05,760 --> 00:29:08,140 >> Насправді, одне зі слабких місць таких мов, як C, 598 00:29:08,140 --> 00:29:10,140 і навіть Java і ще інші, в тому, що вона не 599 00:29:10,140 --> 00:29:15,860 зробити його легко просто отримати такі речі, як цілі числа від користувачів або рядків, слів, 600 00:29:15,860 --> 00:29:19,970 і фрази, не кажучи вже про речі, як значення з плаваючою точкою, або дійсні числа 601 00:29:19,970 --> 00:29:23,240 з десятковими точками, і дійсно довгі числа, як ми скоро побачимо. 602 00:29:23,240 --> 00:29:27,000 Так що цей список функцій тут, ці , Як і інші шматочки головоломки до подряпин 603 00:29:27,000 --> 00:29:31,090 що ми попередньо встановлені в CS50 IDE, який ми будемо використовувати протягом декількох тижнів 604 00:29:31,090 --> 00:29:34,010 як тренувальні колеса різного роду, і в кінці кінців, прийняти їх, і дивитися 605 00:29:34,010 --> 00:29:37,210 під капотом, можливо, в як ці речі реалізуються. 606 00:29:37,210 --> 00:29:40,460 >> Але щоб зробити це, давайте насправді написати програму. 607 00:29:40,460 --> 00:29:41,770 Дозвольте мені йти вперед прямо зараз. 608 00:29:41,770 --> 00:29:44,750 І я збираюся створити нову файл, натиснувши на цю плюсик, 609 00:29:44,750 --> 00:29:45,970 і натиснувши кнопку New File. 610 00:29:45,970 --> 00:29:49,250 >> Я збираюся зберегти цей наступний один, як, скажімо, string.c, 611 00:29:49,250 --> 00:29:50,750 тому що я хочу, щоб грати з рядками. 612 00:29:50,750 --> 00:29:53,990 І рядок в C просто послідовність символів. 613 00:29:53,990 --> 00:29:56,090 Так що тепер давайте йти вперед і виконайте наступні дії. 614 00:29:56,090 --> 00:30:01,204 >> Включають в себе стандартні IO.h-- і виявляється стандартний введення-виведення, 615 00:30:01,204 --> 00:30:03,360 IO просто означає, що вхід і вихід. 616 00:30:03,360 --> 00:30:05,920 Так виходить, що ця лінія ось що 617 00:30:05,920 --> 00:30:08,140 є сусідній з нами, щоб використовувати Printf. 618 00:30:08,140 --> 00:30:10,410 Printf, звичайно, виробляє висновок. 619 00:30:10,410 --> 00:30:15,000 Тому для того, щоб використовувати Printf, виходить що Ви повинні мати цей рядок коду 620 00:30:15,000 --> 00:30:16,040 у верхній частині файлу. 621 00:30:16,040 --> 00:30:18,456 >> І ми повернемося до того, що що насправді означає незабаром. 622 00:30:18,456 --> 00:30:20,400 Виявляється, що в будь-яка програма C Я пишу, 623 00:30:20,400 --> 00:30:23,640 Я повинен почати це з код, який виглядає наступним чином. 624 00:30:23,640 --> 00:30:26,860 І ви помітите CS50 IDE і інше комплексний розвиток 625 00:30:26,860 --> 00:30:30,050 середовища, як він, намагатимемося як краще 626 00:30:30,050 --> 00:30:31,780 вони можуть закінчити свою думку. 627 00:30:31,780 --> 00:30:35,930 Насправді, хвилину назад, якщо я скасувати що я тільки що зробив, я вдарив Enter. 628 00:30:35,930 --> 00:30:39,160 >> Потім я потрапив відкритий фігурні дужка, натисніть Enter ще раз. 629 00:30:39,160 --> 00:30:40,430 І він закінчив свою думку. 630 00:30:40,430 --> 00:30:45,140 Це дало мені нову лінію, що не відступом не менше для хороших стилістичних причин, чому ми будемо бачити. 631 00:30:45,140 --> 00:30:48,559 І тоді він автоматично дав мені що фігурної дужки, щоб закінчити свою думку. 632 00:30:48,559 --> 00:30:50,600 Тепер, це не завжди вгадати, що ви хочете зробити. 633 00:30:50,600 --> 00:30:53,620 Але в більшій частині, це робить зберегти вам кілька натискань клавіш. 634 00:30:53,620 --> 00:30:59,560 Так що хвилину назад, ми запустили цей program-- привіт, світ, а потім він був скомпільований, 635 00:30:59,560 --> 00:31:00,460 а потім побіг. 636 00:31:00,460 --> 00:31:01,867 Але немає тут динамізм. 637 00:31:01,867 --> 00:31:03,700 Що робити, якщо ми хочемо робити щось інше? 638 00:31:03,700 --> 00:31:07,630 Ну, що якби я хотів насправді отримати рядок від користувача? 639 00:31:07,630 --> 00:31:11,250 Я збираюся використовувати шматок головоломки називається саме that-- отримати рядок. 640 00:31:11,250 --> 00:31:15,860 >> Виявляється, в C, що, коли ви не хочете внести свій вклад в шматок головоломки, 641 00:31:15,860 --> 00:31:19,360 або більш правильно до функції, ви буквально тільки що робити відкриває дужку, 642 00:31:19,360 --> 00:31:20,430 закриваючою дужкою. 643 00:31:20,430 --> 00:31:25,540 Так що, як ніби є немає білого ящика не вводити в. 644 00:31:25,540 --> 00:31:27,720 Скажімо блок перед тим була маленька біла коробка. 645 00:31:27,720 --> 00:31:29,660 У нас немає, що біла коробка прямо зараз. 646 00:31:29,660 --> 00:31:33,310 >> Але коли я називаю отримання рядки, я хочете помістити результат десь. 647 00:31:33,310 --> 00:31:37,680 Таким чином, дуже поширена парадигма в C є виклику функції, як тут отримання рядки, 648 00:31:37,680 --> 00:31:41,070 а потім зберегти його значення, що повертається. 649 00:31:41,070 --> 00:31:44,450 Це результат його зусилля в чомусь. 650 00:31:44,450 --> 00:31:47,630 >> А що таке побудувати в програмуванні, 651 00:31:47,630 --> 00:31:53,450 будь то в порожньому місці або в даний час C, що ми можна використовувати насправді зберігати що-небудь? 652 00:31:53,450 --> 00:31:55,990 Викликається це змінна, чи не так? 653 00:31:55,990 --> 00:32:00,320 А в порожньому місці, ми не дуже-то все одно, що відбувається в змінних. 654 00:32:00,320 --> 00:32:02,170 >> Але в даному випадку, ми насправді робимо. 655 00:32:02,170 --> 00:32:03,719 Я збираюся сказати рядок. 656 00:32:03,719 --> 00:32:05,510 І тоді я міг би назвати це все, що я хочу. 657 00:32:05,510 --> 00:32:08,340 Я буду називати його ім'я, отримує отримати рядок. 658 00:32:08,340 --> 00:32:10,250 >> І тепер, навіть якщо ви трохи новачок в цьому, 659 00:32:10,250 --> 00:32:11,984 зверніть увагу, що я не вистачає якоїсь деталі. 660 00:32:11,984 --> 00:32:13,150 Я забув крапка з комою. 661 00:32:13,150 --> 00:32:14,400 Мені потрібно, щоб закінчити цю думку. 662 00:32:14,400 --> 00:32:17,480 Так що я буду рухати курсор, і вдарив коми там. 663 00:32:17,480 --> 00:32:19,130 І що я тільки що зробив? 664 00:32:19,130 --> 00:32:21,440 У цьому рядку коду, номер 5 в даний момент, 665 00:32:21,440 --> 00:32:23,799 Я дзвоню отримання рядки без будь-яких входів. 666 00:32:23,799 --> 00:32:26,090 Так що немає маленький білий як коробка Зберегти блок має. 667 00:32:26,090 --> 00:32:28,590 >> Я просто кажу, агов, комп'ютер, отримати мені рядок. 668 00:32:28,590 --> 00:32:31,390 Знак рівності не надто знак рівності, саме по собі. 669 00:32:31,390 --> 00:32:33,790 це призначення оператор, а це означає, 670 00:32:33,790 --> 00:32:37,860 агов, комп'ютер, перемістити значення з правої сторони на ліву. 671 00:32:37,860 --> 00:32:40,480 А зліва, у мене є наступне. 672 00:32:40,480 --> 00:32:43,580 >> Гей, комп'ютер, дайте мені string-- послідовність символів. 673 00:32:43,580 --> 00:32:45,637 І називати цей рядок імені. 674 00:32:45,637 --> 00:32:47,220 І я навіть не називати його імені. 675 00:32:47,220 --> 00:32:49,970 >> Я міг би назвати це, умовно, щось на зразок S, 676 00:32:49,970 --> 00:32:52,900 так само, як ми використовували, щоб я виклику змінної I. 677 00:32:52,900 --> 00:32:54,829 Але тепер мені потрібно зробити щось з ним. 678 00:32:54,829 --> 00:32:57,370 Було б досить нерозумно спробуйте скомпілювати цей код, біг 679 00:32:57,370 --> 00:32:59,410 ця програма, не дивлячись на те, Я отримую рядок, 680 00:32:59,410 --> 00:33:01,580 тому що це ще тільки збирається сказати привіт світ. 681 00:33:01,580 --> 00:33:06,140 >> Але що, якщо я хочу, щоб змінити це. 682 00:33:06,140 --> 00:33:07,940 Чому б мені не зробити це? 683 00:33:07,940 --> 00:33:11,632 Відсоток s, кома s. 684 00:33:11,632 --> 00:33:13,090 І це трохи загадковими досі. 685 00:33:13,090 --> 00:33:15,560 >> Отже, дозвольте мені зробити мої змінні більш ясним. 686 00:33:15,560 --> 00:33:17,510 Дозвольте мені назвати ім'я цієї змінної. 687 00:33:17,510 --> 00:33:20,230 І давайте подивимося, якщо ми не можемо дражнити крім того, що тут відбувається. 688 00:33:20,230 --> 00:33:22,770 >> Так що на лінії п'ять, я отримую рядок. 689 00:33:22,770 --> 00:33:25,620 І я зберігати цей рядок, незалежно від того, як користувач ввів 690 00:33:25,620 --> 00:33:28,430 на його клавіатурі, в змінної з ім'ям Name. 691 00:33:28,430 --> 00:33:30,590 І виходить, що Printf не просто 692 00:33:30,590 --> 00:33:34,220 прийняти один аргумент в два рази котирування, один вхід в подвійних лапках. 693 00:33:34,220 --> 00:33:39,100 >> Це може зайняти два, або три, або більше, наприклад що другий, або третій, або четвертий, 694 00:33:39,100 --> 00:33:42,320 всі імена змінних, або конкретно цінності, 695 00:33:42,320 --> 00:33:48,610 що планується отримати доступ до, динамічно, цей рядок в лапках. 696 00:33:48,610 --> 00:33:52,110 Іншими словами, те, що було б неправильно з цим? 697 00:33:52,110 --> 00:33:57,920 Якщо я тільки що сказав привіт ім'я, зворотний слеш п, врятував мій файл, складений мій код, 698 00:33:57,920 --> 00:34:01,660 і побіг це, що б сталося? 699 00:34:01,660 --> 00:34:05,139 >> Це просто буде сказати, привіт ім'я, в буквальному сенсі N-А-М-Е, 700 00:34:05,139 --> 00:34:07,900 який певною мірою нерозумно, тому що вона нічим не відрізняється від світу. 701 00:34:07,900 --> 00:34:10,400 Так що нічого в лапках то, що буквально роздрукована. 702 00:34:10,400 --> 00:34:12,520 Так що, якщо я хочу мати заповнювач там, 703 00:34:12,520 --> 00:34:14,422 Я насправді потрібно використовувати якийсь особливий синтаксис. 704 00:34:14,422 --> 00:34:17,380 І виходить, якщо ви читаєте документація для функції PRINTF, 705 00:34:17,380 --> 00:34:21,320 він скаже вам, що якщо ви використовуєте відсотка с, 706 00:34:21,320 --> 00:34:23,920 ви можете замінити значення наступним чином. 707 00:34:23,920 --> 00:34:27,190 >> Після коми після цього подвійні лапки, ви просто 708 00:34:27,190 --> 00:34:29,179 напишіть назву з змінна, яку ви хочете 709 00:34:29,179 --> 00:34:33,790 підключити в цей формат коду або специфікатор формату, 710 00:34:33,790 --> 00:34:35,469 відсотків s для рядків. 711 00:34:35,469 --> 00:34:39,190 І тепер, якщо я зберіг мій файл, Я повертаюся вниз до мого терміналу. 712 00:34:39,190 --> 00:34:42,870 І я типу Make String, тому що, знову ж таки, назва цього 713 00:34:42,870 --> 00:34:45,510 файл, який я вибрав, перш ніж це string.c. 714 00:34:45,510 --> 00:34:48,510 >> Так що я збираюся сказати, зробити рядок, введіть. 715 00:34:48,510 --> 00:34:51,550 О боже мій, подивися на все помилки, які ми зробили вже. 716 00:34:51,550 --> 00:34:55,540 І це is--, що це насправді як, сім програм шести лінії? 717 00:34:55,540 --> 00:34:57,790 Так що це, де це може дуже швидко отримати переважна. 718 00:34:57,790 --> 00:35:00,890 >> Це вікно терміналу має тепер просто виплюнув 719 00:35:00,890 --> 00:35:03,230 величезну кількість повідомлень про помилки. 720 00:35:03,230 --> 00:35:07,560 Звичайно, у мене немає більше помилка повідомлень, ніж у мене є рядки коду. 721 00:35:07,560 --> 00:35:08,680 Так що ж відбувається? 722 00:35:08,680 --> 00:35:10,920 >> Ну, найкраща стратегія робити в будь-який час ви 723 00:35:10,920 --> 00:35:13,710 дійсно стикаються з переважною Список помилок, як, що, 724 00:35:13,710 --> 00:35:16,690 буде прокрутити назад, шукати команди ви просто побіг, що в моєму випадку 725 00:35:16,690 --> 00:35:18,020 це зробити рядок. 726 00:35:18,020 --> 00:35:21,630 Подивіться, що роблять зробив, і це що довго Clang команда, немає нічого особливого там. 727 00:35:21,630 --> 00:35:22,950 >> Але червоний погано. 728 00:35:22,950 --> 00:35:24,750 Зелений намагається бути ніжний і корисно. 729 00:35:24,750 --> 00:35:26,140 Але це все-таки погано, в цьому випадку. 730 00:35:26,140 --> 00:35:27,510 Але де ж це погано? 731 00:35:27,510 --> 00:35:31,450 >> String.c, лінія п'ять, п'ять символів. 732 00:35:31,450 --> 00:35:32,930 Так що це просто загальне угоду. 733 00:35:32,930 --> 00:35:36,060 Щось значить щось двокрапка номер рядка і номер символу. 734 00:35:36,060 --> 00:35:41,080 Помилка, використання неоголошена Ідентифікатор рядка. 735 00:35:41,080 --> 00:35:42,900 Можливо, ви мали на увазі стандарт? 736 00:35:42,900 --> 00:35:45,530 >> Так що, на жаль, Clang намагається бути корисним. 737 00:35:45,530 --> 00:35:46,850 Але це не так, і в цьому випадку. 738 00:35:46,850 --> 00:35:49,350 Ні, Clang, я не мав на увазі стандартне введення-виведення. 739 00:35:49,350 --> 00:35:51,070 Я мав на увазі, що на першій лінії, так. 740 00:35:51,070 --> 00:35:53,420 >> Але лінія п'ять це один тут. 741 00:35:53,420 --> 00:35:57,040 І Clang НЕ розуміти, S-T-R-I-N-G. 742 00:35:57,040 --> 00:36:01,490 Це неоголошений ідентифікатор, A Слово це просто ніколи не бачив раніше. 743 00:36:01,490 --> 00:36:05,730 І це тому, що C, мова ми пишемо код прямо зараз, 744 00:36:05,730 --> 00:36:08,070 немає змінних, званих рядками. 745 00:36:08,070 --> 00:36:11,380 >> Це не станеться, за замовчуванням, підтримка то, що називається рядок. 746 00:36:11,380 --> 00:36:16,750 Це CS50 шматок жаргон, але є досить умовним. 747 00:36:16,750 --> 00:36:18,600 Але я можу виправити це в такий спосіб. 748 00:36:18,600 --> 00:36:22,090 >> Якщо додати один рядок коду у верхній частині цієї програми, 749 00:36:22,090 --> 00:36:27,890 включають CS50.h, який є інший файл десь всередині CS50 IDE, десь 750 00:36:27,890 --> 00:36:30,820 на жорсткому диску, так би мовити, операційної системи Ubuntu 751 00:36:30,820 --> 00:36:33,590 що я біжу, що це файл, який 752 00:36:33,590 --> 00:36:38,740 збирається вчити операційної Система яка рядок, просто 753 00:36:38,740 --> 00:36:41,930 як стандартний io.h є файл в операційній системі, що це 754 00:36:41,930 --> 00:36:44,430 вчитиму його, що Printf є. 755 00:36:44,430 --> 00:36:46,810 >> Дійсно, ми отримали б дуже схоже повідомлення 756 00:36:46,810 --> 00:36:50,600 якщо IO визнав стандарт Io.h і намагався використовувати Printf. 757 00:36:50,600 --> 00:36:53,632 Так що я збираюся йти вперед і просто взяти під свій контроль L, щоб очистити екран. 758 00:36:53,632 --> 00:36:56,340 Або ви можете ввести ясно, і він буде просто очистити вікно терміналу. 759 00:36:56,340 --> 00:36:58,020 Але ви все ще можете прокручувати назад в часі. 760 00:36:58,020 --> 00:37:01,100 >> І я буду перезапускати Зробити String. 761 00:37:01,100 --> 00:37:03,660 Хрест мої пальці на цей раз, Enter. 762 00:37:03,660 --> 00:37:05,380 Боже мій, це спрацювало. 763 00:37:05,380 --> 00:37:09,280 він показує мені довгу маскувальну команду тобто те, що робить генеруватися за допомогою Clang, 764 00:37:09,280 --> 00:37:10,460 але ніяких повідомлень про помилки. 765 00:37:10,460 --> 00:37:12,460 Так розуміють, незважаючи на те, ви можете отримати повністю 766 00:37:12,460 --> 00:37:14,480 завалені кількість повідомлень про помилки, 767 00:37:14,480 --> 00:37:17,540 він просто може бути це дратує каскадних ефект, де Clang не розуміє 768 00:37:17,540 --> 00:37:19,620 одна річ, яка означає, що він тоді не розуміє наступне слово, 769 00:37:19,620 --> 00:37:20,560 або наступний рядок. 770 00:37:20,560 --> 00:37:22,850 А так він просто задихається від вашого коду. 771 00:37:22,850 --> 00:37:24,440 Але виправлення може бути простим. 772 00:37:24,440 --> 00:37:27,822 І так завжди зосереджені на Найперша рядок виводу. 773 00:37:27,822 --> 00:37:29,530 І якщо ви цього не зробите зрозуміти це, просто подивіться 774 00:37:29,530 --> 00:37:32,480 для ключових слів, які могли б бути ключі і номер рядка, 775 00:37:32,480 --> 00:37:34,650 і характер, де ця помилка може бути. 776 00:37:34,650 --> 00:37:40,328 >> Тепер дозвольте мені йти вперед і ввести точка слеш, рядок, введіть. 777 00:37:40,328 --> 00:37:44,340 Хм, це не привітавшись нічого. 778 00:37:44,340 --> 00:37:46,210 Чому? 779 00:37:46,210 --> 00:37:48,170 Ну, пам'ятаєте, де він працює? 780 00:37:48,170 --> 00:37:53,730 >> Це, ймовірно, застряг в даний момент в циклі, якщо ви будете, на шостому рядку, 781 00:37:53,730 --> 00:37:56,950 тому Отримати рядок дизайн, написані співробітниками CS50, 782 00:37:56,950 --> 00:38:00,350 буквально означало просто сидіти там чекає, і чекає, 783 00:38:00,350 --> 00:38:01,850 і очікування рядки. 784 00:38:01,850 --> 00:38:03,792 Все, що ми маємо на увазі під рядком введення є людина. 785 00:38:03,792 --> 00:38:04,500 Таким чином, ви знаєте, що? 786 00:38:04,500 --> 00:38:05,166 Дозвольте мені йти вперед. 787 00:38:05,166 --> 00:38:08,704 І тільки з натхнення, дозвольте мені введіть своє ім'я, Девід, введіть. 788 00:38:08,704 --> 00:38:10,120 Тепер у мене є більш динамічною програми. 789 00:38:10,120 --> 00:38:11,240 Він сказав, привіт Девід. 790 00:38:11,240 --> 00:38:16,280 >> Якщо я йду вперед і запустити це знову, дозвольте мені спробувати сказати ім'я Zamila, введіть. 791 00:38:16,280 --> 00:38:17,940 І тепер у нас є динамічна програма. 792 00:38:17,940 --> 00:38:19,380 Я не жорстко закодовані світ. 793 00:38:19,380 --> 00:38:21,760 Я не жорстко закодовані ім'я, або Девід або Zamila. 794 00:38:21,760 --> 00:38:25,350 >> Тепер це набагато більше схоже програм ми знаємо, де, якщо приймати вхідний сигнал, 795 00:38:25,350 --> 00:38:27,870 він виробляє дещо інший висновок. 796 00:38:27,870 --> 00:38:31,020 Тепер, це не найкращий досвід користувача або UX. 797 00:38:31,020 --> 00:38:33,000 Я запустити програму. 798 00:38:33,000 --> 00:38:35,830 >> Я не знаю, що я повинен робити, якщо я насправді не дивитися на 799 00:38:35,830 --> 00:38:37,290 або запам'ятати вихідний код. 800 00:38:37,290 --> 00:38:39,640 Так давайте користувачеві досвід трохи краще 801 00:38:39,640 --> 00:38:41,240 з найпростіших речей. 802 00:38:41,240 --> 00:38:44,782 Дозвольте мені повернутися в цей програми, а просто сказати Printf. 803 00:38:44,782 --> 00:38:48,870 >> І дозвольте мені йти вперед і сказати ім'я, двокрапка, і простір, а потім крапка з комою. 804 00:38:48,870 --> 00:38:51,170 І якраз для стусанів, не люфтить н. 805 00:38:51,170 --> 00:38:52,980 І це навмисне, тому що я не хочу 806 00:38:52,980 --> 00:38:54,590 запрошення, щоб перейти до наступного рядка. 807 00:38:54,590 --> 00:38:58,800 >> Я хочу, замість того, зробити це, зробити рядок перекомпіліровать свій код в нову машину 808 00:38:58,800 --> 00:39:00,980 Код точка слеш рядок. 809 00:39:00,980 --> 00:39:02,460 Ах, це набагато симпатичніше. 810 00:39:02,460 --> 00:39:05,780 Тепер я насправді знаю, що комп'ютер хоче, щоб я, дати йому ім'я. 811 00:39:05,780 --> 00:39:10,020 >> Так що я збираюся йти вперед і ввести в Робі, увійти, і привіт, Роб. 812 00:39:10,020 --> 00:39:13,640 Таким чином, розуміють, що це до сих пір, в кінці дня, тільки програма дев'ять ліній. 813 00:39:13,640 --> 00:39:15,090 Але ми зробили ці кроки дитини. 814 00:39:15,090 --> 00:39:18,380 >> Ми написали один рядок, з якою ми були знайомі, Printf, привіт світ. 815 00:39:18,380 --> 00:39:19,980 Тоді ми розстебнула трохи цього. 816 00:39:19,980 --> 00:39:21,560 І ми насправді використовували отримання рядка. 817 00:39:21,560 --> 00:39:23,362 І ми кинули це значення в змінній. 818 00:39:23,362 --> 00:39:26,070 А потім ми пішли вперед і вдосконалюватися Крім того, він з третьою лінією. 819 00:39:26,070 --> 00:39:29,220 І цей процес, що повторюється написання програмного забезпечення є дійсно ключем. 820 00:39:29,220 --> 00:39:33,420 У CS50, так і в житті в цілому, Ви повинні, як правило, не сісти, 821 00:39:33,420 --> 00:39:36,800 мають на увазі програму, і спробуйте писати вся чортівня все відразу. 822 00:39:36,800 --> 00:39:40,810 >> Це неминуче буде призводити до шляху більше помилок, ніж ми самі бачили тут. 823 00:39:40,810 --> 00:39:44,070 Навіть я, і до цього дня, постійно робити інші дурні помилки, 824 00:39:44,070 --> 00:39:47,480 насправді складніше помилки що важче з'ясувати. 825 00:39:47,480 --> 00:39:52,095 Але ви будете робити більше помилок, тим більше рядків коду ви пишете все відразу. 826 00:39:52,095 --> 00:39:54,220 І тому ця практика, написати трохи коду 827 00:39:54,220 --> 00:39:57,930 що ви комфортно, компілювати це, запустити його, протестувати його в більш загальному плані, 828 00:39:57,930 --> 00:40:01,370 потім проведіть on-- так само, як ми тримали відводами і відводками минулого тижня, 829 00:40:01,370 --> 00:40:04,190 будівництво від чогось дуже просто щось більш складне, 830 00:40:04,190 --> 00:40:05,200 зробити те ж саме тут. 831 00:40:05,200 --> 00:40:08,500 Не сідайте, і спробувати написати цілу проблему. 832 00:40:08,500 --> 00:40:10,780 Насправді ці кроки дитини. 833 00:40:10,780 --> 00:40:15,100 >> Тепер, рядки не всі що корисно їм самим. 834 00:40:15,100 --> 00:40:18,210 Ми б насправді, в ідеалі, як і в є дещо ще в нашому інструментарії. 835 00:40:18,210 --> 00:40:20,990 Так що давайте насправді зробити саме це. 836 00:40:20,990 --> 00:40:24,900 >> Дозвольте мені йти вперед зараз і нагнітати трохи інша програма. 837 00:40:24,900 --> 00:40:28,320 І ми будемо називати цей int.c, для цілого числа. 838 00:40:28,320 --> 00:40:30,870 Я збираюся, так само, включають CS550.h. 839 00:40:30,870 --> 00:40:33,060 Я збираюся включати стандартні IO. 840 00:40:33,060 --> 00:40:36,630 І це буде досить поширеним в ці перші кілька днів класу. 841 00:40:36,630 --> 00:40:39,050 >> І я буду готовий сам з основною функцією. 842 00:40:39,050 --> 00:40:43,370 І тепер замість того, щоб отримати рядок, давайте йти вперед і отримати Int. 843 00:40:43,370 --> 00:40:49,285 Давайте назвемо це я і називаю це отримати INT, близькі круглі дужки, крапка з комою. 844 00:40:49,285 --> 00:40:51,410 А тепер давайте зробимо щось з ним, Printf. 845 00:40:51,410 --> 00:40:56,190 >> Скажімо, щось на кшталт привіт, зворотна коса п, кома я. 846 00:40:56,190 --> 00:41:00,010 Так що я в значній мірі імітуючи що я зробив тільки хвилину назад. 847 00:41:00,010 --> 00:41:01,660 У мене є заповнювач тут. 848 00:41:01,660 --> 00:41:05,150 Я кома я тут, тому що я хочу для підключення I в цей заповнювач. 849 00:41:05,150 --> 00:41:07,250 >> Так що давайте йти вперед і спробувати компіляції цієї програми. 850 00:41:07,250 --> 00:41:10,060 Файл називається int.c. 851 00:41:10,060 --> 00:41:12,920 Так що я збираюся сказати, зробити Int, введіть. 852 00:41:12,920 --> 00:41:16,420 Боже мій, але не велика справа, чи не так? 853 00:41:16,420 --> 00:41:17,230 Там помилка. 854 00:41:17,230 --> 00:41:19,810 >> Там в синтаксичну помилку ось така, що програма не може 855 00:41:19,810 --> 00:41:25,460 складатися всередині int.c, лінії сім, символ 27, формат помилка 856 00:41:25,460 --> 00:41:28,400 визначає тип напівкоксу зірка, що б це ні. 857 00:41:28,400 --> 00:41:30,020 Але тип аргументу Int. 858 00:41:30,020 --> 00:41:33,110 >> Так що тут теж, ми не збираємося, метою яких навіть якщо сьогодні багато матеріалу, 859 00:41:33,110 --> 00:41:35,710 ми будемо придушувати вас з абсолютно кожен ознака C, 860 00:41:35,710 --> 00:41:38,070 і програмування в більш загальному сенсі, всього за ці перші кілька тижнів. 861 00:41:38,070 --> 00:41:40,400 Так що часто буде жаргон з якими ви не знайомі. 862 00:41:40,400 --> 00:41:43,350 І справді, символ зірки щось ми збираємося повернутися до 863 00:41:43,350 --> 00:41:44,830 протягом тижня або часу до двох. 864 00:41:44,830 --> 00:41:47,530 >> Але зараз, давайте подивимося, якщо ми можемо розібрати слова, які знайомі. 865 00:41:47,530 --> 00:41:50,750 Formats-- так що ми чули формат специфікатор, код формату раніше. 866 00:41:50,750 --> 00:41:51,840 Це знайоме. 867 00:41:51,840 --> 00:41:53,840 Type-- але аргумент має тип Int. 868 00:41:53,840 --> 00:41:55,980 Зачекайте, я це Int. 869 00:41:55,980 --> 00:41:59,230 >> Може бути, насправді відсотків s має деякий певний сенс. 870 00:41:59,230 --> 00:42:00,230 І дійсно, це робить. 871 00:42:00,230 --> 00:42:03,101 Ціле число, якщо ви хочете PRINTF, щоб замінити його, 872 00:42:03,101 --> 00:42:05,350 ви насправді потрібно використовувати інший формат специфікатор. 873 00:42:05,350 --> 00:42:06,890 І ви не знали б це якщо хтось сказав вам, 874 00:42:06,890 --> 00:42:07,973 або ви зробили це раніше. 875 00:42:07,973 --> 00:42:10,490 Але відсотків я є що може бути широко використовується 876 00:42:10,490 --> 00:42:12,240 в Printf для підключення цілого. 877 00:42:12,240 --> 00:42:14,920 Ви можете також використовувати відсоток d для десяткового цілого числа. 878 00:42:14,920 --> 00:42:16,490 Але я просто і красиво тут. 879 00:42:16,490 --> 00:42:17,590 Таким чином, ми будемо йти з цим. 880 00:42:17,590 --> 00:42:21,160 >> Тепер дозвольте мені йти вперед і перекладка марка INT, Enter. 881 00:42:21,160 --> 00:42:23,328 Це не добре, ніяких помилок. 882 00:42:23,328 --> 00:42:27,260 Дот слеш int-- OK, поганий користувальницький досвід, тому що я не сказав собі 883 00:42:27,260 --> 00:42:27,760 що робити. 884 00:42:27,760 --> 00:42:28,426 Але це нормально. 885 00:42:28,426 --> 00:42:29,480 Я швидко завойовують. 886 00:42:29,480 --> 00:42:36,260 >> А тепер дозвольте мені йти вперед і ввести Давида, OK, Zamila, Роб. 887 00:42:36,260 --> 00:42:37,820 ОК, так що це хороша річ. 888 00:42:37,820 --> 00:42:41,710 На цей раз, я використовую функцію, головоломка шматок, який називається Get Int. 889 00:42:41,710 --> 00:42:44,230 І виходить out-- і ми см це пізніше в term-- 890 00:42:44,230 --> 00:42:47,730 персонал CS50 здійснив отримати рядок таким чином, 891 00:42:47,730 --> 00:42:50,350 що вона буде тільки фізично отримати рядок для вас. 892 00:42:50,350 --> 00:42:54,340 >> Він реалізований в Int Отримати таким чином, що це буде тільки 893 00:42:54,340 --> 00:42:55,590 отримати ціле число для вас. 894 00:42:55,590 --> 00:42:57,830 І якщо ви, людина, не співпрацюють, це 895 00:42:57,830 --> 00:43:00,590 буквально тільки збирається сказати, повторіть, повторіть, повторіть, 896 00:43:00,590 --> 00:43:05,200 буквально сидів там зациклення, поки ви зобов'язують з якимось магічним числом, 897 00:43:05,200 --> 00:43:07,670 як 50, і привіт 50. 898 00:43:07,670 --> 00:43:11,440 >> Або, якщо ми виконаємо це знову і тип в 42, 42 привіт. 899 00:43:11,440 --> 00:43:15,750 І тому функція Get INT всередині цього шматок головоломки 900 00:43:15,750 --> 00:43:19,050 досить логіки, досить думка, щоб з'ясувати, що таке слово? 901 00:43:19,050 --> 00:43:20,330 А що таке число? 902 00:43:20,330 --> 00:43:23,165 Тільки прийняття, в кінцевому рахунку, цифри. 903 00:43:23,165 --> 00:43:25,690 904 00:43:25,690 --> 00:43:30,230 >> Так виходить, що це не всі, що виразно. 905 00:43:30,230 --> 00:43:30,910 так далеко. 906 00:43:30,910 --> 00:43:33,690 Так, яй, останній раз, коли ми пішов досить швидко 907 00:43:33,690 --> 00:43:38,320 в виконавців ігр та анімації, і художні твори, в порожньому місці. 908 00:43:38,320 --> 00:43:42,260 І ось, ми задовольняючись з привіт світ, і привіт 50. 909 00:43:42,260 --> 00:43:43,696 >> Це не все, що надихає. 910 00:43:43,696 --> 00:43:46,070 І дійсно, ці перші кілька приклади займе якийсь час 911 00:43:46,070 --> 00:43:47,510 сповзати в хвилюванні. 912 00:43:47,510 --> 00:43:49,854 Але у нас є так багато більше контролювати зараз, насправді. 913 00:43:49,854 --> 00:43:51,770 І ми будемо дуже швидко почати відводами 914 00:43:51,770 --> 00:43:53,870 на верхній частині цих основних примітивів. 915 00:43:53,870 --> 00:43:56,370 >> Але по-перше, давайте розберемося які обмеження. 916 00:43:56,370 --> 00:43:58,620 Насправді, одна з речей, Подряпини не легко 917 00:43:58,620 --> 00:44:00,990 давайте зробимо це реально дивитися під капотом, 918 00:44:00,990 --> 00:44:03,740 і зрозуміти, що комп'ютер, що він може зробити, 919 00:44:03,740 --> 00:44:05,250 і які його обмеження. 920 00:44:05,250 --> 00:44:08,580 І дійсно, що відсутність розуміння, потенційно, довгострокове 921 00:44:08,580 --> 00:44:12,520 може привести до нашої власної mistakes-- письмовій формі помилок, написання небезпечного програмного забезпечення, 922 00:44:12,520 --> 00:44:13,880 отримує зламали в деякому роді. 923 00:44:13,880 --> 00:44:17,130 >> Отже, давайте деякі кроки в напрямку розуміючи це трохи краще 924 00:44:17,130 --> 00:44:19,710 спосіб, скажімо, такий приклад. 925 00:44:19,710 --> 00:44:23,550 Я збираюся йти вперед і реалізувати реальний швидкий програма під назвою Adder. 926 00:44:23,550 --> 00:44:25,134 Мовляв, давайте додамо деякі цифри разом. 927 00:44:25,134 --> 00:44:27,800 І я збираюся кодувати деякі кути тут, і просто скопіювати і вставити 928 00:44:27,800 --> 00:44:30,270 де я був раніше, просто так що ми можемо почати працювати раніше. 929 00:44:30,270 --> 00:44:33,090 Так що тепер у мене є основні засади програми під назвою Adder. 930 00:44:33,090 --> 00:44:34,670 >> І давайте йти вперед і робити це. 931 00:44:34,670 --> 00:44:38,680 Я збираюся йти вперед і скажімо, IntX отримує отримати Int. 932 00:44:38,680 --> 00:44:39,430 І ви знаєте, що? 933 00:44:39,430 --> 00:44:40,990 Давайте зробимо кращий користувальницький досвід. 934 00:44:40,990 --> 00:44:45,740 >> Так що давайте просто скажемо х, і ефективно підказати користувачу, щоб дати нам х. 935 00:44:45,740 --> 00:44:50,600 А потім дайте мені йти вперед і сказати, Printf як щодо у є, на цей раз чекаючи 936 00:44:50,600 --> 00:44:53,140 два значення від користувача. 937 00:44:53,140 --> 00:44:59,759 А потім давайте просто йти вперед і скажімо, Printf, сума х і у. 938 00:44:59,759 --> 00:45:01,300 А тепер я не хочу робити відсотків с. 939 00:45:01,300 --> 00:45:09,080 Я хочу зробити відсоток I, зворотної косої межі п, а потім підключити значення суми. 940 00:45:09,080 --> 00:45:10,620 >> Так як я можу йти про це? 941 00:45:10,620 --> 00:45:11,270 Знаєш, що? 942 00:45:11,270 --> 00:45:12,840 Я знаю, як використовувати змінні. 943 00:45:12,840 --> 00:45:15,140 Дозвольте мені просто оголосити новий, Int р 944 00:45:15,140 --> 00:45:16,770 >> І я збираюся зробити припущення тут. 945 00:45:16,770 --> 00:45:21,470 Якщо є рівні знаки в цьому мова, може бути, я просто не можу зробити х плюс у, 946 00:45:21,470 --> 00:45:23,660 до тих пір, як я закінчу свою думав з коми? 947 00:45:23,660 --> 00:45:28,170 Тепер я можу повернутися сюди, підключити г, закінчити цю думку з коми. 948 00:45:28,170 --> 00:45:33,160 І давайте подивимося тепер, якщо вони послідовності lines-- х, це отримати Int. 949 00:45:33,160 --> 00:45:34,770 Y це отримати Int. 950 00:45:34,770 --> 00:45:37,980 >> Додати х і у, зберігають значення в z-- так, знову ж таки, пам'ятайте, знак рівності 951 00:45:37,980 --> 00:45:38,560 не дорівнює. 952 00:45:38,560 --> 00:45:41,100 Це призначення справа наліво. 953 00:45:41,100 --> 00:45:45,180 І давайте друкувати, що сума х і у не буквально г, 954 00:45:45,180 --> 00:45:46,830 але що всередині м 955 00:45:46,830 --> 00:45:50,090 Так давайте зробимо Adder - не гарно, ніяких помилок в цей раз. 956 00:45:50,090 --> 00:45:53,030 Дот слеш Adder, введіть, х буде 1. 957 00:45:53,030 --> 00:45:55,380 >> Y буде 2. 958 00:45:55,380 --> 00:45:58,964 А сума х і у дорівнює 3. 959 00:45:58,964 --> 00:46:00,130 Так що це все прекрасно і добре. 960 00:46:00,130 --> 00:46:03,260 >> Таким чином, ви б собі уявити, що математику повинні працювати в програмі, як це. 961 00:46:03,260 --> 00:46:04,040 Але ви знаєте, що? 962 00:46:04,040 --> 00:46:06,904 Чи є ця змінна, рядок 12, навіть необхідно? 963 00:46:06,904 --> 00:46:09,820 Вам не потрібно, щоб стати звичкою просто зберігання речей в змінних 964 00:46:09,820 --> 00:46:10,980 тільки тому, що ви можете. 965 00:46:10,980 --> 00:46:13,550 І справді, це як правило, вважається поганою дизайн 966 00:46:13,550 --> 00:46:18,100 якщо ви створюєте змінну, називається Z в цьому випадку, зберігання щось в ньому, 967 00:46:18,100 --> 00:46:21,390 а потім відразу ж використовуючи його, але ніколи. 968 00:46:21,390 --> 00:46:24,700 Навіщо давати щось ім'я як г, якщо ви в буквальному сенсі 969 00:46:24,700 --> 00:46:26,770 збирається використовувати це предмет тільки один раз, і так 970 00:46:26,770 --> 00:46:29,380 проксимальніше де ви створили це, в першу чергу, 971 00:46:29,380 --> 00:46:31,052 так близько з точки зору рядків коду? 972 00:46:31,052 --> 00:46:31,760 Таким чином, ви знаєте, що? 973 00:46:31,760 --> 00:46:34,480 Виявляється, що C є досить гнучким. 974 00:46:34,480 --> 00:46:36,586 Якщо я насправді хочу плагін значень тут, 975 00:46:36,586 --> 00:46:38,210 Мені не потрібно, щоб оголосити нову змінну. 976 00:46:38,210 --> 00:46:41,680 Я міг би просто плагін х плюс у, тому що розуміє, C 977 00:46:41,680 --> 00:46:43,390 арифметичні і математичні оператори. 978 00:46:43,390 --> 00:46:47,140 >> Так що я можу просто сказати, це зробити математику, х плюс у, якими б ці значення, 979 00:46:47,140 --> 00:46:50,780 підключіть результуючий ціле число в цьому рядку. 980 00:46:50,780 --> 00:46:53,730 Таким чином, це могло б бути, якби тільки один рядок коротше, 981 00:46:53,730 --> 00:46:58,480 кращий дизайн, краща програма, тому що там менше коду, тому 982 00:46:58,480 --> 00:46:59,921 менше для мене зрозуміти. 983 00:46:59,921 --> 00:47:01,920 І це також просто чистіше, остільки, оскільки ми не 984 00:47:01,920 --> 00:47:04,620 вводячи нові слова, нові символи, як і г, 985 00:47:04,620 --> 00:47:07,510 навіть якщо вони насправді не служити багато цілі. 986 00:47:07,510 --> 00:47:12,890 >> На жаль, математика не є все, що надійні іноді. 987 00:47:12,890 --> 00:47:15,270 Давайте йти вперед і робити це. 988 00:47:15,270 --> 00:47:18,200 Я збираюся йти вперед Зараз і зробіть наступне. 989 00:47:18,200 --> 00:47:27,650 >> Давайте зробимо Printf, відсоток I, плюс відсоток я, повинно бути відсотків я, зворотна коса п. 990 00:47:27,650 --> 00:47:32,240 І я збираюся зробити this-- хух плюс у. 991 00:47:32,240 --> 00:47:34,821 Так що я просто хочу переписати це трохи по-іншому тут. 992 00:47:34,821 --> 00:47:36,320 Дозвольте мені зробити швидку перевірку осудності. 993 00:47:36,320 --> 00:47:37,986 Знову ж таки, давайте не будемо забігати вперед. 994 00:47:37,986 --> 00:47:41,420 Зробити акумулятор, точка слеш гадюка. 995 00:47:41,420 --> 00:47:44,950 х дорівнює 1, у 2, 1 плюс 2 дорівнює 3. 996 00:47:44,950 --> 00:47:45,870 Так що це добре. 997 00:47:45,870 --> 00:47:49,060 Але давайте ускладнити це зараз трохи, і створити новий файл. 998 00:47:49,060 --> 00:47:53,350 >> Я буду називати цей, кажуть, Інтс, множина для цілих чисел. 999 00:47:53,350 --> 00:47:55,980 Дозвольте мені почати, де я був хвилину тому. 1000 00:47:55,980 --> 00:47:57,770 Але тепер давайте зробимо кілька інших ліній. 1001 00:47:57,770 --> 00:48:03,430 Дозвольте мені йти вперед і робити наступне, Printf, відсоток я, мінус відсоток я, 1002 00:48:03,430 --> 00:48:08,959 це відсоток я, кома х, кома двох мінус у. 1003 00:48:08,959 --> 00:48:10,750 Так що я трохи роблю інша математика там. 1004 00:48:10,750 --> 00:48:11,624 Давайте зробимо ще один. 1005 00:48:11,624 --> 00:48:16,610 Таким чином, відсоток I рази відсотків я це відсоток я, зворотна коса п. 1006 00:48:16,610 --> 00:48:21,430 Давайте плагін х і у, і х раз у. 1007 00:48:21,430 --> 00:48:24,530 Ми будемо використовувати зірочку ваш комп'ютер протягом часу. 1008 00:48:24,530 --> 00:48:26,390 >> Вам не потрібно використовувати х. х ім'я змінної тут. 1009 00:48:26,390 --> 00:48:28,270 Ви можете використовувати зірку для множення. 1010 00:48:28,270 --> 00:48:29,020 Давайте зробимо ще один. 1011 00:48:29,020 --> 00:48:34,580 Printf відсотка I, розділити на відсоток I, є відсоток я, 1012 00:48:34,580 --> 00:48:40,460 зворотна коса п. ху, поділена на y-- так що ви використовуєте слеш в C 1013 00:48:40,460 --> 00:48:41,502 зробити поділ. 1014 00:48:41,502 --> 00:48:42,460 І давайте зробимо один одного. 1015 00:48:42,460 --> 00:48:47,920 1016 00:48:47,920 --> 00:48:55,240 Remainder відсотка I, розділений на відсоток I, є відсоток я. 1017 00:48:55,240 --> 00:48:59,550 xy-- і тепер залишилося це те, що залишилося. 1018 00:48:59,550 --> 00:49:02,980 При спробі поділу знаменника в чисельник, 1019 00:49:02,980 --> 00:49:05,570 скільки залишилося над цим Ви не могли б розділити поза домом? 1020 00:49:05,570 --> 00:49:07,910 >> Так що не дуже, обов'язково, символ 1021 00:49:07,910 --> 00:49:09,470 ми використовували в початковій школі для цього. 1022 00:49:09,470 --> 00:49:13,830 Але є в C. Ви можете кажуть х по модулю у, де 1023 00:49:13,830 --> 00:49:18,000 цей знак відсотка в цьому context-- коли ви смутно перебуваєте всередині 1024 00:49:18,000 --> 00:49:20,170 подвійних лапках, всередині від Printf, відсотків 1025 00:49:20,170 --> 00:49:21,830 використовується в якості специфікатор формату. 1026 00:49:21,830 --> 00:49:25,420 >> При використанні відсотків за межами що в математичному вираженні, 1027 00:49:25,420 --> 00:49:29,910 це оператор по модулю для модульного arithmetic-- для наших цілей 1028 00:49:29,910 --> 00:49:33,650 тут, просто означає, що таке Інша частина х ділиться на у? 1029 00:49:33,650 --> 00:49:36,130 Так х ділиться на у є х слеш у. 1030 00:49:36,130 --> 00:49:38,220 Що решта ділиться на х у? 1031 00:49:38,220 --> 00:49:41,780 Це х мод у, як програміст міг би сказати. 1032 00:49:41,780 --> 00:49:48,300 >> Так що, якщо я не зробив жодної помилки тут, дозвольте мені йти вперед і зробити Інтс, множина, приємно, 1033 00:49:48,300 --> 00:49:50,010 і точка слеш Інтс. 1034 00:49:50,010 --> 00:49:55,270 І давайте йти вперед і робити, скажімо, 1, 10. 1035 00:49:55,270 --> 00:49:58,390 Добре, 1 плюс 10 дорівнює 11, перевірка. 1036 00:49:58,390 --> 00:50:01,240 1 мінус 10 негативний 9, перевірте. 1037 00:50:01,240 --> 00:50:03,420 >> 1 раз в 10: 10, перевірка. 1038 00:50:03,420 --> 00:50:07,090 1 ділиться на 10 is-- Добре, ми пропустимо що один. 1039 00:50:07,090 --> 00:50:09,480 Залишок 1 ділиться на 10 дорівнює 1. 1040 00:50:09,480 --> 00:50:10,680 Це правильно. 1041 00:50:10,680 --> 00:50:12,630 Але є помилка тут. 1042 00:50:12,630 --> 00:50:15,390 >> Таким чином, той, який я кладу здати, неправильно. 1043 00:50:15,390 --> 00:50:16,670 Я маю на увазі, що це близько до 0. 1044 00:50:16,670 --> 00:50:20,670 1 ділиться на 10, ви знаєте, якщо ми різання деякі кути, звичайно, це нуль. 1045 00:50:20,670 --> 00:50:28,050 Але це повинно бути дійсно 1/10, 0,1 або 0,10, 0,1000, чи щось таке. 1046 00:50:28,050 --> 00:50:30,600 >> Вона не повинна дійсно бути дорівнює нулю. 1047 00:50:30,600 --> 00:50:35,990 Що ж, виходить, що комп'ютер робити буквально те, що ми сказали це зробити. 1048 00:50:35,990 --> 00:50:39,460 Ми робимо математику як х, поділене на у. 1049 00:50:39,460 --> 00:50:44,680 І обидва х і у, на лінії коду раніше, є цілими числами. 1050 00:50:44,680 --> 00:50:50,440 >> Крім того, по лінії 15, ми кажучи Printf, агов, Printf плагін 1051 00:50:50,440 --> 00:50:54,230 ціле число, вставною ціле число, плагін в integer-- спеціально 1052 00:50:54,230 --> 00:50:57,580 х, а потім у, а потім х ділиться на у. х і у Інтс. 1053 00:50:57,580 --> 00:50:59,060 Ми там добре. 1054 00:50:59,060 --> 00:51:01,250 >> Але що х ділиться на х? 1055 00:51:01,250 --> 00:51:06,790 х ділиться на у і має бути, математично, 1/10, або 0,1, 1056 00:51:06,790 --> 00:51:11,600 яка представляє собою дійсне число, дійсне число маючи, потенційно, десяткову точку. 1057 00:51:11,600 --> 00:51:13,230 Це не є цілим числом. 1058 00:51:13,230 --> 00:51:18,290 >> Але те, що найближче ціле число, 1/10, або 0,1? 1059 00:51:18,290 --> 00:51:21,114 Так, це свого роду дорівнює нулю. 1060 00:51:21,114 --> 00:51:22,030 0,1, як це багато. 1061 00:51:22,030 --> 00:51:22,890 І 1 це багато. 1062 00:51:22,890 --> 00:51:25,870 Таким чином, 1/10 ближче до 0, ніж до одного. 1063 00:51:25,870 --> 00:51:30,800 >> І так, що C робить для us-- вид, тому що ми сказали це, метою яких 1064 00:51:30,800 --> 00:51:32,600 є усічення, що ціле число. 1065 00:51:32,600 --> 00:51:40,540 Він приймає значення, що знову-таки є має бути щось на зразок 0,1000, 1066 00:51:40,540 --> 00:51:41,800 0 і так далі. 1067 00:51:41,800 --> 00:51:45,320 І це все, що усічення після десяткового дробу 1068 00:51:45,320 --> 00:51:47,510 так що все це матеріал, тому що це не 1069 00:51:47,510 --> 00:51:51,910 вписується в поняття цілого числа, що це просто число, як негативний 1, 0, 1, 1070 00:51:51,910 --> 00:51:55,830 вгору і вниз, він відкидає всі після десяткового дробу, тому що ви 1071 00:51:55,830 --> 00:51:59,020 не може відповідати десяткову точку в ціле число, за визначенням. 1072 00:51:59,020 --> 00:52:01,290 >> Таким чином, відповідь тут дорівнює нулю. 1073 00:52:01,290 --> 00:52:02,600 Так як же ми це виправити? 1074 00:52:02,600 --> 00:52:04,400 Нам потрібно інше рішення все разом. 1075 00:52:04,400 --> 00:52:06,880 І ми можемо зробити це в такий спосіб. 1076 00:52:06,880 --> 00:52:12,820 >> Дозвольте мені йти вперед і створити новий Файл, на цей раз називається floats.c. 1077 00:52:12,820 --> 00:52:16,500 І зберегти його тут, в той же каталог, float.c. 1078 00:52:16,500 --> 00:52:19,360 1079 00:52:19,360 --> 00:52:23,260 І дозвольте мені йти вперед і скопіювати частина цього коду з раніше. 1080 00:52:23,260 --> 00:52:27,690 >> Але замість того, щоб INT, давайте зробимо це. 1081 00:52:27,690 --> 00:52:31,037 Дайте мені значення з плаваючою комою називається х. де з плаваючою точкою 1082 00:52:31,037 --> 00:52:33,370 значення тільки в буквальному сенсі щось з плаваючою точкою. 1083 00:52:33,370 --> 00:52:34,410 Він може переміщатися вліво, вправо. 1084 00:52:34,410 --> 00:52:35,530 Це дійсне число. 1085 00:52:35,530 --> 00:52:38,050 >> І дозвольте мені не називати отримати Int, але отримати з плаваючою точкою, 1086 00:52:38,050 --> 00:52:41,420 який також був одним з меню опцій в бібліотеці C250. 1087 00:52:41,420 --> 00:52:43,220 Давайте змінимо у до поплавця. 1088 00:52:43,220 --> 00:52:45,000 Так що це буде отримати з плаваючою точкою. 1089 00:52:45,000 --> 00:52:47,620 >> А тепер, ми не хочемо, щоб підключити Інтс. 1090 00:52:47,620 --> 00:52:53,130 Виявляється, ми повинні використовувати відсотків е для поплавка, відсоток F для поплавка, 1091 00:52:53,130 --> 00:52:54,560 і тепер зберегти його. 1092 00:52:54,560 --> 00:53:01,220 А тепер, схрестивши пальці, зробіть поплавці й красиво, точка слеш поплавці. 1093 00:53:01,220 --> 00:53:04,280 х буде одним 1. у Буде 10 разів. 1094 00:53:04,280 --> 00:53:08,240 >> І, добре, добре моє додаток є правильним. 1095 00:53:08,240 --> 00:53:10,240 Я сподівався на більше, але я забув написати. 1096 00:53:10,240 --> 00:53:13,250 Так що давайте йти і виправити цю логічну помилку. 1097 00:53:13,250 --> 00:53:16,280 >> Давайте йти вперед і захопити наступне. 1098 00:53:16,280 --> 00:53:18,080 Ми просто робимо трохи копіювання і вставки. 1099 00:53:18,080 --> 00:53:20,080 І я хочу сказати, мінус. 1100 00:53:20,080 --> 00:53:21,890 >> І я хочу сказати, раз. 1101 00:53:21,890 --> 00:53:24,060 І я хочу сказати, розділилися. 1102 00:53:24,060 --> 00:53:28,240 І я не буду робити по модулю, яка не є, як релевантний тут, 1103 00:53:28,240 --> 00:53:33,690 ділиться на F, і раз plus-- Добре, давайте зробимо це знову. 1104 00:53:33,690 --> 00:53:44,210 >> Зробити поплавці, точка слеш поплавці, і 1, 10, і-- добре, немає, ОК. 1105 00:53:44,210 --> 00:53:45,250 Так що я ідіот. 1106 00:53:45,250 --> 00:53:47,000 Так що це дуже поширена в інформатиці 1107 00:53:47,000 --> 00:53:49,780 щоб зробити дурні помилки, як це. 1108 00:53:49,780 --> 00:53:53,100 >> Для педагогічних цілей, що я дійсно хотів зробити 1109 00:53:53,100 --> 00:53:57,410 був змінити науку тут на плюс, в мінус, до часів, 1110 00:53:57,410 --> 00:54:01,140 і розділити, як ви, сподіваюся, помітили під час цієї вправи. 1111 00:54:01,140 --> 00:54:04,700 Отже, тепер давайте заново скомпілювати Програма, робити точкові слеш поплавці. 1112 00:54:04,700 --> 00:54:07,950 >> І в третій раз, давайте побачити, якщо вона відповідає моїм очікуванням. 1113 00:54:07,950 --> 00:54:21,480 1, 10, введіть, так, добре, 1.000, розділений на 10000, це 0,100000. 1114 00:54:21,480 --> 00:54:24,952 І виходить, що ми можемо контролювати, скільки цифри після цих знаків після коми. 1115 00:54:24,952 --> 00:54:25,660 Ми насправді буде. 1116 00:54:25,660 --> 00:54:26,790 Ми повернемося до цього. 1117 00:54:26,790 --> 00:54:28,440 >> Але тепер, по суті, математика є правильним. 1118 00:54:28,440 --> 00:54:30,090 Так що, знову ж таки, що винос тут? 1119 00:54:30,090 --> 00:54:33,050 Виявляється, що в C, є не тільки strings-- і, насправді, 1120 00:54:33,050 --> 00:54:36,120 Тобто не дуже, тому що ми додати ті, з бібліотекою CS50. 1121 00:54:36,120 --> 00:54:37,710 Але є не тільки Інтс. 1122 00:54:37,710 --> 00:54:38,990 >> Є також плаває. 1123 00:54:38,990 --> 00:54:42,810 І виходить, купу інших даних типу також, що ми будемо використовувати незабаром. 1124 00:54:42,810 --> 00:54:46,270 Виявляється, якщо ви хочете один характер, а не рядок символів, 1125 00:54:46,270 --> 00:54:47,610 ви можете використовувати тільки символ. 1126 00:54:47,610 --> 00:54:52,350 >> Виявляється, що якщо ви хочете, логічне значення, логічне значення, істина або брехня тільки, 1127 00:54:52,350 --> 00:54:56,840 завдяки бібліотеці CS50, ми додається до C типу даних BOOL, а також. 1128 00:54:56,840 --> 00:54:59,180 Але це також присутній в багатьма іншими мовами, а також. 1129 00:54:59,180 --> 00:55:04,130 І виходить, що іноді вам потрібні великі цифри, а потім приходять за замовчуванням 1130 00:55:04,130 --> 00:55:05,210 з Інтс і поплавками. 1131 00:55:05,210 --> 00:55:10,590 >> І, по суті, подвійний ряд який використовує не 32 біта, але 64 біта. 1132 00:55:10,590 --> 00:55:14,990 І довго довго це число, використовує не 32, біти, але 64 біта, 1133 00:55:14,990 --> 00:55:19,190 відповідно, операцій з плаваючою крапкою значення і цілі числа, відповідно. 1134 00:55:19,190 --> 00:55:22,780 Так що давайте насправді в даний час побачити це в дії. 1135 00:55:22,780 --> 00:55:26,150 >> Я збираюся йти вперед тут і нагнітати одну іншу програму. 1136 00:55:26,150 --> 00:55:32,020 Тут я збираюся йти вперед і не включають CS50.h. 1137 00:55:32,020 --> 00:55:34,910 І дозвольте мені йти, включають в себе стандартні IO.h. 1138 00:55:34,910 --> 00:55:37,320 >> І ви помітите щось фанки тут відбувається. 1139 00:55:37,320 --> 00:55:40,592 Це не колірне кодування речі точно так же, як це було раніше. 1140 00:55:40,592 --> 00:55:43,550 І виявляється, що це тому, що я не дали річ ім'я файлу. 1141 00:55:43,550 --> 00:55:47,270 >> Я буду називати цей sizeof.c, і натисніть кнопку Зберегти. 1142 00:55:47,270 --> 00:55:51,039 І зверніть увагу, що відбувається з моєю дуже білий код проти цього чорний фон. 1143 00:55:51,039 --> 00:55:52,830 Тепер, принаймні є деякі фіолетові там. 1144 00:55:52,830 --> 00:55:54,490 І це синтаксис виділений. 1145 00:55:54,490 --> 00:55:57,700 >> Це тому, що досить просто, у мене є розповів, який тип файлу IDE 1146 00:55:57,700 --> 00:56:01,060 це, даючи йому ім'я, і зокрема, розширення файлу. 1147 00:56:01,060 --> 00:56:03,620 Тепер, давайте йти вперед і робити це. 1148 00:56:03,620 --> 00:56:08,910 Я збираюся йти вперед і дуже просто роздрукувати following-- Ьоо 1149 00:56:08,910 --> 00:56:11,080 це відсоток LU. 1150 00:56:11,080 --> 00:56:12,950 >> Ми повернемося до що в мить. 1151 00:56:12,950 --> 00:56:15,840 А потім я збираюся розмір друку BOOL. 1152 00:56:15,840 --> 00:56:18,170 І тепер, щоб заощадити я якийсь час, я 1153 00:56:18,170 --> 00:56:20,280 збирається зробити ціле букет з них відразу. 1154 00:56:20,280 --> 00:56:24,620 І, зокрема, я збираюся змінити це до гольця і ​​голець. 1155 00:56:24,620 --> 00:56:27,760 Це одне, я збираюся змінити до подвійний і подвійний. 1156 00:56:27,760 --> 00:56:31,440 >> Це одне, я збираюся змінити до поплавця і поплавком. 1157 00:56:31,440 --> 00:56:35,670 Це одне, я збираюся зміниться на Int і Int. 1158 00:56:35,670 --> 00:56:38,660 А це, я збираюся щоб змінити довго довго. 1159 00:56:38,660 --> 00:56:40,840 І він як і раніше бере довго, довго довго. 1160 00:56:40,840 --> 00:56:44,572 >> І тоді, нарешті, я дав я занадто багато, рядок. 1161 00:56:44,572 --> 00:56:47,030 Виявляється, що в C, є спеціальний оператор називається 1162 00:56:47,030 --> 00:56:50,260 розмір, що буквально збирається, при запуску, 1163 00:56:50,260 --> 00:56:52,099 скажіть нам розмір кожна з цих змінних. 1164 00:56:52,099 --> 00:56:53,890 І це шлях, в даний час, ми можемо з'єднатися назад 1165 00:56:53,890 --> 00:56:57,140 для обговорення на минулому тижні даних та подання. 1166 00:56:57,140 --> 00:57:00,330 >> Дозвольте мені йти вперед і компілювати розмір точкового розміру Слеш. 1167 00:57:00,330 --> 00:57:01,210 І давайте подивимося. 1168 00:57:01,210 --> 00:57:05,210 Виявляється, що в C, зокрема, на CS50 IDE, 1169 00:57:05,210 --> 00:57:08,170 зокрема, на Операційна система Ubuntu, 1170 00:57:08,170 --> 00:57:11,100 який є 64-розрядної операційної Система в цьому випадку, 1171 00:57:11,100 --> 00:57:14,189 логічне значення буде використовувати один байт простору. 1172 00:57:14,189 --> 00:57:16,480 Ось як вимірюється розмір, не в бітах, а в байтах. 1173 00:57:16,480 --> 00:57:18,690 І пам'ятайте, що один байт вісім біт. 1174 00:57:18,690 --> 00:57:22,030 Так BOOL, навіть якщо ви технічно потрібно тільки 0 або 1, 1175 00:57:22,030 --> 00:57:24,092 це трохи марнотратно як ми реалізували. 1176 00:57:24,092 --> 00:57:26,800 Це насправді збирається використовувати весь byte-- так все нулі, є, можливо, 1177 00:57:26,800 --> 00:57:31,050 всі ті, або щось подібне, або тільки один 1 з восьми бітів. 1178 00:57:31,050 --> 00:57:34,962 >> Напівкоксу, тим часом, використовується для символу як символ Ascii за останній тиждень, 1179 00:57:34,962 --> 00:57:36,170 буде один символ. 1180 00:57:36,170 --> 00:57:42,340 І це синхронізується з нашим поняттям не будучи трохи більше 256 bits-- а, 1181 00:57:42,340 --> 00:57:45,360 синхронізується з ним бути не довше, ніж 8 біт, що 1182 00:57:45,360 --> 00:57:47,450 дає нам цілих 256 значень. 1183 00:57:47,450 --> 00:57:49,680 подвійний збирається становить 8 байт або 64 біта. 1184 00:57:49,680 --> 00:57:50,510 >> Поплавок 4. 1185 00:57:50,510 --> 00:57:51,690 ІНТ 4. 1186 00:57:51,690 --> 00:57:52,980 Довгий, довгий 8. 1187 00:57:52,980 --> 00:57:54,716 І рядок 8. 1188 00:57:54,716 --> 00:57:55,840 Але не турбуйтеся про це. 1189 00:57:55,840 --> 00:57:57,340 Ми збираємося відігніть цей шар. 1190 00:57:57,340 --> 00:57:59,940 Виявляється, рядки можуть бути довше 8 байт. 1191 00:57:59,940 --> 00:58:02,310 >> І дійсно, ми написали рядки вже, привіт світ, 1192 00:58:02,310 --> 00:58:03,700 більше, ніж 8 байт. 1193 00:58:03,700 --> 00:58:06,270 Але ми повернемося до що в мить. 1194 00:58:06,270 --> 00:58:09,690 Але заберіть тут полягає в наступному. 1195 00:58:09,690 --> 00:58:15,320 >> Будь-який комп'ютер має тільки кінцеве обсяг пам'яті і простору. 1196 00:58:15,320 --> 00:58:17,860 Ви можете тільки зберігати так багато файли на вашому Mac або PC. 1197 00:58:17,860 --> 00:58:23,030 Ви можете тільки зберігати так багато програм RAM працює відразу, обов'язково, навіть 1198 00:58:23,030 --> 00:58:26,360 з віртуальної пам'яттю, тому що у вас є обмежена кількість оперативної пам'яті. 1199 00:58:26,360 --> 00:58:28,990 >> І тільки якщо picture-- ви ніколи не відкрили ноутбук 1200 00:58:28,990 --> 00:58:31,300 або замовити додаткову пам'ять для комп'ютера, ви 1201 00:58:31,300 --> 00:58:33,670 може не знати, що всередині вашого комп'ютера 1202 00:58:33,670 --> 00:58:36,590 це те, що виглядає трохи як це. 1203 00:58:36,590 --> 00:58:40,540 Так що це просто звичайна компанія під назвою Вирішальне значення, що робить оперативної пам'яті для комп'ютерів. 1204 00:58:40,540 --> 00:58:43,620 І оперативна пам'ять, де програми жити в той час як вони працюють. 1205 00:58:43,620 --> 00:58:46,630 >> Так що на кожному Mac або PC, при подвійному виберіть програму, і вона відкриває, 1206 00:58:46,630 --> 00:58:48,921 і це відкриває якийсь документ Word, або щось подібне, 1207 00:58:48,921 --> 00:58:51,764 він зберігає її на деякий час в RAM, оскільки оперативна пам'ять швидше 1208 00:58:51,764 --> 00:58:53,680 ніж ваш жорсткий диск, або ваш твердотільний накопичувач. 1209 00:58:53,680 --> 00:58:56,600 Так що це просто, де програми йдуть жити, коли вони працюють, 1210 00:58:56,600 --> 00:58:58,060 або коли використовуються файли. 1211 00:58:58,060 --> 00:59:00,890 >> Так що у вас є речі, які виглядають як це всередині вашого ноутбука, 1212 00:59:00,890 --> 00:59:03,320 або трохи більше речей всередині вашого робочого столу. 1213 00:59:03,320 --> 00:59:07,440 Але ключ у вас є тільки кінцеве число цих речей. 1214 00:59:07,440 --> 00:59:11,230 І є тільки кінцеве кількість апаратне забезпечення, сидячи на цьому столі правою 1215 00:59:11,230 --> 00:59:11,730 тут. 1216 00:59:11,730 --> 00:59:15,920 >> Так що, звичайно ж, ми не можемо зберігати нескінченно довгих чисел. 1217 00:59:15,920 --> 00:59:19,030 І, тим не менше, якщо ви думаєте, назад початкової школи, скільки цифр може 1218 00:59:19,030 --> 00:59:21,400 ви повинні права з десяткового дробу? 1219 00:59:21,400 --> 00:59:24,680 В цьому відношенні, скільки цифр може у вас є коду точки? 1220 00:59:24,680 --> 00:59:26,300 Дійсно, нескінченно багато. 1221 00:59:26,300 --> 00:59:30,840 >> Тепер ми, люди могли б тільки знаєте, як вимовляється мільйон, 1222 00:59:30,840 --> 00:59:34,990 і мільярд, трильйон, і квадрильйонів і квінтильйонів. 1223 00:59:34,990 --> 00:59:39,370 І я розширюють межі мого understanding-- або my-- Я розумію, 1224 00:59:39,370 --> 00:59:41,110 цифри, але мій вимова чисел. 1225 00:59:41,110 --> 00:59:44,720 Але вони можуть отримати нескінченно великий з нескінченно багато цифр зліва 1226 00:59:44,720 --> 00:59:47,050 або праворуч від десяткового дробу. 1227 00:59:47,050 --> 00:59:50,040 >> Але комп'ютери є тільки кінцеве кількість пам'яті, 1228 00:59:50,040 --> 00:59:53,510 кінцеве число транзисторів, A кінцеве число лампочок всередині. 1229 00:59:53,510 --> 00:59:57,350 Так що ж відбувається, коли ви біжите з космосу? 1230 00:59:57,350 --> 00:59:59,620 Іншими словами, якщо ви думаю, що повернутися до минулого тижня 1231 00:59:59,620 --> 01:00:03,160 коли ми говорили про цифри Самі представлені в двійковому вигляді, 1232 01:00:03,160 --> 01:00:05,480 Припустимо, що у нас є це 8-бітове значення тут. 1233 01:00:05,480 --> 01:00:08,290 >> І у нас є сім 1 і один 0. 1234 01:00:08,290 --> 01:00:10,827 І припустимо, що ми хочемо додати 1 до цього значення. 1235 01:00:10,827 --> 01:00:12,410 Це дійсно велике число прямо зараз. 1236 01:00:12,410 --> 01:00:16,610 >> Це 254, якщо я пам'ятаю математика з минулого тижня справа. 1237 01:00:16,610 --> 01:00:19,480 Але що, якщо я змінити що крайній праворуч від 0 до 1? 1238 01:00:19,480 --> 01:00:22,800 Ціле число, з Звичайно, буде вісім 1-х. 1239 01:00:22,800 --> 01:00:24,050 Таким чином, ми як і раніше добре. 1240 01:00:24,050 --> 01:00:27,204 >> І це, ймовірно, представляє 255, хоча в залежності від контексту 1241 01:00:27,204 --> 01:00:29,120 він може насправді представляють негативне число. 1242 01:00:29,120 --> 01:00:31,240 Але про це іншим разом. 1243 01:00:31,240 --> 01:00:34,220 Це почуття, що мова йде про настільки ж високо, як я можу розраховувати. 1244 01:00:34,220 --> 01:00:35,290 >> Тепер, це тільки 8 біт. 1245 01:00:35,290 --> 01:00:38,170 І мій Mac, звичайно ж, є шлях більше 8 біт пам'яті. 1246 01:00:38,170 --> 01:00:39,170 Але у нього є кінцеве. 1247 01:00:39,170 --> 01:00:43,230 Таким чином, той же аргумент застосуємо, навіть якщо ми мають більш з цих одиниць на екрані. 1248 01:00:43,230 --> 01:00:47,020 >> Але що станеться, якщо ви зберігання цього числа, 255, 1249 01:00:47,020 --> 01:00:49,290 і ви хочете вважати 1 трохи вище? 1250 01:00:49,290 --> 01:00:51,600 Ви хочете перейти від 255 до 256. 1251 01:00:51,600 --> 01:00:55,800 Проблема, звичайно, в тому, що якщо ви почати відлік з нуля, як минулого тижня, 1252 01:00:55,800 --> 01:00:59,670 ви не можете розраховувати, як високий в 256, не кажучи вже про 257, 1253 01:00:59,670 --> 01:01:02,584 не кажучи вже про 258, м, тому що відбувається, коли ви додаєте 1? 1254 01:01:02,584 --> 01:01:05,000 Якщо ви робите стару початкову школу підхід, ви поклали 1 тут, 1255 01:01:05,000 --> 01:01:08,150 а потім 1 плюс 1 дорівнює 2, але це насправді нуль, ви носите 1, 1256 01:01:08,150 --> 01:01:09,695 нести 1, нести 1. 1257 01:01:09,695 --> 01:01:12,620 Всі ці речі, ці 1, перейдіть до нуля. 1258 01:01:12,620 --> 01:01:17,820 І вітер, так, як хтось вказав, що в 1 на лівій стороні. 1259 01:01:17,820 --> 01:01:22,540 Але все, що ви можете насправді побачити і поміщається в пам'яті 1260 01:01:22,540 --> 01:01:27,960 знаходиться всього в восьми 0, який повинен сказати, в якийсь момент, якщо ви, комп'ютер, 1261 01:01:27,960 --> 01:01:32,490 судимий підрахунку досить високо, ви збирається обернути навколо, здавалося б, 1262 01:01:32,490 --> 01:01:35,850 до нуля, або, може бути навіть негативним цифри, які навіть нижче нуля. 1263 01:01:35,850 --> 01:01:37,260 >> І ми можемо роду побачити це. 1264 01:01:37,260 --> 01:01:39,900 Дозвольте мені йти вперед і написати реальна швидка програма тут. 1265 01:01:39,900 --> 01:01:43,690 Дозвольте мені йти вперед і написати програма під назвою переливу. 1266 01:01:43,690 --> 01:01:49,980 Увімкніть CS50.h, включите стандарт IO.h-- про, 1267 01:01:49,980 --> 01:01:51,730 Я дійсно пропустив мій підсвічування синтаксису. 1268 01:01:51,730 --> 01:01:54,440 Так давайте збережемо це як overflow.c. 1269 01:01:54,440 --> 01:01:57,084 >> А тепер головний INT void-- і до тих пір, ми будемо 1270 01:01:57,084 --> 01:01:59,500 повернутися до пояснення, чому ми продовжуємо писати Int основну порожнечу. 1271 01:01:59,500 --> 01:02:02,080 Але зараз, давайте просто робити вона, беручи його як само собою зрозуміле. 1272 01:02:02,080 --> 01:02:06,200 Давайте дати собі Int, і форматувати його до 0. 1273 01:02:06,200 --> 01:02:11,716 >> Давайте тоді зробити для Int я отримую zero-- насправді, давайте робити нескінченний цикл 1274 01:02:11,716 --> 01:02:12,590 і подивитися, що відбувається. 1275 01:02:12,590 --> 01:02:22,440 У той час як вірно, то давайте роздрукувати п це відсоток я, зворотна коса риска п, плагін п. 1276 01:02:22,440 --> 01:02:27,200 Але тепер, давайте п отримує п плюс 1. 1277 01:02:27,200 --> 01:02:29,660 >> Отже, іншими словами, на кожен ітерація цього нескінченного циклу, 1278 01:02:29,660 --> 01:02:32,550 давайте розглянемо значення п, в і додати до нього 1, а потім 1279 01:02:32,550 --> 01:02:34,350 зберегти результат в п на лівій стороні. 1280 01:02:34,350 --> 01:02:37,150 І справді, ми вже бачили синтаксис трохи, як це, на короткий час. 1281 01:02:37,150 --> 01:02:39,730 Прохолодний трюк натомість писати все це, 1282 01:02:39,730 --> 01:02:42,770 ви можете сказати, п плюс дорівнює 1. 1283 01:02:42,770 --> 01:02:47,480 >> Або, якщо ви дійсно хочете бути фантазії, Ви можете сказати, п плюс плюс крапка з комою. 1284 01:02:47,480 --> 01:02:50,130 Але ці останні два просто то, що ми назвали б синтаксичний цукор 1285 01:02:50,130 --> 01:02:50,790 для першої речі. 1286 01:02:50,790 --> 01:02:53,456 >> Перше, що є більш явним, абсолютно нормально, абсолютно правильно. 1287 01:02:53,456 --> 01:02:55,470 Але це частіше, я скажу. 1288 01:02:55,470 --> 01:02:57,210 Таким чином, ми будемо робити це на мить. 1289 01:02:57,210 --> 01:03:01,685 >> Давайте тепер зробити переповнення, яка звучить досить зловісно, ​​точка переповнення косою риси. 1290 01:03:01,685 --> 01:03:04,380 1291 01:03:04,380 --> 01:03:09,852 Давайте подивимося, п стає досить великий. 1292 01:03:09,852 --> 01:03:11,310 Але давайте подумаємо, наскільки велика може отримати п? 1293 01:03:11,310 --> 01:03:12,870 >> п є Int. 1294 01:03:12,870 --> 01:03:16,400 Ми бачили хвилину назад з розміром приклад, що INT чотири байти. 1295 01:03:16,400 --> 01:03:22,070 Ми знаємо, що з минулого тижня, чотири байти є 32 біта, тому що в 8 разів 4, це 32. 1296 01:03:22,070 --> 01:03:23,460 Це буде 4 млрд. 1297 01:03:23,460 --> 01:03:25,802 >> І ми до 800,000. 1298 01:03:25,802 --> 01:03:28,510 Це буде тривати вічно розраховувати так високо, як я, можливо, може. 1299 01:03:28,510 --> 01:03:30,635 Так що я збираюся йти вперед, як ви могли б незабаром, 1300 01:03:30,635 --> 01:03:34,910 і вдарив управління c-- відверто, контроль C, багато, де управління C в цілому 1301 01:03:34,910 --> 01:03:36,034 засіб скасування. 1302 01:03:36,034 --> 01:03:38,200 На жаль, так як цей працює в хмарі, 1303 01:03:38,200 --> 01:03:41,190 бувало, що хмара впливів так багато речей, 1304 01:03:41,190 --> 01:03:44,180 так багато виведення, він збирається зайняти деякий час для мого введення 1305 01:03:44,180 --> 01:03:45,630 щоб дістатися до хмари. 1306 01:03:45,630 --> 01:03:49,240 Так що, хоча я вдарив Контроль C кілька секунд тому, 1307 01:03:49,240 --> 01:03:53,110 це, безумовно, сторона ефект нескінченного циклу. 1308 01:03:53,110 --> 01:03:56,070 >> І тому в таких випадках, ми збирається залишити це бути. 1309 01:03:56,070 --> 01:03:59,050 І ми збираємося додати ще вікно терміналу тут 1310 01:03:59,050 --> 01:04:03,186 з плюсом, який, звичайно, не як це, так як він все ще думає. 1311 01:04:03,186 --> 01:04:05,310 І давайте йти вперед і бути трохи більш розумним. 1312 01:04:05,310 --> 01:04:07,768 >> Я збираюся йти вперед і робити це лише кінцеве число раз. 1313 01:04:07,768 --> 01:04:10,047 Давайте використовувати цикл, які я згадував раніше. 1314 01:04:10,047 --> 01:04:10,630 Давай зробимо це. 1315 01:04:10,630 --> 01:04:13,430 Дайте мені іншу змінну Int я отримує 0. 1316 01:04:13,430 --> 01:04:17,430 я менше, ніж, скажімо, 64 я ++. 1317 01:04:17,430 --> 01:04:24,010 А тепер дозвольте мені йти вперед і друк з п відсотків я, кома п. 1318 01:04:24,010 --> 01:04:27,547 І тоді це N-, до сих пір збирається взяти назавжди. 1319 01:04:27,547 --> 01:04:28,130 Давай зробимо це. 1320 01:04:28,130 --> 01:04:30,620 >> п отримує п раз 2. 1321 01:04:30,620 --> 01:04:34,140 Або ми могли б бути фантазії і робити раз дорівнює 2. 1322 01:04:34,140 --> 01:04:37,120 Але давайте просто скажемо, п одно сама по собі, раз 2. 1323 01:04:37,120 --> 01:04:39,321 Іншими словами, в цьому Нова версія програми, 1324 01:04:39,321 --> 01:04:41,820 Я не хочу чекати вічно від 800 000, як до 4 мільярдів. 1325 01:04:41,820 --> 01:04:43,070 Давайте просто покінчимо з цим. 1326 01:04:43,070 --> 01:04:44,920 >> Давайте насправді в два рази п кожен раз. 1327 01:04:44,920 --> 01:04:47,660 Який, нагадаємо, є подвоєнням навпаки того, звичайно. 1328 01:04:47,660 --> 01:04:50,035 І в той час як минулого тижня у нас є щось знову і знову, 1329 01:04:50,035 --> 01:04:52,200 і знову, супер швидкий, Подвоєння, безумовно, 1330 01:04:52,200 --> 01:04:58,080 отримати нас від 1 до найбільшої можливо значення, яке ми можемо розраховувати, щоб з міжнар. 1331 01:04:58,080 --> 01:04:59,750 >> Так що давайте робити саме це. 1332 01:04:59,750 --> 01:05:01,720 І ми повернемося до цього незабаром. 1333 01:05:01,720 --> 01:05:04,180 Але це, знову ж таки, як і повтор блоку в порожньому місці. 1334 01:05:04,180 --> 01:05:05,600 І ви будете використовувати це до тих пір. 1335 01:05:05,600 --> 01:05:10,170 >> Це просто означає, що відлік від нуля до, але не рівні, до 64 років. 1336 01:05:10,170 --> 01:05:14,285 І на кожній ітерації цього цикл, просто тримати збільшенням я. 1337 01:05:14,285 --> 01:05:18,990 Так що я ++ - і ця загальна конструкція в рядку 7 це просто супер поширений спосіб 1338 01:05:18,990 --> 01:05:22,290 повторювати кілька рядків код, кілька разів. 1339 01:05:22,290 --> 01:05:23,362 Які рядки коду? 1340 01:05:23,362 --> 01:05:25,570 Ці фігурні дужки, як ви можливо, почерпнуті тепер, 1341 01:05:25,570 --> 01:05:26,780 означає, зробіть наступне. 1342 01:05:26,780 --> 01:05:29,510 >> Це в такий подряпини, коли він має жовті блоки 1343 01:05:29,510 --> 01:05:32,680 і інші кольори, вид прийняти або обіймають інші блоки. 1344 01:05:32,680 --> 01:05:34,750 Ось що ці фігурні брекети роблять тут. 1345 01:05:34,750 --> 01:05:40,200 Так що, якщо я отримав свій синтаксис right-- вас можна побачити символ морква в засобах C 1346 01:05:40,200 --> 01:05:42,706 ось скільки разів я був намагаючись вирішити цю проблему. 1347 01:05:42,706 --> 01:05:45,330 Так що давайте позбутися цього одного в цілому, і закрити це вікно. 1348 01:05:45,330 --> 01:05:46,520 І ми будемо використовувати новий. 1349 01:05:46,520 --> 01:05:51,980 Зробити переповнення, точка слеш Переповнення, Enter, все в порядку, 1350 01:05:51,980 --> 01:05:53,090 це виглядає погано на перший погляд. 1351 01:05:53,090 --> 01:05:56,200 Але давайте прокручувати назад в часі, тому що я зробив це 64 раз. 1352 01:05:56,200 --> 01:05:58,700 >> І зауважте, в перший раз, п дорівнює 1. 1353 01:05:58,700 --> 01:06:03,110 Другий раз, п = 2, потім 4, потім 8, потім 16. 1354 01:06:03,110 --> 01:06:09,450 І мені здається, що як тільки Я отримую приблизно 1 млрд, 1355 01:06:09,450 --> 01:06:12,800 якщо я знову подвоїти її, що повинен дати мені 2 мільярди доларів. 1356 01:06:12,800 --> 01:06:14,980 Але виявляється, це прямо на порозі. 1357 01:06:14,980 --> 01:06:18,930 >> І це насправді переливається INT з 1 млрд 1358 01:06:18,930 --> 01:06:23,514 грубо негативне 2 млрд, так як ціле число, 1359 01:06:23,514 --> 01:06:25,430 на відміну від чисел ми приймають на себе минулого тижня, 1360 01:06:25,430 --> 01:06:28,397 може бути як позитивним, так і негативним насправді, і в комп'ютері. 1361 01:06:28,397 --> 01:06:30,730 І так по крайней мере, один з тих, біти ефективно вкрадені. 1362 01:06:30,730 --> 01:06:34,190 Таким чином, ми дійсно тільки 31 біт, або 2 мільярди можливих значень. 1363 01:06:34,190 --> 01:06:38,220 >> Але на даний момент, їжа на будинок цілком просто, хоч би якими були ці цифри 1364 01:06:38,220 --> 01:06:42,280 і незалежно від того математика, щось погане трапляється в кінці кінців, 1365 01:06:42,280 --> 01:06:46,980 тому що в кінці кінців, ви намагаєтеся переставляють біти занадто багато разів. 1366 01:06:46,980 --> 01:06:51,060 І ви ефективно перейти від всіх 1-х, може бути, все 0, або, може бути, 1367 01:06:51,060 --> 01:06:54,260 просто якийсь інший моделі, що воно Очевидно, що в залежності від контексту, 1368 01:06:54,260 --> 01:06:56,342 може бути витлумачено як негативне число. 1369 01:06:56,342 --> 01:06:59,300 І ось, здавалося б, найвищий I може розраховувати в цій конкретній програмі 1370 01:06:59,300 --> 01:07:01,210 складає всього близько 1 млрд. 1371 01:07:01,210 --> 01:07:02,760 Але є часткове рішення тут. 1372 01:07:02,760 --> 01:07:03,480 Знаєш, що? 1373 01:07:03,480 --> 01:07:07,600 >> Дозвольте мені змінити з Int на довгий довго. 1374 01:07:07,600 --> 01:07:10,633 І дозвольте мені йти вперед тут і say-- я буду мати 1375 01:07:10,633 --> 01:07:12,290 щоб змінити це без знака довго. 1376 01:07:12,290 --> 01:07:16,860 Або, давайте подивимося, я ніколи не пам'ятаю себе. 1377 01:07:16,860 --> 01:07:19,920 >> Давайте йти вперед і зробити переповнення. 1378 01:07:19,920 --> 01:07:21,860 Ні, це не так, ДНУ, спасибі. 1379 01:07:21,860 --> 01:07:23,430 Так що іноді Clang може бути корисним. 1380 01:07:23,430 --> 01:07:27,550 Я не пам'ятаю, який формат Специфікатор був довго довго. 1381 01:07:27,550 --> 01:07:28,950 >> Але, насправді, Clang сказав мені. 1382 01:07:28,950 --> 01:07:31,570 Зелений є свого роду добре, як і раніше означає, що ви зробили помилку. 1383 01:07:31,570 --> 01:07:33,190 Це здогадуючись, що я мав на увазі LLD. 1384 01:07:33,190 --> 01:07:38,750 >> Отже, дозвольте мені взяти це рада, довгий довгий десяткове число, крім того, що. 1385 01:07:38,750 --> 01:07:43,190 І дозвольте мені знову запустити його, точка слеш переповнення, Enter. 1386 01:07:43,190 --> 01:07:45,020 А тепер, що це круто це. 1387 01:07:45,020 --> 01:07:49,140 >> Якщо я прокручую назад в часі, ми до сих пір почати вважаючи в той же place-- 1, 2, 4, 1388 01:07:49,140 --> 01:07:50,220 8, 16. 1389 01:07:50,220 --> 01:07:54,860 Зверніть увагу, ми отримуємо все аж до 1 млрд. 1390 01:07:54,860 --> 01:07:57,070 Але тоді ми благополучно дістатися до 2 млрд. 1391 01:07:57,070 --> 01:08:01,300 >> Тоді ми отримаємо 4 млрд, потім 8 млрд, 17 млрд. 1392 01:08:01,300 --> 01:08:03,340 І ми йдемо вище, і вище, і вище. 1393 01:08:03,340 --> 01:08:05,740 Зрештою, це теж ламається. 1394 01:08:05,740 --> 01:08:09,350 >> Зрештою, з тих пір довго, який є 64-бітове значення, а не 1395 01:08:09,350 --> 01:08:13,660 32-бітове значення, якщо вважати занадто високо, ви обтікати 0. 1396 01:08:13,660 --> 01:08:16,410 І в цьому випадку, ми опинилися в кінцевому підсумку з негативним числом. 1397 01:08:16,410 --> 01:08:17,550 >> Так що це проблема. 1398 01:08:17,550 --> 01:08:20,439 І виходить, що це Проблема в тому, що не всі аркан. 1399 01:08:20,439 --> 01:08:23,060 Навіть якщо я навмисно спонукало його з цими помилками, 1400 01:08:23,060 --> 01:08:26,149 виходить, ми бачимо, що це начебто все навколо нас, або, принаймні, деякі з нас. 1401 01:08:26,149 --> 01:08:28,939 >> Так що в Lego Star Wars, якщо ви коли-небудь грали в цю гру, 1402 01:08:28,939 --> 01:08:33,830 виходить, ви можете ходити ламати речі в LEGO світі, 1403 01:08:33,830 --> 01:08:36,640 і збирати монети, по суті. 1404 01:08:36,640 --> 01:08:39,200 І якщо ви коли-небудь грали ця гра дуже багато часу, 1405 01:08:39,200 --> 01:08:42,630 як це безіменного людини тут же, загальне число 1406 01:08:42,630 --> 01:08:46,700 монет, які ви можете отримати це, здавалося б, 4 млрд. 1407 01:08:46,700 --> 01:08:48,240 >> Тепер, коли він насправді закруглені. 1408 01:08:48,240 --> 01:08:50,239 Так що LEGO намагався тримати речі дружнім до користувача. 1409 01:08:50,239 --> 01:08:53,779 Вони не робили це точно від 2 до 32 потужності, за останній тиждень. 1410 01:08:53,779 --> 01:08:55,310 Але 4 млрд причина. 1411 01:08:55,310 --> 01:08:58,979 Здається, грунтуючись на цій інформації, що LEGO, і компанія, яка 1412 01:08:58,979 --> 01:09:02,624 зробив це фактичне програмне забезпечення, вирішив що максимальна кількість монет 1413 01:09:02,624 --> 01:09:04,540 користувач може накопичуватися це, по суті, 4 мільярди, 1414 01:09:04,540 --> 01:09:12,069 тому що вони вибрали в своєму коді використовувати не довго довго, мабуть, 1415 01:09:12,069 --> 01:09:16,140 але тільки ціле число, без знака ціле число, тільки натуральне число, чиї 1416 01:09:16,140 --> 01:09:18,089 максимальне значення становить приблизно це. 1417 01:09:18,089 --> 01:09:19,380 Ну, ось ще кумедний. 1418 01:09:19,380 --> 01:09:23,500 Так що в грі Цивілізація, яка деякі з вас можуть бути знайомі з 1419 01:09:23,500 --> 01:09:26,660 з'ясовується, що кілька років тому там була помилка в цій грі в результаті чого 1420 01:09:26,660 --> 01:09:28,750 якщо ви грали роль Ганді в грі, 1421 01:09:28,750 --> 01:09:34,020 замість нього був дуже пацифістом, замість того, щоб було неймовірно, неймовірно 1422 01:09:34,020 --> 01:09:36,399 агресивний, в деяких обставинах. 1423 01:09:36,399 --> 01:09:40,529 Зокрема, так, що цивілізація роботи є те, що якщо ви, гравець, 1424 01:09:40,529 --> 01:09:44,680 прийняти демократію, ваш Агресивність оцінка отримує 1425 01:09:44,680 --> 01:09:48,130 декрементируется на два, тому мінус мінус, а потім мінус мінус. 1426 01:09:48,130 --> 01:09:50,569 >> Таким чином, ви відняти 2 з фактична ітерація. 1427 01:09:50,569 --> 01:09:56,650 На жаль, якщо ваш ітерація є спочатку 1, і відняти від нього 2 1428 01:09:56,650 --> 01:09:59,050 після прийняття демократії Ганді, як тут може 1429 01:09:59,050 --> 01:10:02,200 зробив, тому що він був дуже passive-- 1 за шкалою агресивності. 1430 01:10:02,200 --> 01:10:04,830 Але якщо він приймає демократію, то він йде від 1 до негативного 1. 1431 01:10:04,830 --> 01:10:11,470 >> На жаль, вони були за допомогою чисел без знака, 1432 01:10:11,470 --> 01:10:15,400 що означає, що вони обробляють навіть негативним числа, як якщо б вони були позитивними. 1433 01:10:15,400 --> 01:10:19,780 І виходить, що позитивний еквівалент негативного 1, 1434 01:10:19,780 --> 01:10:23,480 в типових комп'ютерних програм, становить 255. 1435 01:10:23,480 --> 01:10:27,250 Так що якщо Ганді приймає , І, отже, демократія 1436 01:10:27,250 --> 01:10:32,470 його оцінка агресивності зменшилася, він насправді катається до 255 1437 01:10:32,470 --> 01:10:35,470 і робить його самим агресивний характер в грі. 1438 01:10:35,470 --> 01:10:36,930 Таким чином, ви Google може на цьому. 1439 01:10:36,930 --> 01:10:39,380 І це було, дійсно, випадкове програмування помилка, 1440 01:10:39,380 --> 01:10:43,010 але це зовсім увійшов традиційні практичні знання досі. 1441 01:10:43,010 --> 01:10:44,360 >> Це все весело і мило. 1442 01:10:44,360 --> 01:10:47,760 Найстрашніше, коли фактична реального світу пристроїв, а не ігри, 1443 01:10:47,760 --> 01:10:48,820 мають ті ж самі помилки. 1444 01:10:48,820 --> 01:10:54,500 Насправді, лише рік тому стаття прийшла поза про Boeing 787 Dreamliner. 1445 01:10:54,500 --> 01:10:56,850 >> І стаття в першій Погляд читає трохи Arcane. 1446 01:10:56,850 --> 01:11:01,480 Але це сказав, програмне забезпечення Уразливість в Боїнг 1447 01:11:01,480 --> 01:11:04,790 новий 787 Dreamliner струмінь має потенціал, щоб викликати пілотів 1448 01:11:04,790 --> 01:11:07,220 втратити контроль над літак, можливо, 1449 01:11:07,220 --> 01:11:11,750 в середині польоту, чиновники FAA попереджений авіакомпанії останнім часом. 1450 01:11:11,750 --> 01:11:14,520 Це було визначення що модель 787 1451 01:11:14,520 --> 01:11:19,770 літак, який був включений безперервно протягом 248 днів 1452 01:11:19,770 --> 01:11:24,880 може втратити все змінний струм, змінний струм, електрична потужність через генератора 1453 01:11:24,880 --> 01:11:28,892 блоки управління, ГПА, одночасно входячи в відмовостійкий режим. 1454 01:11:28,892 --> 01:11:29,850 Це, як я втратити. 1455 01:11:29,850 --> 01:11:35,390 Але в меморандумі говориться, добре, тепер я отримав, що, стан був викликаний програмним забезпеченням 1456 01:11:35,390 --> 01:11:38,590 протистояти внутрішнім по відношенню до управління генератором 1457 01:11:38,590 --> 01:11:44,860 одиниці, які будуть переповнюватися 248 днів безперервної потужності. 1458 01:11:44,860 --> 01:11:47,070 Ми випускаємо цей зверніть увагу, щоб запобігти втраті 1459 01:11:47,070 --> 01:11:49,300 всього змінного електричного потужність, що може привести до 1460 01:11:49,300 --> 01:11:50,980 у втраті контролю над літаком. 1461 01:11:50,980 --> 01:11:55,380 >> Таким чином, в буквальному сенсі, є деяке ціле число, або деякий еквівалентний тип даних, 1462 01:11:55,380 --> 01:11:57,960 використовується в програмному забезпеченні в реальному літаку 1463 01:11:57,960 --> 01:12:00,756 що якщо ви тримаєте ваш літак досить довго, мабуть 1464 01:12:00,756 --> 01:12:03,880 може бути в разі, якщо ви просто працюєте вони постійно і ніколи не від'єднавши 1465 01:12:03,880 --> 01:12:06,810 ваш літак, здається, чи дозволяючи його батареї вмирають, 1466 01:12:06,810 --> 01:12:09,840 в кінцевому підсумку підрахувати, і вгору, і вище, і вище, і вище, і вище. 1467 01:12:09,840 --> 01:12:12,150 >> І, по природі, кінцеве кількість пам'яті 1468 01:12:12,150 --> 01:12:15,880 переповниться, відкат нуль або деякий від'ємне значення, 1469 01:12:15,880 --> 01:12:19,920 побічним ефектом якого є лякаюче реальна реальність 1470 01:12:19,920 --> 01:12:23,970 що літак, можливо, буде потрібно бути перезавантажений, ефективно, 1471 01:12:23,970 --> 01:12:27,290 або може впасти, що ще гірше, так як вона летить. 1472 01:12:27,290 --> 01:12:29,230 Таким чином, ці види питань все ще з нами, 1473 01:12:29,230 --> 01:12:33,130 even-- це було 2015 статті, все більше лякає 1474 01:12:33,130 --> 01:12:36,100 коли ви не обов'язково розуміють, цінують, або передбачити 1475 01:12:36,100 --> 01:12:38,640 ті види помилок. 1476 01:12:38,640 --> 01:12:42,030 >> Так виходить, є ще одна Погана річ про подання даних. 1477 01:12:42,030 --> 01:12:47,080 Виявляється, що навіть поплавці роду недоліки, тому що поплавці теж, 1478 01:12:47,080 --> 01:12:51,440 Я запропонував 32 біта, або може бути 64, якщо ви використовуєте подвійний. 1479 01:12:51,440 --> 01:12:53,070 Але це все-таки конечна. 1480 01:12:53,070 --> 01:12:57,070 >> І улов в тому, що якщо ви можете покласти нескінченне число цифр 1481 01:12:57,070 --> 01:12:59,460 після десяткового дробу, немає ніякого способу, ви 1482 01:12:59,460 --> 01:13:02,690 може представляти всі можливі числа, які нас вчили 1483 01:13:02,690 --> 01:13:04,990 в початковій школі може існувати в світі. 1484 01:13:04,990 --> 01:13:08,870 Комп'ютер, по суті, повинен вибрати підмножина цих чисел 1485 01:13:08,870 --> 01:13:10,200 для подання точно. 1486 01:13:10,200 --> 01:13:12,450 >> Тепер, комп'ютер може раунд може бути, трохи, 1487 01:13:12,450 --> 01:13:17,900 і може дозволити вам приблизно магазин будь-яке число, яке ви могли б можливо хотіти. 1488 01:13:17,900 --> 01:13:20,940 Але тільки інтуїтивно, якщо ви мають кінцеве число бітів, 1489 01:13:20,940 --> 01:13:24,560 ви можете тільки переставляти їх у багатьох кінцевих шляхів. 1490 01:13:24,560 --> 01:13:26,570 Таким чином, ви не можете, можливо, використовувати кінцеве число 1491 01:13:26,570 --> 01:13:29,880 перестановки бітів, шаблони нулів і одиниць, 1492 01:13:29,880 --> 01:13:32,940 представляти нескінченне кількість чисел, 1493 01:13:32,940 --> 01:13:37,370 який передбачає, що комп'ютери можуть бути дуже добре бути бреше нам іноді. 1494 01:13:37,370 --> 01:13:38,770 >> Насправді, давайте зробимо це. 1495 01:13:38,770 --> 01:13:41,239 Дозвольте мені повернутися в CS50 IDE. 1496 01:13:41,239 --> 01:13:43,030 Дозвольте мені йти вперед і створити невелику програму 1497 01:13:43,030 --> 01:13:47,940 називається Неточність, щоб показати, що комп'ютери, насправді, неточні. 1498 01:13:47,940 --> 01:13:51,910 >> І дозвольте мені йти вперед і почати з деякі з цього коду з раніше, 1499 01:13:51,910 --> 01:13:53,830 і тепер просто зробити наступне. 1500 01:13:53,830 --> 01:14:03,640 Дозвольте мені йти вперед і робити PRINTF, відсоток е, зворотна коса п, 1 ділиться на 10. 1501 01:14:03,640 --> 01:14:07,430 Іншими словами, давайте пірнати глибше 1/10, як 1 і ділиться на 10. 1502 01:14:07,430 --> 01:14:09,760 Звичайно, комп'ютер може представляти 1/10. 1503 01:14:09,760 --> 01:14:13,620 >> Так що давайте йти вперед і зробити неточностей. 1504 01:14:13,620 --> 01:14:14,390 Давайте подивимося. 1505 01:14:14,390 --> 01:14:16,210 Формат задає тип двічі. 1506 01:14:16,210 --> 01:14:18,160 Але аргумент має тип Int. 1507 01:14:18,160 --> 01:14:19,040 Що відбувається? 1508 01:14:19,040 --> 01:14:21,970 >> О, цікаво, так це Урок, витягнутий з раніше. 1509 01:14:21,970 --> 01:14:26,050 Я кажу, агов, комп'ютер шоу я поплавок з відсотками ф. 1510 01:14:26,050 --> 01:14:28,200 Але я даю йому 2 Інтс. 1511 01:14:28,200 --> 01:14:31,120 Так що виходить, що я можу виправити це кількома способами. 1512 01:14:31,120 --> 01:14:38,430 >> Я міг би просто перетворити один в 1,0 і 10 в 10.0, яка, насправді, 1513 01:14:38,430 --> 01:14:42,390 мати ефект перетворення їх в floats-- все ще сподіваюся, 1514 01:14:42,390 --> 01:14:43,180 то ж число. 1515 01:14:43,180 --> 01:14:45,880 Або виявляється, є дещо ми побачимо знову незабаром. 1516 01:14:45,880 --> 01:14:47,170 Ви могли б кинути число. 1517 01:14:47,170 --> 01:14:49,880 >> Ви можете, використовуючи цей вступними вираз, можна сказати, 1518 01:14:49,880 --> 01:14:52,560 агов, комп'ютер, візьми 10, який я знаю, є Int. 1519 01:14:52,560 --> 01:14:54,660 Але ставитися до неї, будь ласка, як ніби це поплавок. 1520 01:14:54,660 --> 01:14:56,680 Але це відчуває себе надмірно складним. 1521 01:14:56,680 --> 01:14:59,040 >> Для наших цілей сьогодні, давайте просто буквально 1522 01:14:59,040 --> 01:15:02,700 роблять їх значення з плаваючою точкою з десятковою крапкою, як це. 1523 01:15:02,700 --> 01:15:07,060 Дозвольте мені йти вперед і перекладка, зробити Неточність, добре, точка слеш 1524 01:15:07,060 --> 01:15:08,870 Неточність, введіть. 1525 01:15:08,870 --> 01:15:10,990 Добре, ми добре виглядати. 1526 01:15:10,990 --> 01:15:18,194 >> 1 ділиться на 10, відповідно до мого Mac тут, справді, 0,100000. 1527 01:15:18,194 --> 01:15:21,360 Тепер, я викладав в початковій школі має бути нескінченне число 0 '. 1528 01:15:21,360 --> 01:15:23,151 Отже, давайте принаймні спробувати щоб побачити деякі з них. 1529 01:15:23,151 --> 01:15:26,770 Виявляється, що Printf трохи вправнішим, ніж досі ми використовували. 1530 01:15:26,770 --> 01:15:30,890 Виявляється, ви не повинні вказувати тільки відсотків е, або просто відсотка я. 1531 01:15:30,890 --> 01:15:33,830 Можна вказати насправді деякі опції управління тут. 1532 01:15:33,830 --> 01:15:36,470 >> Зокрема, я збираюся сказати, агов, Printf, 1533 01:15:36,470 --> 01:15:39,660 на самому ділі показати мені 10 знаків після коми. 1534 01:15:39,660 --> 01:15:40,820 Так це виглядає трохи дивно. 1535 01:15:40,820 --> 01:15:42,845 Але ви говорите, відсотків, Дот, скільки чисел 1536 01:15:42,845 --> 01:15:44,970 ви хочете бачити після того, як десяткового дробу, а потім і 1537 01:15:44,970 --> 01:15:48,340 для плоских, тільки тому, що це що говорить документація. 1538 01:15:48,340 --> 01:15:50,080 Дозвольте мені йти вперед і врятувати. 1539 01:15:50,080 --> 01:15:52,460 >> І зауважте теж, я отримую втомився від передруку речей. 1540 01:15:52,460 --> 01:15:55,900 Так що я просто встановивши вгору і стрілка вниз на мої ключі тут. 1541 01:15:55,900 --> 01:15:58,710 І якщо я продовжую бити, ви може бачити все команди 1542 01:15:58,710 --> 01:16:01,090 що я зробив, чи неправильно зробив. 1543 01:16:01,090 --> 01:16:04,630 >> І я збираюся йти вперед зараз і насправді не використовувати, що, мабуть. 1544 01:16:04,630 --> 01:16:11,416 Зробити неточностей, точка слеш imprecision-- так 1545 01:16:11,416 --> 01:16:13,290 чого мене вчили в клас школи перевіряє. 1546 01:16:13,290 --> 01:16:19,010 Навіть якщо я друкую його до 10 десяткової ставить його, насправді, це 0,10000. 1547 01:16:19,010 --> 01:16:19,840 Але ви знаєте, що? 1548 01:16:19,840 --> 01:16:21,150 >> Давайте трохи жадібний. 1549 01:16:21,150 --> 01:16:23,990 Скажімо, як, покажи мені 55 вказує після коми. 1550 01:16:23,990 --> 01:16:26,160 Давайте дійсно прийняти це програмувати для обертання. 1551 01:16:26,160 --> 01:16:31,170 Дозвольте мені переробити його з макіяж Неточність, точка слеш, неточностей. 1552 01:16:31,170 --> 01:16:32,390 >> А ось і ми. 1553 01:16:32,390 --> 01:16:34,420 Ваше дитинство було брехнею. 1554 01:16:34,420 --> 01:16:48,410 Мабуть, 1 ділиться на 10, дійсно, 0.100000000000000005551115123-- 1555 01:16:48,410 --> 01:16:49,740 >> Що відбувається? 1556 01:16:49,740 --> 01:16:53,360 Що ж, виходить, якщо ви вид виглядають досить далеко в основний 1557 01:16:53,360 --> 01:16:55,950 подання цього номер, він насправді 1558 01:16:55,950 --> 01:17:00,400 неточно 1/10, або 0,1 і нескінченне число нулів. 1559 01:17:00,400 --> 01:17:01,630 Тепер, чому це? 1560 01:17:01,630 --> 01:17:06,250 >> Що ж, не дивлячись на те, що це просто число для нас, людей, 1 ділиться на 10, 1561 01:17:06,250 --> 01:17:10,910 вона як і раніше один з нескінченно багато цифри, які ми могли б придумати. 1562 01:17:10,910 --> 01:17:14,490 Але комп'ютер може представляти тільки кінцеве число так чисел. 1563 01:17:14,490 --> 01:17:18,710 І так, по суті, те, що Комп'ютер показує нам є його найближчим 1564 01:17:18,710 --> 01:17:22,940 наближення до числа ми хочемо вірити в 1/10, 1565 01:17:22,940 --> 01:17:27,760 або дійсно 0,10000 нескінченності. 1566 01:17:27,760 --> 01:17:30,425 >> Швидше за все, однак, це так близько, як він може отримати. 1567 01:17:30,425 --> 01:17:32,300 І дійсно, якщо подивитися під капотом, 1568 01:17:32,300 --> 01:17:37,050 як ми тут, дивлячись 55 цифр після коми, 1569 01:17:37,050 --> 01:17:39,990 ми дійсно бачимо, що реальність. 1570 01:17:39,990 --> 01:17:42,610 Тепер, як в сторону, якщо ви маєте коли-небудь бачив movie-- 1571 01:17:42,610 --> 01:17:45,780 більшість з вас, ймовірно, haven't-- але Супермен 3 кілька років тому, 1572 01:17:45,780 --> 01:17:49,500 Річард Прайор, по суті позикових коштів це на даний момент в його компанії, щоб вкрасти багато 1573 01:17:49,500 --> 01:17:53,500 фракцій і фракцій гроші, тому що company-- як я пам'ятаю, 1574 01:17:53,500 --> 01:17:57,210 це було while-- було по суті викидаючи все, що не вкладалося 1575 01:17:57,210 --> 01:17:58,790 в поняття центів. 1576 01:17:58,790 --> 01:18:01,480 >> Але якщо скласти всі ці крихітні, крихітні, крихітні числа знову, 1577 01:18:01,480 --> 01:18:04,960 і знову, і знову, ви можете, як в його справу, зробити гарну суму грошей. 1578 01:18:04,960 --> 01:18:08,010 >> Це та ж сама ідея була зірвані свіжіша, але до сих пір в даний час старше 1579 01:18:08,010 --> 01:18:10,500 фільм, який називається Office Space, де хлопці в цьому фільмі, 1580 01:18:10,500 --> 01:18:13,501 зробив те ж саме, напартачив повністю, в кінцевому підсумку з дуже багато 1581 01:18:13,501 --> 01:18:14,666 грошей на банківському рахунку. 1582 01:18:14,666 --> 01:18:15,800 Все це було дуже підозріло. 1583 01:18:15,800 --> 01:18:19,290 Але врешті-решт, Неточність все навколо нас. 1584 01:18:19,290 --> 01:18:22,240 >> І це теж може бути Лякає справу. 1585 01:18:22,240 --> 01:18:25,590 Виявляється, що Супермен 3 і офісні приміщення в сторону, там 1586 01:18:25,590 --> 01:18:28,460 може бути якийсь дуже реально світові наслідки 1587 01:18:28,460 --> 01:18:32,290 реалії неточним представлення даних 1588 01:18:32,290 --> 01:18:34,770 що навіть ми, люди, до У цей день не обов'язково 1589 01:18:34,770 --> 01:18:38,230 зрозуміти, як ми повинні, або згадати, як часто, як ми повинні. 1590 01:18:38,230 --> 01:18:42,950 І, дійсно, наступний кліп від погляду на якийсь дуже реальний світ 1591 01:18:42,950 --> 01:18:47,730 Наслідки того, що станеться, якщо ви не цінують точностей, 1592 01:18:47,730 --> 01:18:50,065 може статися в поданні чисел. 1593 01:18:50,065 --> 01:18:51,300 >> [Відеовідтворення] 1594 01:18:51,300 --> 01:18:55,620 >> -Комп'ютери, Ми всі прийшли, щоб взяти що часто засмучує проблеми, 1595 01:18:55,620 --> 01:19:00,310 йти з them-- помилки, віруси, і програмні глюки, 1596 01:19:00,310 --> 01:19:03,130 за невеликі ціни платити для зручності. 1597 01:19:03,130 --> 01:19:07,800 Але в області високих технологій і високої швидкості військові та космічні програмні додатки, 1598 01:19:07,800 --> 01:19:12,800 найменша проблема може височенним в лихо. 1599 01:19:12,800 --> 01:19:18,900 >> 4 червня 1996 року, вчені підготували щоб запустити безпілотний Ariane 5 ракети. 1600 01:19:18,900 --> 01:19:21,220 На його борту науково супутники призначені 1601 01:19:21,220 --> 01:19:24,600 щоб точно встановити, яким чином взаємодіє магнітне поле Землі 1602 01:19:24,600 --> 01:19:27,410 з сонячними вітрами. 1603 01:19:27,410 --> 01:19:30,800 Ракета була побудована для Європейське космічне агентство, 1604 01:19:30,800 --> 01:19:34,370 і відірвався від свого об'єкта на узбережжі Французької Гвіани. 1605 01:19:34,370 --> 01:19:37,540 >> -На Близько 37 секунд в політ, вони спочатку 1606 01:19:37,540 --> 01:19:39,270 помітив, що щось відбувається не так. 1607 01:19:39,270 --> 01:19:42,250 Форсунки були в поворотне шлях вони насправді не мають. 1608 01:19:42,250 --> 01:19:46,580 Близько 40 секунд в польоті, ясно, що автомобіль був у біді. 1609 01:19:46,580 --> 01:19:48,850 >> І ось, коли вони зробили рішення знищити його. 1610 01:19:48,850 --> 01:19:52,780 Офіцер безпеки по висоті, з величезні кишки, натиснув на кнопку, 1611 01:19:52,780 --> 01:19:58,150 підірвали ракету, перш ніж вона зможе стати загрозою для суспільної безпеки. 1612 01:19:58,150 --> 01:20:01,060 >> -Це Була дівоче плавання на Ariane 5. 1613 01:20:01,060 --> 01:20:03,960 І його руйнування взяв місце через помилки 1614 01:20:03,960 --> 01:20:05,822 вбудовані в програмне забезпечення ракети. 1615 01:20:05,822 --> 01:20:08,280 -The Проблема на Ariane була що існує число, 1616 01:20:08,280 --> 01:20:10,600 потрібно 64 біт, щоб висловити. 1617 01:20:10,600 --> 01:20:13,590 І вони хотіли, щоб перетворити це до 16-бітного числа. 1618 01:20:13,590 --> 01:20:15,610 Вони припустили, що номер ніколи не збирався 1619 01:20:15,610 --> 01:20:20,980 має бути дуже великим, що більшість з тих, цифри в 64-бітного числа були нулі. 1620 01:20:20,980 --> 01:20:22,440 Вони були не праві. 1621 01:20:22,440 --> 01:20:25,060 >> -The Нездатність одного програмне забезпечення, щоб прийняти 1622 01:20:25,060 --> 01:20:29,510 вид номер, який генерується інший був в корені збою. 1623 01:20:29,510 --> 01:20:34,350 Розробка програмного забезпечення стала дуже витратна частина нової технології. 1624 01:20:34,350 --> 01:20:38,140 Ariane ракети були дуже успішним, так що велика частина програмного забезпечення 1625 01:20:38,140 --> 01:20:41,550 створений для нього було також використовуваний в Ariane 5. 1626 01:20:41,550 --> 01:20:47,940 >> -The Основна проблема полягала в тому, що Ariane 5 був швидше, прискорюється швидше. 1627 01:20:47,940 --> 01:20:51,450 І програмне забезпечення не було доводилося за це. 1628 01:20:51,450 --> 01:20:55,060 >> -The Знищення ракети була величезна фінансова катастрофа, 1629 01:20:55,060 --> 01:20:58,790 все через помилку хвилин програмного забезпечення. 1630 01:20:58,790 --> 01:21:01,210 Але це був не перший Проблеми перетворення даних про час 1631 01:21:01,210 --> 01:21:04,820 мучило сучасної ракетної технології. 1632 01:21:04,820 --> 01:21:08,050 >> -У 1991, с початком першої війни в Перській затоці, 1633 01:21:08,050 --> 01:21:10,570 патріот Ракетний випробував подібного роду 1634 01:21:10,570 --> 01:21:12,800 завдання перетворення число. 1635 01:21:12,800 --> 01:21:16,090 І в результаті, 28 осіб, 28 американських солдатів, 1636 01:21:16,090 --> 01:21:19,080 були вбиті, і близько 100 осіб отримали поранення, 1637 01:21:19,080 --> 01:21:22,780 коли Patriot, який повинен був для захисту від вхідних бокоплавів, 1638 01:21:22,780 --> 01:21:25,830 не вдалося вистрілити ракетою. 1639 01:21:25,830 --> 01:21:31,670 >> -Коли Ірак вторгся в Кувейт, і Америку Буря в пустелі почав на початку 1991 року, 1640 01:21:31,670 --> 01:21:35,780 Патріот ракетні батареї були розгорнуті щоб захистити Саудівську Аравію і Ізраїль 1641 01:21:35,780 --> 01:21:39,230 від іракських ракетних атак Скад. 1642 01:21:39,230 --> 01:21:43,810 Patriot є американської середньої дальності поверхню повітряної системи, виробництва 1643 01:21:43,810 --> 01:21:45,770 компанією Raytheon. 1644 01:21:45,770 --> 01:21:52,340 >> -The Розмір перехоплювача Patriot сама по собі має довжину близько приблизно 20 футів. 1645 01:21:52,340 --> 01:21:55,230 І важить близько 2000 фунтів. 1646 01:21:55,230 --> 01:21:59,320 І вона несе боєголовку близько, Я думаю, що це приблизно 150 фунтів. 1647 01:21:59,320 --> 01:22:03,930 А сама боєголовка є висока вибухової речовини, який 1648 01:22:03,930 --> 01:22:07,330 є фрагменти навколо нього. 1649 01:22:07,330 --> 01:22:11,680 корпус боєголовка розроблений, щоб діяти як картеч. 1650 01:22:11,680 --> 01:22:14,110 >> -The Ракети перевозяться чотири в контейнері, 1651 01:22:14,110 --> 01:22:17,130 і транспортуються напівпричепом. 1652 01:22:17,130 --> 01:22:24,930 >> -The Patriot системи ПРО сходить принаймні, 20 років. 1653 01:22:24,930 --> 01:22:28,420 Спочатку він був розроблений як протиракетна оборона повітряного 1654 01:22:28,420 --> 01:22:30,720 щоб збивати ворожі літаки. 1655 01:22:30,720 --> 01:22:34,500 У першій війні в Перській затоці, коли ця війна прийшла разом, 1656 01:22:34,500 --> 01:22:39,745 Армія хотіла використовувати його збивати бокоплавів, а не літаки. 1657 01:22:39,745 --> 01:22:43,620 >> ВПС Іраку було не так багато проблем. 1658 01:22:43,620 --> 01:22:46,670 Але армія хвилювалася про бокоплавів. 1659 01:22:46,670 --> 01:22:50,170 І таким чином вони намагалися оновити Patriot. 1660 01:22:50,170 --> 01:22:52,800 >> -Intercepting Ворога Ракета подорожі в 5М 1661 01:22:52,800 --> 01:22:55,830 збирається бути складним досить. 1662 01:22:55,830 --> 01:22:58,490 Але коли Patriot був доставлений в експлуатацію, 1663 01:22:58,490 --> 01:23:02,860 Армія не відомо про Іракський модифікація, яка зробила 1664 01:23:02,860 --> 01:23:05,930 їх бокоплави майже неможливо потрапити. 1665 01:23:05,930 --> 01:23:10,740 >> -Що Сталося це бокоплави, що прибували в нестійкі. 1666 01:23:10,740 --> 01:23:11,692 Вони були погойдуючись. 1667 01:23:11,692 --> 01:23:14,910 Причиною цього було іракці, в порядку 1668 01:23:14,910 --> 01:23:18,280 щоб отримати 600 кілометрів з 300 км 1669 01:23:18,280 --> 01:23:21,700 Ракета діапазон, взяли вагу з передньої боєголовкою. 1670 01:23:21,700 --> 01:23:23,390 Вони зробили боєголовка світліше. 1671 01:23:23,390 --> 01:23:27,330 >> Так що тепер Патріот намагаючись прийти в Scud. 1672 01:23:27,330 --> 01:23:30,230 І більшу частину часу, Переважна більшість часу, 1673 01:23:30,230 --> 01:23:32,940 було б просто літати на Scud. 1674 01:23:32,940 --> 01:23:37,260 Після того, як оператори системи Patriot зрозумів, що Patriot пропустив свою мету, 1675 01:23:37,260 --> 01:23:41,690 вони детонувати боєголовку Патріотичного щоб уникнути можливих втрат, якщо вона 1676 01:23:41,690 --> 01:23:44,570 було дозволено впасти на землю. 1677 01:23:44,570 --> 01:23:48,790 >> -Ось Було то, що більшість людей бачили, ці великі вогняні кулі в небі, 1678 01:23:48,790 --> 01:23:54,550 і не зрозуміли, як перехоплює Скад боєголовок. 1679 01:23:54,550 --> 01:23:56,630 >> -Хоча В нічний час небо, патріоти з'явилися 1680 01:23:56,630 --> 01:24:00,370 щоб бути успішно знищуючи Скада, в Дахране, 1681 01:24:00,370 --> 01:24:03,360 не може бути ніякої помилки про його виконанні. 1682 01:24:03,360 --> 01:24:07,970 Там, радіолокаційна система Патріотичного втратив слід вхідного Scud, 1683 01:24:07,970 --> 01:24:10,721 і ніколи не запущений через до програмного вада. 1684 01:24:10,721 --> 01:24:14,090 1685 01:24:14,090 --> 01:24:18,940 Це було ізраїльтян, які вперше виявлений що чим довше система була включена, 1686 01:24:18,940 --> 01:24:22,690 тим більше час розбіжності стали, через годинами впровадженого 1687 01:24:22,690 --> 01:24:24,810 в комп'ютері системи. 1688 01:24:24,810 --> 01:24:28,210 >> -О За два тижні до трагедія в Дахране, 1689 01:24:28,210 --> 01:24:30,770 ізраїльтяни повідомили Міністерство оборони 1690 01:24:30,770 --> 01:24:32,590 що система втрачає час. 1691 01:24:32,590 --> 01:24:35,360 Приблизно через вісім годин або бігу, вони помітили, що система 1692 01:24:35,360 --> 01:24:37,720 стає помітно менш точним. 1693 01:24:37,720 --> 01:24:41,900 Міністерство оборони у відповідь кажучи все батарейки Patriot 1694 01:24:41,900 --> 01:24:44,950 не залишати системи протягом довгого часу. 1695 01:24:44,950 --> 01:24:49,160 Вони ніколи не говорили, що довгий час was-- вісім годин, 10 годин, 1000 годин. 1696 01:24:49,160 --> 01:24:51,360 Ніхто не знав. 1697 01:24:51,360 --> 01:24:53,380 >> -The Батареї Patriot розміщених в казармі 1698 01:24:53,380 --> 01:24:58,350 в Дахране і його недоліки внутрішньої Годинники були на більш ніж 100 годин 1699 01:24:58,350 --> 01:25:01,670 в ніч на 25 лютого. 1700 01:25:01,670 --> 01:25:05,917 >> -Він Відстежувати час з точністю близько однієї десятої частки секунди. 1701 01:25:05,917 --> 01:25:08,000 Тепер, десяту секунди це цікаве число, 1702 01:25:08,000 --> 01:25:11,920 так як воно не може бути виражено в двійковій системі точно, що 1703 01:25:11,920 --> 01:25:16,820 означає, що вона не може бути виражено точно в будь-якому сучасному цифровому комп'ютері. 1704 01:25:16,820 --> 01:25:18,540 Важко повірити. 1705 01:25:18,540 --> 01:25:21,210 >> Але використовувати це як приклад. 1706 01:25:21,210 --> 01:25:23,540 Давайте візьмемо номер на одну третину. 1707 01:25:23,540 --> 01:25:27,350 Одна третина не може бути виражається в десятковій системі числення в точності. 1708 01:25:27,350 --> 01:25:32,080 Одна третина є 0,333 відбувається на нескінченності. 1709 01:25:32,080 --> 01:25:36,480 >> Там немає ніякого способу зробити це з абсолютна точність в десятковій системі числення. 1710 01:25:36,480 --> 01:25:39,560 Це саме та проблема що сталося в Patriot. 1711 01:25:39,560 --> 01:25:44,100 Чим довше система побігла, гірше стала помилка часу. 1712 01:25:44,100 --> 01:25:48,890 >> -Після 100 годин роботи, Помилка в той час був тільки близько однієї третини 1713 01:25:48,890 --> 01:25:50,600 секунди. 1714 01:25:50,600 --> 01:25:54,210 Але з точки зору орієнтуєтеся на Ракета подорожі в 5М, 1715 01:25:54,210 --> 01:25:58,710 це призвело до відстеження Похибка більше 600 метрів. 1716 01:25:58,710 --> 01:26:02,120 Було б фатальною помилкою для солдатів на те, що 1717 01:26:02,120 --> 01:26:08,940 відбулося це запуск Scud був детектується ранніх супутників попередження 1718 01:26:08,940 --> 01:26:12,860 і вони знали, що Scud був приходять в їх загальному напрямку. 1719 01:26:12,860 --> 01:26:15,320 Вони не знали, звідки він виходить. 1720 01:26:15,320 --> 01:26:18,250 >> -Це Був тепер до радара компонент системи Patriot 1721 01:26:18,250 --> 01:26:23,190 захищаючи Дахране, щоб знайти і зберегти слід наближається ракети противника. 1722 01:26:23,190 --> 01:26:24,609 >> -The Радар був дуже розумний. 1723 01:26:24,609 --> 01:26:26,650 Це буде насправді трек становище Scud, 1724 01:26:26,650 --> 01:26:30,350 а потім передбачити, де це можливо буде наступного разу послав радар 1725 01:26:30,350 --> 01:26:31,420 імпульсу поза. 1726 01:26:31,420 --> 01:26:33,110 Це називається ряд воріт. 1727 01:26:33,110 --> 01:26:37,660 >> -Тоді, Як тільки Patriot вирішує досить часу 1728 01:26:37,660 --> 01:26:42,450 пройшов, щоб повернутися і перевірити наступний місце для цього виявленого об'єкту, 1729 01:26:42,450 --> 01:26:43,600 воно сходить. 1730 01:26:43,600 --> 01:26:48,650 Тому, коли він повернувся до неправильного місце, тоді не бачить об'єкт. 1731 01:26:48,650 --> 01:26:52,160 І це не вирішить, що не було об'єкт, це було помилкове виявлення, 1732 01:26:52,160 --> 01:26:53,930 і краплі трек. 1733 01:26:53,930 --> 01:26:57,030 >> -The Вхідний Скад зник з екрану радара. 1734 01:26:57,030 --> 01:27:00,260 І через кілька секунд, це врізався в казарми. 1735 01:27:00,260 --> 01:27:06,150 Скад загинули 28 і був останнім один вистрелив під час першої війни в Перській затоці. 1736 01:27:06,150 --> 01:27:11,960 >> Трагічно, оновлене програмне забезпечення прибув в Дахране на наступний день. 1737 01:27:11,960 --> 01:27:14,930 Програмне забезпечення помилка була було зафіксовано, закриття 1738 01:27:14,930 --> 01:27:19,806 одна глава в каламутній Історія ракети Patriot. 1739 01:27:19,806 --> 01:27:20,729 >> [Відеовідтворення] 1740 01:27:20,729 --> 01:27:23,520 DAVID J. Малан: Так що це все сказати, що ці питання переповнення 1741 01:27:23,520 --> 01:27:25,860 і неточностей все занадто реально. 1742 01:27:25,860 --> 01:27:26,920 Так як же ми сюди потрапили? 1743 01:27:26,920 --> 01:27:28,895 Ми почали з просто говоримо про Printf. 1744 01:27:28,895 --> 01:27:31,270 Знову ж таки, ця функція, друкує щось на екрані, 1745 01:27:31,270 --> 01:27:33,450 і ми ввели в подальшому кілька інших функцій 1746 01:27:33,450 --> 01:27:34,945 з так званої бібліотеки CS50 в. 1747 01:27:34,945 --> 01:27:36,910 І ми будемо продовжувати побачити їх свого часу. 1748 01:27:36,910 --> 01:27:40,760 І ми, зокрема, використовується отримання рядки, і отримати Int, а тепер також отримати з плаваючою точкою, 1749 01:27:40,760 --> 01:27:44,410 і все ж інші все ще буде ми стикаємося і використовувати себе незабаром. 1750 01:27:44,410 --> 01:27:47,220 >> Але в деяких випадках, є ми вже бачили необхідність 1751 01:27:47,220 --> 01:27:50,520 щоб зберегти те, що ці функції руки назад? 1752 01:27:50,520 --> 01:27:52,920 Вони роздають нас назад рядок, або INT, або з плаваючою точкою. 1753 01:27:52,920 --> 01:27:56,070 І іноді нам потрібно покласти, що рядок, або INT, або з плаваючою точкою, десь. 1754 01:27:56,070 --> 01:28:00,100 >> І зберігати ці речі, згадати, як в порожньому місці, у нас є змінні. 1755 01:28:00,100 --> 01:28:03,260 Але на відміну від нуля, в C ми маємо фактичні типи 1756 01:28:03,260 --> 01:28:05,530 з даних variables-- типи, більше generally-- 1757 01:28:05,530 --> 01:28:08,640 серед них, рядок, INT, A плавати, і ці інші досі. 1758 01:28:08,640 --> 01:28:12,321 >> І тому, коли ми оголошуємо змінні в C, ми повинні оголосити наші типи даних. 1759 01:28:12,321 --> 01:28:14,820 Це не те, що ми будемо повинні зробити пізніше в семестр 1760 01:28:14,820 --> 01:28:16,810 як ми перехід на інші мови. 1761 01:28:16,810 --> 01:28:19,610 Але зараз нам потрібно до апріорно заздалегідь, 1762 01:28:19,610 --> 01:28:24,370 пояснити комп'ютера, який тип змінної ми хочемо, щоб дати нам. 1763 01:28:24,370 --> 01:28:27,290 >> Тепер, між тим, щоб надрукувати ті види типів даних, 1764 01:28:27,290 --> 01:28:29,570 ми повинні сказати PRINTF, чого очікувати. 1765 01:28:29,570 --> 01:28:32,450 І ми побачили відсоток з для рядків, і відсоток я для цілих чисел, 1766 01:28:32,450 --> 01:28:33,790 і деякі інші вже. 1767 01:28:33,790 --> 01:28:37,237 І це просто вимоги для візуального представлення 1768 01:28:37,237 --> 01:28:38,070 цієї інформації. 1769 01:28:38,070 --> 01:28:42,080 >> І кожен з них може бути насправді параметризрвані або перероблені, в деякому роді, 1770 01:28:42,080 --> 01:28:45,370 якщо ви хочете, щоб в подальшому контроль тип виведення, який ви отримаєте. 1771 01:28:45,370 --> 01:28:49,604 І, насправді, виявляється, що не тільки є зворотна коса п для нової лінії. 1772 01:28:49,604 --> 01:28:52,520 Там дещо ще називається зворотної косої межі г для повернення каретки, яка 1773 01:28:52,520 --> 01:28:54,360 це більше схоже на стара школа друкарська машинка, 1774 01:28:54,360 --> 01:28:57,690 а також для Windows використовується протягом багатьох років. 1775 01:28:57,690 --> 01:28:59,690 >> Там в зворотної косої межі т для вкладок. 1776 01:28:59,690 --> 01:29:03,170 Виявляється, що якщо ви хочете подвійні лапки всередині рядка, 1777 01:29:03,170 --> 01:29:05,000 нагадаємо, що ми використовували подвійні лапки двічі 1778 01:29:05,000 --> 01:29:07,900 цитата зліва і справа кінці наших рядків досі. 1779 01:29:07,900 --> 01:29:09,420 Це, здавалося б, все заплутати. 1780 01:29:09,420 --> 01:29:12,503 >> Якщо ви хочете поставити подвійні лапки в середина string-- і, дійсно, 1781 01:29:12,503 --> 01:29:13,670 це збиває з пантелику, щоб побачити. 1782 01:29:13,670 --> 01:29:17,120 І тому ви повинні бігти, так кажуть, подвійні лапки з чимось 1783 01:29:17,120 --> 01:29:18,860 як, в буквальному сенсі, зворотної косої межі подвійні лапки. 1784 01:29:18,860 --> 01:29:20,230 І є кілька інших досі. 1785 01:29:20,230 --> 01:29:24,540 І ми побачимо більше тих, в реальних умовах експлуатації до тих пір. 1786 01:29:24,540 --> 01:29:27,930 >> Так давайте тепер перехід від даних, а також уявлення, 1787 01:29:27,930 --> 01:29:30,820 і арифметичні оператори, все з яких дав нам деякі будівлі 1788 01:29:30,820 --> 01:29:32,070 блоки, з якими грати. 1789 01:29:32,070 --> 01:29:34,481 Але тепер давайте насправді дати нам інша частина словника 1790 01:29:34,481 --> 01:29:36,230 що у нас вже було Минулого тижня з нуля 1791 01:29:36,230 --> 01:29:39,350 приймаючи поглянути на деякі інші Конструкції в C-- не всі з них. 1792 01:29:39,350 --> 01:29:41,680 Але ідеї ми про те, щоб побачити насправді просто 1793 01:29:41,680 --> 01:29:45,610 щоб підкреслити переклад з одна мова, до подряпин, до іншого, C. 1794 01:29:45,610 --> 01:29:48,470 >> І з часом, ми підберемо більше інструментів для нашого інструментарію, 1795 01:29:48,470 --> 01:29:49,820 так би мовити, синтаксично. 1796 01:29:49,820 --> 01:29:54,190 І, насправді, ви побачите, що ідеї В даний час досить знайомі з минулого тижня. 1797 01:29:54,190 --> 01:29:55,200 Так давайте зробимо це. 1798 01:29:55,200 --> 01:29:58,870 >> Давайте йти вперед і нагнітати програму що насправді використовує деякі вирази, 1799 01:29:58,870 --> 01:30:00,720 логічний вираз. 1800 01:30:00,720 --> 01:30:02,810 Дозвольте мені йти вперед тут і створити новий файл. 1801 01:30:02,810 --> 01:30:06,090 Я буду називати це condition.c. 1802 01:30:06,090 --> 01:30:09,350 >> Дозвольте мені йти вперед і включають в себе бібліотеку CS50. 1803 01:30:09,350 --> 01:30:12,640 І дозвольте мені йти вперед і включають в себе стандарт io.h для наших функцій, 1804 01:30:12,640 --> 01:30:14,690 і Printf, і відповідно більше. 1805 01:30:14,690 --> 01:30:18,900 Дозвольте мені дати собі, що шаблонного з INT головна порожнеча, чиє пояснення, яке ми будемо 1806 01:30:18,900 --> 01:30:20,360 повернутися в майбутньому. 1807 01:30:20,360 --> 01:30:23,820 >> Тепер дозвольте мені йти вперед і дати сам через INT отримаєте Int. 1808 01:30:23,820 --> 01:30:25,970 Тоді дозвольте мені йти вперед і робити це. 1809 01:30:25,970 --> 01:30:30,150 Я хочу сказати, якщо я це less-- давайте відмінності між позитивним, негативним, 1810 01:30:30,150 --> 01:30:31,260 або нульові значення. 1811 01:30:31,260 --> 01:30:36,630 >> Так що, якщо я менше нуля, дайте мені просто ця програма просто сказати, 1812 01:30:36,630 --> 01:30:42,370 негативний, зворотна коса риска п, інакше якщо я більше нуля. 1813 01:30:42,370 --> 01:30:47,030 Зараз я, звичайно, хочу сказати, PRINTF позитивний результат, зворотної косої н. 1814 01:30:47,030 --> 01:30:50,690 А потім ще if-- я міг би зробити це. 1815 01:30:50,690 --> 01:30:53,410 >> Я міг би зробити, якщо я дорівнює 0. 1816 01:30:53,410 --> 01:30:55,840 Але я б робити на хоча б одна помилка вже. 1817 01:30:55,840 --> 01:30:59,480 Нагадаємо, що знак рівності не дорівнює, як і ми, люди, знаємо це. 1818 01:30:59,480 --> 01:31:01,010 >> Але це оператор присвоювання. 1819 01:31:01,010 --> 01:31:05,640 І ми не хочемо приймати 0 на право і покласти його в I на лівій стороні. 1820 01:31:05,640 --> 01:31:11,810 Таким чином, щоб уникнути плутанини, або можливо зловживання знака рівності, 1821 01:31:11,810 --> 01:31:14,740 люди вирішили кілька років тому що в багатьох мовах програмування 1822 01:31:14,740 --> 01:31:18,000 якщо ви хочете, щоб перевірити на рівність між лівими і правими, 1823 01:31:18,000 --> 01:31:19,635 ви насправді використовувати дорівнює рівних. 1824 01:31:19,635 --> 01:31:21,010 Таким чином, ви потрапили в знак рівності двічі. 1825 01:31:21,010 --> 01:31:25,600 Якщо ви хочете призначити справа наліво, використовувати один знак рівності. 1826 01:31:25,600 --> 01:31:29,360 Таким чином, ми могли б зробити ще this-- якщо я дорівнює дорівнює нулю. 1827 01:31:29,360 --> 01:31:31,710 >> Тоді я міг би піти і відкрити мої фігурні дужки, 1828 01:31:31,710 --> 01:31:36,087 і сказати, Printf 0, зворотна коса риска п, зроблено. 1829 01:31:36,087 --> 01:31:38,170 Але пам'ятайте, що ці розвилок може працювати. 1830 01:31:38,170 --> 01:31:39,836 І, насправді, просто подумайте про логіку. 1831 01:31:39,836 --> 01:31:41,510 я це число. 1832 01:31:41,510 --> 01:31:43,320 Це ціле число, зокрема. 1833 01:31:43,320 --> 01:31:48,600 І це означає, що вона буде менше, ніж 0 або більше 0, або 0. 1834 01:31:48,600 --> 01:31:51,600 Таким чином, є вид цього мається на увазі випадок за замовчуванням. 1835 01:31:51,600 --> 01:31:54,920 >> І таким чином ми могли, так само, як Подряпини, обійтися без іншого, якщо, 1836 01:31:54,920 --> 01:31:55,747 і просто сказати ще. 1837 01:31:55,747 --> 01:31:57,830 За логікою речей, якщо ти програміст знаю, що є тільки 1838 01:31:57,830 --> 01:32:01,635 три відра, в які Сценарій може fall-- перший, 1839 01:32:01,635 --> 01:32:03,510 другий, або третій в цьому case-- НЕ 1840 01:32:03,510 --> 01:32:07,100 морочитися додаючи додаткову точність і додаткова логіка там. 1841 01:32:07,100 --> 01:32:09,690 Просто йти вперед з Справа за замовчуванням тут ще. 1842 01:32:09,690 --> 01:32:11,950 >> Тепер, давайте йти вперед після збереження цього зробити 1843 01:32:11,950 --> 01:32:15,760 умови точка слеш conditions-- не великий призначений для користувача інтерфейс, 1844 01:32:15,760 --> 01:32:18,914 тому що я не спонукало користувач, як я згадував раніше. 1845 01:32:18,914 --> 01:32:19,580 Але це нормально. 1846 01:32:19,580 --> 01:32:20,454 Ми будемо тримати його просто. 1847 01:32:20,454 --> 01:32:21,890 Давайте спробуємо число 42. 1848 01:32:21,890 --> 01:32:23,240 І це позитивно. 1849 01:32:23,240 --> 01:32:26,120 Давайте спробуємо номер 42 негативне, негативний. 1850 01:32:26,120 --> 01:32:28,244 >> Давайте спробуємо значення 0. 1851 01:32:28,244 --> 01:32:29,160 І дійсно, вона працює. 1852 01:32:29,160 --> 01:32:33,900 Тепер ви будете бачити проблеми перед довгі, тестування речі в три рази, 1853 01:32:33,900 --> 01:32:34,980 ймовірно, не є достатнім. 1854 01:32:34,980 --> 01:32:37,438 Ви, ймовірно, хочете, щоб перевірити деякі великі числа, деякі менше, 1855 01:32:37,438 --> 01:32:40,520 номера, деякі окремі випадки, як ми приїдемо, щоб описати їх. 1856 01:32:40,520 --> 01:32:42,500 >> Але на сьогоднішній день це досить проста програма. 1857 01:32:42,500 --> 01:32:45,160 І я впевнений, що, за логікою речей, що він потрапляє в трьох випадках. 1858 01:32:45,160 --> 01:32:49,360 І дійсно, навіть якщо ми просто зосереджені на потенційні недоліки 1859 01:32:49,360 --> 01:32:53,480 неточностей і переповнення, в реальність, де багато хто з проблем CS50, в 1860 01:32:53,480 --> 01:32:56,000 ми не будемо турбуватися про те, весь час, 1861 01:32:56,000 --> 01:32:59,050 ці питання переповнення і Неточність, так як, по суті, в C, 1862 01:32:59,050 --> 01:33:01,889 це насправді не все, що легко уникнути цих речей. 1863 01:33:01,889 --> 01:33:04,180 Якщо ви хочете, щоб підрахувати більше, і більше, і більше, 1864 01:33:04,180 --> 01:33:07,510 виявляється, є методи, які Ви можна використовувати, часто за участю речі, звані 1865 01:33:07,510 --> 01:33:11,240 бібліотеки, колекції коду, що інші люди писали, що ви можете використовувати, 1866 01:33:11,240 --> 01:33:13,910 і інші мови, такі як Java та інші, насправді 1867 01:33:13,910 --> 01:33:15,800 зробити це набагато простіше розраховувати ще вище. 1868 01:33:15,800 --> 01:33:19,810 Так що насправді деякі з цих небезпек функцією використовуваного вами мови. 1869 01:33:19,810 --> 01:33:22,710 І в найближчі тижні, ми будемо побачити, як небезпечний C дійсно 1870 01:33:22,710 --> 01:33:24,950 може бути, якщо ви не використовуєте його правильно. 1871 01:33:24,950 --> 01:33:27,610 Але звідти, і з Python і JavaScript, буде 1872 01:33:27,610 --> 01:33:32,620 ми шар на деякі додаткові засоби захисту, і запустити менше цих ризиків. 1873 01:33:32,620 --> 01:33:35,820 >> Так давайте зробимо трохи більше цікава логіка в нашій програмі. 1874 01:33:35,820 --> 01:33:39,110 Отже, дозвольте мені йти вперед і створити програма під назвою Logical 1875 01:33:39,110 --> 01:33:43,804 тільки так я можу грати з деякими Фактична логіка, logical.c. 1876 01:33:43,804 --> 01:33:46,870 Я просто скопіювати і вставити деякі коду з раніше, так що я повернуся 1877 01:33:46,870 --> 01:33:49,950 до цієї гарною відправною точкою. 1878 01:33:49,950 --> 01:33:53,980 >> Дозвольте мені на цей раз зробити сЬаг C. Я збирається дати йому ім'я C 1879 01:33:53,980 --> 01:33:58,510 тільки тому, що звичайні, отримати символ від користувача. 1880 01:33:58,510 --> 01:34:00,730 А давайте уявимо, як Я частина реалізації 1881 01:34:00,730 --> 01:34:04,130 з цієї програми Rm, то видалити Програма до цього запиту користувачу 1882 01:34:04,130 --> 01:34:05,400 для видалення файлу. 1883 01:34:05,400 --> 01:34:06,750 Як ми можемо це зробити? 1884 01:34:06,750 --> 01:34:11,090 >> Я хочу сказати, якщо С дорівнює одно, цитата Unquote, 1885 01:34:11,090 --> 01:34:16,304 у, то я буду вважати, що користувач вибрав так. 1886 01:34:16,304 --> 01:34:17,470 Я просто хочу, щоб надрукувати так. 1887 01:34:17,470 --> 01:34:19,440 Якби це було насправді писати програма видалення, 1888 01:34:19,440 --> 01:34:21,420 ми могли б видалити файл з великою кількістю рядків коду. 1889 01:34:21,420 --> 01:34:22,461 Але ми будемо тримати його просто. 1890 01:34:22,461 --> 01:34:25,950 1891 01:34:25,950 --> 01:34:31,250 >> Інакше, якщо з одно дорівнює N-, і тепер тут, я збираюся сказати, 1892 01:34:31,250 --> 01:34:32,980 користувач повинен мати на увазі немає. 1893 01:34:32,980 --> 01:34:34,360 А потім ще, ви знаєте, що? 1894 01:34:34,360 --> 01:34:36,200 Я не знаю, що ще користувач збирається ввести. 1895 01:34:36,200 --> 01:34:38,533 Так що я просто хочу сказати, що тобто помилка, то, 1896 01:34:38,533 --> 01:34:40,070 він або вона насправді набрали. 1897 01:34:40,070 --> 01:34:41,180 >> Так що ж тут відбувається? 1898 01:34:41,180 --> 01:34:44,530 Існує принципова різниця проти того, що я зробив у минулому. 1899 01:34:44,530 --> 01:34:49,300 Подвійні лапки, подвійні лапки, подвійні котирування, і, тим не менше, використовуйте одиничні лапки, 1900 01:34:49,300 --> 01:34:50,170 одиничні лапки. 1901 01:34:50,170 --> 01:34:52,860 Виявляється, в C, що, коли Ви хочете написати рядок, 1902 01:34:52,860 --> 01:34:56,680 Ви робите подвійні лапки, так само, як ми використовую весь цей час з Printf. 1903 01:34:56,680 --> 01:35:02,030 >> Але якщо ви хочете мати справу з просто одиночний символ, так званий символ, 1904 01:35:02,030 --> 01:35:03,780 то ви насправді використовувати одиничні лапки. 1905 01:35:03,780 --> 01:35:05,450 Ті з вас, хто запрограмований перед тим, ви не могли б 1906 01:35:05,450 --> 01:35:07,850 доводилося турбуватися про це Різниця в деяких мовах. 1907 01:35:07,850 --> 01:35:09,450 У C, це дійсно має значення. 1908 01:35:09,450 --> 01:35:12,560 І тому, коли я отримую напівкоксу і я хочу для порівняння, що символ з використанням рівних 1909 01:35:12,560 --> 01:35:18,350 дорівнює деякій літери як у чи п, я, насправді, потрібно мати одиничні лапки. 1910 01:35:18,350 --> 01:35:19,770 >> Тепер, давайте йти вперед і робити це. 1911 01:35:19,770 --> 01:35:26,180 Давайте йти вперед і роблять логічні точка слеш логічно. 1912 01:35:26,180 --> 01:35:27,305 І тепер я бути пробуджені. 1913 01:35:27,305 --> 01:35:30,638 Так що, мабуть, кращий користувальницький досвід буде насправді сказати, що мені робити тут. 1914 01:35:30,638 --> 01:35:33,030 Але я збираюся просто сліпо скажімо у для да, добре, добре. 1915 01:35:33,030 --> 01:35:35,780 >> Давайте запустимо його знову, п для немає, добре. 1916 01:35:35,780 --> 01:35:39,610 Припустимо, наприклад, деякі люди, яких я знаю, мої кришки блокування ключ на занадто часто. 1917 01:35:39,610 --> 01:35:43,740 Так що я капітал Y, введіть, помилку. 1918 01:35:43,740 --> 01:35:46,130 Добре, це не зовсім те, що я очікував. 1919 01:35:46,130 --> 01:35:48,170 Справді, комп'ютер робить те, що в буквальному сенсі 1920 01:35:48,170 --> 01:35:51,794 Я розповів це do-- перевірити в нижньому регістрі у і малі літери п. 1921 01:35:51,794 --> 01:35:53,960 Це не відчуває себе добре призначений для користувача інтерфейс, хоча. 1922 01:35:53,960 --> 01:35:59,010 Дозвольте мені просити і прийняти або в нижньому регістрі або в верхньому регістрі. 1923 01:35:59,010 --> 01:36:02,090 Так що виходить, ви можете захотіти сказати щось, як в порожньому місці, 1924 01:36:02,090 --> 01:36:08,150 як буквально або C дорівнює дорівнює капіталу одного цитований у. 1925 01:36:08,150 --> 01:36:11,400 Виявляється, C не має це ключове слово або буквальним. 1926 01:36:11,400 --> 01:36:12,880 >> Але у нього є дві вертикальні смуги. 1927 01:36:12,880 --> 01:36:15,463 Вам необхідно утримувати клавішу Shift, як правило, якщо ви використовуєте США клавіатури, 1928 01:36:15,463 --> 01:36:18,910 і вдарив вертикальну смугу клавішу, розташовану вище вашого повернення ключа. 1929 01:36:18,910 --> 01:36:22,410 Але це вертикальна смуга Вертикальна риса означає або. 1930 01:36:22,410 --> 01:36:26,220 >> Якщо ж, навпаки, ми хочемо сказати, і, як у порожньому місці, 1931 01:36:26,220 --> 01:36:28,180 ми могли б зробити амперсанд амперсанд. 1932 01:36:28,180 --> 01:36:31,330 Це не має ніякого логічного сенсу тут, тому що людина не могла 1933 01:36:31,330 --> 01:36:37,110 набрали як у і в нижньому регістрі у і капітал Y, як той же характер. 1934 01:36:37,110 --> 01:36:39,470 Так чи то, що ми маємо намір тут. 1935 01:36:39,470 --> 01:36:46,280 >> Так що, якщо я роблю це в обох місцях, або C дорівнює капіталу дорівнює N, тепер знову запустити, 1936 01:36:46,280 --> 01:36:49,390 робити логічні, перезапускати логічно. 1937 01:36:49,390 --> 01:36:51,200 Тепер я можу ввести у. 1938 01:36:51,200 --> 01:36:53,920 І я можу зробити це знову капітал Y, або капітал N. 1939 01:36:53,920 --> 01:36:56,630 І я міг би додати в додатковий Комбінації досі. 1940 01:36:56,630 --> 01:36:58,810 >> Так що це логічно Програма, оскільки в даний час 1941 01:36:58,810 --> 01:37:01,940 Я перевіряю логічно для це значення або це значення. 1942 01:37:01,940 --> 01:37:06,420 І я не повинен, обов'язково, придумати ще два МФС чи ж МФС. 1943 01:37:06,420 --> 01:37:09,960 Я можу насправді об'єднати деякі з пов'язаних з логікою разом таким чином. 1944 01:37:09,960 --> 01:37:11,950 Так що це було б краще розроблені, ніж просто 1945 01:37:11,950 --> 01:37:17,490 кажучи, якщо С дорівнює малу у, друк так, інакше, якщо з одно капіталу Y, 1946 01:37:17,490 --> 01:37:20,074 друк так, інакше, якщо з одно lower-- іншими словами, 1947 01:37:20,074 --> 01:37:21,990 ви не повинні мати все більше і більше філій. 1948 01:37:21,990 --> 01:37:28,840 Ви можете об'єднати деякі з еквівалента гілки логічно, так як в цьому шляху. 1949 01:37:28,840 --> 01:37:34,150 >> Отже, давайте розглянемо тільки один Остаточний інгредієнт, один кінцева конструкція, 1950 01:37:34,150 --> 01:37:34,847 що C дозволяє. 1951 01:37:34,847 --> 01:37:36,930 І ми повернемося в майбутнє іншим ще. 1952 01:37:36,930 --> 01:37:41,400 І тоді ми робимо висновок, подивившись прі не правильності code-- 1953 01:37:41,400 --> 01:37:46,070 отримання коду work-- але дизайн коду, і посадити ці насіння на ранніх стадіях. 1954 01:37:46,070 --> 01:37:51,337 >> Отже, дозвольте мені йти вперед і відкрити новий файл тут. 1955 01:37:51,337 --> 01:37:51,920 Знаєш, що? 1956 01:37:51,920 --> 01:37:54,450 Я збираюся повторно реалізувати та ж програма, 1957 01:37:54,450 --> 01:37:55,940 але використовуючи іншу конструкцію. 1958 01:37:55,940 --> 01:38:00,110 >> Отже, дозвольте мені швидко віддамся доступ до включають CS50.h 1959 01:38:00,110 --> 01:38:04,150 для бібліотеки CS50, стандарт io.h для Printf. 1960 01:38:04,150 --> 01:38:06,510 Дайте мені мою INT головну порожнечу. 1961 01:38:06,510 --> 01:38:09,310 А потім тут, нехай мені йти вперед і робити це. 1962 01:38:09,310 --> 01:38:12,010 >> Чар з отримує отримати символ, так само, як і раніше. 1963 01:38:12,010 --> 01:38:16,770 І я збираюся використовувати нову конструкцію now-- перемикач, на який характер? 1964 01:38:16,770 --> 01:38:19,820 Так перемикач ніби як Перемикання залізничних шляхів. 1965 01:38:19,820 --> 01:38:22,070 Або, насправді, це свого роду Умовний ще, якщо ще, якщо, 1966 01:38:22,070 --> 01:38:23,980 але написано трохи інакше. 1967 01:38:23,980 --> 01:38:25,490 >> Перемикач виглядає наступним чином. 1968 01:38:25,490 --> 01:38:29,060 У вас є перемикач, і що потім символ або номер, який ви хочете подивитися, 1969 01:38:29,060 --> 01:38:32,000 то деякі фігурні дужки як в Подряпини, просто скажемо, зробити цей матеріал. 1970 01:38:32,000 --> 01:38:33,480 І тоді у вас є різні випадки. 1971 01:38:33,480 --> 01:38:34,830 >> Вам не слід використовувати, якщо і ще. 1972 01:38:34,830 --> 01:38:37,050 Ви в буквальному сенсі використовувати слово випадок. 1973 01:38:37,050 --> 01:38:38,790 І ви могли б сказати щось на кшталт цього. 1974 01:38:38,790 --> 01:38:43,820 >> Так що в разі малої у, або в разі великої літери Y, 1975 01:38:43,820 --> 01:38:47,350 йти вперед і роздрукувати так. 1976 01:38:47,350 --> 01:38:49,020 А потім спалахнути перемикача. 1977 01:38:49,020 --> 01:38:49,580 Це воно. 1978 01:38:49,580 --> 01:38:50,880 Були зроблені. 1979 01:38:50,880 --> 01:38:57,270 >> Інакше, якщо, так би мовити, нижній регістр п, або капітал, N, 1980 01:38:57,270 --> 01:39:02,560 потім йти вперед і друк поза немає, а потім перерва. 1981 01:39:02,560 --> 01:39:08,022 Else-- і цей вид є кейс за замовчуванням indeed-- Printf error-- 1982 01:39:08,022 --> 01:39:10,980 і просто для хорошої заходом, хоча логічно ця перерва не потрібен 1983 01:39:10,980 --> 01:39:12,896 тому що ми знаходимося в кінці перемикача в будь-якому випадку, 1984 01:39:12,896 --> 01:39:14,520 Я зараз спалахують перемикача. 1985 01:39:14,520 --> 01:39:16,280 Так це виглядає трохи по-іншому. 1986 01:39:16,280 --> 01:39:18,272 >> Але, за логікою речей, це насправді еквівалентні. 1987 01:39:18,272 --> 01:39:19,980 І чому б ви використовувати один над іншим? 1988 01:39:19,980 --> 01:39:23,220 Іноді, тільки особисті переваги, іноді естетика, 1989 01:39:23,220 --> 01:39:25,420 якщо я дивлюся на це Тепер, є дещо 1990 01:39:25,420 --> 01:39:27,510 Треба сказати для читаність коду. 1991 01:39:27,510 --> 01:39:30,690 Я маю на увазі, не кажучи вже про те, що це код є новим для багатьох з нас в кімнаті. 1992 01:39:30,690 --> 01:39:33,515 >> Але це тільки почасти досить. 1993 01:39:33,515 --> 01:39:37,760 Ви бачите в нижньому регістрі у, капіталу Y, нижній регістр N, N капітал за замовчуванням, 1994 01:39:37,760 --> 01:39:40,150 це тільки частково стрибки на вас в дорозі 1995 01:39:40,150 --> 01:39:42,200 що, можливо, може бути, попередній приклад 1996 01:39:42,200 --> 01:39:45,780 з МСФ і вертикальних стрижнів, а решта МФС, не могли б мати. 1997 01:39:45,780 --> 01:39:51,600 Так що це дійсно питання особистого вибір, насправді, чи читаність, 1998 01:39:51,600 --> 01:39:52,360 коду. 1999 01:39:52,360 --> 01:39:58,230 >> Але з точки зору функціональності, дозвольте мені йти вперед і зробити вимикач, точка слеш 2000 01:39:58,230 --> 01:40:05,830 перемикач, і тепер ввести в нижньому регістрі у, капітал Y, малі літери п, капітал N, 2001 01:40:05,830 --> 01:40:09,250 Девід, повторити спробу, тому що це жодного символу. 2002 01:40:09,250 --> 01:40:12,050 Давайте зробимо х, помилка, як і очікувалося. 2003 01:40:12,050 --> 01:40:15,640 І, logically-- і це те, Я хотів би закликати в general-- навіть 2004 01:40:15,640 --> 01:40:17,790 хоча ми тільки подряпати Поверхня деяких з цих особливостей. 2005 01:40:17,790 --> 01:40:20,560 >> І це може бути не очевидно, коли ви самостійно сісти за клавіатуру, 2006 01:40:20,560 --> 01:40:21,370 як це працює? 2007 01:40:21,370 --> 01:40:22,240 Що б це зробити? 2008 01:40:22,240 --> 01:40:25,630 Красива річ про те, ноутбук або настільний комп'ютер, або доступ 2009 01:40:25,630 --> 01:40:29,290 до комп'ютера за допомогою компілятора, і з редактором коду, як це, 2010 01:40:29,290 --> 01:40:32,990 це майже завжди можна відповісти на ці питання для себе просто спробувати. 2011 01:40:32,990 --> 01:40:36,570 >> Наприклад, якщо риторична Питання під рукою були, 2012 01:40:36,570 --> 01:40:39,540 що станеться, якщо ви забули ваші заяви перерву? 2013 01:40:39,540 --> 01:40:41,400 Що насправді дуже поширена річ, щоб зробити, 2014 01:40:41,400 --> 01:40:43,540 тому що він не виглядає як вам дійсно потрібні. 2015 01:40:43,540 --> 01:40:46,790 Вони не дійсно завершити думали, як круглі дужки або фігурні 2016 01:40:46,790 --> 01:40:47,714 дужка робить. 2017 01:40:47,714 --> 01:40:49,630 Давайте йти вперед і перекомпіліровать код і подивитися. 2018 01:40:49,630 --> 01:40:53,690 Так зробіть вимикач, точка перемикання слеш. 2019 01:40:53,690 --> 01:40:56,435 Давайте типу в нижньому регістрі у, верхній випадок, Enter. 2020 01:40:56,435 --> 01:40:59,390 2021 01:40:59,390 --> 01:41:00,700 Таким чином, я надрукував у. 2022 01:41:00,700 --> 01:41:04,420 >> Програма каже, так, ні, помилка, як якщо б це була зміна його розум. 2023 01:41:04,420 --> 01:41:09,280 Але це частково було, тому що відбувається з перемикачем перший випадок, 2024 01:41:09,280 --> 01:41:13,899 Матч по суті означає, агов комп'ютер, виконати весь код під ним. 2025 01:41:13,899 --> 01:41:16,690 І якщо ви не говорите, перерва, або не кажіть, перерва, або не говорять перерву, 2026 01:41:16,690 --> 01:41:19,540 комп'ютер буде дути через всі ці лінії 2027 01:41:19,540 --> 01:41:22,779 і не виконувати їх все до він отримує до цього фігурною дужкою. 2028 01:41:22,779 --> 01:41:24,320 Тому гальма, дійсно, необхідно. 2029 01:41:24,320 --> 01:41:27,120 Але тут їжа на будинок, коли є сумніви, спробуйте що-небудь. 2030 01:41:27,120 --> 01:41:29,510 Може бути, зберегти свій код по-перше, або зберегти його в додатковий файл 2031 01:41:29,510 --> 01:41:32,930 якщо ви дійсно стурбовані Мессінг і того, щоб відновити 2032 01:41:32,930 --> 01:41:34,430 робота, яку ви знаєте, працює. 2033 01:41:34,430 --> 01:41:35,410 >> Але спробувати речі. 2034 01:41:35,410 --> 01:41:38,074 І не так страшно, може бути, про те, що комп'ютер може зробити, 2035 01:41:38,074 --> 01:41:39,490 або що ви могли б що-небудь зламати. 2036 01:41:39,490 --> 01:41:42,790 Ви завжди можете повернутися назад в якийсь більш ранній версії. 2037 01:41:42,790 --> 01:41:45,640 >> Так що давайте закінчимо, дивлячись при проектуванні коду. 2038 01:41:45,640 --> 01:41:49,020 У нас є ця здатність тепер писати умови і цикли запису, 2039 01:41:49,020 --> 01:41:50,850 і змінні і функції обробки викликів. 2040 01:41:50,850 --> 01:41:54,590 Так що, чесно кажучи, ми начебто назад в де ми були тиждень тому з нуля, 2041 01:41:54,590 --> 01:42:00,120 хоча і з менш переконливим текстуально Понеділок, ніж нуля дозволяє. 2042 01:42:00,120 --> 01:42:03,990 >> Але зверніть увагу, як швидко ми придбали що словниковий запас, навіть якщо це 2043 01:42:03,990 --> 01:42:07,570 збирається зайняти деякий час, щоб потонути в, так що тепер ми можемо використовувати цей словник 2044 01:42:07,570 --> 01:42:10,320 писати більш цікаві програми. 2045 01:42:10,320 --> 01:42:12,940 І давайте крок дитини до що, як слід. 2046 01:42:12,940 --> 01:42:14,890 Дозвольте мені йти вперед і створити новий файл тут. 2047 01:42:14,890 --> 01:42:17,750 >> Я буду називати це prototype.c, і ввести 2048 01:42:17,750 --> 01:42:20,954 в перший раз, здатність щоб зробити свої власні функції. 2049 01:42:20,954 --> 01:42:22,870 Деякі з вас, можливо, зробив це з нуля, 2050 01:42:22,870 --> 01:42:25,430 в якому ви можете створити свій власні блоки нуля, 2051 01:42:25,430 --> 01:42:27,892 а потім перетягнути їх на місце всюди, де ви хотіли б в C. 2052 01:42:27,892 --> 01:42:30,100 І в більшості програм мови, ви можете зробити саме 2053 01:42:30,100 --> 01:42:33,580 that-- зробити свої власні функції, якщо вони вже не існують. 2054 01:42:33,580 --> 01:42:38,660 >> Так, наприклад, дозвольте мені йти вперед і включають CS50.h, і включають в себе 2055 01:42:38,660 --> 01:42:43,110 стандарт io.h, INT головний недійсним. 2056 01:42:43,110 --> 01:42:46,020 І тепер у нас є заповнювач готовий до роботи. 2057 01:42:46,020 --> 01:42:48,550 Я тримаю друку речі як імена людей сьогодні. 2058 01:42:48,550 --> 01:42:51,910 І це відчуває себе like-- не було б непогано, якби 2059 01:42:51,910 --> 01:42:53,936 були функція називається ім'я друку? 2060 01:42:53,936 --> 01:42:55,060 Я не повинен використовувати Printf. 2061 01:42:55,060 --> 01:42:56,976 Я не повинен пам'ятати всі коди формату. 2062 01:42:56,976 --> 01:43:00,050 Чому не я, і чому не зробив хтось переді мною, 2063 01:43:00,050 --> 01:43:02,980 створити функцію під назвою друку ім'я, що дано якусь назву, 2064 01:43:02,980 --> 01:43:03,980 просто друкує його? 2065 01:43:03,980 --> 01:43:08,700 >> Іншими словами, якщо я говорю, агов, комп'ютер, дайте мені рядок 2066 01:43:08,700 --> 01:43:11,870 питаючи у користувача, наприклад, за допомогою функції отримання рядка CS50 в. 2067 01:43:11,870 --> 01:43:15,090 Гей, комп'ютер, помістити цей рядок в змінна в лівій частині, 2068 01:43:15,090 --> 01:43:16,150 і називають це S. 2069 01:43:16,150 --> 01:43:22,150 А потім, агов комп'ютер, йти вперед і друк, що ім'я людини, зроблено. 2070 01:43:22,150 --> 01:43:26,240 >> Тепер, було б непогано, тому що ця програма, влучно назвав, 2071 01:43:26,240 --> 01:43:29,170 каже мені, що він повинен робити шляхом імен тих, функції. 2072 01:43:29,170 --> 01:43:32,930 Дозвольте мені піти і зробити прототип, Enter. 2073 01:43:32,930 --> 01:43:34,930 І, на жаль, це не буде літати. 2074 01:43:34,930 --> 01:43:39,430 >> Prototype.c, рядок 7, характер 5, помилка, неявне оголошення 2075 01:43:39,430 --> 01:43:42,960 функції друку імені неприпустимий в C99, C99 2076 01:43:42,960 --> 01:43:45,130 означає версію C який вийшов в 1999 році. 2077 01:43:45,130 --> 01:43:45,730 Це все. 2078 01:43:45,730 --> 01:43:48,780 >> Так що я не знаю, що все це означає, що до сих пір. 2079 01:43:48,780 --> 01:43:50,810 Але я визнати помилку в червоному кольорі. 2080 01:43:50,810 --> 01:43:51,770 Це досить очевидно. 2081 01:43:51,770 --> 01:43:53,769 >> І мені здається, що з зелений символ тут, 2082 01:43:53,769 --> 01:43:57,520 проблема пов'язана з ім'ям друку, відкрийте PAREN s, близькі PAREN, напівсинтетичні товстої кишки. 2083 01:43:57,520 --> 01:44:01,800 Але неявне декларація функція, яку ми бачили коротко раніше. 2084 01:44:01,800 --> 01:44:04,880 Це означає, просто, що Clang не знає, що я маю на увазі. 2085 01:44:04,880 --> 01:44:09,000 >> Я використовував Кодова слово, що це ніколи не бачив і не вчили раніше. 2086 01:44:09,000 --> 01:44:11,950 І тому мені потрібно, щоб навчити його що означає ця функція. 2087 01:44:11,950 --> 01:44:13,590 Так що я збираюся йти вперед і робити це. 2088 01:44:13,590 --> 01:44:17,970 >> Я збираюся йти вперед і реалізувати моя власна функція називається Print Name. 2089 01:44:17,970 --> 01:44:24,720 І я буду говорити, як це випливає, що він робить це, PRINTF, привіт, відсотків 2090 01:44:24,720 --> 01:44:27,760 s, зворотний слеш н, ім'я, крапка з комою. 2091 01:44:27,760 --> 01:44:29,250 Так що ж я тільки що зробив? 2092 01:44:29,250 --> 01:44:31,325 >> Так що виходить, щоб реалізувати свою власну функцію, 2093 01:44:31,325 --> 01:44:33,845 ми якось запозичити деякі з та ж структура, як головний 2094 01:44:33,845 --> 01:44:35,720 що ми тільки що були щось само собою зрозуміле, і я 2095 01:44:35,720 --> 01:44:37,730 знаю, просто скопіювати і приклеювання досить багато, що 2096 01:44:37,730 --> 01:44:39,170 Я писав у минулому. 2097 01:44:39,170 --> 01:44:40,570 Але зверніть увагу на зразок тут. 2098 01:44:40,570 --> 01:44:43,750 Int, Main, Пустота, ми будемо дратувати один від одного до того довго, що це насправді означає. 2099 01:44:43,750 --> 01:44:46,160 >> Але на сьогоднішній день, як раз зверніть увагу на паралелізм. 2100 01:44:46,160 --> 01:44:48,210 Порожнеча, ім'я друку, ім'я рядка, так що є 2101 01:44:48,210 --> 01:44:50,310 фіолетове ключове слово, який ми збираємося почати 2102 01:44:50,310 --> 01:44:54,067 викликаючи тип значення, ім'я функція, а потім введення. 2103 01:44:54,067 --> 01:44:56,400 Так що, насправді, ми можемо переганяти цей вид, як минулого тижня 2104 01:44:56,400 --> 01:44:59,030 оскільки це ім'я або алгоритм коду ми знаходимося 2105 01:44:59,030 --> 01:45:00,761 збирається write-- алгоритм, що лежить в основі 2106 01:45:00,761 --> 01:45:02,010 код, який ми збираємося написати. 2107 01:45:02,010 --> 01:45:03,180 >> Це його вхід. 2108 01:45:03,180 --> 01:45:04,670 Це його вихід. 2109 01:45:04,670 --> 01:45:08,730 Ця функція, ім'я друку, є розроблений, щоб взяти рядок з ім'ям ім'я, 2110 01:45:08,730 --> 01:45:11,350 або незалежно від того, в якості вхідних даних, а потім анулюються. 2111 01:45:11,350 --> 01:45:13,904 Вона не повертає нічого, як отримати рядок або отримати INT робить. 2112 01:45:13,904 --> 01:45:15,570 Так що він збирається передати мені що-небудь. 2113 01:45:15,570 --> 01:45:17,960 Це просто буде мати побічний ефект, так би мовити, 2114 01:45:17,960 --> 01:45:19,570 друкувати ім'я людини. 2115 01:45:19,570 --> 01:45:22,260 Так зверніть увагу, рядок 7, я можна назвати ім'я друку. 2116 01:45:22,260 --> 01:45:25,920 Рядок 10, я можу визначити або реалізують ім'я друку. 2117 01:45:25,920 --> 01:45:28,450 Але, на жаль, цього недостатньо. 2118 01:45:28,450 --> 01:45:31,230 >> Дозвольте мені йти вперед і перекомпіліровать це після збереження. 2119 01:45:31,230 --> 01:45:33,910 Вау, тепер, я зробив це гірше, здавалося б. 2120 01:45:33,910 --> 01:45:37,027 Таким чином, неявне оголошення ім'я функції друку недійсний. 2121 01:45:37,027 --> 01:45:38,360 І, знову ж таки, є більше помилок. 2122 01:45:38,360 --> 01:45:41,430 Але, як я попередив раніше, навіть якщо ви отримуєте завалені, 2123 01:45:41,430 --> 01:45:44,850 або трохи сумно бачити так багато Помилки, зосередитися тільки на перший 2124 01:45:44,850 --> 01:45:47,500 на початковому етапі, так як це може бути просто мали каскадний ефект. 2125 01:45:47,500 --> 01:45:51,970 Так C або Clang більш конкретно, до сих пір не визнає ім'я друку. 2126 01:45:51,970 --> 01:45:54,580 >> І це тому, що Clang, дизайн, це свого роду німий. 2127 01:45:54,580 --> 01:45:56,280 Це тільки робить те, що ви скажете їй зробити. 2128 01:45:56,280 --> 01:46:00,950 І це тільки робить це в порядку в якому ви скажете їй зробити. 2129 01:46:00,950 --> 01:46:05,270 >> Таким чином, я визначив головний на четвертому рядку, як ми робили досить часто. 2130 01:46:05,270 --> 01:46:07,980 Я визначив ім'я друку в рядку 10. 2131 01:46:07,980 --> 01:46:11,793 Але я намагаюся використовувати друкувати ім'я на лінії сім. 2132 01:46:11,793 --> 01:46:13,670 >> Це занадто рано, поки не існує. 2133 01:46:13,670 --> 01:46:19,150 Так що я міг бути розумним, і бути, як, ОК, так що давайте просто грати разом, 2134 01:46:19,150 --> 01:46:23,680 і перемістити ім'я друку вгору тут, і пересобрать. 2135 01:46:23,680 --> 01:46:24,550 Боже мій. 2136 01:46:24,550 --> 01:46:25,260 Це спрацювало. 2137 01:46:25,260 --> 01:46:26,670 Це було так просто. 2138 01:46:26,670 --> 01:46:28,120 >> Але логіка саме це. 2139 01:46:28,120 --> 01:46:30,870 Ви повинні навчити Clang, що це є шляхом визначення функції першого. 2140 01:46:30,870 --> 01:46:31,920 Після цього ви можете використовувати його. 2141 01:46:31,920 --> 01:46:33,940 Але, чесно кажучи, це відчуває як слизького. 2142 01:46:33,940 --> 01:46:35,773 >> Так що кожен раз, коли я біжу в проблему, я просто 2143 01:46:35,773 --> 01:46:39,450 збирається виділити і скопіювати код Я написав, вирізати його і вставити його сюди. 2144 01:46:39,450 --> 01:46:41,370 І, звичайно, ми могли б зуміти деякі сценарії 2145 01:46:41,370 --> 01:46:43,286 де одна функція може потрібно зателефонувати іншому. 2146 01:46:43,286 --> 01:46:46,030 І ви просто не можете помістити кожен функція вище будь-який інший. 2147 01:46:46,030 --> 01:46:47,930 >> Так виходить, що є краще рішення. 2148 01:46:47,930 --> 01:46:50,100 Ми можемо залишити це бути. 2149 01:46:50,100 --> 01:46:53,677 І, чесно кажучи, це взагалі приємно, і зручно, і хороший дизайн 2150 01:46:53,677 --> 01:46:56,760 поставити головний по-перше, тому що, знову ж таки, Головним же, як коли зелений прапор клацнув, 2151 01:46:56,760 --> 01:46:59,027 тобто функція, запускається на виконання за замовчуванням. 2152 01:46:59,027 --> 01:47:01,110 Таким чином, ви можете також помістити вона у верхній частині файлу 2153 01:47:01,110 --> 01:47:03,560 так що, коли ви або будь-який інша людина дивиться на файл 2154 01:47:03,560 --> 01:47:06,360 Ви знаєте, що відбувається просто прочитавши головний перший. 2155 01:47:06,360 --> 01:47:15,360 Так що виходить, ми можемо сказати Clang проактивно, агов, Clang, на четвертому рядку, 2156 01:47:15,360 --> 01:47:17,940 Я обіцяю реалізувати функція називається Print 2157 01:47:17,940 --> 01:47:22,600 Ім'я, яке приймає рядок називається ім'я в якості вхідних даних і повертає нічого, пустота. 2158 01:47:22,600 --> 01:47:24,770 І я обійти реалізації його пізніше. 2159 01:47:24,770 --> 01:47:25,680 >> Тут приходить Main. 2160 01:47:25,680 --> 01:47:29,130 Головне тепер в рядку 9 можна використовувати Друк імені, тому що Clang 2161 01:47:29,130 --> 01:47:32,600 хто ж має надію, що, врешті-решт, вона буде стикатися з визначенням 2162 01:47:32,600 --> 01:47:34,880 здійснення друку Назва. 2163 01:47:34,880 --> 01:47:37,390 Таким чином, після збереження мій файл, нехай мені йти вперед і зробити прототип, 2164 01:47:37,390 --> 01:47:38,498 виглядає добре на цей раз. 2165 01:47:38,498 --> 01:47:43,470 Дот слеш, прототип, дозвольте мені йти вперед і ввести ім'я. 2166 01:47:43,470 --> 01:47:48,440 Девід, привіт David, Zamila, привіт Zamila, і, насправді, тепер він працює. 2167 01:47:48,440 --> 01:47:52,200 >> Таким чином, компонент тут є те, що ми в зробив для користувача функцію, як звичай 2168 01:47:52,200 --> 01:47:54,219 Подряпина блок ми називаємо його. 2169 01:47:54,219 --> 01:47:57,010 Але на відміну від нуля, де ви можете просто створити його і почати використовувати його, 2170 01:47:57,010 --> 01:47:59,330 Тепер ми повинні бути трохи більше педантичним, 2171 01:47:59,330 --> 01:48:03,410 і насправді потяг Clang використовувати, або чекати його. 2172 01:48:03,410 --> 01:48:09,140 Тепер, як в сторону, чому весь цей час ми були просто сліпо на віру, включаючи 2173 01:48:09,140 --> 01:48:12,170 CS50.h, і в тому числі стандартних io.h? 2174 01:48:12,170 --> 01:48:15,190 >> Що ж, виходить, серед кількох інших речей, 2175 01:48:15,190 --> 01:48:18,550 все, що в цих точок ч файли, які, трапляється, файли. 2176 01:48:18,550 --> 01:48:20,460 Вони файли заголовків, так би мовити. 2177 01:48:20,460 --> 01:48:23,270 Вони як і раніше написані на C. Але вони інший тип файлу. 2178 01:48:23,270 --> 01:48:28,690 >> На даний момент, ви можете в значній мірі припустити, що все, що знаходиться всередині CS50.h 2179 01:48:28,690 --> 01:48:33,360 Дехто ж дотепами, як це, не для функцій, що викликаються друку Ім'я, 2180 01:48:33,360 --> 01:48:36,840 але для отримання рядка, отримати Поплавок, і кілька інших. 2181 01:48:36,840 --> 01:48:41,510 І є подібні прототипи, лайнери, всередині стандартного io.h 2182 01:48:41,510 --> 01:48:46,241 для Printf, який зараз перебуває в моя власна функція друку Ім'я. 2183 01:48:46,241 --> 01:48:49,490 Отже, іншими словами, весь цей час ми в просто сліпо скопіювати і вставити 2184 01:48:49,490 --> 01:48:51,780 включити це, включають в себе що, що відбувається? 2185 01:48:51,780 --> 01:48:55,310 Це просто вид підказок дзвеніти щодо того, що функції 2186 01:48:55,310 --> 01:49:00,170 які, дійсно, реалізовані, просто в інших місцях в різних файлах 2187 01:49:00,170 --> 01:49:02,440 в іншому місці в системі. 2188 01:49:02,440 --> 01:49:05,160 >> Таким чином, ми реалізували ім'я друку. 2189 01:49:05,160 --> 01:49:07,910 У нього є цей побічний ефект друк щось на екрані. 2190 01:49:07,910 --> 01:49:10,170 Але це не насправді передати мені що-небудь. 2191 01:49:10,170 --> 01:49:12,200 Як ми йти про реалізації програми, яка 2192 01:49:12,200 --> 01:49:14,510 це передати мені що-небудь? 2193 01:49:14,510 --> 01:49:15,580 >> Що ж, давайте спробуємо це. 2194 01:49:15,580 --> 01:49:21,360 Дозвольте мені йти вперед і реалізувати файл з ім'ям return.c 2195 01:49:21,360 --> 01:49:24,530 так що ми можемо показати, як щось як отримати рядок, або отримати Int, 2196 01:49:24,530 --> 01:49:27,340 насправді повернення щось назад користувачеві. 2197 01:49:27,340 --> 01:49:29,840 Давайте йти вперед і визначити Int основну порожнечу. 2198 01:49:29,840 --> 01:49:33,230 >> І, знову ж таки, в майбутньому, ми будемо пояснити, що це Int і цю порожнечу 2199 01:49:33,230 --> 01:49:34,090 насправді робить. 2200 01:49:34,090 --> 01:49:35,840 Але на сьогоднішній день, ми будемо приймають це як належне. 2201 01:49:35,840 --> 01:49:39,970 Я збираюся йти вперед і Printf, для хорошого користувальницького досвіду, х. 2202 01:49:39,970 --> 01:49:44,360 А потім я буду чекати Користувач, щоб дати мені х з GET Int. 2203 01:49:44,360 --> 01:49:48,459 >> А потім я збираюся йти вперед і роздрукувати х на площу. 2204 01:49:48,459 --> 01:49:50,500 Тому, коли у вас є тільки клавіатура, люди часто 2205 01:49:50,500 --> 01:49:52,600 використовувати маленьку морква символ на клавіатурі 2206 01:49:52,600 --> 01:49:55,330 представляти до влади з, або показник. 2207 01:49:55,330 --> 01:49:58,960 Так що х в квадраті присутній я. 2208 01:49:58,960 --> 01:50:00,660 >> А тепер я збираюся зробити це. 2209 01:50:00,660 --> 01:50:03,940 Я міг би просто do-- що х в квадраті? х в квадраті х раз х. 2210 01:50:03,940 --> 01:50:06,690 >> І ми зробили це деякі давно вже сьогодні. 2211 01:50:06,690 --> 01:50:08,730 Це не схоже все, що значний прогрес. 2212 01:50:08,730 --> 01:50:09,570 Знаєш, що? 2213 01:50:09,570 --> 01:50:13,100 Давайте використовувати деякі з цієї ідеї від останнього часу абстракції. 2214 01:50:13,100 --> 01:50:16,080 >> Не було б добре, якщо є функція, яка називається 2215 01:50:16,080 --> 01:50:18,460 квадрат, який робить саме це? 2216 01:50:18,460 --> 01:50:20,640 Він як і раніше, в кінці день, робить те ж математику. 2217 01:50:20,640 --> 01:50:22,410 Але давайте абстрактні геть ідея взяття 2218 01:50:22,410 --> 01:50:25,280 одне число, помножене на інший, а просто дати йому ім'я, 2219 01:50:25,280 --> 01:50:27,360 як квадрат це значення. 2220 01:50:27,360 --> 01:50:29,560 >> І, іншими словами, в C, давайте створимо функцію 2221 01:50:29,560 --> 01:50:32,660 називається квадрат, який робить саме це. 2222 01:50:32,660 --> 01:50:34,600 Це буде називатися квадрат. 2223 01:50:34,600 --> 01:50:35,790 Він збирається прийняти Int. 2224 01:50:35,790 --> 01:50:37,820 І ми будемо просто називати його п, за замовчуванням. 2225 01:50:37,820 --> 01:50:39,403 >> Але ми могли б назвати це все, що ми хочемо. 2226 01:50:39,403 --> 01:50:42,900 І все, що він збирається робити, в буквальному сенсі, є повернення 2227 01:50:42,900 --> 01:50:45,810 результат п раз п. 2228 01:50:45,810 --> 01:50:48,980 Але так як це повертаючи щось, що 2229 01:50:48,980 --> 01:50:53,690 є ключовим словом в фіолетовий ми в ніколи не бачив раніше, я, в рядку 11, 2230 01:50:53,690 --> 01:50:55,410 не може просто сказати, порожнеча на цей раз. 2231 01:50:55,410 --> 01:51:01,320 >> Порожнеча, в прикладі, який ми тільки що бачили а назви друку, просто означає, 2232 01:51:01,320 --> 01:51:02,190 робити щось. 2233 01:51:02,190 --> 01:51:04,170 Але не дай мені що-небудь. 2234 01:51:04,170 --> 01:51:06,790 У цьому випадку, я хочу для повернення в п раз п, 2235 01:51:06,790 --> 01:51:08,460 або незалежно від того, що є, це число. 2236 01:51:08,460 --> 01:51:12,460 >> Так що я не можу сказати, агов, комп'ютер, Я не повернуся нічого, пустота. 2237 01:51:12,460 --> 01:51:16,166 Це збирається повернутися, за своєю природою, в Int. 2238 01:51:16,166 --> 01:51:17,790 І так, що це все, що тут відбувається. 2239 01:51:17,790 --> 01:51:20,070 >> Вхід на площу збирається бути інт. 2240 01:51:20,070 --> 01:51:24,760 І так, що ми можемо використовувати його, він повинен є ім'я, N. Це збирається виводити 2241 01:51:24,760 --> 01:51:26,240 INT, який не потрібно ім'я. 2242 01:51:26,240 --> 01:51:29,590 Ми можемо залишити його на головну, або той, хто використовуючи мене, щоб пам'ятати це значення, якщо ми 2243 01:51:29,590 --> 01:51:31,120 хоче зі своєю власною змінної. 2244 01:51:31,120 --> 01:51:33,230 >> І, знову ж таки, тільки новий Ключове слово тут Return. 2245 01:51:33,230 --> 01:51:34,480 І я просто роблю деякі математики. 2246 01:51:34,480 --> 01:51:41,825 Якби я дійсно хотів бути непотрібним, Я міг би сказати INT продукт отримує п раз п. 2247 01:51:41,825 --> 01:51:44,170 >> І тоді я міг би сказати, повернути продукт. 2248 01:51:44,170 --> 01:51:47,360 Але, знову ж таки, до моєї точки раніше з це просто не бути хорошим design-- 2249 01:51:47,360 --> 01:51:50,060 як, навіщо вводити ім'я, символ, як продукт, 2250 01:51:50,060 --> 01:51:51,570 просто негайно повернути його? 2251 01:51:51,570 --> 01:51:53,670 Це трохи чистіше, трохи жорсткіше, так 2252 01:51:53,670 --> 01:51:59,380 говорити, просто сказати, повернення п раз п, щоб позбутися від цієї лінії в цілому. 2253 01:51:59,380 --> 01:52:02,860 >> І це як раз менше коду, щоб читати, менше можливостей для помилок. 2254 01:52:02,860 --> 01:52:05,180 І давайте подивимося, якщо це насправді в даний час працює. 2255 01:52:05,180 --> 01:52:09,380 Тепер, я збираюся піти вперед і зробити повернення. 2256 01:52:09,380 --> 01:52:11,460 >> Ой-ой, неявне оголошення функції. 2257 01:52:11,460 --> 01:52:14,080 Я зробив цю помилку раніше, не склало великих труднощів. 2258 01:52:14,080 --> 01:52:18,950 Дозвольте мені просто надрукувати, або виділити і скопіювати, точно такий же прототип функції, 2259 01:52:18,950 --> 01:52:21,342 або підписи, функції тут. 2260 01:52:21,342 --> 01:52:22,800 Або я міг би перемістити всю функцію. 2261 01:52:22,800 --> 01:52:23,841 >> Але це трохи лінивий. 2262 01:52:23,841 --> 01:52:24,870 Таким чином, ми не будемо цього робити. 2263 01:52:24,870 --> 01:52:27,960 Тепер, дозвольте мені зробити повернення знову ж, точка повернення косою риси. 2264 01:52:27,960 --> 01:52:32,790 >> х в квадраті 2. х 4. х квадрат 3. х 9. 2265 01:52:32,790 --> 01:52:35,300 І функція здається Тепер, щоб працювати. 2266 01:52:35,300 --> 01:52:36,550 То яка різниця тут? 2267 01:52:36,550 --> 01:52:42,520 У мене є функція, яка називається квадрат, в цьому випадку, який я поставив в якості внеску. 2268 01:52:42,520 --> 01:52:43,830 І я отримую назад вихід. 2269 01:52:43,830 --> 01:52:46,210 І тим не менше, раніше, якщо Я відкриваю ще один приклад 2270 01:52:46,210 --> 01:52:51,640 від раніше, що був названий prototype.c, 2271 01:52:51,640 --> 01:52:54,770 У мене було ім'я друку, який повернувся недійсним, якщо можна так висловитися, 2272 01:52:54,770 --> 01:52:58,730 Або це не дав нічого, і просто мав побічний ефект. 2273 01:52:58,730 --> 01:53:00,230 >> Так що ж тут відбувається? 2274 01:53:00,230 --> 01:53:03,520 Що ж, розглянемо функцію отримати рядок на мить. 2275 01:53:03,520 --> 01:53:06,570 Ми використовуємо функцію отримати рядок наступним чином. 2276 01:53:06,570 --> 01:53:10,464 >> У нас було функція отримати рядок, як включати CS50.h, 2277 01:53:10,464 --> 01:53:16,624 включають в себе стандартні io.h, INT, основний, недійсним. 2278 01:53:16,624 --> 01:53:18,790 І тоді кожен раз, коли я називається отримання рядки досі, 2279 01:53:18,790 --> 01:53:23,260 Я сказав щось на кшталт, рядок s отримує отримати рядок, тому що string-- Get 2280 01:53:23,260 --> 01:53:27,880 давайте назвемо цю get.c-- рядок GET сама повертає рядок, я можу потім 2281 01:53:27,880 --> 01:53:32,050 використовувати, і сказати, привіт, кома, відсотків s, зворотна коса п, з. 2282 01:53:32,050 --> 01:53:35,660 >> Так що це той же самий приклад, насправді, що у нас було раніше. 2283 01:53:35,660 --> 01:53:37,920 Так що рядок повертає значення. 2284 01:53:37,920 --> 01:53:41,260 Але мить назад, рядок для друку не повертає значення. 2285 01:53:41,260 --> 01:53:42,721 Він просто має побічний ефект. 2286 01:53:42,721 --> 01:53:44,220 Так що це принципова різниця. 2287 01:53:44,220 --> 01:53:46,710 Ми бачили різні типи функцій в даний час, 2288 01:53:46,710 --> 01:53:49,490 деякі з яких повернулися значення, деякі з яких не роблять. 2289 01:53:49,490 --> 01:53:51,890 Так може бути, це рядок, або INT, або з плаваючою точкою. 2290 01:53:51,890 --> 01:53:53,480 Або, може бути, це просто порожнеча. 2291 01:53:53,480 --> 01:53:55,710 >> І різниця що ці функції, 2292 01:53:55,710 --> 01:53:59,940 отримати дані і повертає значення, насправді в результаті чого-то назад до столу, 2293 01:53:59,940 --> 01:54:01,110 так би мовити. 2294 01:54:01,110 --> 01:54:03,710 Так що давайте йти вперед і дивитися на один остаточний набір 2295 01:54:03,710 --> 01:54:09,129 прикладів, що дає відчуття, тепер, як ми могли б, справді, абстрактні краще, 2296 01:54:09,129 --> 01:54:11,670 і краще, і краще, або більше, і більше, і більше, для того, 2297 01:54:11,670 --> 01:54:13,810 писати, в кінцевому рахунку, кращий код. 2298 01:54:13,810 --> 01:54:16,860 Давайте йти вперед, і в дусі скретч, зробіть наступне. 2299 01:54:16,860 --> 01:54:21,700 >> Дозвольте мені йти вперед і включають в себе CS50.h і стандарт IO.h. 2300 01:54:21,700 --> 01:54:24,010 Дозвольте мені йти вперед і дати я INT, головним чином, порожнеча. 2301 01:54:24,010 --> 01:54:27,380 І дозвольте мені йти вперед, називаємо це cough.c. 2302 01:54:27,380 --> 01:54:35,510 >> І дозвольте мені йти вперед і просто як подряпина, роздрукувати кашель / п. 2303 01:54:35,510 --> 01:54:37,170 І я хочу зробити це три рази. 2304 01:54:37,170 --> 01:54:39,670 Так що я, звичайно, просто збирається скопіювати і вставити три рази. 2305 01:54:39,670 --> 01:54:46,440 Я зараз збираюся зробити кашель точка слеш кашель. 2306 01:54:46,440 --> 01:54:50,120 Давайте дамо собі трохи більше місця тут, Enter, кашель, кашель, кашель. 2307 01:54:50,120 --> 01:54:53,970 >> Там в, очевидно, вже можливість для поліпшення. 2308 01:54:53,970 --> 01:54:55,679 Я скопіював і вставив кілька разів сьогодні. 2309 01:54:55,679 --> 01:54:58,261 Але це було тільки тому я не зробив повинні набрати стільки символів. 2310 01:54:58,261 --> 01:55:00,250 Я до сих пір змінилося, що ці рядки коду. 2311 01:55:00,250 --> 01:55:04,240 >> Ці три лінії ідентичні, який відчуває себе ледачим і справді є, 2312 01:55:04,240 --> 01:55:07,110 і, ймовірно, не правильний підхід. 2313 01:55:07,110 --> 01:55:11,029 Так з якою інгредієнт ми могли б поліпшити цей код? 2314 01:55:11,029 --> 01:55:12,570 Ми не повинні копіювати код. 2315 01:55:12,570 --> 01:55:15,070 >> І дійсно, в будь-який час ви відчуваєте самостійно копіювання і вставки, 2316 01:55:15,070 --> 01:55:17,700 і навіть не змінюючи код, Шанси є кращий спосіб. 2317 01:55:17,700 --> 01:55:19,470 І, дійсно, є. 2318 01:55:19,470 --> 01:55:22,510 Дозвольте мені йти вперед і зробити цикл, навіть при тому, що синтаксис не може 2319 01:55:22,510 --> 01:55:24,570 приходять, природно, поки немає. 2320 01:55:24,570 --> 01:55:29,494 >> Зробіть це три рази, просто , Роблячи following-- 2321 01:55:29,494 --> 01:55:31,160 і я знаю це з практики. 2322 01:55:31,160 --> 01:55:32,810 Але у нас є ряд прикладів, в даний час. 2323 01:55:32,810 --> 01:55:34,950 І ви побачите онлайн більше посилань досі. 2324 01:55:34,950 --> 01:55:37,790 >> Це синтаксис в рядку 6, що так само, як нуля, який повторюється 2325 01:55:37,790 --> 01:55:40,090 блок, повторіть наступні три рази. 2326 01:55:40,090 --> 01:55:41,340 Це трохи чарівний зараз. 2327 01:55:41,340 --> 01:55:43,050 Але це буде отримати більше, і більш знайомим. 2328 01:55:43,050 --> 01:55:45,050 >> І це буде повторюватися лінія вісім три рази, 2329 01:55:45,050 --> 01:55:52,390 так що якщо я перекомпілюються макіяж кашель, точка слеш кашель, кашель, кашель, кашель. 2330 01:55:52,390 --> 01:55:54,030 Він як і раніше працює точно так само. 2331 01:55:54,030 --> 01:55:55,550 Так що це все прекрасно і добре. 2332 01:55:55,550 --> 01:55:58,200 Але це не дуже абстрактно. 2333 01:55:58,200 --> 01:55:59,371 >> Це абсолютно правильно. 2334 01:55:59,371 --> 01:56:01,370 Але він відчуває, як там може бути можливість, 2335 01:56:01,370 --> 01:56:03,750 як і в світі Подряпини, щоб вид старту 2336 01:56:03,750 --> 01:56:07,530 щоб додати деяку семантику тут, так що Я не просто якийсь цикл, 2337 01:56:07,530 --> 01:56:09,867 і функція, яка говорить кашель, або ж кашель. 2338 01:56:09,867 --> 01:56:10,450 Знаєш, що? 2339 01:56:10,450 --> 01:56:12,620 Дозвольте мені бути трохи холодніше, ніж, 2340 01:56:12,620 --> 01:56:16,090 і насправді написати функцію, яка має деякі побічні ефекти, називають його кашель. 2341 01:56:16,090 --> 01:56:20,830 >> І це не має ніякого введення і не повертає значення в якості висновку. 2342 01:56:20,830 --> 01:56:22,680 Але ви знаєте, що він робить? 2343 01:56:22,680 --> 01:56:29,370 Він робить this-- Printf, цитата Unquote, кашель. 2344 01:56:29,370 --> 01:56:32,380 >> І тепер тут, я збираюся йти вперед і для Int, 2345 01:56:32,380 --> 01:56:36,070 я отримує нуль, я менше, ніж 3, я плюс плюс. 2346 01:56:36,070 --> 01:56:39,770 Я збираюся не робити Printf, що можливо, реалізація низького рівня 2347 01:56:39,770 --> 01:56:40,270 детально. 2348 01:56:40,270 --> 01:56:41,353 Мене не хвилює, як кашель. 2349 01:56:41,353 --> 01:56:43,240 Я просто хочу, щоб використовувати функцію від кашлю. 2350 01:56:43,240 --> 01:56:44,840 І я просто буду називати кашель. 2351 01:56:44,840 --> 01:56:46,204 >> Тепер зверніть увагу на дихотомії. 2352 01:56:46,204 --> 01:56:49,370 При виконанні функції, якщо ви цього не зробите хочуть, щоб дати йому входи, абсолютно нормально. 2353 01:56:49,370 --> 01:56:51,780 Просто зробіть відкриті дужка, близько дужка, і ви зробили. 2354 01:56:51,780 --> 01:56:56,271 >> При визначенні функції, або оголосити прототип функції у, 2355 01:56:56,271 --> 01:56:58,770 якщо ви заздалегідь знаєте, це не збирається приймати будь-які аргументи, 2356 01:56:58,770 --> 01:57:01,170 кажуть, порожнеча в цих дужках там. 2357 01:57:01,170 --> 01:57:05,660 І це гарантує, що вам не випадково неправильного поводження з ним. 2358 01:57:05,660 --> 01:57:07,020 Дозвольте мені йти вперед і зробити кашель. 2359 01:57:07,020 --> 01:57:08,540 І, звичайно ж, я зробив помилку. 2360 01:57:08,540 --> 01:57:10,410 >> Прокляття, є те, що неявне оголошення. 2361 01:57:10,410 --> 01:57:11,325 Але це нормально. 2362 01:57:11,325 --> 01:57:12,590 Це легко виправити. 2363 01:57:12,590 --> 01:57:18,240 Мені просто потрібно прототип вище в моєму файлі, ніж я насправді використовувати його. 2364 01:57:18,240 --> 01:57:20,070 >> Так що тепер дозвольте мені зробити кашель знову, приємно. 2365 01:57:20,070 --> 01:57:20,790 Тепер вона працює. 2366 01:57:20,790 --> 01:57:22,930 Зробити кашель, кашель, кашель, кашель. 2367 01:57:22,930 --> 01:57:25,930 Таким чином, ви можете подумати, що ми насправді трохи більше інженерних цю проблему. 2368 01:57:25,930 --> 01:57:26,763 І дійсно, ми. 2369 01:57:26,763 --> 01:57:28,870 Це не дуже хороша кандидат програми 2370 01:57:28,870 --> 01:57:31,930 на даний момент для рефакторінга, і робити те, що 2371 01:57:31,930 --> 01:57:35,645 називається ієрархічне розкладання, де ви берете якийсь код, а потім 2372 01:57:35,645 --> 01:57:38,790 ви начебто фактора речі, так що, як приписувати більше семантики до них, 2373 01:57:38,790 --> 01:57:40,930 і використовувати його в кінцевому рахунку, більш тривалий термін. 2374 01:57:40,930 --> 01:57:43,490 Але це будівельний блок в сторону складніші програми 2375 01:57:43,490 --> 01:57:45,600 що ми почнемо письмовій формі до тих пір, що 2376 01:57:45,600 --> 01:57:50,090 дозволяє нам мати словниковий запас з якої краще писати код. 2377 01:57:50,090 --> 01:57:52,920 І дійсно, давайте подивимося, якщо ми не може узагальнити це далі. 2378 01:57:52,920 --> 01:57:57,984 >> Це здається трохи кульгає, що я, головним чином, потрібно турбуватися про це штопати для циклу, 2379 01:57:57,984 --> 01:57:59,400 і викликаючи кашель знову і знову. 2380 01:57:59,400 --> 01:58:03,050 Чому я не можу просто сказати кашель, будь ласка, кашель в три рази? 2381 01:58:03,050 --> 01:58:08,170 Іншими словами, чому я не можу просто дають внесок в кашель і зробити це? 2382 01:58:08,170 --> 01:58:11,270 >> Чому я не можу просто сказати, в Основний кашель в три рази. 2383 01:58:11,270 --> 01:58:13,150 І тепер, це свого роду магічне. 2384 01:58:13,150 --> 01:58:14,540 Це дуже ітераційний тут. 2385 01:58:14,540 --> 01:58:15,940 І це, дійсно, крок дитини. 2386 01:58:15,940 --> 01:58:19,250 >> Але тільки здатність говорити на лінія вісім, кашель в три рази, 2387 01:58:19,250 --> 01:58:20,730 це просто так набагато зручнішим для читання. 2388 01:58:20,730 --> 01:58:24,210 І, плюс, я не повинен знати або все одно, як здійснюється кашель. 2389 01:58:24,210 --> 01:58:26,460 І дійсно, пізніше в термін і для остаточних проектів, 2390 01:58:26,460 --> 01:58:29,150 якщо ви вирішувати проект з однокласник або два однокласники, 2391 01:58:29,150 --> 01:58:32,370 ви зрозумієте, що ви збираєтеся повинні, або хочете, розділити роботу. 2392 01:58:32,370 --> 01:58:34,650 >> І ви будете хотіти, щоб вирішити, заздалегідь, хто буде робити те, що, 2393 01:58:34,650 --> 01:58:35,483 і в які частини? 2394 01:58:35,483 --> 01:58:37,520 І не було б приємно якщо ви, наприклад, 2395 01:58:37,520 --> 01:58:40,100 взяти на себе відповідальність написання головним чином, зроблено. 2396 01:58:40,100 --> 01:58:43,470 А ваш сусід по кімнаті, або ваш партнер в більш загальному плані, 2397 01:58:43,470 --> 01:58:45,230 піклується про реалізацію кашель. 2398 01:58:45,230 --> 01:58:49,540 >> І цей поділ, ці стіни абстракції, 2399 01:58:49,540 --> 01:58:52,310 або шари абстракції якщо ви, супер потужний, 2400 01:58:52,310 --> 01:58:55,480 тому що особливо для великих, складніші програми і системи, 2401 01:58:55,480 --> 01:59:00,070 вона дозволяє декільком людям будувати всі разом, і в кінцевому рахунку 2402 01:59:00,070 --> 01:59:02,680 зшити їх спільну роботу таким чином. 2403 01:59:02,680 --> 01:59:05,332 Але, звичайно, ми потрібно виправити прямо зараз кашель. 2404 01:59:05,332 --> 01:59:07,290 Ми повинні сказати кашель що, гей, ви знаєте, що? 2405 01:59:07,290 --> 01:59:11,230 Ви будете потребувати, щоб взяти input-- тому не пустота, а INT і тепер. 2406 01:59:11,230 --> 01:59:15,170 Давайте йти вперед і покласти в кашель ІНТ. я отримує нуль. 2407 01:59:15,170 --> 01:59:16,890 >> я менше, ніж у скільки разів. 2408 01:59:16,890 --> 01:59:18,550 Я сказав три раніше. 2409 01:59:18,550 --> 01:59:20,420 Але це не те, що я хочу. 2410 01:59:20,420 --> 01:59:25,520 Я хочу, щоб кашель бути узагальнена підтримувати будь-яку кількість ітерацій. 2411 01:59:25,520 --> 01:59:28,800 >> Так що, насправді, це п, що я хочу, все, що користувач говорить мені. 2412 01:59:28,800 --> 01:59:31,620 Тепер я можу йти вперед і сказати друку кашель. 2413 01:59:31,620 --> 01:59:34,750 І незалежно від того, який номер користувач переходить в, 2414 01:59:34,750 --> 01:59:36,890 Я буду повторювати, що у багато разів. 2415 01:59:36,890 --> 01:59:39,160 >> Таким чином, в кінці кінців, Програма ідентична. 2416 01:59:39,160 --> 01:59:42,820 Але зверніть увагу на всі ці речі може бути навіть в іншому файлі. 2417 01:59:42,820 --> 01:59:45,620 Насправді, я не знаю, на Момент, як Printf реалізується. 2418 01:59:45,620 --> 01:59:47,980 >> Я не знаю, на даний момент, як отримати рядок, або отримати Int, або отримати з плаваючою точкою 2419 01:59:47,980 --> 01:59:48,646 реалізуються. 2420 01:59:48,646 --> 01:59:50,930 І я не хочу побачити їх на моєму екрані. 2421 01:59:50,930 --> 01:59:55,320 Як це, я починаю зосередитися на моя програма, а не ті функції. 2422 01:59:55,320 --> 01:59:59,070 >> І так, справді, як тільки ви почати факторингу код, як це, 2423 01:59:59,070 --> 02:00:01,397 ми могли б навіть рухатися кашель в окремий файл? 2424 02:00:01,397 --> 02:00:02,730 Хтось інший міг би здійснити це. 2425 02:00:02,730 --> 02:00:06,810 І ви і ваша програма стала дуже красивий, і дуже легко читаються, 2426 02:00:06,810 --> 02:00:10,830 можливо, насправді чотири лінії програми прямо там. 2427 02:00:10,830 --> 02:00:13,510 >> Так що давайте йти вперед прямо зараз і зробити ще одну зміну. 2428 02:00:13,510 --> 02:00:16,180 Зверніть увагу на те, що мій прототип повинен змінитися до вершини. 2429 02:00:16,180 --> 02:00:18,390 Отже, дозвольте мені виправити що так Я не отримую кричав на. 2430 02:00:18,390 --> 02:00:22,580 >> Зробити кашель, дозвольте мені бігти кашель один раз Більш того, як і раніше робить те ж саме. 2431 02:00:22,580 --> 02:00:26,010 Але тепер, зауважте, ми маємо інгредієнт для однієї остаточної версії. 2432 02:00:26,010 --> 02:00:26,940 Знаєш, що? 2433 02:00:26,940 --> 02:00:29,040 Я не хочу, щоб просто кашель, обов'язково. 2434 02:00:29,040 --> 02:00:30,802 Я хочу мати щось більш загальне. 2435 02:00:30,802 --> 02:00:31,510 Таким чином, ви знаєте, що? 2436 02:00:31,510 --> 02:00:32,450 Я хочу, щоб це зробити. 2437 02:00:32,450 --> 02:00:37,140 Я хочу мати, так само, як нуля робить, блок скажімо, але не тільки 2438 02:00:37,140 --> 02:00:38,680 сказати щось кілька разів. 2439 02:00:38,680 --> 02:00:41,510 Я хочу сказати, дуже конкретну рядок. 2440 02:00:41,510 --> 02:00:43,850 І, отже, я не хочу, щоб просто сказати, кашель. 2441 02:00:43,850 --> 02:00:47,660 Я хочу сказати, що б не рядок передається в. 2442 02:00:47,660 --> 02:00:49,960 >> Тому зверніть увагу, я узагальнив це так, що в даний час 2443 02:00:49,960 --> 02:00:53,110 скажімо відчуває себе добре ім'я для цього, як нуля, 2444 02:00:53,110 --> 02:00:55,530 приймає два аргументи, на відміну від нуля. 2445 02:00:55,530 --> 02:00:56,570 Одним з них є рядком. 2446 02:00:56,570 --> 02:00:57,300 Одним з них є Int. 2447 02:00:57,300 --> 02:00:58,130 >> І я міг перемикатися між ними. 2448 02:00:58,130 --> 02:01:00,713 Я просто ніби як ідея кажуть рядок, а потім 2449 02:01:00,713 --> 02:01:01,940 скільки раз пізніше. 2450 02:01:01,940 --> 02:01:03,970 Порожнеча означає, що він до сих пір нічого не повертає. 2451 02:01:03,970 --> 02:01:06,428 Це лише візуальна сторона ефекти, як з [? Джордан ,?] 2452 02:01:06,428 --> 02:01:08,240 словесне побічний ефект кричати. 2453 02:01:08,240 --> 02:01:12,630 Він як і раніше робить щось п раз, 0 до, але не дорівнює п. 2454 02:01:12,630 --> 02:01:14,540 Це означає, що загальний час п. 2455 02:01:14,540 --> 02:01:16,540 А потім просто роздрукувати що б це не рядок. 2456 02:01:16,540 --> 02:01:19,060 Так що я дійсно узагальнена цей рядок коду. 2457 02:01:19,060 --> 02:01:22,460 Так що тепер, як я можу реалізувати функція від кашлю? 2458 02:01:22,460 --> 02:01:25,520 >> Я можу зробити недійсним кашель. 2459 02:01:25,520 --> 02:01:28,501 І я все ще можу взяти в тому, багато разів ви хочете, щоб кашель. 2460 02:01:28,501 --> 02:01:29,250 Але ви знаєте, що? 2461 02:01:29,250 --> 02:01:31,240 Тепер я можу сказати, Пунт. 2462 02:01:31,240 --> 02:01:36,540 >> Я можу зателефонувати сказати з слово кашель, переходячи в п. 2463 02:01:36,540 --> 02:01:40,410 І якщо я хочу також здійснити, просто для задоволення, функція чхання, 2464 02:01:40,410 --> 02:01:42,290 Я можу чхання кілька разів. 2465 02:01:42,290 --> 02:01:47,300 І я можу багаторазово використовувати п, тому що зверніть увагу, що т в даному контексті або обсягу 2466 02:01:47,300 --> 02:01:49,470 існує тільки всередині цієї функції. 2467 02:01:49,470 --> 02:01:52,767 >> І п в цьому контексті тільки існує в рамках цієї функції тут. 2468 02:01:52,767 --> 02:01:54,600 Таким чином, ми повернемося до ці питання сфери. 2469 02:01:54,600 --> 02:02:01,160 І ось, я просто хочу сказати, Achoo, а потім п раз, крапка з комою. 2470 02:02:01,160 --> 02:02:04,340 >> А тепер, мені просто потрібно зайняти ці функції підпису тут. 2471 02:02:04,340 --> 02:02:06,290 Так що кашель є правильним. 2472 02:02:06,290 --> 02:02:10,090 Порожнеча чих тепер правильно. 2473 02:02:10,090 --> 02:02:12,390 >> І я до сих пір просто потрібно сказати. 2474 02:02:12,390 --> 02:02:18,990 Так що я буду говорити, скажімо рядок s, Int N, крапка з комою. 2475 02:02:18,990 --> 02:02:22,010 Таким чином, я надмірно спроектували чорт з цієї програми. 2476 02:02:22,010 --> 02:02:23,760 >> І це не обов'язково означає, що це 2477 02:02:23,760 --> 02:02:26,343 що ви повинні зробити при написанні навіть найпростіші програми. 2478 02:02:26,343 --> 02:02:29,280 Візьміть щось, що, очевидно, дуже просто, дуже короткий, 2479 02:02:29,280 --> 02:02:31,800 і повторно реалізувати його використовуючи надто багато коду. 2480 02:02:31,800 --> 02:02:34,560 Але ви насправді бачите, і в час озирнутися назад на цих прикладах, 2481 02:02:34,560 --> 02:02:38,610 і усвідомити, про, це ті кроки ми взяли насправді узагальнювати, 2482 02:02:38,610 --> 02:02:40,797 фактор щось, до тих пір, поки в кінці дня 2483 02:02:40,797 --> 02:02:42,380 мій код насправді досить розумно. 2484 02:02:42,380 --> 02:02:45,960 Тому що, якщо я хочу, щоб кашель три раз потім чхнути три рази, 2485 02:02:45,960 --> 02:02:50,420 Я просто збираюся запустити повторно, Програма робить кашель, і запустити кашель. 2486 02:02:50,420 --> 02:02:53,620 І у мене є три кашляє і три чхає. 2487 02:02:53,620 --> 02:02:55,990 >> І так це основний парадигма, якщо ви будете, 2488 02:02:55,990 --> 02:03:00,110 за те, як ми могли б йти про насправді реалізації програми. 2489 02:03:00,110 --> 02:03:03,220 Але давайте просто подивимося, що тепер це ми робимо все це час, 2490 02:03:03,220 --> 02:03:06,940 і те, що деякі із заключних частин позаду цієї простої команди. 2491 02:03:06,940 --> 02:03:09,620 Зрештою, ми використовували Clang як нашого компілятора. 2492 02:03:09,620 --> 02:03:11,494 Ми писали джерело код, перетворюючи його 2493 02:03:11,494 --> 02:03:12,820 за допомогою Clang в машинний код. 2494 02:03:12,820 --> 02:03:15,540 >> І ми використовуємо тільки зробити щоб полегшити наші натискання клавіш так 2495 02:03:15,540 --> 02:03:20,740 що ми не повинні пам'ятати, ці заклинання самого Clang. 2496 02:03:20,740 --> 02:03:22,640 Але що це зробити насправді робити? 2497 02:03:22,640 --> 02:03:24,750 І, в свою чергу, є те, що Clang насправді робити? 2498 02:03:24,750 --> 02:03:28,790 >> Виявляється, хоча ми спростили сьогоднішнє обговорення, сказавши, 2499 02:03:28,790 --> 02:03:33,090 ви берете вихідний код, передати його в якості вхід компілятора, який дає вам 2500 02:03:33,090 --> 02:03:35,750 вихід машини код, виявляється, є 2501 02:03:35,750 --> 02:03:37,420 кілька різних кроків всередині там. 2502 02:03:37,420 --> 02:03:41,940 І компіляція трапляється парасольку термін для цілого ряду кроків. 2503 02:03:41,940 --> 02:03:43,970 Але давайте просто дражнити на це дуже швидко. 2504 02:03:43,970 --> 02:03:48,070 >> Виявляється, що ми робимо більше речей, кожен раз, коли я запустити програму, 2505 02:03:48,070 --> 02:03:50,990 або кожен раз, коли я скомпілювати програму сьогодні. 2506 02:03:50,990 --> 02:03:55,020 Таким чином, попередня обробка відноситься до this-- нічого в програмі C, 2507 02:03:55,020 --> 02:03:58,720 як ми побачимо знову і знову, який починається з цієї хеш-символу, 2508 02:03:58,720 --> 02:04:03,320 або символ Хештег тут, означає, це директива препроцесора. 2509 02:04:03,320 --> 02:04:07,330 Це означає, що, в даному випадку, агов комп'ютер, зробити щось з цим файлом 2510 02:04:07,330 --> 02:04:09,430 перш ніж ви насправді скомпілювати мій власний код. 2511 02:04:09,430 --> 02:04:15,220 >> У цьому випадку, хеш включають є, по суті, шлях C спосіб сказати, 2512 02:04:15,220 --> 02:04:19,325 агов комп'ютер, перейдіть отримати вміст з CS50.h і вставити їх тут. 2513 02:04:19,325 --> 02:04:22,170 Гей комп'ютер, піти отримати зміст стандартного io.h, 2514 02:04:22,170 --> 02:04:24,690 всюди, де це знаходиться на жорсткий диск, вставити його тут. 2515 02:04:24,690 --> 02:04:27,390 Так що ці речі трапляються спочатку під час попередньої обробки. 2516 02:04:27,390 --> 02:04:28,880 >> І Clang робить все це для нас. 2517 02:04:28,880 --> 02:04:30,510 І це робить це так штопати швидко, ви навіть не 2518 02:04:30,510 --> 02:04:32,000 побачити чотири різних речей відбувається. 2519 02:04:32,000 --> 02:04:34,100 Але це перший такий крок. 2520 02:04:34,100 --> 02:04:35,560 >> Що насправді відбувається далі? 2521 02:04:35,560 --> 02:04:38,320 Ну, такий офіційний крок компіляції. 2522 02:04:38,320 --> 02:04:40,385 І виходить, що складання програми 2523 02:04:40,385 --> 02:04:44,060 технічно означає перехід від вихідний код, то матеріал, який ми 2524 02:04:44,060 --> 02:04:47,890 писав сьогодні, до чогось називається код збірки, щось 2525 02:04:47,890 --> 02:04:49,260 що виглядає дещо інакше. 2526 02:04:49,260 --> 02:04:51,050 >> І справді, ми можемо бачити це дуже швидко. 2527 02:04:51,050 --> 02:04:53,890 Дозвольте мені насправді піти в мій IDE. 2528 02:04:53,890 --> 02:04:58,050 Дозвольте мені йти вперед і відкрити hello.c, який найперша програма, з якою ми 2529 02:04:58,050 --> 02:04:59,120 почався сьогодні. 2530 02:04:59,120 --> 02:05:04,130 І дозвольте мені йти вперед і запустити Clang A трохи по-іншому, Clang-s, hello.c, 2531 02:05:04,130 --> 02:05:07,720 яка насправді збирається дайте мені ще один файл hello.s. 2532 02:05:07,720 --> 02:05:10,330 >> І ми, ймовірно, ніколи знову побачити цей вид коду. 2533 02:05:10,330 --> 02:05:13,030 Якщо взяти більш низький рівень Системи класу, як CS61, 2534 02:05:13,030 --> 02:05:14,920 ви побачите набагато більше з такого коду. 2535 02:05:14,920 --> 02:05:17,020 Але це мова збірки. 2536 02:05:17,020 --> 02:05:22,050 Це X86 асемблері що процесор, який лежить в основі 2537 02:05:22,050 --> 02:05:24,460 CS50 IDE насправді розуміє. 2538 02:05:24,460 --> 02:05:27,060 >> І загадково, як це робить дивіться, це щось 2539 02:05:27,060 --> 02:05:29,180 комп'ютер розуміє дуже добре. 2540 02:05:29,180 --> 02:05:30,790 Sub кв, це вичитати. 2541 02:05:30,790 --> 02:05:31,660 Там в рух. 2542 02:05:31,660 --> 02:05:35,730 >> Там дзвонить функцій тут, х ORing, рух, надбудова, поп, 2543 02:05:35,730 --> 02:05:36,430 повернення. 2544 02:05:36,430 --> 02:05:38,850 Так що є якась дуже інструкції низького рівня 2545 02:05:38,850 --> 02:05:41,280 що процесори розуміють, що Я згадував раніше. 2546 02:05:41,280 --> 02:05:43,100 Тобто те, що Intel Inside. 2547 02:05:43,100 --> 02:05:45,030 >> є моделі нулі і одиниці, що 2548 02:05:45,030 --> 02:05:51,800 зіставити ці arcanely формулювання, проте кілька добре ім'я, інструкції, 2549 02:05:51,800 --> 02:05:52,780 так би мовити. 2550 02:05:52,780 --> 02:05:54,780 Це те, що відбувається, коли компіляції коду. 2551 02:05:54,780 --> 02:05:58,560 Ви отримуєте збірки мова з нього, який 2552 02:05:58,560 --> 02:06:04,680 означає, третій крок полягає в складанні що код збірки в кінцевому рахунку, 2553 02:06:04,680 --> 02:06:09,080 машина code-- нулі і одиниці, а не текст, який ми тільки що бачили хвилину назад. 2554 02:06:09,080 --> 02:06:13,370 >> Таким чином, попередня обробка робить, що знайти і замінити, і кілька інших речей. 2555 02:06:13,370 --> 02:06:16,430 Компіляція приймає ваш джерело коду з C, вихідний код 2556 02:06:16,430 --> 02:06:18,980 що ми вже писали, в зборі код, який ми тільки що подивився на. 2557 02:06:18,980 --> 02:06:22,170 Збірка займає цю збірку код нулів і одиниць 2558 02:06:22,170 --> 02:06:24,680 що процесор дійсно буде зрозуміти, в кінці робочого дня. 2559 02:06:24,680 --> 02:06:27,630 І зв'язування є останнім кроком що відбувається через us-- знову, 2560 02:06:27,630 --> 02:06:29,830 так швидко ми не робимо навіть notice--, що говорить, 2561 02:06:29,830 --> 02:06:32,460 агов комп'ютер, взяти все нулі і одиниці, які 2562 02:06:32,460 --> 02:06:36,750 в результаті компіляції коду Давида, і його основною функцією в цьому випадку. 2563 02:06:36,750 --> 02:06:39,160 >> І гей комп'ютер, йди всі нулі і одиниці 2564 02:06:39,160 --> 02:06:42,180 що співробітники CS50 писав всередині бібліотеки CS50. 2565 02:06:42,180 --> 02:06:43,440 Змішайте ті, з Девіда. 2566 02:06:43,440 --> 02:06:46,648 І гей комп'ютер, піти отримати все нулі і ті, що хтось написав кілька років 2567 02:06:46,648 --> 02:06:47,470 тому для Printf. 2568 02:06:47,470 --> 02:06:49,880 І додати таких пристроїв в Все це, так що ми 2569 02:06:49,880 --> 02:06:52,870 отримав мої нулі і одиниці, тим нулі і одиниці персоналі CS50, в 2570 02:06:52,870 --> 02:06:55,370 то PRINTF нулі і одиниці, і все інше, що ми використовуємо. 2571 02:06:55,370 --> 02:07:00,410 >> Всі вони отримують об'єднані в одну Програма під назвою, в даному випадку, привіт. 2572 02:07:00,410 --> 02:07:03,141 Так що відтепер ми будемо просто використовувати слово компіляції. 2573 02:07:03,141 --> 02:07:06,390 І ми вважаємо цілком очевидним, що, коли ми говоримо, скомпілювати програму, то це означає, 2574 02:07:06,390 --> 02:07:08,849 агов робити попередню обробку, монтаж і зв'язок. 2575 02:07:08,849 --> 02:07:11,890 Але є насправді деякі соковиті речі там відбувається під капотом. 2576 02:07:11,890 --> 02:07:13,723 І особливо якщо ви отримати цікаву деякий час, 2577 02:07:13,723 --> 02:07:15,900 ви можете почати тикати навколо на цьому нижчому рівні. 2578 02:07:15,900 --> 02:07:19,660 Але зараз розумію, що серед на сьогоднішній день їжі додому 2579 02:07:19,660 --> 02:07:23,420 досить просто початок процесу, 2580 02:07:23,420 --> 02:07:26,700 отримання комфортно щось на зразок привіт світ. 2581 02:07:26,700 --> 02:07:29,575 Дійсно, велика частина того, що ми зробили сьогодні звичайно ж, не буде тонути в супер швидко. 2582 02:07:29,575 --> 02:07:31,491 І це займе якийсь час, і деякі практики. 2583 02:07:31,491 --> 02:07:33,864 І шанси, ви будете сортувати від того, хочуть вдарити клавіатури 2584 02:07:33,864 --> 02:07:34,780 або кричати на екрані. 2585 02:07:34,780 --> 02:07:35,880 І все це нормально. 2586 02:07:35,880 --> 02:07:38,320 Хоча, можливо, намагаюся не зробити це в бібліотеці так багато. 2587 02:07:38,320 --> 02:07:40,820 >> І в кінцевому рахунку, ви будете бути в змозі, хоча, щоб почати 2588 02:07:40,820 --> 02:07:44,580 бачачи картини, як в хорошому коді що ви написали і в помилках 2589 02:07:44,580 --> 02:07:45,370 що ви зробили. 2590 02:07:45,370 --> 02:07:48,965 І так само, як процес ставши TF або СА, як, 2591 02:07:48,965 --> 02:07:51,590 ви почнете ставати все краще і краще бачити ці моделі, 2592 02:07:51,590 --> 02:07:53,774 і просто рішення ваших власні проблеми в кінцевому рахунку. 2593 02:07:53,774 --> 02:07:56,940 У той же час, там буде багато з нас, щоб надати вам підтримку, і ви отримаєте 2594 02:07:56,940 --> 02:07:57,481 через це. 2595 02:07:57,481 --> 02:07:59,450 А в запису вікна для всіх проблем, 2596 02:07:59,450 --> 02:08:01,366 ви будете керуватися через всі команди 2597 02:08:01,366 --> 02:08:05,330 що я, звичайно, знаю, з багато практики в даний час, 2598 02:08:05,330 --> 02:08:07,380 але, можливо, прилетів над головою на даний момент. 2599 02:08:07,380 --> 02:08:08,580 І це абсолютно нормально. 2600 02:08:08,580 --> 02:08:11,230 >> Але, в кінцевому рахунку, ви збираєтеся щоб почати бачити закономірності. 2601 02:08:11,230 --> 02:08:14,260 І як тільки ви пройти всі з тупі деталі, такі як круглі дужки, 2602 02:08:14,260 --> 02:08:16,710 і фігурні дужки і крапки з комою, і речі, чесно кажучи, 2603 02:08:16,710 --> 02:08:19,360 що не на всіх інтелектуально цікавим. 2604 02:08:19,360 --> 02:08:22,690 І це не мета приймаючи будь-який вступний клас. 2605 02:08:22,690 --> 02:08:24,410 Це ідеї, які йдуть до матерії. 2606 02:08:24,410 --> 02:08:26,659 >> Це петлі, і умов, а також функції, 2607 02:08:26,659 --> 02:08:30,552 і більш потужно абстракція, і факторингова коду, 2608 02:08:30,552 --> 02:08:33,510 і хороший дизайн, і гарне стиль, і в кінцевому рахунку правильність 2609 02:08:33,510 --> 02:08:37,330 вашого коду, що в кінцевому рахунку збирається мати значення найбільше. 2610 02:08:37,330 --> 02:08:40,925 Так що на наступному тижні, ми будемо приймати ці ідеї, які ми вперше побачили в порожньому місці 2611 02:08:40,925 --> 02:08:42,800 і тепер переведені до C. І ми почнемо 2612 02:08:42,800 --> 02:08:45,740 ввести перший з реального світу домени курсу. 2613 02:08:45,740 --> 02:08:50,140 >> Ми зосередимося на світ безпеки, і більш конкретно криптографія, 2614 02:08:50,140 --> 02:08:51,980 Мистецтво дертися інформації. 2615 02:08:51,980 --> 02:08:54,000 І в числі перших проблеми ви самі 2616 02:08:54,000 --> 02:08:56,840 отримаєте писати далі граючи з деякими з синтаксису 2617 02:08:56,840 --> 02:08:59,880 і вирішуючи деякі логічні проблеми, в кінцевому рахунку, незабаром, 2618 02:08:59,880 --> 02:09:03,960 це насправді засекретити, або зашифрувати, і в кінцевому рахунку розшифрувати інформацію. 2619 02:09:03,960 --> 02:09:06,470 І все, що ми зробили сьогодні, буде досить низьким 2620 02:09:06,470 --> 02:09:09,190 рівень, тільки збирається, щоб дозволити нам взяти один, і один, 2621 02:09:09,190 --> 02:09:13,550 і ще один крок в сторону вище написання найцікавіший код ще. 2622 02:09:13,550 --> 02:09:15,050 >> Так що більше на цьому на наступному тижні. 2623 02:09:15,050 --> 02:09:17,834 2624 02:09:17,834 --> 02:09:18,762 >> [Відеовідтворення] 2625 02:09:18,762 --> 02:09:19,690 2626 02:09:19,690 --> 02:09:22,006 >> Що ви можете розповісти мені про в останній раз ви бачили його? 2627 02:09:22,006 --> 02:09:26,041 2628 02:09:26,041 --> 02:09:27,040 -Що Я можу сказати, насправді? 2629 02:09:27,040 --> 02:09:30,500 2630 02:09:30,500 --> 02:09:35,340 Я маю на увазі, це було як і будь-який інший підготовка виробництва репетиція, 2631 02:09:35,340 --> 02:09:40,510 за винятком того, що щось було, він сказав: в самому кінці, що застряг зі мною. 2632 02:09:40,510 --> 02:09:44,810 2633 02:09:44,810 --> 02:09:46,640 >> -Це Був CS50. 2634 02:09:46,640 --> 02:09:49,440 2635 02:09:49,440 --> 02:09:52,190 >> -Ось Вирізати все, відмінна робота на репетиції. 2636 02:09:52,190 --> 02:09:53,070 >> обід -Ось? 2637 02:09:53,070 --> 02:09:54,986 >> -Так, Ти і я можу захопити бутерброд небагато. 2638 02:09:54,986 --> 02:09:58,380 Дозвольте мені просто опитувати з Девід дуже швидко. 2639 02:09:58,380 --> 02:09:59,160 Девід? 2640 02:09:59,160 --> 02:10:01,260 Девід? 2641 02:10:01,260 --> 02:10:03,110 >> [КІНЕЦЬ ВОСП]