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