1 00:00:00,000 --> 00:00:10,920 >> [Odtwarzanie muzyki] 2 00:00:10,920 --> 00:00:14,680 >> DAVID J MALAN: Dobra, Witamy z powrotem do CS50. 3 00:00:14,680 --> 00:00:16,500 Jest to początek dwóch tygodni. 4 00:00:16,500 --> 00:00:18,940 Słowo od jednego z naszych przyjaciele na kampusie - 5 00:00:18,940 --> 00:00:22,620 jeśli jesteś zainteresowany, prawdopodobnie, albo obecnie lub w jakimś przyszłym okresie 6 00:00:22,620 --> 00:00:25,670 nawet, gdy bardziej komfortowe, nauczanie gimnazjalistów małe 7 00:00:25,670 --> 00:00:27,680 coś o informatyce, zrobić głowę do tego adresu URL. 8 00:00:27,680 --> 00:00:32,360 Są to w szczególności potrzeby teraz z nauczycieli, szczególnie, jeśli masz 9 00:00:32,360 --> 00:00:34,700 miał kilka ekspozycji na informatyce. 10 00:00:34,700 --> 00:00:38,060 >> Tak więc przypomnieć, że ostatni raz, wprowadziliśmy kilka typów danych w C, oraz 11 00:00:38,060 --> 00:00:40,590 może już zaczął się twój brudne ręce z nich do tej pory 12 00:00:40,590 --> 00:00:41,940 w problemie ustawione. 13 00:00:41,940 --> 00:00:43,230 I mieliśmy char. 14 00:00:43,230 --> 00:00:49,100 Tak więc w nieco technicznych, co jest char, jak znamy ją dzisiaj? 15 00:00:49,100 --> 00:00:51,050 >> Więc to jest znak, ale niech Dokładniej teraz. 16 00:00:51,050 --> 00:00:53,735 Co rozumiemy przez charakter lub indywidualne char? 17 00:00:53,735 --> 00:00:56,700 18 00:00:56,700 --> 00:00:59,500 Non-numeryczne znaków - 19 00:00:59,500 --> 00:01:00,670 więc niekoniecznie. 20 00:01:00,670 --> 00:01:04,580 Okazuje się, że nawet numery, nawet interpunkcyjne i litery są 21 00:01:04,580 --> 00:01:06,980 przedstawiciele z tych danych typ znany jako char. 22 00:01:06,980 --> 00:01:09,440 Więc to nie jest koniecznie w kolejności alfabetycznej. 23 00:01:09,440 --> 00:01:11,100 Tak? 24 00:01:11,100 --> 00:01:12,275 >> Więc to jest ASCII. 25 00:01:12,275 --> 00:01:15,510 Więc jeśli uważasz, że powrót do tygodnia zera, gdy mieliśmy bajt wolontariuszy 26 00:01:15,510 --> 00:01:19,150 przyjść i albo trzymać ręce w górę czy nie, oni reprezentowane bitów. 27 00:01:19,150 --> 00:01:22,450 Ale wspólnie jako grupa ośmiu, stanowiły one bajt. 28 00:01:22,450 --> 00:01:26,030 I wprowadziliśmy pojęcie ASCII w tym wykładzie, który po prostu jest 29 00:01:26,030 --> 00:01:28,170 mapowanie między cyframi i literami. 30 00:01:28,170 --> 00:01:32,010 I ASCII zastosowań, jak ci ludzie dorozumianych, osiem bitów 31 00:01:32,010 --> 00:01:33,660 do reprezentacji znaku. 32 00:01:33,660 --> 00:01:36,890 >> Więc w związku z tym jeżeli osiem bitów może każdy się na jednej z dwóch wartości - 33 00:01:36,890 --> 00:01:38,010 zero lub jeden - 34 00:01:38,010 --> 00:01:40,280 To znaczy, że były dwie możliwości dla tej osoby - 35 00:01:40,280 --> 00:01:41,230 zero lub jeden - 36 00:01:41,230 --> 00:01:44,070 dwie osoby, w tym dwa dla tego osób, dwa dla tego jednego. 37 00:01:44,070 --> 00:01:47,450 Tak więc w sumie dwa razy dwa razy dwa razy dwa razy dwa - 38 00:01:47,450 --> 00:01:49,700 więc dwa ósme w sumie. 39 00:01:49,700 --> 00:01:54,320 Więc jest łączna liczba znaków 256 możliwe, że można 40 00:01:54,320 --> 00:01:55,750 stanowią z ośmiu bitów. 41 00:01:55,750 --> 00:01:59,210 >> Teraz, ci z was, którzy mówią Asian języki mogą wiedzieć, że jest więcej 42 00:01:59,210 --> 00:02:02,620 znaki w świecie, niż tylko Jak i ze śniadaniem i Cs i Ds. 43 00:02:02,620 --> 00:02:06,130 I rzeczywiście, ASCII nie wystarczyć wiele języków świata. 44 00:02:06,130 --> 00:02:07,760 Ale o tym innym razem. 45 00:02:07,760 --> 00:02:11,240 Na razie wiemy, że w C, jeśli chcesz do reprezentowania nas, kawałek 46 00:02:11,240 --> 00:02:15,780 interpunkcja, lub po prostu coś character w przyrodzie, używamy char. 47 00:02:15,780 --> 00:02:18,240 I to jest jeden bajt lub osiem bitów. 48 00:02:18,240 --> 00:02:19,690 >> Jak o int? 49 00:02:19,690 --> 00:02:20,780 Cóż, int jest liczbą całkowitą. 50 00:02:20,780 --> 00:02:23,175 Ile bitów, jeśli przypomnieć, był liczbą całkowitą zwykle? 51 00:02:23,175 --> 00:02:25,930 52 00:02:25,930 --> 00:02:27,512 Przypomnijmy ktoś? 53 00:02:27,512 --> 00:02:29,600 Więc jest to zazwyczaj 32. 54 00:02:29,600 --> 00:02:32,120 To naprawdę zależy od komputera że używasz. 55 00:02:32,120 --> 00:02:35,770 Ale w urządzeniu, w wielu komputery, to 32 bity lub cztery 56 00:02:35,770 --> 00:02:37,140 bajty - osiem razy cztery. 57 00:02:37,140 --> 00:02:39,790 I ints służą tylko do przechowywania numerów, albo negatywne, 58 00:02:39,790 --> 00:02:41,610 dodatnia lub zero. 59 00:02:41,610 --> 00:02:45,250 >> A jeśli masz 32 bitów i można tylko troska o liczb dodatnich, może 60 00:02:45,250 --> 00:02:48,960 stadiony ktoś ile to możliwe liczbami całkowitymi mogą reprezentować z komputera 61 00:02:48,960 --> 00:02:51,820 zera w górę? 62 00:02:51,820 --> 00:02:56,130 Byłoby więc dwa do 32, która to mniej więcej czterech miliardów. 63 00:02:56,130 --> 00:02:59,720 Więc te uprawnienia dwóch będą tematy powracające w informatyce. 64 00:02:59,720 --> 00:03:03,930 Jak zobaczymy, że są bardzo wygodne pracować, nawet jeśli nie do końca 65 00:03:03,930 --> 00:03:05,790 łatwe do matematyki w głowie. 66 00:03:05,790 --> 00:03:07,000 >> Więc mówimy mniej więcej czterech miliardów. 67 00:03:07,000 --> 00:03:08,620 Teraz, długo długo - 68 00:03:08,620 --> 00:03:09,770 możesz rodzaju przypuszczenie. 69 00:03:09,770 --> 00:03:10,480 To dłużej niż int. 70 00:03:10,480 --> 00:03:12,440 Ile bitów? 71 00:03:12,440 --> 00:03:14,250 Tak więc 64 bitów lub ośmiu bajtów. 72 00:03:14,250 --> 00:03:17,480 To po prostu oznacza, że ​​można reprezentować jeszcze większe liczby, większe pozytywne lub 73 00:03:17,480 --> 00:03:19,160 większe liczby ujemne. 74 00:03:19,160 --> 00:03:20,060 >> A co unosić? 75 00:03:20,060 --> 00:03:22,260 To zmiennoprzecinkowe wartość 32 bitów. 76 00:03:22,260 --> 00:03:25,180 To tylko liczba rzeczywista, coś z przecinkiem. 77 00:03:25,180 --> 00:03:30,100 Ale jeśli zamiast potrzebujesz więcej miejsca po przecinku lub chcesz 78 00:03:30,100 --> 00:03:33,720 reprezentować większą liczbę z niektórymi frakcja po nim, można użyć 79 00:03:33,720 --> 00:03:36,260 double, która jest 64 bitów. 80 00:03:36,260 --> 00:03:38,240 >> Ale jest ciekawa wynos tutaj. 81 00:03:38,240 --> 00:03:42,890 Tak więc, jeśli ints są ograniczone przez 32 bitów i nawet długie wyroby długie są ograniczone przez 64 82 00:03:42,890 --> 00:03:46,180 bitów, że rodzaj nasuwa się pytanie, co, jeśli rzeczywiście chcesz się liczyć 83 00:03:46,180 --> 00:03:48,790 wyższa niż 4000000000 do int? 84 00:03:48,790 --> 00:03:50,330 Cóż, po prostu użyć long long. 85 00:03:50,330 --> 00:03:54,200 Ale co jeśli chcesz liczyć wyższe niż dwa do 64, lub dać? 86 00:03:54,200 --> 00:03:55,810 >> Teraz, to ogromna liczba. 87 00:03:55,810 --> 00:03:59,250 Ale w końcu, to może faktycznie dbać o tego rodzaju wartości, 88 00:03:59,250 --> 00:04:03,070 szczególnie jeśli korzystasz z bazy danych i zaczynają zbierać się dużo, dużo 89 00:04:03,070 --> 00:04:06,190 i dużo danych i przypisanie wyjątkowy numery do każdego elementu danych. 90 00:04:06,190 --> 00:04:07,430 Więc niby problem. 91 00:04:07,430 --> 00:04:10,700 I podobnie, z zmiennoprzecinkowych wartości - pływaki lub dwuosobowe - 92 00:04:10,700 --> 00:04:14,290 jeśli masz tylko skończoną liczbę bitów, ile łączna liczba mogłeś 93 00:04:14,290 --> 00:04:16,980 może reprezentować? 94 00:04:16,980 --> 00:04:19,540 >> Cóż, jest to mniej oczywiste, gdy obejmować dziesiętnego. 95 00:04:19,540 --> 00:04:20,899 Ale to na pewno skończona. 96 00:04:20,899 --> 00:04:24,390 Jeśli masz skończoną liczbę bitów, skończona liczba ludzi, skończony 97 00:04:24,390 --> 00:04:27,350 ilość żarówek, z pewnością można stanowią jedynie skończoną liczbę 98 00:04:27,350 --> 00:04:28,510 zmiennoprzecinkowych. 99 00:04:28,510 --> 00:04:33,170 Ale ile liczb rzeczywistych jest ich na świecie? 100 00:04:33,170 --> 00:04:33,680 Istnieje nieskończona. 101 00:04:33,680 --> 00:04:37,280 Więc to jest trochę problem, bo nie mają nieskończoną ilość 102 00:04:37,280 --> 00:04:39,970 pamięci lub pamięci RAM wewnątrz naszych komputerach. 103 00:04:39,970 --> 00:04:41,780 Więc niektóre trudne rzeczy mogą się zdarzyć. 104 00:04:41,780 --> 00:04:43,900 >> Więc idź naprzód i spróbować Wyrażając to tutaj. 105 00:04:43,900 --> 00:04:46,240 Pozwólcie mi iść do przodu i otworzyć gedit. 106 00:04:46,240 --> 00:04:50,360 Mam zamiar iść do przodu i zapisać plik nazywany "floats0.c" po prostu być 107 00:04:50,360 --> 00:04:54,630 zgodne z przykładem, który jest dostępne w Internecie, jeśli chcesz. 108 00:04:54,630 --> 00:04:58,080 I zamierzam iść do przodu i zdefiniować w następujący sposób - 109 00:04:58,080 --> 00:05:01,540 Mam zamiar iść dalej i powiedzieć, int Głównym nieważne, jak często robimy. 110 00:05:01,540 --> 00:05:07,190 >> A potem w tym programie, mam zamiar Oświadczam sobie pływaka, więc 32-bit 111 00:05:07,190 --> 00:05:09,700 zmienna o nazwie f, arbitralnie. 112 00:05:09,700 --> 00:05:13,910 A potem idę do przechowywania w nim Nie wiem, jedną dziesiątą, więc 0,1. 113 00:05:13,910 --> 00:05:16,590 Więc idę do wyrażenia, że ​​jako jeden podzielone przez 10, który jest idealnie 114 00:05:16,590 --> 00:05:17,790 uzasadnione w C. 115 00:05:17,790 --> 00:05:20,460 >> A potem w drugiej linii, po prostu Aby wydrukować tę wartość. 116 00:05:20,460 --> 00:05:22,950 Więc przypominam, że możemy użyć zaznajomieni printf. 117 00:05:22,950 --> 00:05:25,420 Nie chcemy, aby użyć% i do wew. 118 00:05:25,420 --> 00:05:28,360 Chcemy wykorzystać% f dla pływaka. 119 00:05:28,360 --> 00:05:33,080 A potem mam zamiar zrobić odwrotny ukośnik n, zamknij cudzysłów, przecinek, f, średnik. 120 00:05:33,080 --> 00:05:34,400 >> Tak tu jest mój program. 121 00:05:34,400 --> 00:05:35,820 Jest już jeden błąd. 122 00:05:35,820 --> 00:05:38,640 Czy ktoś, dla kogo ta kliknięciu już chcą wskazać co najmniej 123 00:05:38,640 --> 00:05:40,220 jeden błąd zrobiłem? 124 00:05:40,220 --> 00:05:42,470 Tak? 125 00:05:42,470 --> 00:05:42,800 Tak. 126 00:05:42,800 --> 00:05:47,860 Zapomniałam "# include" na top, ale objawem, który gdy próbuję 127 00:05:47,860 --> 00:05:50,490 skompilować to będzie, że Kompilator będzie na mnie krzyczeć, 128 00:05:50,490 --> 00:05:52,770 mówiąc niezdefiniowany symbol lub coś w tym celu. 129 00:05:52,770 --> 00:05:55,360 Nie rozumiem czegoś jak printf. 130 00:05:55,360 --> 00:05:59,380 >> Więc mam zamiar zrobić "# include ", Zapisz plik. 131 00:05:59,380 --> 00:06:00,400 A teraz jest w lepszej formie. 132 00:06:00,400 --> 00:06:02,690 Ale mam też zamiar zwrócić obecnie jeden nowy szczegół dziś. 133 00:06:02,690 --> 00:06:08,620 Oprócz określenia miejsca Posiadacze takich jak% f% i% s, można 134 00:06:08,620 --> 00:06:12,320 czasami wpływać na zachowanie tego symbolu zastępczego. 135 00:06:12,320 --> 00:06:15,540 Na przykład, w przypadku szyby wskaż wartość, jeśli tylko chcesz 136 00:06:15,540 --> 00:06:22,200 na wyświetlanie jednego miejsca dziesiętnego po Okres, mogę rzeczywiście zrobić 0.1f. 137 00:06:22,200 --> 00:06:26,830 Tak więc, innymi słowy, że oddzielenie f i znak procent z 0,1, po prostu 138 00:06:26,830 --> 00:06:30,200 mówi printf, możesz mieć cały Kilka liczb po przecinku 139 00:06:30,200 --> 00:06:30,930 punkt dla mnie. 140 00:06:30,930 --> 00:06:32,870 Ale chcę tylko zobaczyć jeden z nich. 141 00:06:32,870 --> 00:06:36,280 >> Więc mam zamiar iść dalej teraz i oszczędzaj ten program, wejdź do mojego terminalu 142 00:06:36,280 --> 00:06:41,870 okno, i mam zamiar iść do przodu i make 0 pływaka, wprowadź. 143 00:06:41,870 --> 00:06:44,930 Widzę, że nieco tajemniczy wiersz zacznie więcej sensu jak my 144 00:06:44,930 --> 00:06:46,900 drażnić go od siebie w tym tygodniu i następnym. 145 00:06:46,900 --> 00:06:50,480 Teraz mam zamiar iść do przodu i uruchomić zera pływaka. 146 00:06:50,480 --> 00:06:52,020 I, cholera. 147 00:06:52,020 --> 00:06:54,880 >> Więc jest jeszcze jeden błąd tutaj z jakiegoś powodu. 148 00:06:54,880 --> 00:07:02,490 Jestem pewien, że jedna dziesiąta lub jedna dzieli się przez 10, nie jest 0,0. 149 00:07:02,490 --> 00:07:04,590 Może po prostu nie jestem patrząc w wystarczającej ilości cyfr. 150 00:07:04,590 --> 00:07:08,580 Dlaczego więc nie mogę powiedzieć, dwa 0,2 zobaczyć dwa miejsc po przecinku, a nie tylko jeden. 151 00:07:08,580 --> 00:07:11,810 Pozwól mi wrócić do mojego okna terminala tutaj i uderzył się kilka razy do 152 00:07:11,810 --> 00:07:12,840 zobacz moją historię. 153 00:07:12,840 --> 00:07:15,910 Rób unosić zera znowu, a następnie ponownie. 154 00:07:15,910 --> 00:07:17,730 A teraz wprowadzić. 155 00:07:17,730 --> 00:07:20,000 >> A teraz jestem całkiem pewien, że to jest złe. 156 00:07:20,000 --> 00:07:23,030 I mógłbym zrobić trzy i cztery, a ja jestem prawdopodobnie będzie utrzymywać widząc zera. 157 00:07:23,030 --> 00:07:24,880 Więc gdzie jest błąd? 158 00:07:24,880 --> 00:07:27,910 Jeden podzielone przez 10 powinna wynosić 0,1. 159 00:07:27,910 --> 00:07:30,310 Ktoś chce brać stab w jakich Podstawowym problemem jest to,? 160 00:07:30,310 --> 00:07:32,400 Tak? 161 00:07:32,400 --> 00:07:33,420 Oboje są liczbami całkowitymi. 162 00:07:33,420 --> 00:07:33,920 Więc co? 163 00:07:33,920 --> 00:07:37,820 Więc z jednej podzielonej przez 10, to to, co robię w arytmetyce. 164 00:07:37,820 --> 00:07:41,185 I mam 0,1. 165 00:07:41,185 --> 00:07:41,660 >> Tak. 166 00:07:41,660 --> 00:07:43,240 I tak jest w istocie, że problem. 167 00:07:43,240 --> 00:07:46,700 Jeśli wziąć liczbę całkowitą w komputerze i podzielić go przez inną liczbę całkowitą, 168 00:07:46,700 --> 00:07:50,430 komputer domyślnie będzie Zakładam, że chcesz liczbę całkowitą. 169 00:07:50,430 --> 00:07:54,620 Problem jednak, oczywiście, jest że 0,1 nie jest liczbą całkowitą. 170 00:07:54,620 --> 00:07:55,680 To jest liczba rzeczywista. 171 00:07:55,680 --> 00:07:59,610 A więc co robi komputer przez Domyślnie jest to po prostu wyrzuca 172 00:07:59,610 --> 00:08:01,070 wszystko po przecinku. 173 00:08:01,070 --> 00:08:03,380 Nie zaokrąglić w dół lub w górę per se. 174 00:08:03,380 --> 00:08:06,480 To po prostu wyrzuca wszystko po przecinku. 175 00:08:06,480 --> 00:08:07,430 A teraz to ma sens. 176 00:08:07,430 --> 00:08:09,740 Bo teraz jesteśmy wyraźnie pozostało zero. 177 00:08:09,740 --> 00:08:10,250 >> Ale chwileczkę. 178 00:08:10,250 --> 00:08:11,840 Nie widzę int zero. 179 00:08:11,840 --> 00:08:14,910 Jestem rzeczywiście widząc 0,00. 180 00:08:14,910 --> 00:08:16,340 Więc w jaki sposób pogodzić to teraz? 181 00:08:16,340 --> 00:08:22,850 Jeśli ktoś dzieli się przez 10 wynosi zero, ale jestem widząc 0,00, gdzie jest to miejsce 182 00:08:22,850 --> 00:08:24,250 konwertowane z powrotem do liczby rzeczywistej? 183 00:08:24,250 --> 00:08:25,500 Tak. 184 00:08:25,500 --> 00:08:29,850 185 00:08:29,850 --> 00:08:30,630 Dokładnie. 186 00:08:30,630 --> 00:08:35,600 >> Tak się tu w wierszu pięć, kiedy faktycznie przechowywanie, że 0.1, która jest następnie 187 00:08:35,600 --> 00:08:39,549 obcięty na zero, wewnątrz pływaka, to skutecznie równoważne 188 00:08:39,549 --> 00:08:42,100 przechowywania nie go jako int, ale rzeczywiście, jak pływaka. 189 00:08:42,100 --> 00:08:46,540 Co więcej, jestem następnie przy użyciu printf wyraźnie wydrukować tę liczbę do dwóch 190 00:08:46,540 --> 00:08:49,740 miejsc po przecinku, mimo że może faktycznie nie być dowolny. 191 00:08:49,740 --> 00:08:51,020 >> Więc to jest do bani, tak? 192 00:08:51,020 --> 00:08:53,640 Podobno nie można zrobić matematyki, co najmniej na tym poziomie 193 00:08:53,640 --> 00:08:55,600 precyzja, w komputerze. 194 00:08:55,600 --> 00:08:56,930 Ale na pewno nie jest rozwiązaniem. 195 00:08:56,930 --> 00:09:00,410 Co Najprostszą mogliśmy być może zrobić, choćby intuicyjnie, żeby 196 00:09:00,410 --> 00:09:01,130 rozwiązać ten problem? 197 00:09:01,130 --> 00:09:02,380 Tak? 198 00:09:02,380 --> 00:09:04,700 199 00:09:04,700 --> 00:09:06,574 Włącz liczb całkowitych do - 200 00:09:06,574 --> 00:09:06,976 tak. 201 00:09:06,976 --> 00:09:10,420 Nawet jeśli nie jestem pewien, co jest naprawdę dzieje się tutaj, jeśli 202 00:09:10,420 --> 00:09:13,440 zasadniczo ma zrobić z nich zarówno jako wskazówki, dobrze, dlaczego nie mogę 203 00:09:13,440 --> 00:09:18,230 sprawiają, że 10,0, co to 1.0, ponownie zapisać plik. 204 00:09:18,230 --> 00:09:20,990 Pozwólcie mi iść z powrotem do Dno i rekompilacji. 205 00:09:20,990 --> 00:09:23,030 Pozwól, że teraz ponownie uruchomić. 206 00:09:23,030 --> 00:09:23,420 A tam - 207 00:09:23,420 --> 00:09:27,690 teraz mam moją jedną dziesiątą reprezentowane 0,10. 208 00:09:27,690 --> 00:09:28,420 >> Dobrze. 209 00:09:28,420 --> 00:09:29,220 Tak, że nie jest źle. 210 00:09:29,220 --> 00:09:31,730 I pozwól mi wskazać jeden inny sposób moglibyśmy rozwiązać ten. 211 00:09:31,730 --> 00:09:35,580 Pozwól, że faktycznie toczą się w czasie kiedy mieliśmy to jeden 212 00:09:35,580 --> 00:09:36,680 dziesiątą chwilą. 213 00:09:36,680 --> 00:09:40,800 I pozwól mi iść do przodu i ponownie zapisać ten plik w pliku o innej nazwie, tylko do 214 00:09:40,800 --> 00:09:41,750 mieć trochę kontrolny. 215 00:09:41,750 --> 00:09:43,450 Więc to było w wersji jedno. 216 00:09:43,450 --> 00:09:45,520 A teraz pozwól mi iść do przodu i zrobić jeszcze jedną wersję. 217 00:09:45,520 --> 00:09:48,540 Nazwijmy tę wersję dwa zera indeksowane. 218 00:09:48,540 --> 00:09:51,280 >> I mam zamiar zamiast robić to - wiesz co? 219 00:09:51,280 --> 00:09:54,400 Dodawanie kropki zerowy działa w tym przypadku. 220 00:09:54,400 --> 00:09:56,060 Ale załóżmy, że jeden z nich zmienne. 221 00:09:56,060 --> 00:09:57,680 Podobno 10 były zmienne. 222 00:09:57,680 --> 00:10:00,680 Innymi słowy, załóżmy, że nie mogłem tylko hard-code 0,0 na koniec 223 00:10:00,680 --> 00:10:02,340 tego wyrażenia arytmetycznego. 224 00:10:02,340 --> 00:10:05,820 Cóż, może faktycznie coś zrobić w nawiasach nazywa odlewania. 225 00:10:05,820 --> 00:10:11,920 Mogę rzucić tę liczbę całkowitą 10 do pływaka, i mogę rzucić, że jedną z liczb całkowitych 226 00:10:11,920 --> 00:10:12,800 unosić się, jak dobrze. 227 00:10:12,800 --> 00:10:17,190 Następnie math, że zamierza zrobić jest skutecznie 1,0 podzielone przez 10,0, 228 00:10:17,190 --> 00:10:19,250 wynik, który idzie wf, jak wcześniej. 229 00:10:19,250 --> 00:10:26,130 Jeśli więc skompilować to jako make pływaków 2, a teraz pływa 2, mam same 230 00:10:26,130 --> 00:10:27,020 odpowiedzi, jak również. 231 00:10:27,020 --> 00:10:29,640 >> Więc jest to dość wymyślony przykład, rozwiązać ten problem 232 00:10:29,640 --> 00:10:31,400 wprowadzając odlewu. 233 00:10:31,400 --> 00:10:34,410 Ale na ogół, odlewanie będzie potężna rzecz, szczególnie dla 234 00:10:34,410 --> 00:10:38,180 Problem ustawić dwa w ciągu tygodnia, kiedy chcesz przekonwertować jeden rodzaj danych, aby 235 00:10:38,180 --> 00:10:41,800 drugiego, że na koniec dnia reprezentowane są w taki sam sposób. 236 00:10:41,800 --> 00:10:44,970 Na koniec dnia, każdy pojedynczy rzeczą, rozmawialiśmy o tej pory jest 237 00:10:44,970 --> 00:10:46,710 zaledwie ints pod maską. 238 00:10:46,710 --> 00:10:48,950 A jeśli to zbyt niski poziom dla ty, to tylko numery 239 00:10:48,950 --> 00:10:49,750 pod maską. 240 00:10:49,750 --> 00:10:52,850 Nawet znaki znów przywołać od zera tygodni, są numery 241 00:10:52,850 --> 00:10:53,990 pod maską. 242 00:10:53,990 --> 00:10:57,240 >> To znaczy, można konwertować pomiędzy różne rodzaje numerów jeśli 243 00:10:57,240 --> 00:10:58,060 oni są tylko bity. 244 00:10:58,060 --> 00:11:01,020 Możemy konwertować pomiędzy numerami i litery, czy są po prostu 245 00:11:01,020 --> 00:11:02,580 bitów, i odwrotnie. 246 00:11:02,580 --> 00:11:07,170 I odlewania, w ten sposób jest mechanizm programowania, który pozwala na siłę 247 00:11:07,170 --> 00:11:10,970 zmiana jednego typu danych na inny. 248 00:11:10,970 --> 00:11:14,570 Niestety, nie jest, jak proste, jak może chciał. 249 00:11:14,570 --> 00:11:19,220 >> Mam zamiar wrócić do pływaków 1, którym było prostsze i bardziej 250 00:11:19,220 --> 00:11:22,830 proste jeden z 0,0 dodany do siebie. 251 00:11:22,830 --> 00:11:25,260 I tak jak szybki Refresher, pozwól mi iść do przodu i ponownie skompilować 252 00:11:25,260 --> 00:11:27,670 tego uczynić pływaków 2 - 253 00:11:27,670 --> 00:11:30,300 Przepraszam, to jest uczynić pływaków 1. 254 00:11:30,300 --> 00:11:32,050 A teraz uruchom pływaków 1. 255 00:11:32,050 --> 00:11:34,810 A w dole, zawiadomienia że rzeczywiście dostać 0,1. 256 00:11:34,810 --> 00:11:36,165 Tak, problem został rozwiązany. 257 00:11:36,165 --> 00:11:37,280 >> Ale jeszcze nie teraz. 258 00:11:37,280 --> 00:11:40,000 Jestem teraz będzie trochę ciekawy, i mam zamiar wrócić do mojego 259 00:11:40,000 --> 00:11:41,620 printf i powiedziałeś, wiesz co? 260 00:11:41,620 --> 00:11:44,090 Chciałbym potwierdzić, że jest naprawdę jedną dziesiątą. 261 00:11:44,090 --> 00:11:47,890 I będę chciał to zobaczyć do, powiedzmy, pięć miejsc po przecinku. 262 00:11:47,890 --> 00:11:48,570 To nie problem. 263 00:11:48,570 --> 00:11:52,020 Zmienić dwa do pięciu, I ponownie skompilować z make. 264 00:11:52,020 --> 00:11:53,770 I ponownie uruchomić go jak pływa 1. 265 00:11:53,770 --> 00:11:54,990 Szukam dobre. 266 00:11:54,990 --> 00:11:58,570 Moje testy sprawdzające może skończyć tam, ale Dostaję trochę bardziej ryzykowny. 267 00:11:58,570 --> 00:12:00,330 Zamierzam zmienić 0,5 do 0,10. 268 00:12:00,330 --> 00:12:03,440 Chcę zobaczyć 10 cyfr po miejsce po przecinku. 269 00:12:03,440 --> 00:12:09,060 >> I zamierzam iść do przodu i ponownie skompilować to i ponownie płynie 1. 270 00:12:09,060 --> 00:12:13,060 I rodzaj żalu po to przetestowane dalej, bo moja matematyka nie jest tak 271 00:12:13,060 --> 00:12:14,320 skorygować już wydaje. 272 00:12:14,320 --> 00:12:15,630 Ale zaraz, może to jest po prostu przypadkiem. 273 00:12:15,630 --> 00:12:17,810 Być może komputer działa trochę dziwne. 274 00:12:17,810 --> 00:12:21,810 Pozwólcie mi iść do przodu i robić 20 punktów po przecinku i upewnić się, że wiem, 275 00:12:21,810 --> 00:12:22,540 jak zrobić matematykę. 276 00:12:22,540 --> 00:12:23,460 Wiem, jak zaprogramować. 277 00:12:23,460 --> 00:12:26,960 Marka pływaków 1, ponownie skompilować i cholery. 278 00:12:26,960 --> 00:12:31,110 To jest bardzo, bardzo się daleko od znaku. 279 00:12:31,110 --> 00:12:32,490 >> Więc co tu się dzieje? 280 00:12:32,490 --> 00:12:36,050 Intuicyjnie, na podstawie naszych założeń wcześniej o wielkości typów danych, 281 00:12:36,050 --> 00:12:38,040 co musi się dziać tutaj pod maską? 282 00:12:38,040 --> 00:12:39,290 Tak? 283 00:12:39,290 --> 00:12:43,000 284 00:12:43,000 --> 00:12:43,590 Dokładnie. 285 00:12:43,590 --> 00:12:46,480 Jeśli chcesz, to dużo precyzji i to kawał precyzji - 286 00:12:46,480 --> 00:12:48,770 20 liczb po przecinku. 287 00:12:48,770 --> 00:12:51,990 Nie można być może reprezentować dowolna ilość, chyba że masz 288 00:12:51,990 --> 00:12:52,930 dowolna liczba bitów. 289 00:12:52,930 --> 00:12:54,190 Ale my nie. 290 00:12:54,190 --> 00:12:57,200 Dla pływaka, mamy tylko 32 bitów. 291 00:12:57,200 --> 00:13:02,260 >> Tak więc, jeśli 32 bity mogą być przesuwane w sposób - tak jak naszych ludzi na, etap 292 00:13:02,260 --> 00:13:05,780 ręce w górę lub w dół - w skończonej liczbie sposobów, nie tylko skończona liczba 293 00:13:05,780 --> 00:13:08,640 liczb rzeczywistych można reprezentować z tych bitów. 294 00:13:08,640 --> 00:13:10,500 I tak w końcu komputer będzie miał do 295 00:13:10,500 --> 00:13:11,730 rozpocząć na skróty. 296 00:13:11,730 --> 00:13:15,500 Komputer może ukryć te dane z nami na trochę czasu. 297 00:13:15,500 --> 00:13:18,880 Ale jeśli zaczniemy szturchanie na liczby i szuka dalej i dalej na 298 00:13:18,880 --> 00:13:23,220 końcowe cyfry w liczbie całkowitej, wtedy zaczynamy widzieć, że jest to 299 00:13:23,220 --> 00:13:26,480 faktycznie zbliżenie Pomysł jednej dziesiątej. 300 00:13:26,480 --> 00:13:29,860 >> I tak okazuje się, tragicznie, nie nieskończenie wiele liczb 301 00:13:29,860 --> 00:13:35,060 nie możemy reprezentować właśnie w komputer, co najmniej o skończonej 302 00:13:35,060 --> 00:13:38,030 liczba bitów, skończony ilość pamięci RAM. 303 00:13:38,030 --> 00:13:41,210 Teraz niestety, czasami ma konsekwencje w świecie rzeczywistym. 304 00:13:41,210 --> 00:13:45,980 Jeśli ludzie nie bardzo to doceniam lub rodzaj za pewnik fakt, 305 00:13:45,980 --> 00:13:48,310 że ich komputer będzie po prostu robić to, co mówią to zrobić, i nie 306 00:13:48,310 --> 00:13:51,430 rozumiem tych głównych szczegóły reprezentacyjne - 307 00:13:51,430 --> 00:13:55,290 które, szczerze mówiąc, w niektórych językach są niewidocznymi dla użytkownika, w przeciwieństwie do C - 308 00:13:55,290 --> 00:13:56,500 złe rzeczy mogą się zdarzyć. 309 00:13:56,500 --> 00:13:58,650 >> I co ja myślałem, że my jest zrobić krok do tyłu. 310 00:13:58,650 --> 00:14:00,420 I to jest o osiem minut video. 311 00:14:00,420 --> 00:14:04,200 Jest emitowany kilka lat temu, i to daje wgląd w rzeczywistości, co może pójść 312 00:14:04,200 --> 00:14:09,290 źle, gdy pod-doceniam to rodzaje informacji w bardzo nazbyt 313 00:14:09,290 --> 00:14:10,080 prawdziwy świat. 314 00:14:10,080 --> 00:14:12,965 Gdybyśmy mogli przyciemnić światła w ciągu kilku minut. 315 00:14:12,965 --> 00:14:14,360 >> SPEAKER 1: Wracamy do inżynierii 316 00:14:14,360 --> 00:14:17,160 katastrofy na Modern Marvels. 317 00:14:17,160 --> 00:14:18,680 >> Komputery - 318 00:14:18,680 --> 00:14:21,340 my wszyscy zaakceptowaliśmy często frustrujące problemy 319 00:14:21,340 --> 00:14:23,170 że iść z nimi. 320 00:14:23,170 --> 00:14:27,570 Robaki, wirusy i usterki oprogramowania to małe ceny do zapłaty za 321 00:14:27,570 --> 00:14:28,960 convenience. 322 00:14:28,960 --> 00:14:32,040 Ale w high-tech i high-speed wojskowych i program kosmiczny 323 00:14:32,040 --> 00:14:38,650 aplikacje, najmniejszy problemowe można powiększać do katastrofy. 324 00:14:38,650 --> 00:14:44,480 >> W dniu 4 czerwca 1996 roku naukowcy gotowi uruchomić bezzałogowy Ariane 5 rakiet. 325 00:14:44,480 --> 00:14:48,700 To niósł satelitów naukowych zaprojektowany, aby dokładnie ustalić, jak 326 00:14:48,700 --> 00:14:53,250 ziemskie pole magnetyczne oddziałuje z wiatrami słonecznymi. 327 00:14:53,250 --> 00:14:57,540 Rakieta została zbudowana na europejski Agencja Kosmiczna i podniesiona z jego 328 00:14:57,540 --> 00:14:59,906 Obiekt na wybrzeżu z Gujany Francuskiej. 329 00:14:59,906 --> 00:15:03,660 >> JACK GANSSLE: Na około 37 sekund do lotu, po raz pierwszy zauważyłem, 330 00:15:03,660 --> 00:15:04,910 coś się dzieje źle. 331 00:15:04,910 --> 00:15:08,130 Dysze były skręcie w sposób, że naprawdę nie powinno. 332 00:15:08,130 --> 00:15:12,380 Około 40 sekund do lotu, wyraźnie pojazd był w tarapatach. 333 00:15:12,380 --> 00:15:14,400 I to jest, gdy się decyzja, aby je zniszczyć. 334 00:15:14,400 --> 00:15:18,520 Ds. bezpieczeństwa zakres, z olbrzymie wnętrzności, nacisnął przycisk, 335 00:15:18,520 --> 00:15:23,900 wysadzili rakiety, zanim mógł stanowić zagrożenie dla bezpieczeństwa publicznego. 336 00:15:23,900 --> 00:15:27,810 >> SPEAKER 1: To był dziewiczy rejs z Ariane 5, oraz zniszczenia 337 00:15:27,810 --> 00:15:32,020 odbyło się ze względu na wbudowany skazą w rakiety oprogramowania. 338 00:15:32,020 --> 00:15:33,980 >> JACK GANSSLE: problem w Ariane było to, że liczba 339 00:15:33,980 --> 00:15:36,390 że wymagane 64 bitów do wyrażenia. 340 00:15:36,390 --> 00:15:39,420 I chcieli przekształcić w ilości 16-bitowym. 341 00:15:39,420 --> 00:15:43,130 Zakładali, że liczba nigdy nie było będzie bardzo duża, że ​​większość 342 00:15:43,130 --> 00:15:46,810 te cyfry w wersji 64-bitowej Numer były zera. 343 00:15:46,810 --> 00:15:48,270 Byli w błędzie. 344 00:15:48,270 --> 00:15:51,380 >> SPEAKER 1: niezdolność jednym programie Program do przyjęcia tego rodzaju 345 00:15:51,380 --> 00:15:55,350 Numer generowany przez inny był u podstaw niepowodzenia. 346 00:15:55,350 --> 00:15:59,970 Tworzenie oprogramowania stał się bardzo kosztowną częścią nowej technologii. 347 00:15:59,970 --> 00:16:03,980 Ariane 4 rakiety były bardzo , więc w znacznej części oprogramowania 348 00:16:03,980 --> 00:16:07,480 stworzony przez to również stosowany w Ariane 5. 349 00:16:07,480 --> 00:16:11,980 >> PHILIP COYLE: Podstawowym problemem było że Ariane 5 był szybszy, 350 00:16:11,980 --> 00:16:13,720 przyspieszyć szybciej. 351 00:16:13,720 --> 00:16:17,250 I oprogramowanie nie miał stanowił, że. 352 00:16:17,250 --> 00:16:20,770 >> SPEAKER 1: zniszczenie rakiety była ogromna katastrofa finansowa, 353 00:16:20,770 --> 00:16:24,200 Wszystkie z powodu błędu oprogramowania minut. 354 00:16:24,200 --> 00:16:27,820 Ale to nie był pierwszy raz dane Problemy konwersji był nękany nowoczesny 355 00:16:27,820 --> 00:16:30,620 rocket technologii. 356 00:16:30,620 --> 00:16:34,480 >> JACK GANSSLE: W 1991 roku, wraz z rozpoczęciem pierwszej wojny w Zatoce Perskiej, Patriot 357 00:16:34,480 --> 00:16:38,610 Pocisk doświadczył podobnego rodzaju problemu konwersji liczb. 358 00:16:38,610 --> 00:16:44,910 W wyniku tego, 28 amerykańskie żołnierze zabitych i ok. 100 rannych 359 00:16:44,910 --> 00:16:48,600 kiedy Patriot, która miała w celu ochrony przed przychodzących kiełże, 360 00:16:48,600 --> 00:16:51,630 nie udało się wystrzelić rakietę. 361 00:16:51,630 --> 00:16:55,110 >> SPEAKER 1: Kiedy Irak najechał na Kuwejt, a Ameryka rozpoczęła w Pustynna Burza 362 00:16:55,110 --> 00:17:00,570 na początku 1991 roku, baterie rakiet Patriot zostały wdrożone w celu ochrony Arabię ​​Saudyjską 363 00:17:00,570 --> 00:17:04,760 i Izrael od irackiego Scud Ataki rakietowe. 364 00:17:04,760 --> 00:17:09,720 Patriot jest US średniego zasięgu ziemia-powietrze systemowego firmy 365 00:17:09,720 --> 00:17:11,569 Firma Raytheon. 366 00:17:11,569 --> 00:17:16,410 >> THEODORE Postół: wielkość Patriot przechwytujących sam jest z grubsza 367 00:17:16,410 --> 00:17:17,710 20-metrowy. 368 00:17:17,710 --> 00:17:20,800 I waży około 2000 kilogramów. 369 00:17:20,800 --> 00:17:22,940 I to przenosi głowicę około - 370 00:17:22,940 --> 00:17:24,905 Myślę, że to około 150 funtów. 371 00:17:24,905 --> 00:17:31,030 I sam jest głowica Wybuchowe, które ma 372 00:17:31,030 --> 00:17:33,270 fragmenty wokół niego. 373 00:17:33,270 --> 00:17:37,490 Obudowa głowicy ma działać jak śrut. 374 00:17:37,490 --> 00:17:40,720 >> SPEAKER 1: Pociski są realizowane cztery za kontener i są transportowane 375 00:17:40,720 --> 00:17:43,050 przez naczepą. 376 00:17:43,050 --> 00:17:47,490 >> PHILIP COYLE: obrony przeciwrakietowej Patriot System wraca na 377 00:17:47,490 --> 00:17:50,710 najmniej 20 lat. 378 00:17:50,710 --> 00:17:54,350 Został zaprojektowany jako powietrze antyrakietowa 379 00:17:54,350 --> 00:17:56,190 zestrzelić samoloty nieprzyjaciela. 380 00:17:56,190 --> 00:18:02,490 W pierwszej wojny w Zatoce Perskiej, kiedy to wojna przyszedł, Army chciał go użyć 381 00:18:02,490 --> 00:18:05,535 zestrzelić kiełże a nie samolotów. 382 00:18:05,535 --> 00:18:09,310 Iracki lotnictwo nie było tak wielkim problemem. 383 00:18:09,310 --> 00:18:12,450 Ale Army martwił kiełże. 384 00:18:12,450 --> 00:18:15,950 I tak próbowali uaktualnić Patriot. 385 00:18:15,950 --> 00:18:18,750 >> SPEAKER 1: Przechwytywanie się pocisk wroga podróżuje macha pięciu było 386 00:18:18,750 --> 00:18:20,890 będzie wystarczająco trudne. 387 00:18:20,890 --> 00:18:25,590 Ale kiedy Patriot został przewieziony do service, Army nie był świadomy 388 00:18:25,590 --> 00:18:31,710 Iracka modyfikacja, że ​​się ich Kiełże prawie niemożliwe, aby uderzyć. 389 00:18:31,710 --> 00:18:35,240 >> THEODORE Postół: Co się stało jest kiełże, które były 390 00:18:35,240 --> 00:18:36,570 w najbliższych były niestabilne. 391 00:18:36,570 --> 00:18:37,532 Byli chwieje. 392 00:18:37,532 --> 00:18:43,220 Powodem tego było to Irakijczycy, w Aby uzyskać 600 km z 393 00:18:43,220 --> 00:18:47,530 300-km-range missile, wziął waga z przodu głowicy. 394 00:18:47,530 --> 00:18:49,290 Zrobili głowica lżejsze. 395 00:18:49,290 --> 00:18:53,110 Więc teraz Patriot próbuje przyjść na Scud. 396 00:18:53,110 --> 00:18:56,470 I przez większość czasu, przeważająca Większość czasu, to będzie po prostu 397 00:18:56,470 --> 00:18:58,730 latać przez Scud. 398 00:18:58,730 --> 00:19:01,760 >> SPEAKER 1: Gdy system Patriot Operatorzy zrealizowane Patriot brakowało 399 00:19:01,760 --> 00:19:06,690 jej cel, oni zdetonowali Patriotów głowica, aby uniknąć możliwości 400 00:19:06,690 --> 00:19:10,300 ofiar, czy to było dozwolone opadać na ziemię. 401 00:19:10,300 --> 00:19:14,540 >> THEODORE Postół: To, co najbardziej ludzie widzieli, jak wielkie kule ognia na niebie 402 00:19:14,540 --> 00:19:20,350 i źle jak przechwytuje z głowicami Scud. 403 00:19:20,350 --> 00:19:23,320 >> SPEAKER 1: Chociaż w nocnym niebie Patriots okazał się sukcesem 404 00:19:23,320 --> 00:19:27,530 niszcząc kiełże, w Dhahran tam może być żadnej pomyłki o jego 405 00:19:27,530 --> 00:19:29,140 wydajność. 406 00:19:29,140 --> 00:19:34,180 Nie, system Patriot radar stracił śledzenie przychodzących Scud i nigdy nie 407 00:19:34,180 --> 00:19:36,380 uruchomił to usterka oprogramowania. 408 00:19:36,380 --> 00:19:39,890 409 00:19:39,890 --> 00:19:42,700 >> Było Izraelczycy, którzy po raz pierwszy odkryta że już system 410 00:19:42,700 --> 00:19:48,020 było w tym większa różnica czasu się ze względu na zegarze 411 00:19:48,020 --> 00:19:50,470 zawarte w systemie komputera. 412 00:19:50,470 --> 00:19:54,640 >> JACK GANSSLE: Jakieś dwa tygodnie przed Tragedia w Dhahran, Izraelczycy 413 00:19:54,640 --> 00:19:58,440 zgłoszone do Departamentu Obrony że system został straty czasu. 414 00:19:58,440 --> 00:20:01,280 Po około ośmiu godzinach pracy, zauważyli, że system jest 415 00:20:01,280 --> 00:20:03,530 staje się zauważalnie mniej dokładne. 416 00:20:03,530 --> 00:20:07,710 Departament Obrony odpowiedział mówienie wszystkich baterii Patriot 417 00:20:07,710 --> 00:20:10,500 aby nie pozostawić systemów od dłuższego czasu. 418 00:20:10,500 --> 00:20:12,430 Nigdy nie powiedział, co dawno było. 419 00:20:12,430 --> 00:20:13,330 Osiem godzin? 420 00:20:13,330 --> 00:20:13,810 10 godzin? 421 00:20:13,810 --> 00:20:14,990 1000 godzin? 422 00:20:14,990 --> 00:20:17,150 Nikt nie wiedział. 423 00:20:17,150 --> 00:20:20,220 >> SPEAKER 1: bateria Patriot stacjonuje w koszarach w Dhahran 424 00:20:20,220 --> 00:20:24,660 i jego wady wewnętrzny zegar był na ponad 100 godzin w nocy 425 00:20:24,660 --> 00:20:27,470 25 lutego. 426 00:20:27,470 --> 00:20:31,770 >> JACK GANSSLE: To czas, aby śledzić dokładność około jednej dziesiątej sekundy. 427 00:20:31,770 --> 00:20:34,480 Teraz, dziesiątą sekundy ciekawy numer, ponieważ nie może być 428 00:20:34,480 --> 00:20:39,940 wyrażona w binarnym dokładnie, co oznacza, nie może być dokładnie wyrażony w 429 00:20:39,940 --> 00:20:42,500 każdy nowoczesny komputer cyfrowy. 430 00:20:42,500 --> 00:20:46,920 Trudno w to uwierzyć, ale wykorzystać to jako przykład. 431 00:20:46,920 --> 00:20:49,000 Weźmy pod numer jedną trzecią. 432 00:20:49,000 --> 00:20:53,150 Jedna trzecia nie może być wyrażona dziesiętnie dokładnie. 433 00:20:53,150 --> 00:20:57,500 Jedna trzecia jest 0,333 dzieje on do nieskończoności. 434 00:20:57,500 --> 00:21:02,270 Nie ma sposobu, aby to zrobić z absolutna dokładność po przecinku. 435 00:21:02,270 --> 00:21:05,370 To jest dokładnie ten sam rodzaj problemu , które stało się w Patriot. 436 00:21:05,370 --> 00:21:09,880 Już system ran, Najgorszy błąd czasu stał. 437 00:21:09,880 --> 00:21:13,840 >> SPEAKER 1: Po 100 godzinach pracy, Błąd w czasie tylko 438 00:21:13,840 --> 00:21:16,140 około jednej trzeciej sekundy. 439 00:21:16,140 --> 00:21:20,800 Ale jeśli chodzi o kierowanie pocisk podróżuje macha pięciu, to powodowało 440 00:21:20,800 --> 00:21:24,410 tracking error ponad 600 metrów. 441 00:21:24,410 --> 00:21:27,670 Byłby to błąd krytyczny żołnierze w Dhahran. 442 00:21:27,670 --> 00:21:33,450 >> THEODORE Postół: Co się stało Scud launch została wykryta wcześnie 443 00:21:33,450 --> 00:21:34,280 satelity ostrzegawcze. 444 00:21:34,280 --> 00:21:38,550 I wiedzieli, że Scud nadchodzi w ich ogólnym kierunku. 445 00:21:38,550 --> 00:21:41,000 Nie wiem, gdzie to nastąpi. 446 00:21:41,000 --> 00:21:43,900 >> SPEAKER 1: To teraz do radaru Składnik systemu Patriot 447 00:21:43,900 --> 00:21:48,910 broniąc Dhahran znaleźć i utrzymać utwór z nadchodzącej pocisków wroga. 448 00:21:48,910 --> 00:21:50,580 >> JACK GANSSLE: radar był bardzo inteligentny. 449 00:21:50,580 --> 00:21:53,770 To rzeczywiście śledzić pozycję Scud i przewidzieć, gdzie to 450 00:21:53,770 --> 00:21:57,160 prawdopodobnie będzie następnym razem radar wysłany impuls out. 451 00:21:57,160 --> 00:21:58,870 To był nazywany bramą zakres. 452 00:21:58,870 --> 00:22:04,020 >> THEODORE Postół: Wtedy po raz Patriot decyduje tyle czasu minęło, aby przejść 453 00:22:04,020 --> 00:22:09,420 kopię i sprawdzić następny lokalizację Wykryty obiekt, to wraca. 454 00:22:09,420 --> 00:22:14,450 Więc kiedy to wrócił do porządku miejsce, to potem nie widzi obiekt. 455 00:22:14,450 --> 00:22:18,200 I to decyduje, że nie ma obiektu, to było fałszywe wykrywanie i 456 00:22:18,200 --> 00:22:19,680 spada z toru. 457 00:22:19,680 --> 00:22:22,970 >> SPEAKER 1: incoming Scud zniknął z ekranu radaru, a 458 00:22:22,970 --> 00:22:26,050 sekundy później zatrzasnęła do koszar. 459 00:22:26,050 --> 00:22:31,950 Scud zabił 28 i był ostatni zwolniony w trakcie pierwszej wojny w Zatoce. 460 00:22:31,950 --> 00:22:37,700 Niestety, aktualizacja oprogramowania przybył w Dhahran następnego dnia. 461 00:22:37,700 --> 00:22:41,800 Wada oprogramowania została ustalona, zamykając jeden rozdział w niespokojnych 462 00:22:41,800 --> 00:22:43,690 Historia rakiet Patriot. 463 00:22:43,690 --> 00:22:46,780 464 00:22:46,780 --> 00:22:50,710 >> Patriot jest właściwie skrótem stopniowej Tracking Array 465 00:22:50,710 --> 00:22:51,960 Intercept docelowych. 466 00:22:51,960 --> 00:22:54,650 467 00:22:54,650 --> 00:23:00,840 >> DAVID J MALAN: Dobrze, więc wytrzeźwienia przykład, aby się upewnić. 468 00:23:00,840 --> 00:23:03,430 I na szczęście, to niższy poziom błędy nie są czymś, co my będziemy 469 00:23:03,430 --> 00:23:06,220 zazwyczaj trzeba docenić, z pewnością nie z niektórych naszych 470 00:23:06,220 --> 00:23:07,360 Najwcześniej programów. 471 00:23:07,360 --> 00:23:10,450 Przeciwnie, większość błędów, które będziesz Spotkanie będzie logiczny charakter, 472 00:23:10,450 --> 00:23:12,900 składniowe w naturze, zgodnie z którą Kod po prostu nie działa dobrze. 473 00:23:12,900 --> 00:23:14,140 I wiesz, że to dość szybko. 474 00:23:14,140 --> 00:23:16,850 >> Ale szczególnie gdy mamy do Koniec semestru, to będzie 475 00:23:16,850 --> 00:23:20,620 staje się coraz bardziej z możliwością naprawdę trudno myśleć o budowie 476 00:23:20,620 --> 00:23:22,960 z programów i podstawowych reprezentacja 477 00:23:22,960 --> 00:23:24,520 Tam też danych. 478 00:23:24,520 --> 00:23:28,010 Na przykład dowiemy się z MySQL, który jest popularny silnik bazy danych 479 00:23:28,010 --> 00:23:30,850 że można używać z witryn do przechowywania danych na końcu tylnym. 480 00:23:30,850 --> 00:23:34,630 I będziesz musiał zacząć decydować o Koniec semestru, nie tylko to, co 481 00:23:34,630 --> 00:23:38,790 typy danych w tym kierunku, aby skorzystać z ale dokładnie to, ile bitów w użyciu, 482 00:23:38,790 --> 00:23:42,740 czy chcesz zapisać daty jako daty i godziny, jak zawsze, a także 483 00:23:42,740 --> 00:23:46,890 takie rzeczy jak duży chcesz unikalne identyfikatory, aby być, powiedzmy, użytkownicy 484 00:23:46,890 --> 00:23:47,680 w bazie danych. 485 00:23:47,680 --> 00:23:51,210 >> W rzeczywistości, jeśli niektórzy z was miał Facebook stanowi od dłuższego czasu, 486 00:23:51,210 --> 00:23:53,680 i wiesz, jak uzyskać dostęp do identyfikatora użytkownika - 487 00:23:53,680 --> 00:23:57,930 który czasami pojawia się w twoim URL profilu, o ile nie zostaną wybrane 488 00:23:57,930 --> 00:24:02,070 nick do adresu URL, lub jeśli masz Używane Facebooka Graph API, 489 00:24:02,070 --> 00:24:05,510 publicznie dostępne API przez które może poprosić Facebook dla danych surowych - 490 00:24:05,510 --> 00:24:07,580 można zobaczyć, co numeryczny ID jest. 491 00:24:07,580 --> 00:24:10,880 A kilka lat temu, Facebook zasadniczo musiał zmienić z pomocą 492 00:24:10,880 --> 00:24:15,980 odpowiednik liczb całkowitych z użyciem długo długo, bo w czasie jak użytkownicy się 493 00:24:15,980 --> 00:24:19,780 i iść i tworzyć wiele kont i fałszywe konta, nawet oni bardzo łatwo 494 00:24:19,780 --> 00:24:24,630 byli w stanie wyczerpać coś jak 4 mld możliwa wartość jak int. 495 00:24:24,630 --> 00:24:28,340 >> Tak bardziej na tych rodzajach spraw w dół ulicy, jak również. 496 00:24:28,340 --> 00:24:30,750 Dobrze, żeby rzucał. 497 00:24:30,750 --> 00:24:31,670 To był brak precyzji. 498 00:24:31,670 --> 00:24:32,730 Kilka szybkich ogłoszeń. 499 00:24:32,730 --> 00:24:35,710 Więc działy formalnie rozpocząć w najbliższy Niedziela, poniedziałek, wtorek. 500 00:24:35,710 --> 00:24:39,080 Usłyszysz poprzez e-mail w tym tygodniu jak do przypisania. 501 00:24:39,080 --> 00:24:42,570 I będziesz także tutaj w tym momencie, jak zmienić punkt, jeśli Twój 502 00:24:42,570 --> 00:24:45,660 Plan się zmieniło lub twój poziom komfortu bardzo się zmieniła. 503 00:24:45,660 --> 00:24:49,380 Tymczasem P-set jeden i jeden to hacker spowodowane ten czwartek z opcją do 504 00:24:49,380 --> 00:24:52,450 przedłużyć ten termin za Specyfikacje do piątku 505 00:24:52,450 --> 00:24:53,830 w sposób typowy. 506 00:24:53,830 --> 00:24:57,500 >> Uświadom sobie, że zawarte z problemem specyfikacje określone są instrukcje dotyczące 507 00:24:57,500 --> 00:25:02,770 jak korzystać z CS50 urządzenia należy, jak również niektóre CS50 konkretne narzędzia 508 00:25:02,770 --> 00:25:06,540 jak stylu 50, który może dostarczyć z dynamicznie razie na 509 00:25:06,540 --> 00:25:10,230 jakość swojego stylu kodu, a także sprawdzić 50, który może zapewnić Ci 510 00:25:10,230 --> 00:25:13,160 dynamiczny feedback jak do swojej CODE za prawidłowość. 511 00:25:13,160 --> 00:25:16,850 Wybacz, że jesteśmy nadal do prasowania z kilku załamań z kontroli 50. 512 00:25:16,850 --> 00:25:21,490 Kilku kolegów z klasy, którzy nie zaczynają około cztery AM w piątek wieczorem, gdy 513 00:25:21,490 --> 00:25:25,130 spec wzrosła od tego czasu zauważyliśmy kilka błędów, które pracują 514 00:25:25,130 --> 00:25:29,010 dzięki i przepraszam za każdego, kto doświadczył niepotrzebnych frustracji. 515 00:25:29,010 --> 00:25:30,340 Wina jest moja. 516 00:25:30,340 --> 00:25:34,080 Ale będziemy śledzić na CS50 dyskutować, kiedy to został rozwiązany. 517 00:25:34,080 --> 00:25:35,700 >> Więc słowo na ocenę siebie. 518 00:25:35,700 --> 00:25:38,990 Więc to będzie tydzień lub dwa przed tobą zacząć, aby uzyskać opinię na temat zestawów problemowych 519 00:25:38,990 --> 00:25:40,640 dlatego, że nie mają jeszcze fellow nauczania. 520 00:25:40,640 --> 00:25:44,510 I nawet wtedy, zaczniemy oceniać Problem C ustawia przed my 521 00:25:44,510 --> 00:25:46,970 wrócić i ocenić tak na zarysowania że masz bardziej istotne 522 00:25:46,970 --> 00:25:48,150 Reakcje szybciej. 523 00:25:48,150 --> 00:25:51,870 Ale w ogóle za program nauczania, CS50 zestawy zadań są oceniane razem 524 00:25:51,870 --> 00:25:53,580 po cztery osie - 525 00:25:53,580 --> 00:25:55,760 zakres, poprawność, design i styl. 526 00:25:55,760 --> 00:25:59,210 >> Zakres będzie numer zazwyczaj od zera do pięciu, że 527 00:25:59,210 --> 00:26:01,830 rejestruje, ile kawałek, który odgryzł. 528 00:26:01,830 --> 00:26:03,750 Zazwyczaj, żeby to było pięć. 529 00:26:03,750 --> 00:26:05,300 Ty przynajmniej próbowałem wszystkiego. 530 00:26:05,300 --> 00:26:09,330 I zauważyć, że jest to czynnik mnożenia tak, że robi tylko część 531 00:26:09,330 --> 00:26:12,520 set problem nie najlepszą strategią jest. 532 00:26:12,520 --> 00:26:15,610 >> Tymczasem bardziej oczywiste jest Znaczenie poprawności - 533 00:26:15,610 --> 00:26:18,620 właśnie jest program poprawne z przestrzegać specyfikacji? 534 00:26:18,620 --> 00:26:21,510 To jest ważony celowo więcej stopniu niż pozostałe dwie osie, według 535 00:26:21,510 --> 00:26:24,450 trzykrotnie, ponieważ zdajemy sobie sprawę, że zwykle masz zamiar spędzić 536 00:26:24,450 --> 00:26:28,600 dużo więcej czasu ścigających kilka błędów, się kod do pracy, a następnie 537 00:26:28,600 --> 00:26:31,540 są wcięcia i wybranie odpowiednie nazwy zmiennych i 538 00:26:31,540 --> 00:26:33,800 itp., które jest na drugim końcu spektrum stylu. 539 00:26:33,800 --> 00:26:36,160 >> To nie znaczy, że nie jest w stylu ważne i będziemy głosić ją na 540 00:26:36,160 --> 00:26:37,920 czas zarówno w wykładach oraz w sekcjach. 541 00:26:37,920 --> 00:26:40,520 Styl nawiązuje do estetyki o kodzie. 542 00:26:40,520 --> 00:26:43,980 Czy wybrałeś oraz wymienieni zmienne , które są krótkie, ale nieco 543 00:26:43,980 --> 00:26:44,680 opisowe? 544 00:26:44,680 --> 00:26:47,840 Czy Twój kod wcięty jak widziałem w wykład oraz w sposób zgodny 545 00:26:47,840 --> 00:26:49,070 w stylu 50? 546 00:26:49,070 --> 00:26:51,220 >> Wreszcie jest projekt prawa tam w środku. 547 00:26:51,220 --> 00:26:54,090 Design jest trudniejsze jeden umieścić palec na, ponieważ jest o wiele bardziej 548 00:26:54,090 --> 00:26:55,000 subiektywna. 549 00:26:55,000 --> 00:26:58,610 Ale to jest chyba najważniejsze trzy osie w zakresie pedagogicznym 550 00:26:58,610 --> 00:27:02,050 wartości w czasie oraz, że będzie to Facet nauczycielskiej możliwość 551 00:27:02,050 --> 00:27:04,110 dostarczy Ci jakościowej opinii. 552 00:27:04,110 --> 00:27:08,100 Rzeczywiście w CS50 choć mamy te wzory i wyniki, na koniec 553 00:27:08,100 --> 00:27:11,350 na dzień to bardzo świadomie Wiadra - bardzo małe wartości punktowe 554 00:27:11,350 --> 00:27:13,460 od zera do trzech i zero, a pięć. 555 00:27:13,460 --> 00:27:17,800 My nie staramy się wyciągnąć bardzo grube linie pomiędzy zestawami problemowych lub między 556 00:27:17,800 --> 00:27:21,490 studentów, ale raczej skupić się jak możemy na jakościowych, rękopis 557 00:27:21,490 --> 00:27:25,490 feedback, albo wpisane lub ustne z Twój szczególności fellow nauczania, 558 00:27:25,490 --> 00:27:27,050 będzie można poznać dość dobrze. 559 00:27:27,050 --> 00:27:32,340 >> Ale na ogół, są to ciężary że poszczególne osie mają. 560 00:27:32,340 --> 00:27:35,480 Tymczasem zbyt, to warto mieć na myśl, że nie należy zakładać, że 561 00:27:35,480 --> 00:27:38,870 trzy z pięciu jest 60%, a więc mniej więcej w przypadku braku. 562 00:27:38,870 --> 00:27:41,410 Trzy celowo miało być rodzaj środku drogi dobre. 563 00:27:41,410 --> 00:27:43,480 Jeśli otrzymujesz trójek w początku semestru, to 564 00:27:43,480 --> 00:27:46,340 rzeczywiście ma być dobry miejscem, aby rozpocząć. 565 00:27:46,340 --> 00:27:50,510 Jeśli otrzymujesz Dwójki, targi, tam na pewno trochę pracy, aby zapłacić trochę 566 00:27:50,510 --> 00:27:53,250 więcej uwagi, aby skorzystać sekcji i godzin urzędowania. 567 00:27:53,250 --> 00:27:54,590 >> Jeśli otrzymujesz czwórki i piątki, to świetnie. 568 00:27:54,590 --> 00:27:57,430 Ale tak naprawdę, mamy nadzieję, że trajektorie wśród studentów - bardzo 569 00:27:57,430 --> 00:28:00,575 indywidualnie dla każdego ucznia, ale wychodząc semestr tutaj w rodzaju 570 00:28:00,575 --> 00:28:04,100 dwa do trzech zakresie, ale kończy tutaj w 4:56 zakresie. 571 00:28:04,100 --> 00:28:05,440 To, co tak naprawdę szuka. 572 00:28:05,440 --> 00:28:09,590 A my nie pamiętać, że delta Ci wykazują między zero tygodni i tydzień 573 00:28:09,590 --> 00:28:12,170 12, gdy robię stopnie. 574 00:28:12,170 --> 00:28:16,380 To nie ma znaczenia dla nas absolutnie, jak Ci fair na początku, jeśli Państwa 575 00:28:16,380 --> 00:28:19,330 Trajektoria jest rzeczywiście w górę i silny. 576 00:28:19,330 --> 00:28:24,000 >> Academic uczciwość - więc pozwól mi położyć się na moim bardziej poważny głos na chwilę. 577 00:28:24,000 --> 00:28:28,510 Więc ten kurs ma rozróżnienie wysyłanie więcej studentów niż inne 578 00:28:28,510 --> 00:28:30,950 w historii na planszy reklamowej, wierzę. 579 00:28:30,950 --> 00:28:34,220 Mamy coś w rodzaju utraty liczyć na to punkt, jak często to się zdarza. 580 00:28:34,220 --> 00:28:37,090 I to nie dlatego, że uczniowie w 50 to nic więcej niż ich nieuczciwy 581 00:28:37,090 --> 00:28:38,690 koledzy gdzie indziej. 582 00:28:38,690 --> 00:28:42,800 Ale sobie sprawę, też, że są bardzo dobre w wykrywaniu tego rodzaju rzeczy. 583 00:28:42,800 --> 00:28:45,920 >> I to tę zaletę, że klasy informatyk w które 584 00:28:45,920 --> 00:28:49,110 może i mamy porównanie wszystkich studentów Problem ustawia parami przed każdym 585 00:28:49,110 --> 00:28:51,470 Inne, nie tylko w tym roku ale wszystkie poprzednie lata. 586 00:28:51,470 --> 00:28:55,080 Mamy możliwość, podobnie jak uczniów w Klasa, Google i znaleźć kod 587 00:28:55,080 --> 00:28:57,440 na stronach takich jak github i forach dyskusyjnych. 588 00:28:57,440 --> 00:29:00,840 Nie ma absolutnie rozwiązania CS50-tych p-ustawia krąży tam. 589 00:29:00,840 --> 00:29:02,710 Ale jeśli można je znaleźć, możemy ich znaleźć. 590 00:29:02,710 --> 00:29:07,130 A wszystko to jest bardzo zautomatyzowany i łatwy i smutne dla nas, aby znaleźć. 591 00:29:07,130 --> 00:29:10,990 >> Ale chcę podkreślić też, że Polityka akademicki Kursu jest uczciwość 592 00:29:10,990 --> 00:29:13,960 Bardzo ma być bardzo Przeciwieństwem tego ducha. 593 00:29:13,960 --> 00:29:17,506 Rzeczywiście, w tym roku mamy rephrased rzeczy w programie nauczania jest to, kropka 594 00:29:17,506 --> 00:29:19,790 dot dot, bardziej szczegółowo w programie szkolenia. 595 00:29:19,790 --> 00:29:22,860 Jednak nadrzędnym tematem w trakcie naprawdę jest się zasadne. 596 00:29:22,860 --> 00:29:26,160 Zdajemy sobie sprawę, że istnieje znacząca Kwota pedagogiczne 597 00:29:26,160 --> 00:29:30,550 Wartość współpracą, do pewnego stopnia, z kolegami z klasy, w której można 598 00:29:30,550 --> 00:29:33,700 dwa albo trzy, albo więcej są stojąc przy tablicy 599 00:29:33,700 --> 00:29:35,670 Whiteboarding, tak aby mówią, swoje pomysły - 600 00:29:35,670 --> 00:29:39,480 wypisywanie Pseudokod na zdjęciach, diagramów, co powinno być, czy Mario 601 00:29:39,480 --> 00:29:41,350 miałeś pisać to pierwsze w Pseudokod. 602 00:29:41,350 --> 00:29:43,240 Co należy chciwy algorytm - 603 00:29:43,240 --> 00:29:46,100 jak należy zachowywać się na Problem ustawia jeden? 604 00:29:46,100 --> 00:29:50,440 >> I tak sobie sprawę, że zachowanie że zachęcamy jest bardzo 605 00:29:50,440 --> 00:29:51,470 dużo w tym kierunku. 606 00:29:51,470 --> 00:29:53,890 A w programie szkolenia, zobaczysz cała masa kul pod 607 00:29:53,890 --> 00:29:57,740 rozsądne kategorii i nie uzasadnione kategoria, która pomaga nam pomóc 608 00:29:57,740 --> 00:30:00,740 Ci owinąć swój umysł wokół których robimy zwrócić tę linię. 609 00:30:00,740 --> 00:30:04,340 A w ogóle, przyzwoita zasada jest to, że jeśli jesteś stara się rozwiązać 610 00:30:04,340 --> 00:30:07,990 jakiś błąd i twój przyjaciel lub kolega siedzi obok ciebie, to jest 611 00:30:07,990 --> 00:30:11,530 uzasadnione, aby pokazać mu, lub jej Twój kod i powiedzieć, hej, możesz pomóc 612 00:30:11,530 --> 00:30:13,700 mnie dowiedzieć się, co się dzieje nie tak tutaj? 613 00:30:13,700 --> 00:30:17,110 >> Zazwyczaj nie objąć po przeciwnej stronie. 614 00:30:17,110 --> 00:30:20,730 To nie jest poprawna odpowiedź dla swojego jest przyjaciel lub kolega tutaj, aby powiedzieć, oh, 615 00:30:20,730 --> 00:30:22,510 wystarczy spojrzeć na kopalni i rysunek to się z tego. 616 00:30:22,510 --> 00:30:24,400 To jest coś w rodzaju nieuzasadnione. 617 00:30:24,400 --> 00:30:27,750 Ale o kogoś innego, inny mózg, inna para oczu patrzeć na 618 00:30:27,750 --> 00:30:31,620 ekran lub spojrzenie na kodzie i powiedzieć, czy na pewno chcesz 619 00:30:31,620 --> 00:30:32,760 mieć pętlę o? 620 00:30:32,760 --> 00:30:34,800 Czy jesteś pewien, że chcesz że średnik tutaj? 621 00:30:34,800 --> 00:30:37,090 Albo oh, że komunikat o błędzie oznacza to. 622 00:30:37,090 --> 00:30:39,580 To są bardzo rozsądne i zachęcani zachowania. 623 00:30:39,580 --> 00:30:44,010 >> Przypadki, w których ja nawiązywać do wcześniej sprowadzają się do tego, kiedy uczniowie są 624 00:30:44,010 --> 00:30:47,350 późno w nocy co ubogich wyroku decyzje i poczty elektronicznej ich kodu 625 00:30:47,350 --> 00:30:50,130 ktoś inny lub po prostu mówiąc, tutaj, to w Dropbox lub 626 00:30:50,130 --> 00:30:51,610 Googling późno w nocy. 627 00:30:51,610 --> 00:30:54,880 A więc zachęcam i błagam was, jeśli nie ma tych, nieuniknione 628 00:30:54,880 --> 00:30:58,450 momenty stresu, jesteś lada przed upływem terminu, nie masz późno 629 00:30:58,450 --> 00:31:01,490 dzień, ponieważ jest to, że już w piątek o punkt, napisz do kursu za głowy lub 630 00:31:01,490 --> 00:31:02,330 się bezpośrednio. 631 00:31:02,330 --> 00:31:04,790 Powiedzieć, słuchaj, jestem w moim Podaje punkt tutaj. 632 00:31:04,790 --> 00:31:06,660 Miejmy rozmowę i rysunek. 633 00:31:06,660 --> 00:31:10,400 Odwołanie się do sieci lub jakieś inne nie rozsądne zachowanie nie jest 634 00:31:10,400 --> 00:31:13,070 rozwiązaniem, a zbyt wiele swoich koledzy nie są już tutaj, na 635 00:31:13,070 --> 00:31:15,150 campus powodu tej złej wyroku. 636 00:31:15,150 --> 00:31:17,840 Ale to jest bardzo łatwe do spódnicy tej linii. 637 00:31:17,840 --> 00:31:22,950 >> I tu jest mały obraz dopingować można się z Reddit tak, że teraz 638 00:31:22,950 --> 00:31:25,720 wszystko będzie OK. 639 00:31:25,720 --> 00:31:30,210 >> Tak szybkim podsumowaniem, a następnie, z którym skończyliśmy. 640 00:31:30,210 --> 00:31:33,690 Tak więc w zeszłym tygodniu, przypomnieć, że wprowadzimy warunki, nie w Scratch 641 00:31:33,690 --> 00:31:34,880 ale w C tym razem. 642 00:31:34,880 --> 00:31:38,300 I była jakaś nowa składnia, ale naprawdę nie ma nowych pomysłów per se. 643 00:31:38,300 --> 00:31:42,630 Mieliśmy wyrażeń logicznych, że mogliśmy lub razem z dwóch pionowych 644 00:31:42,630 --> 00:31:46,490 barów lub i wraz z dwoma Ampersands, mówiąc, że zarówno w lewo 645 00:31:46,490 --> 00:31:49,990 i prawa muszą być prawdziwe aby to wykonać. 646 00:31:49,990 --> 00:31:53,150 Potem mieliśmy przełączniki, które patrzyliśmy na krótko, ale proponuję, są naprawdę 647 00:31:53,150 --> 00:31:56,830 po prostu inna składnia do osiągnięcia sam rodzaj bramki, jeśli wiesz, w 648 00:31:56,830 --> 00:31:59,270 góry określić swoje sprawy będą. 649 00:31:59,270 --> 00:32:00,160 >> Patrzyliśmy na pętli. 650 00:32:00,160 --> 00:32:03,340 Dla pętli jest może najczęściej, lub co najmniej jeden, że ludzie 651 00:32:03,340 --> 00:32:05,330 zwykle sięgnąć instynktownie. 652 00:32:05,330 --> 00:32:08,240 Mimo, że wygląda trochę tajemnicze, zobaczysz wiele, wiele przykładów tego 653 00:32:08,240 --> 00:32:11,590 Wkrótce, jak masz już pod koniec ubiegłego tygodnia. 654 00:32:11,590 --> 00:32:14,280 Choć pętle może podobnie osiągnąć to samo. 655 00:32:14,280 --> 00:32:17,550 Ale jeśli chcesz robić żadnych inkrementacji lub aktualizacji 656 00:32:17,550 --> 00:32:20,230 zmiennej wartości, trzeba zrobić to ręcznie, niż więcej 657 00:32:20,230 --> 00:32:22,440 do pętli przed pozwala. 658 00:32:22,440 --> 00:32:25,310 A jeszcze do-while, który pozwala nam robić coś na 659 00:32:25,310 --> 00:32:28,460 najmniej raz gdy coś inne jest prawdą. 660 00:32:28,460 --> 00:32:31,550 A to jest szczególnie dobre dla programów lub do gier, gdzie chcesz 661 00:32:31,550 --> 00:32:33,810 monitować użytkownika za coś co najmniej jeden raz. 662 00:32:33,810 --> 00:32:37,110 A potem, jeśli on lub ona nie współpracuje możesz to zrobić 663 00:32:37,110 --> 00:32:38,420 znowu i znowu. 664 00:32:38,420 --> 00:32:41,270 >> Przy zmiennych tymczasem mieliśmy linii kodu, takich jak to, co może 665 00:32:41,270 --> 00:32:41,950 się dwie linie. 666 00:32:41,950 --> 00:32:44,830 Można zadeklarować nazwie int licznik, średnik. 667 00:32:44,830 --> 00:32:47,660 Albo może po prostu zadeklarować i zdefiniować ją, że tak powiem. 668 00:32:47,660 --> 00:32:49,950 Nadać jej wartość w tym samym czasie. 669 00:32:49,950 --> 00:32:51,890 >> I wtedy wreszcie, rozmawialiśmy o funkcji. 670 00:32:51,890 --> 00:32:54,270 I to był dobry przykład w poczucie, że to ilustruje 671 00:32:54,270 --> 00:32:55,840 dwa typy funkcji. 672 00:32:55,840 --> 00:32:59,030 Jednym z nich jest GetString (), która, ponownie, Pobiera ciąg od użytkownika. 673 00:32:59,030 --> 00:33:02,040 Ale GetString () jest rodzaju ciekawe, o ile używaliśmy go, 674 00:33:02,040 --> 00:33:05,620 bo my zawsze stosować go coś na lewej stronie 675 00:33:05,620 --> 00:33:06,600 znak równości. 676 00:33:06,600 --> 00:33:09,830 To znaczy, że getString () zwraca wartość. 677 00:33:09,830 --> 00:33:11,970 Zwraca oczywiście ciąg. 678 00:33:11,970 --> 00:33:15,130 A potem na lewej stronie, jesteśmy po prostu zapisywanie ten ciąg wewnątrz 679 00:33:15,130 --> 00:33:16,580 zmienna o nazwie nazwa. 680 00:33:16,580 --> 00:33:21,100 >> Jest to inaczej, w pewnym sensie, od printf bo printf, przynajmniej w naszym 681 00:33:21,100 --> 00:33:23,540 Wykorzystanie tutaj, nie zwraca nic. 682 00:33:23,540 --> 00:33:24,960 Tak na marginesie, to coś robi powrotnej. 683 00:33:24,960 --> 00:33:26,380 Po prostu nie obchodzi mnie, co to jest. 684 00:33:26,380 --> 00:33:29,090 Ale to nie ma co zwany efekt uboczny. 685 00:33:29,090 --> 00:33:31,840 A co to jest efekt uboczny w każdy Sprawa widzieliśmy do tej pory? 686 00:33:31,840 --> 00:33:34,720 Co printf zrobić? 687 00:33:34,720 --> 00:33:37,780 Wypisuje coś na ekranie, Wyświetlacze tekstu lub numerów, czy coś 688 00:33:37,780 --> 00:33:38,380 na ekranie. 689 00:33:38,380 --> 00:33:41,170 A to tylko za efekt uboczny bo to naprawdę nie jest przekazanie 690 00:33:41,170 --> 00:33:41,900 go do mnie. 691 00:33:41,900 --> 00:33:44,770 To nie jest odpowiedź wewnątrz czarna skrzynka, że ​​mogę to 692 00:33:44,770 --> 00:33:46,130 dotrzeć do i chwycić. 693 00:33:46,130 --> 00:33:49,160 To się po prostu robi to na własną rękę, dużo jak Colton był podłączony do tego 694 00:33:49,160 --> 00:33:52,560 czarna skrzynka w zeszłym tygodniu, a on w jakiś sposób magicznie rysował na tablicy 695 00:33:52,560 --> 00:33:54,500 beze mnie faktycznie zaangażowany. 696 00:33:54,500 --> 00:33:55,560 To byłoby efektem ubocznym. 697 00:33:55,560 --> 00:33:59,100 Ale jeśli rzeczywiście miał dotrzeć z powrotem w tutaj i powiedzieć, oh, tutaj jest ciąg 698 00:33:59,100 --> 00:34:02,040 od użytkownika, które mogłyby być zwracana wartość. 699 00:34:02,040 --> 00:34:05,650 >> I do tej pory mamy tylko używane funkcje że inni ludzie pisali. 700 00:34:05,650 --> 00:34:09,219 Ale rzeczywiście możemy zrobić te Różne rzeczy sami. 701 00:34:09,219 --> 00:34:12,730 Więc mam zamiar iść do CS50 urządzenie ponownie. 702 00:34:12,730 --> 00:34:16,020 Pozwól mi zamknąć kartę, że nie otwierać przed chwilą. 703 00:34:16,020 --> 00:34:18,530 I pozwól mi iść do przodu i utwórz nowy plik. 704 00:34:18,530 --> 00:34:22,400 I zamierzam iść do przodu i Nazywamy to jeden positive.c. 705 00:34:22,400 --> 00:34:24,770 Tak, chcę zrobić coś z dodatnie tutaj. 706 00:34:24,770 --> 00:34:27,219 Więc mam zamiar iść do przodu i robić int - 707 00:34:27,219 --> 00:34:28,000 Przepraszam - 708 00:34:28,000 --> 00:34:31,840 # Include. 709 00:34:31,840 --> 00:34:34,280 Nie róbmy tego samego błąd jak wcześniej. 710 00:34:34,280 --> 00:34:40,020 Int main (void), open kręcone nawiasów, zamknięty nawias kręcone. 711 00:34:40,020 --> 00:34:41,639 >> A teraz chcę, aby wykonać następujące czynności. 712 00:34:41,639 --> 00:34:44,600 Chcę napisać program, który podkreśla, że ​​użytkownik podaje 713 00:34:44,600 --> 00:34:46,770 mnie dodatnia. 714 00:34:46,770 --> 00:34:50,969 Więc nie ma GetPositiveInt funkcja w CS50 biblioteki. 715 00:34:50,969 --> 00:34:52,610 Jest tylko getInt (). 716 00:34:52,610 --> 00:34:55,790 Ale to jest OK, bo mam konstrukcje, z którymi można nakładać 717 00:34:55,790 --> 00:34:59,360 trochę więcej ograniczeniem tej wartości. 718 00:34:59,360 --> 00:35:00,990 Mógłby zrobić coś takiego. 719 00:35:00,990 --> 00:35:02,780 >> Więc int n - 720 00:35:02,780 --> 00:35:04,920 a jeśli piszesz dalej, po prostu sobie sprawę, Mam zamiar wrócić i 721 00:35:04,920 --> 00:35:06,430 zmienić niektóre rzeczy w chwili - 722 00:35:06,430 --> 00:35:09,960 tak int n równa getInt (). 723 00:35:09,960 --> 00:35:11,780 I to się dzieje, aby umieścić int wewnątrz n. 724 00:35:11,780 --> 00:35:13,830 I pozwól mi być bardziej opisowe. 725 00:35:13,830 --> 00:35:23,270 Pozwól mi powiedzieć coś w stylu, że żądam dasz mi dodatnia. 726 00:35:23,270 --> 00:35:23,550 >> Dobrze. 727 00:35:23,550 --> 00:35:25,250 Więc tylko trochę instrukcji. 728 00:35:25,250 --> 00:35:26,270 A teraz, co mogę zrobić? 729 00:35:26,270 --> 00:35:29,840 Cóż, ja już wiem od mój prosty warunki lub oddziały, tak jak ja 730 00:35:29,840 --> 00:35:36,100 miał na początku, mógłbym powiedzieć coś Jeśli jak N jest mniejsza lub równa 731 00:35:36,100 --> 00:35:44,460 zero, to chcę coś zrobić itp., które nie jest korzystny. 732 00:35:44,460 --> 00:35:45,560 I wtedy mogłem zrobić - 733 00:35:45,560 --> 00:35:47,310 OK, ale naprawdę chcę aby ta int. 734 00:35:47,310 --> 00:35:52,020 Więc mogę iść tu i mogłem rodzaju kopii tego i tiret tego. 735 00:35:52,020 --> 00:35:52,570 A potem, OK. 736 00:35:52,570 --> 00:35:56,990 Tak więc, jeśli n jest mniejsza lub równe zeru to zrobić. 737 00:35:56,990 --> 00:35:58,900 >> Teraz, co oznacza, że ​​użytkownik nie współpracuje? 738 00:35:58,900 --> 00:36:01,560 No, to mam zamiar pożyczyć to tutaj. 739 00:36:01,560 --> 00:36:03,130 A potem idę tutaj i tu i tu. 740 00:36:03,130 --> 00:36:06,420 Więc nie jest to wyraźnie rozwiązanie, prawda? 741 00:36:06,420 --> 00:36:07,810 Bo nie ma końca. 742 00:36:07,810 --> 00:36:13,100 Jeśli chcę, aby domagać się od użytkownika daje mnie dodatnia, mogę 743 00:36:13,100 --> 00:36:14,150 rzeczywiście dostać int. 744 00:36:14,150 --> 00:36:15,620 Mogę to sprawdzić w tym wew. 745 00:36:15,620 --> 00:36:18,570 Ale chcę, aby to sprawdzić jeszcze raz i sprawdzić go ponownie i sprawdź ponownie. 746 00:36:18,570 --> 00:36:21,680 Tak oczywiście, co jest lepsze konstruować, aby używać tutaj? 747 00:36:21,680 --> 00:36:22,840 W porządku, więc jakiś pętli. 748 00:36:22,840 --> 00:36:25,430 >> Więc mam zamiar pozbyć prawie wszystko. 749 00:36:25,430 --> 00:36:27,320 I chcę, aby to int co najmniej raz. 750 00:36:27,320 --> 00:36:28,890 Więc mam zamiar powiedzieć, zrobić - 751 00:36:28,890 --> 00:36:32,110 i wrócę do a za chwilę - 752 00:36:32,110 --> 00:36:33,050 teraz, czy co? 753 00:36:33,050 --> 00:36:35,860 Mam zamiar zrobić int n dostaje getInt (). 754 00:36:35,860 --> 00:36:36,080 OK. 755 00:36:36,080 --> 00:36:37,250 Więc to jest bardzo dobre. 756 00:36:37,250 --> 00:36:39,750 A teraz, jak często Chcę, aby to zrobić? 757 00:36:39,750 --> 00:36:45,770 >> Powiem printf wewnątrz pętli więc mogę żądać znowu i znowu, 758 00:36:45,770 --> 00:36:46,740 jeśli zajdzie taka potrzeba. 759 00:36:46,740 --> 00:36:49,720 I co ja chcę tego natomiast stan zrobić? 760 00:36:49,720 --> 00:36:53,870 Chcę zachować ten sposób a co to ma? 761 00:36:53,870 --> 00:36:54,125 Tak. 762 00:36:54,125 --> 00:36:55,390 N jest mniejsza lub równa zeru. 763 00:36:55,390 --> 00:36:58,180 Więc już mamy znacznie czyścić ten kod up. 764 00:36:58,180 --> 00:37:00,700 Mamy pożyczył bardzo prosta budowę - do-while. 765 00:37:00,700 --> 00:37:04,690 I ukradli tylko ważne linie kodu, który zacząłem kopiowanie i 766 00:37:04,690 --> 00:37:05,960 wklejanie, co nie było mądre. 767 00:37:05,960 --> 00:37:09,790 I tak teraz mam zamiar rzeczywiście wklej to tutaj i po prostu to zrobić raz. 768 00:37:09,790 --> 00:37:12,990 >> A teraz to, co chcę robić w bardzo koniec tego programu? 769 00:37:12,990 --> 00:37:16,810 Powiem tylko coś prostego jak, dzięki za - i 770 00:37:16,810 --> 00:37:18,980 Zrobię% i do int - 771 00:37:18,980 --> 00:37:23,270 backslash n, przecinek, a następnie wtyczka w n, średnik. 772 00:37:23,270 --> 00:37:23,910 >> Dobrze. 773 00:37:23,910 --> 00:37:27,290 Zobaczmy więc, co się dzieje teraz kiedy uruchomić ten program. 774 00:37:27,290 --> 00:37:30,600 Mam zamiar iść do przodu i robią pozytywne. 775 00:37:30,600 --> 00:37:30,880 Cholera. 776 00:37:30,880 --> 00:37:31,600 Kilka błędów. 777 00:37:31,600 --> 00:37:32,960 Więc pozwól mi przejść z powrotem do pierwszego. 778 00:37:32,960 --> 00:37:34,020 Nie działa poprzez nich do tyłu. 779 00:37:34,020 --> 00:37:37,000 Praca przez nich z góry na dół bo oni i tylko kaskady 780 00:37:37,000 --> 00:37:38,630 jedna rzecz się mylić. 781 00:37:38,630 --> 00:37:42,532 Niejawna deklaracja getInt function (). 782 00:37:42,532 --> 00:37:43,020 Tak. 783 00:37:43,020 --> 00:37:44,420 Więc to nie wystarczyło. 784 00:37:44,420 --> 00:37:46,760 I niby popełnili ten sam błąd, ale trochę inaczej tym razem. 785 00:37:46,760 --> 00:37:51,940 Muszę to nie tylko stdio.h ale również cs50.h, który obejmuje 786 00:37:51,940 --> 00:37:56,770 tak zwane deklaracje uzyskać int, który uczyć urządzenia, lub uczy 787 00:37:56,770 --> 00:37:58,760 C, co getInt () jest. 788 00:37:58,760 --> 00:37:59,550 >> Więc pozwól mi ponownie zapisać. 789 00:37:59,550 --> 00:38:02,040 Mam zamiar ignorować inne błędy bo mam zamiar nadzieję, że są one 790 00:38:02,040 --> 00:38:05,210 w jakiś sposób związana z błędem I już ustalone. 791 00:38:05,210 --> 00:38:08,710 Więc pozwól mi iść do przodu i ponownie skompilować z pozytywnego, Enter. 792 00:38:08,710 --> 00:38:09,020 Cholera. 793 00:38:09,020 --> 00:38:09,985 Trzy błędy, ciągle. 794 00:38:09,985 --> 00:38:12,650 Pozwól mi przejść do pierwszego. 795 00:38:12,650 --> 00:38:14,320 Niewykorzystane zmienne n. 796 00:38:14,320 --> 00:38:15,850 Nie widziałem tego wcześniej. 797 00:38:15,850 --> 00:38:17,200 I to też jest trochę tajemnicze. 798 00:38:17,200 --> 00:38:18,850 To wyjście kompilatora. 799 00:38:18,850 --> 00:38:23,610 I co, że podświetlona linia tam - positive.c :9:13 - 800 00:38:23,610 --> 00:38:28,960 mówi, to mówi w wierszu dziewiątym positive.c, na 13 postaci, 801 00:38:28,960 --> 00:38:31,510 13 kolumny, to popełnił ten błąd. 802 00:38:31,510 --> 00:38:34,230 >> A w szczególności, to mówi mnie niewykorzystana zmienna n. 803 00:38:34,230 --> 00:38:35,790 Zobaczmy więc - 804 00:38:35,790 --> 00:38:37,150 linia dziewięć. 805 00:38:37,150 --> 00:38:40,430 Używam n w tym sensie, że Daję mu wartość. 806 00:38:40,430 --> 00:38:44,200 Ale to, co kompilator nie podoba to że nie jestem pozornie go używać. 807 00:38:44,200 --> 00:38:45,560 Ale chwileczkę, używam go. 808 00:38:45,560 --> 00:38:48,170 W linii 11, używam go tutaj. 809 00:38:48,170 --> 00:38:52,430 Ale jeśli przewijać dalej w positive.c :11 - 810 00:38:52,430 --> 00:38:56,230 więc w linii 11, znak 12, kompilator mi mówi, wykorzystanie 811 00:38:56,230 --> 00:38:58,670 nielegalnej identyfikator n. 812 00:38:58,670 --> 00:39:02,760 >> Więc oznacza mam niezarejestrowanej nie określono go jako 813 00:39:02,760 --> 00:39:04,970 zmienna o typie danych. 814 00:39:04,970 --> 00:39:05,500 Ale chwileczkę. 815 00:39:05,500 --> 00:39:09,150 Zrobiłem dokładnie to, że w linii dziewięciu. 816 00:39:09,150 --> 00:39:11,100 Więc ktoś jest naprawdę mylić tutaj. 817 00:39:11,100 --> 00:39:14,900 To albo ja, albo kompilator, ponieważ zgodnie dziewięciu znowu jestem deklarując 818 00:39:14,900 --> 00:39:18,650 int n, i jestem przypisując mu zwrotu wartości getInt (). 819 00:39:18,650 --> 00:39:22,930 Następnie używam tej zmiennej n w wierszu 11 oraz sprawdzenie, czy jego wartość jest mniejsza 820 00:39:22,930 --> 00:39:24,050 lub równa zeru. 821 00:39:24,050 --> 00:39:27,430 Ale to podobno jest zły i zepsuty, dlaczego? 822 00:39:27,430 --> 00:39:30,630 823 00:39:30,630 --> 00:39:32,490 Powiedz to jeszcze raz? 824 00:39:32,490 --> 00:39:35,690 >> Ach, muszę oświadczyć, n przed wejściem do pętli. 825 00:39:35,690 --> 00:39:36,370 Ale dlaczego? 826 00:39:36,370 --> 00:39:39,830 To znaczy, że po prostu zaproponował nieco temu, że dobrze jest deklarować zmienne 827 00:39:39,830 --> 00:39:43,600 wszystko na jednej linii, a następnie przypisać im jakąś wartość. 828 00:39:43,600 --> 00:39:46,790 Zmienna globalna - wróćmy do tego pomysłu w chwilę. 829 00:39:46,790 --> 00:39:48,690 Dlaczego chcesz mi postawić to poza pętli? 830 00:39:48,690 --> 00:40:03,170 831 00:40:03,170 --> 00:40:03,830 Jest. 832 00:40:03,830 --> 00:40:06,780 Dokładnie. 833 00:40:06,780 --> 00:40:09,610 >> Tak więc, choć, nieco sprzeczne z intuicją, pozwól mi podsumować. 834 00:40:09,610 --> 00:40:13,510 Kiedy deklarujesz n wewnątrz z zasłaniać tam - 835 00:40:13,510 --> 00:40:16,320 specjalnie wewnątrz te nawiasy klamrowe - 836 00:40:16,320 --> 00:40:19,210 że zmienna n ma co zwany zakres - 837 00:40:19,210 --> 00:40:23,210 niezwiązane z naszego systemu punktacji w Kurs - ale ma zakres, który jest 838 00:40:23,210 --> 00:40:25,190 ograniczone do tych klamrach. 839 00:40:25,190 --> 00:40:28,460 Innymi słowy, zwykle jeśli zadeklarować Zmienna wewnątrz zestawu 840 00:40:28,460 --> 00:40:33,370 nawiasy klamrowe, że zmienna istnieje tylko wewnątrz tych klamrach. 841 00:40:33,370 --> 00:40:37,320 Tak więc według tej logiki sam, chociaż Mam oświadczył n zgodnie dziewięciu, to 842 00:40:37,320 --> 00:40:41,910 w zasadzie znika z zakresu, znika z pamięci, że tak powiem, 843 00:40:41,910 --> 00:40:43,370 przez czas I hit linii 11. 844 00:40:43,370 --> 00:40:47,370 Ponieważ linia 11, niestety, jest poza tymi klamrami. 845 00:40:47,370 --> 00:40:51,540 >> Więc niestety nie może naprawić tego przez wracając do tego, co robiłem wcześniej. 846 00:40:51,540 --> 00:40:53,370 Możecie na początku tego zrobić. 847 00:40:53,370 --> 00:40:56,370 Ale co ty nie teraz robi się cyklicznie? 848 00:40:56,370 --> 00:40:58,260 Nie jesteś oczywiście coraz int cyklicznie. 849 00:40:58,260 --> 00:41:01,320 Tak więc możemy opuścić getInt (), a my powinien opuścić getInt () wewnątrz 850 00:41:01,320 --> 00:41:04,420 pętla, ponieważ to, co chcemy męczyć użytkownika o nowo. 851 00:41:04,420 --> 00:41:08,660 Ale to nie wystarcza, aby przejść do linii, powiedzmy, sześć. 852 00:41:08,660 --> 00:41:10,150 Int n, średnik. 853 00:41:10,150 --> 00:41:12,990 Nie dać mu jeszcze, ponieważ wartość nie musisz się jeszcze. 854 00:41:12,990 --> 00:41:16,220 >> Ale teraz tu, uwaga - to byłoby bardzo łatwe błąd. 855 00:41:16,220 --> 00:41:19,440 Nie chcę, aby cień mój poprzedni Deklaracja nr. 856 00:41:19,440 --> 00:41:22,830 Chcę użyć n, że faktycznie istnieje. 857 00:41:22,830 --> 00:41:25,780 I tak teraz w linii 10, Przypisać n wartości. 858 00:41:25,780 --> 00:41:28,580 Ale w linii sześciu oświadczam, n. 859 00:41:28,580 --> 00:41:32,940 A więc mogę lub nie mogę używać go w linii 12 teraz? 860 00:41:32,940 --> 00:41:37,120 I może dlatego, między którymi kręcone szelki jest n oświadczył teraz? 861 00:41:37,120 --> 00:41:38,770 Jeden tutaj na linii pięciu. 862 00:41:38,770 --> 00:41:40,330 To jeden tutaj na linii 14. 863 00:41:40,330 --> 00:41:49,770 Więc jeśli teraz pomniejszyć, zapisać ten plik, przejdź z powrotem do i uruchom make pozytywne, to 864 00:41:49,770 --> 00:41:50,820 skompilowany ten czas. 865 00:41:50,820 --> 00:41:51,940 Więc to już postęp. 866 00:41:51,940 --> 00:41:53,640 Slash. . / Pozytywne, Enter. 867 00:41:53,640 --> 00:41:56,060 >> Żądam, że możesz dać mi dodatnia. 868 00:41:56,060 --> 00:41:57,750 Negative 1. 869 00:41:57,750 --> 00:41:59,020 Negative 2. 870 00:41:59,020 --> 00:42:00,680 Negative 3. 871 00:42:00,680 --> 00:42:01,760 Zero. 872 00:42:01,760 --> 00:42:03,000 One. 873 00:42:03,000 --> 00:42:05,130 I dzięki za to, jest co teraz drukowane. 874 00:42:05,130 --> 00:42:07,400 >> Pozwól mi spróbować czegoś innego, z ciekawości. 875 00:42:07,400 --> 00:42:09,600 Jestem powiedziano nam, aby wprowadzić liczbę całkowitą. 876 00:42:09,600 --> 00:42:12,870 Ale co, jeśli zamiast wpisać baranka? 877 00:42:12,870 --> 00:42:14,460 Więc teraz zobaczyć różne polecenia - 878 00:42:14,460 --> 00:42:15,350 ponowić próbę. 879 00:42:15,350 --> 00:42:17,670 Ale nigdzie w kodzie nie piszę ponownie. 880 00:42:17,670 --> 00:42:22,320 Więc gdzie, prawdopodobnie, jest to ponownie zapyta pochodzi, można by powiedzieć? 881 00:42:22,320 --> 00:42:23,540 Tak, od getInt () sama. 882 00:42:23,540 --> 00:42:26,650 Tak więc jedną z rzeczy, personel CS50 za robi dla Ciebie, przynajmniej w tych pierwszych kilku 883 00:42:26,650 --> 00:42:30,400 tydzień, jest pisaliśmy pewną ilość błędu kontroli w celu zapewnienia, że ​​jeśli 884 00:42:30,400 --> 00:42:34,260 nazywasz getInt (), to będzie co najmniej wrócić int od użytkownika. 885 00:42:34,260 --> 00:42:35,460 Nie dostaniesz ciąg. 886 00:42:35,460 --> 00:42:36,440 Nie dostaniesz char. 887 00:42:36,440 --> 00:42:39,660 Nie dostaniesz coś zupełnie innym. 888 00:42:39,660 --> 00:42:40,510 Dostaniesz int. 889 00:42:40,510 --> 00:42:41,890 >> Teraz nie może być dodatni. 890 00:42:41,890 --> 00:42:42,770 Nie mogą być ujemne. 891 00:42:42,770 --> 00:42:44,550 Nie dajemy żadnych gwarancji wokół tego. 892 00:42:44,550 --> 00:42:48,960 Ale będziemy męczyć użytkownika, aby ponowić próbę, spróbuj, spróbuj do czasu, gdy w rzeczywistości 893 00:42:48,960 --> 00:42:49,810 współpracuje. 894 00:42:49,810 --> 00:42:53,085 Podobnie, jeśli zrobić 1,23, że nie int jest. 895 00:42:53,085 --> 00:42:58,400 Ale jeśli wpisze się w, powiedzmy, 50, które Daje mi to wartość, która chciałem. 896 00:42:58,400 --> 00:42:59,050 >> Dobrze. 897 00:42:59,050 --> 00:43:01,380 Więc nie jest źle. 898 00:43:01,380 --> 00:43:04,780 Wszelkie pytania na temat tego, co właśnie zrobiłeś? 899 00:43:04,780 --> 00:43:07,930 Kluczem wynos jest, aby nie być jasne, tyle pętli, które widzieliśmy 900 00:43:07,930 --> 00:43:10,880 przed choć tak naprawdę nie mamy używane, ale kwestia zakresu, w którym 901 00:43:10,880 --> 00:43:17,045 zmienne mogą być mogą być stosowane w ciągu jakiegoś określonego zakresu. 902 00:43:17,045 --> 00:43:19,830 >> Dobra, daj mi adres sugestię wprowadzone wcześniej, że z 903 00:43:19,830 --> 00:43:20,860 zmienna globalna. 904 00:43:20,860 --> 00:43:24,880 Tak na marginesie, to okazuje się, że inny Rozwiązanie tego problemu, ale 905 00:43:24,880 --> 00:43:28,880 zazwyczaj błędne rozwiązanie lub źle zaprojektowane rozwiązanie jest 906 00:43:28,880 --> 00:43:31,670 zadeklarować zmienną jako co nazywa zmienna globalna. 907 00:43:31,670 --> 00:43:34,610 Teraz jestem trochę naruszono moją definicję zakresu, ponieważ istnieje 908 00:43:34,610 --> 00:43:37,680 nie nawiasy klamrowe na górze i na samym dole pliku. 909 00:43:37,680 --> 00:43:40,190 Ale implikacja, że jest to, że teraz w linii czterech, 910 00:43:40,190 --> 00:43:41,710 n jest zmienną globalną. 911 00:43:41,710 --> 00:43:44,460 I jak sama nazwa wskazuje, jest to tylko dostępne wszędzie. 912 00:43:44,460 --> 00:43:45,790 >> Scratch faktycznie ma te. 913 00:43:45,790 --> 00:43:48,650 Jeśli użyto zmiennej, można przypomnieć, trzeba było wybrać, czy to na 914 00:43:48,650 --> 00:43:50,780 to sprite lub wszystkich duszków. 915 00:43:50,780 --> 00:43:54,270 Cóż, wszystkie duchy to tylko jaśniejsze sposób mówienia globalnym. 916 00:43:54,270 --> 00:43:55,520 Tak? 917 00:43:55,520 --> 00:44:09,690 918 00:44:09,690 --> 00:44:10,990 Ach, bardzo dobre pytanie. 919 00:44:10,990 --> 00:44:14,310 >> Tak więc przypomnieć, że w pierwszej wersji mojego kodu, kiedy nieprawidłowo 920 00:44:14,310 --> 00:44:17,700 zadeklarowane i zdefiniowane n zgodne dziewięć - 921 00:44:17,700 --> 00:44:19,980 I oświadczył to jako zmienna i dałem mu wartość z 922 00:44:19,980 --> 00:44:21,160 operator przypisania - 923 00:44:21,160 --> 00:44:22,520 to dało mi dwa błędy. 924 00:44:22,520 --> 00:44:26,560 Jeden, że n nie jest używana, a dwa, że ​​w linii 11 925 00:44:26,560 --> 00:44:27,770 to po prostu nie został uznany. 926 00:44:27,770 --> 00:44:31,120 Więc pierwszy ja nie adres w czasie. 927 00:44:31,120 --> 00:44:35,130 To nie jest ściśle error zadeklarować zmienna, ale nie używać go. 928 00:44:35,130 --> 00:44:38,540 Ale jedną z rzeczy, które robiliśmy w CS50 urządzenie, celowo, 929 00:44:38,540 --> 00:44:43,340 pedagogicznie, to mamy odpalił Oczekiwania kompilatora, aby 930 00:44:43,340 --> 00:44:46,970 upewnić się, że robisz rzeczy, a nie tylko poprawnie, ale bardzo poprawnie. 931 00:44:46,970 --> 00:44:51,520 >> Bo jeśli zadeklarowanie zmiennej jak n i nie używając go, lub wykorzystanie 932 00:44:51,520 --> 00:44:53,700 poprawnie, a następnie co jest on tam robi? 933 00:44:53,700 --> 00:44:55,650 To naprawdę nie ma sensu. 934 00:44:55,650 --> 00:44:58,980 I to jest bardzo łatwe w czasie, jeśli nie konfiguracji własnego komputera w 935 00:44:58,980 --> 00:45:01,960 w ten sposób, aby po prostu kod, który ma małe szczątki tutaj, resztki tam. 936 00:45:01,960 --> 00:45:04,390 A potem miesiąc później spojrzeć wstecz i jesteś jak, dlaczego jest to linia 937 00:45:04,390 --> 00:45:05,060 Kod nie? 938 00:45:05,060 --> 00:45:07,940 A jeśli nie ma dobrego powodu, że nie korzystać ci lub swoich kolegów 939 00:45:07,940 --> 00:45:10,650 w dół drogi, musiał potykam się nim wtedy. 940 00:45:10,650 --> 00:45:12,540 >> Tak na marginesie, gdzie jest że pochodzi z? 941 00:45:12,540 --> 00:45:16,410 Cóż, pamiętam, że za każdym razem, skompilować Program, wszystkie z tych rzeczy jest 942 00:45:16,410 --> 00:45:17,380 są drukowane. 943 00:45:17,380 --> 00:45:18,350 Więc wracamy do tego. 944 00:45:18,350 --> 00:45:22,230 Ale znowu, uczynić to narzędzie, które automatyzuje proces kompilacji przez 945 00:45:22,230 --> 00:45:24,830 działa rzeczywisty kompilator nazywa dzyń. 946 00:45:24,830 --> 00:45:27,650 To coś, to w końcu zobaczyć, ma zrobić z debugowania w specjalny 947 00:45:27,650 --> 00:45:29,060 Program nazywa debuggera. 948 00:45:29,060 --> 00:45:32,150 Wiąże się to z optymalizacją Kod - więcej o tym w przyszłości. 949 00:45:32,150 --> 00:45:33,620 Std = c99 - 950 00:45:33,620 --> 00:45:37,870 oznacza to po prostu użyć wersji z 1999 roku C. C było wokół, nawet dłużej niż 951 00:45:37,870 --> 00:45:40,830 , ale oni zrobili jakieś fajne Zmiany 10 plus lat temu. 952 00:45:40,830 --> 00:45:42,690 >> A oto te właściwe. 953 00:45:42,690 --> 00:45:45,880 Mówimy uczynić niczego, co uprzednio byłby ostrzegawczy 954 00:45:45,880 --> 00:45:48,560 error zapobiegania studenta z kompilacji. 955 00:45:48,560 --> 00:45:51,400 A środki ścienne zrobić dla cała masa rzeczy, nie 956 00:45:51,400 --> 00:45:53,060 tak podobne do zmiennych. 957 00:45:53,060 --> 00:45:54,700 I pozwól mi przejść do Koniec tego wiersza. 958 00:45:54,700 --> 00:45:56,430 I to też w końcu dowiemy wrócić. 959 00:45:56,430 --> 00:45:59,040 Jest to oczywiście nazwa Plik Jestem kompilacji. 960 00:45:59,040 --> 00:46:02,160 To przypomina nazwę pliku Jestem wyprowadzanie jako nazwa 961 00:46:02,160 --> 00:46:04,070 mojego runnable programu. 962 00:46:04,070 --> 00:46:08,970 Ten-lcs50 tylko oznacza używać CS50 biblioteka, a wszelkie zer i jedynek, że 963 00:46:08,970 --> 00:46:12,390 staff napisał i zebrane wcześniej w tym roku, integracji 964 00:46:12,390 --> 00:46:13,490 ich do mojego programu. 965 00:46:13,490 --> 00:46:16,130 >> A ktoś wie co-lm jest? 966 00:46:16,130 --> 00:46:18,150 To jest biblioteka matematyczna, która jest tylko tam, nawet jeśli jesteś 967 00:46:18,150 --> 00:46:19,320 nie robi żadnej matematyki. 968 00:46:19,320 --> 00:46:22,620 To jest po prostu automatycznie, pod warunkiem, nam zrobić. 969 00:46:22,620 --> 00:46:26,540 >> Cóż, pozwól mi zrobić jeszcze jeden przykład tu otwarcie nowego pliku. 970 00:46:26,540 --> 00:46:30,560 I niech mi uratować ten jeden jako string.c. 971 00:46:30,560 --> 00:46:37,980 Okazuje się, że gdy mówimy o danych Typy dzisiaj, jest jeszcze bardziej 972 00:46:37,980 --> 00:46:40,630 dzieje się pod maską niż widzieliśmy do tej pory. 973 00:46:40,630 --> 00:46:42,290 Więc pozwól mi szybko zrobić szybki program. 974 00:46:42,290 --> 00:46:44,510 Dołącz stdio.h. 975 00:46:44,510 --> 00:46:45,730 A ja z tym że. 976 00:46:45,730 --> 00:46:48,110 I wiesz, nie pozwól mi zrobić sam błąd ponownie. 977 00:46:48,110 --> 00:46:50,540 Dołącz cs50.h. 978 00:46:50,540 --> 00:46:54,870 I pozwól mi iść do przodu teraz i zrobić int main (void). 979 00:46:54,870 --> 00:46:58,790 >> A teraz po prostu chcę zrobić program że robi to - stwierdzenie ciąg 980 00:46:58,790 --> 00:47:03,610 nazywane s, a otrzymasz ciąg od użytkownika. 981 00:47:03,610 --> 00:47:05,820 I pozwól mi zrobić trochę instrukcje tutaj - 982 00:47:05,820 --> 00:47:09,960 proszę dać mi łańcuch - tak Użytkownik wie, co robić. 983 00:47:09,960 --> 00:47:13,190 A potem tu poniżej tego, Chcę, aby wykonać następujące czynności - 984 00:47:13,190 --> 00:47:16,060 dla int i ma zero. 985 00:47:16,060 --> 00:47:18,580 Ponownie, informatycy zazwyczaj rozpocząć odliczanie do zera, ale może 986 00:47:18,580 --> 00:47:20,340 sprawiają, że jeden, jeśli naprawdę chcemy. 987 00:47:20,340 --> 00:47:27,240 Teraz mam zamiar zrobić, i jest mniej niż długość łańcucha S. 988 00:47:27,240 --> 00:47:28,430 Więc 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 ponownie, to zwięzłe, ponieważ jest to łatwiejsze pisać, nawet jeśli jest to 991 00:47:31,650 --> 00:47:32,590 trochę tajemnicze. 992 00:47:32,590 --> 00:47:35,290 >> To jest funkcja, że ​​nie używałem wcześniej, ale dosłownie to robi - 993 00:47:35,290 --> 00:47:37,810 wróć do mnie pod numer, który reprezentuje Długość łańcucha 994 00:47:37,810 --> 00:47:38,690 że użytkownik wpisał. 995 00:47:38,690 --> 00:47:41,740 Jeśli wpisane hello, że powróci pięć, ponieważ jest pięć 996 00:47:41,740 --> 00:47:42,890 Litery w Halo. 997 00:47:42,890 --> 00:47:45,390 Następnie, w każdej iteracji ta pętla, i Plus Plus. 998 00:47:45,390 --> 00:47:49,170 Więc jeszcze raz, nawet jeśli standardowe budowy nie jesteś dość zbyt wygodne lub 999 00:47:49,170 --> 00:47:50,420 zaznajomieni z nim jeszcze. 1000 00:47:50,420 --> 00:47:53,220 >> Ale teraz w każdej iteracji tej pętli, zauważyć, co mam zamiar zrobić. 1001 00:47:53,220 --> 00:47:56,690 Chcę iść do przodu i drukuj z pojedynczego znaku - 1002 00:47:56,690 --> 00:47:59,940 tak% c backslash n na nowej linii. 1003 00:47:59,940 --> 00:48:00,990 I wtedy, wiesz, co chcę zrobić? 1004 00:48:00,990 --> 00:48:05,090 Cokolwiek słowo że użytkownik wpisze w, jak cześć, Chcę wydrukować 1005 00:48:05,090 --> 00:48:09,530 H-E-L-L-O jeden znak w wierszu. 1006 00:48:09,530 --> 00:48:13,080 Innymi słowy, chcę, aby na Poszczególne znaki w ciągu znaków, 1007 00:48:13,080 --> 00:48:16,770 przy czym do tej pory ciąg ma tylko był ciąg znaków. 1008 00:48:16,770 --> 00:48:21,690 >> I okazuje się, mogę zrobić s, wspornikach i, nawiasu, zamknij 1009 00:48:21,690 --> 00:48:23,580 nawias, średnik. 1010 00:48:23,580 --> 00:48:25,640 I mam zrobić jeszcze jedną rzecz. 1011 00:48:25,640 --> 00:48:30,570 To jest w pliku o nazwie string.h że strlen jest zadeklarowana. 1012 00:48:30,570 --> 00:48:33,190 Więc jeśli chcę używać tej funkcji, I trzeba powiedzieć, że kompilator, 1013 00:48:33,190 --> 00:48:34,450 spodziewać się go używać. 1014 00:48:34,450 --> 00:48:37,040 Teraz pozwól mi iść do przodu i robić Program nazywa się ciągiem. 1015 00:48:37,040 --> 00:48:39,150 Dot, slash, string. 1016 00:48:39,150 --> 00:48:40,130 >> Proszę dać mi łańcuch. 1017 00:48:40,130 --> 00:48:40,900 Pójdę dalej i wpisz go. 1018 00:48:40,900 --> 00:48:43,040 Witam, wszystkie czapki, Enter. 1019 00:48:43,040 --> 00:48:47,390 A teraz uwaga mam to wydrukowane jeden znak po drugim. 1020 00:48:47,390 --> 00:48:51,450 Więc nowy szczegół jest to, że ciąg, Na koniec dnia, może być 1021 00:48:51,450 --> 00:48:54,810 uzyskać w drodze jego osoby znaków wprowadzając na plac 1022 00:48:54,810 --> 00:48:55,840 Zapis wspornik. 1023 00:48:55,840 --> 00:48:59,090 A to dlatego, że napis pod spodem Okap jest rzeczywiście sekwencję 1024 00:48:59,090 --> 00:48:59,810 znaków. 1025 00:48:59,810 --> 00:49:02,010 Ale co o nich jest schludny w pamięci komputera - 1026 00:49:02,010 --> 00:49:05,300 Mac, PC, cokolwiek to jest - są dosłownie z powrotem do tyłu do tyłu - 1027 00:49:05,300 --> 00:49:06,225 H-E-L-P-O - 1028 00:49:06,225 --> 00:49:09,920 na indywidualne, w sąsiedztwie bajtów w pamięci. 1029 00:49:09,920 --> 00:49:13,210 >> Więc jeśli chcesz, aby na ósme takie bajt, który w tej pętli byłoby 1030 00:49:13,210 --> 00:49:16,900 Uchwyt zero, jeden uchwyt, uchwyt dwa, Wspornik trzy, wspornik cztery - 1031 00:49:16,900 --> 00:49:18,890 , która jest zerowa indeksowane aż pięciu - 1032 00:49:18,890 --> 00:49:23,330 że wypisze H-E-L-L-O w oddzielnym wierszu. 1033 00:49:23,330 --> 00:49:26,320 >> Teraz, jako teaser, pozwól mi pokazać, różne rzeczy w końcu będziesz mieć 1034 00:49:26,320 --> 00:49:31,950 w stanie zrozumieć, co najmniej niektóre blisko patrząc. 1035 00:49:31,950 --> 00:49:35,610 Z jednej strony, to, co zawarte w dzisiejszym przykłady, jeśli chcesz, jest w rzeczywistości 1036 00:49:35,610 --> 00:49:38,300 jeden z pierwszych Jailbreaks dla iPhone. 1037 00:49:38,300 --> 00:49:40,800 Jailbreaking oznacza pękanie telefon , dzięki czemu można z niej korzystać na 1038 00:49:40,800 --> 00:49:43,380 inny nośnik lub install własnego oprogramowania. 1039 00:49:43,380 --> 00:49:45,660 I można zauważyć, to wygląda zupełnie tajemnicze, najbardziej prawdopodobne. 1040 00:49:45,660 --> 00:49:46,520 Ale spójrz na to. 1041 00:49:46,520 --> 00:49:50,420 IPhone najwyraźniej krakingu dla pętli, jeśli warunek, inny 1042 00:49:50,420 --> 00:49:52,580 stan, kilka funkcji nie widziałem. 1043 00:49:52,580 --> 00:49:54,230 >> I znowu, nie będzie w Prawdopodobnie pierwszy rzut oka 1044 00:49:54,230 --> 00:49:55,620 zrozumieć, jak to działa. 1045 00:49:55,620 --> 00:49:58,940 Ale wszystko, co jakby się za pewnik w naszym współczesnym życiu 1046 00:49:58,940 --> 00:50:02,040 w rzeczywistości prowadzi do zmniejszenia, nawet do kilku z tych podstaw byliśmy 1047 00:50:02,040 --> 00:50:02,820 ogląda. 1048 00:50:02,820 --> 00:50:06,680 Pozwólcie mi iść do przodu i otworzyć jeden inny program, holloway.c. 1049 00:50:06,680 --> 00:50:08,970 Więc to też jest coś, co powinno naprawdę nie wiem. 1050 00:50:08,970 --> 00:50:12,440 Nawet nikt z personelu lub mogłem prawdopodobnie dowiedzieć się tego, patrząc na 1051 00:50:12,440 --> 00:50:15,450 to dlatego, że to był czyjś kod , który został przedstawiony do tego, co 1052 00:50:15,450 --> 00:50:19,630 historycznie znany jako ukrywane C konkurs, w którym można napisać program 1053 00:50:19,630 --> 00:50:24,670 kompiluje i działa, ale jest tak cholernie tajemnicze żaden człowiek nie może zrozumieć, co 1054 00:50:24,670 --> 00:50:27,530 to będzie zrobić, aż faktycznie go uruchomić. 1055 00:50:27,530 --> 00:50:29,940 >> Więc rzeczywiście, jeśli spojrzeć na to kod, widzę przełącznika. 1056 00:50:29,940 --> 00:50:30,870 Widzę głównym. 1057 00:50:30,870 --> 00:50:33,800 Widzę te nawiasy kwadratowe sugerując pewnego rodzaju tablicy. 1058 00:50:33,800 --> 00:50:35,970 Czy ktoś chce się odgadnąć, co program ten faktycznie 1059 00:50:35,970 --> 00:50:37,220 czy jeśli uruchomię Holloway? 1060 00:50:37,220 --> 00:50:39,940 1061 00:50:39,940 --> 00:50:40,750 Tak. 1062 00:50:40,750 --> 00:50:43,050 OK. 1063 00:50:43,050 --> 00:50:44,690 Brawo. 1064 00:50:44,690 --> 00:50:48,090 Więc tylko personel i nie mogę zrozumieć się, co te rzeczy zrobić. 1065 00:50:48,090 --> 00:50:51,670 >> A teraz wreszcie, pozwól mi iść do przodu i otworzyć jeden inny program. 1066 00:50:51,670 --> 00:50:53,440 To one - 1067 00:50:53,440 --> 00:50:55,550 ponownie, zrobimy kod źródłowy dostępne online - ta właśnie 1068 00:50:55,550 --> 00:50:57,480 niby ładna dla oka. 1069 00:50:57,480 --> 00:50:59,750 Wszystko zrobili jest trafiony spacja trochę. 1070 00:50:59,750 --> 00:51:01,320 Ale to jest prawdziwy kod. 1071 00:51:01,320 --> 00:51:04,790 Więc jeśli uważasz, że jest ładna, jeśli faktycznie uruchomić to w wierszu polecenia, 1072 00:51:04,790 --> 00:51:08,970 w końcu zobaczysz, jak my może robić takie rzeczy. 1073 00:51:08,970 --> 00:51:14,008 >> Więc my zostawimy cię w tej notatce i do zobaczenia w środę. 1074 00:51:14,008 --> 00:51:18,440 >> [Odtwarzanie muzyki] 1075 00:51:18,440 --> 00:51:23,380 >> Głośnik 2: Na następnym CS50, TFS etap bunt. 1076 00:51:23,380 --> 00:51:24,112 >> SPEAKER 3: Tam jest. 1077 00:51:24,112 --> 00:51:25,362 Brać go! 1078 00:51:25,362 --> 00:51:29,912 1079 00:51:29,912 --> 00:51:32,074 >> [Odtwarzanie muzyki]