1 00:00:00,000 --> 00:00:10,940 2 00:00:10,940 --> 00:00:13,060 >> DAVID J MALAN: Wszystkie Dobra, więc to jest CS50. 3 00:00:13,060 --> 00:00:15,040 I jest to wyraźnie w piątek. 4 00:00:15,040 --> 00:00:16,850 I to jest koniec tygodnia. 5 00:00:16,850 --> 00:00:21,020 Więc może pamiętacie, że skończyliśmy, Ostatnim razem, z cliffhanger rodzajów. 6 00:00:21,020 --> 00:00:25,020 W którym możemy wystawiać kłamstwo, że nie względu na to, co już nauczył rośnie 7 00:00:25,020 --> 00:00:31,610 w górę, 1 podzielone przez 10 nie jest w Fakt, 0,1 lub 0,100 lub 0,10000. 8 00:00:31,610 --> 00:00:35,270 W rzeczywistości, jeśli skompilować to Program, jak to było wczoraj, z, 9 00:00:35,270 --> 00:00:39,770 sprawiają, niedokładności, a następnie zrobić kropkę, slash, brak precyzji, 10 00:00:39,770 --> 00:00:43,600 dowiedzieliśmy się, że to, co jest 1 podzielone przez 10 rzeczywiście jest. 11 00:00:43,600 --> 00:00:46,140 Więc to nie jest tak naprawdę całkiem inaczej. 12 00:00:46,140 --> 00:00:49,014 Ale to robi aluzję na niektóre podstawowym ograniczeniem komputerów. 13 00:00:49,014 --> 00:00:50,930 I rzeczywiście, wśród rzeczy będziemy robić 14 00:00:50,930 --> 00:00:55,130 dziś jest przyjrzeć się, dlaczego to ma się stało, jakie konsekwencje ma to, 15 00:00:55,130 --> 00:00:58,430 jak ludzkość nie powiodła się uchwycić to w jakiś bardzo 16 00:00:58,430 --> 00:01:00,410 poważne situations-- wynik z których 17 00:01:00,410 --> 00:01:03,141 jest dość tragiczna i expensive-- a także 18 00:01:03,141 --> 00:01:04,849 przyjrzeć się, w jaki sposób może rzeczywiście bronić 19 00:01:04,849 --> 00:01:06,530 wobec tego rodzaju ograniczeń. 20 00:01:06,530 --> 00:01:10,940 Tak intuicyjnie, być może, dlaczego jest 1 dzieli się przez 10, 21 00:01:10,940 --> 00:01:15,480 zgodnie z moim komputerem tutaj nie tylko 1/10, 0,10? 22 00:01:15,480 --> 00:01:15,980 Tak. 23 00:01:15,980 --> 00:01:16,530 Co myślisz? 24 00:01:16,530 --> 00:01:17,860 >> PUBLICZNOŚCI członkowskie: podstawa jest inna? 25 00:01:17,860 --> 00:01:18,550 >> DAVID J MALAN: Co takiego jest? 26 00:01:18,550 --> 00:01:19,730 Och, podstawa jest inna? 27 00:01:19,730 --> 00:01:20,720 Więc nie do końca. 28 00:01:20,720 --> 00:01:23,200 To rzeczywiście więcej fundamentalne znaczenie dla sprzętu. 29 00:01:23,200 --> 00:01:23,980 Inne myśli? 30 00:01:23,980 --> 00:01:24,584 Tak. 31 00:01:24,584 --> 00:01:26,750 PUBLICZNOŚCI PAŃSTWO: Oni stanowią numery inaczej? 32 00:01:26,750 --> 00:01:27,880 DAVID J MALAN: Tak they-- prawo. 33 00:01:27,880 --> 00:01:29,338 Stanowią one numery inaczej. 34 00:01:29,338 --> 00:01:30,700 Niedokładnie, najwyraźniej. 35 00:01:30,700 --> 00:01:33,190 Tak, że jest-- Cóż, inaczej od czego? 36 00:01:33,190 --> 00:01:34,490 Lub od kogo? 37 00:01:34,490 --> 00:01:35,050 Od nas? 38 00:01:35,050 --> 00:01:35,966 PUBLICZNOŚCI PAŃSTWO: Tak. 39 00:01:35,966 --> 00:01:38,930 Nie używać po przecinku system [niesłyszalne]. 40 00:01:38,930 --> 00:01:39,680 DAVID J MALAN: OK. 41 00:01:39,680 --> 00:01:41,560 Więc w tym sensie, że nie korzystać z systemu dziesiętnego. 42 00:01:41,560 --> 00:01:43,720 Pod maską, wszystko jest, rzeczywiście, binarny, 43 00:01:43,720 --> 00:01:45,510 i to jest związane, w rzeczywistości. 44 00:01:45,510 --> 00:01:48,135 Ale to jeszcze prostsze wyjaśnienie niż to. 45 00:01:48,135 --> 00:01:48,635 Tak. 46 00:01:48,635 --> 00:01:49,970 >> PUBLICZNOŚCI PAŃSTWO: Oni tylko mają tak wiele bitów. 47 00:01:49,970 --> 00:01:52,370 Można je przechowywać tylko do pewnego stopniu, jak z miejscami po przecinku. 48 00:01:52,370 --> 00:01:52,780 >> DAVID J MALAN: Tak. 49 00:01:52,780 --> 00:01:54,420 To jest to, co naprawdę się na niego. 50 00:01:54,420 --> 00:01:57,180 Okazuje się, że komputery zwykle, zawsze będzie tylko 51 00:01:57,180 --> 00:01:59,690 użyć pewnej ilości informacji do reprezentowania coś. 52 00:01:59,690 --> 00:01:59,870 Dobrze? 53 00:01:59,870 --> 00:02:02,110 Po tym wszystkim, mamy tylko stałą Ilość miejsca na dysku twardym. 54 00:02:02,110 --> 00:02:04,210 Mamy tylko stałą kwotę pamięci RAM lub pamięci komputera. 55 00:02:04,210 --> 00:02:06,251 A jeśli masz tylko stała kwota, o czymś, 56 00:02:06,251 --> 00:02:09,611 na pewno nie można rzeczywiście liczyć do nieskończoności lub numeru. 57 00:02:09,611 --> 00:02:11,610 Ty, rodzaju, muszą wybierać, jaki zakres 58 00:02:11,610 --> 00:02:13,220 wartości masz zamiar wspierać. 59 00:02:13,220 --> 00:02:18,100 >> I tak na przykład, za tydzień lub dwa temu, kiedy rozmawialiśmy o kodzie ASCII, 60 00:02:18,100 --> 00:02:21,610 i rozmawialiśmy o 8 bitów, lub bajt, że tak powiem, 61 00:02:21,610 --> 00:02:26,360 najwięcej mogliśmy stanowią 8 bitów to co? 62 00:02:26,360 --> 00:02:28,350 255. 63 00:02:28,350 --> 00:02:31,850 I możemy reprezentować 256 łączne wartości ale nie, jeśli spędzamy jedną z nich 64 00:02:31,850 --> 00:02:34,190 na 0-- No, ale jeśli spędzić jeden z nich na 0, 65 00:02:34,190 --> 00:02:36,830 to największa liczba Jest, oczywiście, 255. 66 00:02:36,830 --> 00:02:39,410 >> Tak więc okazuje się, że jest to w przypadku również w tym kontekście. 67 00:02:39,410 --> 00:02:42,350 Zaczęliśmy rozmawiać, po raz ostatni, o liczb zmiennoprzecinkowych, które 68 00:02:42,350 --> 00:02:44,640 różni się od liczby całkowite w że mają dziesiętny 69 00:02:44,640 --> 00:02:47,056 i, miejmy nadzieję, niektóre numery Po tym, ale też. 70 00:02:47,056 --> 00:02:51,730 Komputer jest tylko zazwyczaj dzieje w użyciu 32 bitów, może 64 bity 71 00:02:51,730 --> 00:02:53,497 do reprezentowania wartość zmiennoprzecinkową. 72 00:02:53,497 --> 00:02:56,080 Więc mimo, że wyrosłem uczenia się matematyki i wiedząc, 73 00:02:56,080 --> 00:02:58,750 które koniecznie musisz nieskończenie wiele liczb 74 00:02:58,750 --> 00:03:01,650 po przecinku, a nie jeśli masz pamięć skończony. 75 00:03:01,650 --> 00:03:03,930 Ty, rodzaj, trzeba zaokrąglić, lub wybierać, które 76 00:03:03,930 --> 00:03:05,346 numery idziesz do reprezentowania. 77 00:03:05,346 --> 00:03:08,710 I tak można myśleć, w pewnym sensie, co jest w komputerze najbliżej 78 00:03:08,710 --> 00:03:14,050 zbliżenie do wartości 1/10, że można go dostać, z zaledwie 32 lub więcej bitów. 79 00:03:14,050 --> 00:03:15,300 I to nie jest tylko 1/10. 80 00:03:15,300 --> 00:03:19,820 >> Na przykład, jeśli mogę to zmienić, aby 1/3, co naszym zdaniem jest jeszcze prostsze. 81 00:03:19,820 --> 00:03:21,300 Więc 1 dzieli się przez 3. 82 00:03:21,300 --> 00:03:22,355 Pozwól mi zapisać plik. 83 00:03:22,355 --> 00:03:24,680 Pozwólcie mi iść do przodu i przekompilować. 84 00:03:24,680 --> 00:03:25,820 I pozwól mi go ponownie uruchomić. 85 00:03:25,820 --> 00:03:30,000 Tutaj też, jak widać, 1/3 nie jest 0.3 a następnie nieskończona liczba 3-tych 86 00:03:30,000 --> 00:03:30,770 potem. 87 00:03:30,770 --> 00:03:32,540 Musisz to niedokładności na końcu. 88 00:03:32,540 --> 00:03:35,544 Więc my, ludzie są prawidłowe, a co nauczyłeś się jest w rzeczywistości, poprawne, 89 00:03:35,544 --> 00:03:37,460 ale my lada przed pewnymi ograniczeniami. 90 00:03:37,460 --> 00:03:39,420 >> I to, co myślałem my dzisiaj zrobić, to zacząć 91 00:03:39,420 --> 00:03:42,190 patrząc na, Szczerze mówiąc, Tragiczne skutki tego 92 00:03:42,190 --> 00:03:45,490 czasem, kiedy ludzkość nie dość realizacji 93 00:03:45,490 --> 00:03:48,460 do tej rzeczywistości i tych ograniczeń. 94 00:03:48,460 --> 00:03:52,360 I zobaczymy serię winiet z History Channel, które ma 95 00:03:52,360 --> 00:03:53,950 przyjrzeć się, jak rzeczy poszło nie tak. 96 00:03:53,950 --> 00:03:56,340 Jest to około 8 minut, i wrócimy po tym 97 00:03:56,340 --> 00:03:59,439 i przyjrzeć się dokładnie, co jeszcze może się nie udać. 98 00:03:59,439 --> 00:04:00,605 Jeśli możemy przyciemnić lights-- 99 00:04:00,605 --> 00:04:02,350 >> [ODTWARZANIE] 100 00:04:02,350 --> 00:04:06,310 >> -Computers, My wszyscy przychodzą do zaakceptowania Problemy te często frustrujące, że 101 00:04:06,310 --> 00:04:07,750 iść z nimi. 102 00:04:07,750 --> 00:04:11,370 Robaki, wirusy i oprogramowanie usterki są małe ceny 103 00:04:11,370 --> 00:04:13,230 zapłacić za wygodę. 104 00:04:13,230 --> 00:04:17,519 Ale w high-tech i szybki zastosowania militarne i programu kosmicznego, 105 00:04:17,519 --> 00:04:22,130 najmniejszy problem może być powiększony do katastrofy. 106 00:04:22,130 --> 00:04:27,750 W dniu 4 czerwca 1996 roku, naukowcy przygotowane uruchomienie bezzałogowego rakiety Ariane 5. 107 00:04:27,750 --> 00:04:29,890 To niósł naukowe Satelity zaprojektowane 108 00:04:29,890 --> 00:04:33,030 ustalić dokładnie, w jaki sposób Pole magnetyczne oddziałuje Ziemi 109 00:04:33,030 --> 00:04:35,600 wiatrami słonecznymi. 110 00:04:35,600 --> 00:04:37,930 Rakieta została zbudowana na Europejska Agencja Kosmiczna 111 00:04:37,930 --> 00:04:41,620 i podniósł się ze swojego zakładu na wybrzeżu Gujany Francuskiej. 112 00:04:41,620 --> 00:04:44,924 >> -I Około 30 sekund w lot, po raz pierwszy 113 00:04:44,924 --> 00:04:46,340 Zauważyłem coś się dzieje źle. 114 00:04:46,340 --> 00:04:49,280 Że dysze były obrotowe w sposób naprawdę nie powinny. 115 00:04:49,280 --> 00:04:53,042 Około 40 sekundach lotu, wyraźnie pojazd był w tarapatach, 116 00:04:53,042 --> 00:04:55,250 i to jest, gdy się decyzja, aby je zniszczyć. 117 00:04:55,250 --> 00:04:58,970 Urzędnik bezpieczeństwa Zakres z ogromne wnętrzności naciśnięciu przycisku, 118 00:04:58,970 --> 00:05:03,940 wysadzili rakiety, zanim mógł stanowić zagrożenie dla bezpieczeństwa publicznego. 119 00:05:03,940 --> 00:05:06,600 >> -To Było panieńskie Podróż z Ariane 5, 120 00:05:06,600 --> 00:05:09,270 i jego zniszczenie wziął miejsce ze względu na wadę 121 00:05:09,270 --> 00:05:10,992 wbudowane w oprogramowanie rakiety. 122 00:05:10,992 --> 00:05:12,700 -The Problemem na Ariane to, że nie 123 00:05:12,700 --> 00:05:15,370 było wiele, że wymagane 64 bity, aby wyrazić, 124 00:05:15,370 --> 00:05:18,150 i chciał konwertować to do liczby 16 bitów. 125 00:05:18,150 --> 00:05:21,160 Zakłada się, że ich liczby nigdy nie będzie bardzo duża, 126 00:05:21,160 --> 00:05:25,020 że większość z tych cyfr numer 0 64 bit były użytkownika. 127 00:05:25,020 --> 00:05:26,310 Byli w błędzie. 128 00:05:26,310 --> 00:05:28,680 >> -The Niezdolność jednego program do zaakceptowania 129 00:05:28,680 --> 00:05:32,820 rodzaj liczby generowane przez inna była u podstaw upadku. 130 00:05:32,820 --> 00:05:37,190 Rozwój oprogramowania stał się bardzo kosztowna część nowej technologii. 131 00:05:37,190 --> 00:05:40,760 Rakieta Ariane 4 był bardzo sukces, tak oprogramowania 132 00:05:40,760 --> 00:05:43,990 stworzone przez to także stosowane na Ariane 5. 133 00:05:43,990 --> 00:05:49,750 >> -The Podstawowym problemem było, że Ariane 5 był szybszy, przyspieszone szybciej. 134 00:05:49,750 --> 00:05:53,000 I oprogramowanie nie miał stanowiły, że. 135 00:05:53,000 --> 00:05:56,330 >> -The Zniszczenie rakiety była ogromna katastrofa finansowa, 136 00:05:56,330 --> 00:05:59,670 wszystkim z powodu błędu oprogramowania minut. 137 00:05:59,670 --> 00:06:01,990 Ale to nie był pierwszy Problemy konwersji danych Czas 138 00:06:01,990 --> 00:06:05,310 był nękany nowoczesną technologię rakietową. 139 00:06:05,310 --> 00:06:08,300 >> -w 1991, przy starcie z pierwszej wojny w Zatoce Perskiej, 140 00:06:08,300 --> 00:06:10,650 Patriota pocisk doświadczył podobnego rodzaju 141 00:06:10,650 --> 00:06:12,650 problem konwersji numeru. 142 00:06:12,650 --> 00:06:15,620 W wyniku tego, 28 osób, 28 amerykańskich żołnierzy 143 00:06:15,620 --> 00:06:18,440 zginęło, a około 100 rannych, 144 00:06:18,440 --> 00:06:21,900 gdy Patriot, która miała w celu ochrony przed przychodzących scuds, 145 00:06:21,900 --> 00:06:24,630 nie udało się wystrzelić pocisk. 146 00:06:24,630 --> 00:06:29,440 >> -Kiedy Irak najechał na Kuwejt i Ameryka Pustynna Burza rozpoczęła się na początku 1991 roku, 147 00:06:29,440 --> 00:06:33,800 Baterie rakiet Patriot zostały rozmieszczone chronić Arabię ​​Saudyjską i Izrael 148 00:06:33,800 --> 00:06:37,000 z irackich rakiet Scud ataków. 149 00:06:37,000 --> 00:06:40,610 Patriota to US, średniego zasięgu ziemia-powietrze systemu 150 00:06:40,610 --> 00:06:43,010 produkowane przez firmę Raytheon. 151 00:06:43,010 --> 00:06:49,080 >> -Rozmiar Kolektora Patriot, Sam, to jest o, około 20 stóp długości. 152 00:06:49,080 --> 00:06:51,250 I waży około 2000 funtów. 153 00:06:51,250 --> 00:06:55,195 A to niesie głowicę z about-- Myślę, że to mniej więcej 150 funtów. 154 00:06:55,195 --> 00:06:59,500 I głowica, Sam, Jest to wysokiej wybuchowe, 155 00:06:59,500 --> 00:07:02,570 fragmenty, które ma wokół niego. 156 00:07:02,570 --> 00:07:06,890 Obudowa głowicy ma zaprojektowane, aby działać jak śrut. 157 00:07:06,890 --> 00:07:09,130 >> -The Pociski są prowadzone, 4 na pojemniku, 158 00:07:09,130 --> 00:07:12,080 i transportowane są z naczepą. 159 00:07:12,080 --> 00:07:19,100 >> -The Rakiet Patriot anty System sięga co najmniej 20 lat. 160 00:07:19,100 --> 00:07:22,320 Pierwotnie był on przeznaczony jako rakiety obrony powietrznej 161 00:07:22,320 --> 00:07:24,180 zestrzelić samoloty wroga. 162 00:07:24,180 --> 00:07:27,860 W pierwszej wojny w Zatoce Perskiej, kiedy pojawiła się ta wojna, 163 00:07:27,860 --> 00:07:32,745 Armia chciała użyć go do zestrzelić scuds, a nie samoloty. 164 00:07:32,745 --> 00:07:36,150 Sił w Iraku nie było tak wielkim problemem, 165 00:07:36,150 --> 00:07:39,110 ale armia martwi scuds. 166 00:07:39,110 --> 00:07:42,340 I tak starali się uaktualnić Patriot. 167 00:07:42,340 --> 00:07:44,760 >> -Intercepting Wroga pocisk porusza się mecz pięciu 168 00:07:44,760 --> 00:07:47,250 miał być wystarczająco trudne. 169 00:07:47,250 --> 00:07:50,000 Ale gdy Patriot został przewieziony do eksploatacji, 170 00:07:50,000 --> 00:07:54,030 Armia nie była świadoma Iracki modyfikacji, które wykonane 171 00:07:54,030 --> 00:07:56,840 ich scuds prawie niemożliwe, aby uderzyć. 172 00:07:56,840 --> 00:08:01,020 >> -Co Się stało, jest scuds, że wchodzili, były niestabilne, 173 00:08:01,020 --> 00:08:02,310 były chwieje. 174 00:08:02,310 --> 00:08:05,140 Wynika to z tego, był Irakijczyków, w celu 175 00:08:05,140 --> 00:08:09,450 uzyskać 600 kilometrów na zakres 300 km przeciwrakietowej, 176 00:08:09,450 --> 00:08:12,930 wziął ciężar na przedniej głowicy i wykonana głowica lżejsze. 177 00:08:12,930 --> 00:08:17,710 Więc teraz, Patriota próbuje się w SCUD, a większość przypadków 178 00:08:17,710 --> 00:08:21,700 zdecydowana większość z czas, to tylko latać przez SCUD. 179 00:08:21,700 --> 00:08:25,700 >> -Po Operatorów systemów Patriot sobie sprawę, że Patriot przegapić swój cel, 180 00:08:25,700 --> 00:08:29,790 oni zdetonowali głowicę Patriota, w aby uniknąć ewentualnych ofiar czy to 181 00:08:29,790 --> 00:08:32,380 pozwolono upaść na ziemię. 182 00:08:32,380 --> 00:08:36,340 >> -To Było to, co większość ludzi widziałem, te wielkie kule ognia na niebie, 183 00:08:36,340 --> 00:08:41,289 i źle rozumiane jako przechwytuje z głowicami Scud. 184 00:08:41,289 --> 00:08:43,590 Chociaż w nocy niebo, Patrioci pojawiła 185 00:08:43,590 --> 00:08:47,020 być skutecznie niszcząc scuds, w Dhahran, 186 00:08:47,020 --> 00:08:49,730 nie może być pomyłka o jego wydajności. 187 00:08:49,730 --> 00:08:53,990 Nie, system radarowy Patriota jest straciłem przychodzących Scud, 188 00:08:53,990 --> 00:08:56,650 i nigdy nie rozpoczęła, z powodu usterek oprogramowania. 189 00:08:56,650 --> 00:08:59,650 190 00:08:59,650 --> 00:09:04,100 To było Izraelczyków, którzy po raz pierwszy odkryta że już system był on, 191 00:09:04,100 --> 00:09:07,510 im większa jest różnica czasu stała, w związku z zegarem osadzony 192 00:09:07,510 --> 00:09:09,490 w komputerze systemu. 193 00:09:09,490 --> 00:09:12,670 >> -O Na 2 tygodnie przed tragedia w Dhahran, 194 00:09:12,670 --> 00:09:15,010 Izraelczycy zgłaszane Departament Obrony, 195 00:09:15,010 --> 00:09:17,940 że system tracił czasu, że po około 8 godzin pracy, 196 00:09:17,940 --> 00:09:21,410 zauważyli, że system był staje się zauważalnie mniej dokładne. 197 00:09:21,410 --> 00:09:25,290 Departament Obrony odpowiedział informując wszystkich baterii Patriot 198 00:09:25,290 --> 00:09:28,070 aby nie pozostawić systemy od dłuższego czasu. 199 00:09:28,070 --> 00:09:29,960 Nigdy nie powiedział, co było dawno. 200 00:09:29,960 --> 00:09:30,460 8 godzin? 201 00:09:30,460 --> 00:09:30,960 10 godzin? 202 00:09:30,960 --> 00:09:31,870 1000 godzin? 203 00:09:31,870 --> 00:09:33,734 Nikt nie wiedział. 204 00:09:33,734 --> 00:09:35,650 -The Baterii Patriot stacjonował w koszarach 205 00:09:35,650 --> 00:09:40,410 w Dhahran i jego wadliwe wewnętrzne Zegar, był na ponad 100 godzin 206 00:09:40,410 --> 00:09:43,041 w nocy z 25 lutego. 207 00:09:43,041 --> 00:09:47,416 >> -To Śledzone czas z dokładnością około 1/10 sekundy. 208 00:09:47,416 --> 00:09:49,290 Teraz 1/10 sekundy jest ciekawy numer 209 00:09:49,290 --> 00:09:52,700 ponieważ nie może być wyrażona w formacie binarnym, dokładnie. 210 00:09:52,700 --> 00:09:54,820 Co oznacza, że ​​nie może być wyrażone, dokładnie, 211 00:09:54,820 --> 00:09:57,420 w każdym nowoczesnym komputerze cyfrowym. 212 00:09:57,420 --> 00:10:01,460 Trudno w to uwierzyć, ale używać jako przykład. 213 00:10:01,460 --> 00:10:03,520 Weźmy liczbę, 1/3. 214 00:10:03,520 --> 00:10:07,110 1/3 nie może być wyrażona w postaci dziesiętnej, dokładnie. 215 00:10:07,110 --> 00:10:11,490 1/3 jest 0,333 dzieje w nieskończoność. 216 00:10:11,490 --> 00:10:15,486 Nie ma sposobu, aby to zrobić, z dokładność w przecinku. 217 00:10:15,486 --> 00:10:18,360 To jest dokładnie ten sam rodzaj Problem, że stało się w Patriot. 218 00:10:18,360 --> 00:10:22,510 Im dłużej system prowadził The gorszy błąd czas stał. 219 00:10:22,510 --> 00:10:28,420 >> -Po 100 godzin pracy, błąd w czasie tylko około 1/3 sekundy. 220 00:10:28,420 --> 00:10:31,830 Jednak jeśli chodzi o ukierunkowanych na pocisk porusza się = 5, 221 00:10:31,830 --> 00:10:35,890 to spowodowało śledzenia Błąd ponad 600 metrów. 222 00:10:35,890 --> 00:10:38,970 Byłby to błąd krytyczny dla żołnierzy w Dhahran. 223 00:10:38,970 --> 00:10:45,035 >> Co się stało, to uruchomienie Scud było wykryte przez satelity wczesnego ostrzegania, 224 00:10:45,035 --> 00:10:48,930 i one nowe, że Scud było przychodzi w swoim ogólnym kierunku. 225 00:10:48,930 --> 00:10:51,170 Nie wiem, gdzie to nastąpi. 226 00:10:51,170 --> 00:10:53,990 >> -To Było teraz do radaru elementem systemu Patriot, 227 00:10:53,990 --> 00:10:58,520 broniąc Dhahran, aby znaleźć i utrzymać utwór z nadchodzącego wroga pociskiem. 228 00:10:58,520 --> 00:10:59,690 >> -The Radar był bardzo inteligentny. 229 00:10:59,690 --> 00:11:01,710 To rzeczywiście śledzić pozycja Scud 230 00:11:01,710 --> 00:11:04,040 a następnie przewidzieć, gdzie to prawdopodobnie byłoby, 231 00:11:04,040 --> 00:11:06,140 następnym razem radar wysłany impuls się. 232 00:11:06,140 --> 00:11:07,660 To był nazywany bramą zakres. 233 00:11:07,660 --> 00:11:11,870 >> -Więc Po Patriot decyduje mało czasu ma 234 00:11:11,870 --> 00:11:16,280 przeszedł wrócić i sprawdzić następny lokalizacja dla tego wykrytego obiektu, 235 00:11:16,280 --> 00:11:17,280 wraca. 236 00:11:17,280 --> 00:11:21,690 Więc kiedy wróciłem do złego miejsce, to wtedy nie widzi obiektu 237 00:11:21,690 --> 00:11:25,230 i postanawia, że ​​nie ma Celem było to fałszywe wykrywanie, 238 00:11:25,230 --> 00:11:26,650 i spada utwór. 239 00:11:26,650 --> 00:11:29,690 Przychodzące Scud zniknął z ekranu radaru, 240 00:11:29,690 --> 00:11:32,670 i sekund później go uderzył w koszarach. 241 00:11:32,670 --> 00:11:38,100 Scud zabił 28 i był to ostatni jeden zwolniony w czasie wojny Pierwszy w Zatoce Perskiej. 242 00:11:38,100 --> 00:11:43,460 Niestety, zaktualizowane oprogramowanie Dhahran przybył następnego dnia. 243 00:11:43,460 --> 00:11:46,150 Błąd oprogramowania miał było stałe, zamknięcie 244 00:11:46,150 --> 00:11:48,940 jeden rozdział w niespokojnych Historia rakiet Patriot. 245 00:11:48,940 --> 00:11:50,220 >> [Zakończyć odtwarzanie] 246 00:11:50,220 --> 00:11:54,340 >> DAVID J MALAN: Będziemy więc przyjrzeć się niektóre podobne ograniczenia tylko trochę. 247 00:11:54,340 --> 00:11:58,470 Ale najpierw niech Przejście do kilku FYI to. 248 00:11:58,470 --> 00:12:01,575 Więc jedno- ten weekend, nie będzie Super sekcje, 249 00:12:01,575 --> 00:12:04,200 które mają za zadanie wyprzeć regularnie zaplanowane odcinki, które 250 00:12:04,200 --> 00:12:05,460 rozpocznie się w tygodniu stąd. 251 00:12:05,460 --> 00:12:08,204 Spójrz na stronie internetowej CS50 jest Więcej informacji na temat tych. 252 00:12:08,204 --> 00:12:11,120 Będą one również być filmowane i transmitowane żyć dla osób niezdolnych do udziału. 253 00:12:11,120 --> 00:12:12,980 Problem 1 jest ustawiony na strona już tego szkolenia, 254 00:12:12,980 --> 00:12:15,105 a my spojrzeć na że tylko trochę. 255 00:12:15,105 --> 00:12:18,350 I godziny pracy też, odbędzie umieszczać od poniedziałku do czwartku. 256 00:12:18,350 --> 00:12:20,960 >> Więc to był najbardziej kanoniczna Program przyjrzeliśmy się ostatni raz. 257 00:12:20,960 --> 00:12:23,590 To jak najprostsza Program można pisać w C, 258 00:12:23,590 --> 00:12:25,250 a nawet, że jest trochę śmiałe twierdzenie. 259 00:12:25,250 --> 00:12:25,750 Dobrze? 260 00:12:25,750 --> 00:12:28,070 Ponieważ istnieje wiele jakby złożoność tego. 261 00:12:28,070 --> 00:12:30,445 Więc rzućmy okiem na co niektóre z tych elementów 262 00:12:30,445 --> 00:12:33,080 były i spróbować zapewnić mentalny model, jak 263 00:12:33,080 --> 00:12:35,710 tych najprostszych programów pracować, a następnie zaczniemy 264 00:12:35,710 --> 00:12:38,050 patrząc na rzeczy coraz bardziej złożone. 265 00:12:38,050 --> 00:12:41,280 Tak więc ta linia tutaj, podświetlone teraz w kolorze żółtym, co miał powiedzieć, ostatni raz, 266 00:12:41,280 --> 00:12:43,200 że to nie dla nas? 267 00:12:43,200 --> 00:12:45,220 Jaki jest cel służy? 268 00:12:45,220 --> 00:12:46,984 Każdy z dalej wstecz? 269 00:12:46,984 --> 00:12:47,483 Tak. 270 00:12:47,483 --> 00:12:48,649 >> PUBLICZNOŚCI PAŃSTWO: [niesłyszalne] 271 00:12:48,649 --> 00:12:50,871 272 00:12:50,871 --> 00:12:51,704 DAVID J MALAN: Dobra. 273 00:12:51,704 --> 00:12:53,537 Więc to daje dostęp na polecenia, lub niech 274 00:12:53,537 --> 00:12:56,750 nazywają je funkcje, że ktoś inny napisał, że są zadeklarowane, 275 00:12:56,750 --> 00:12:58,350 że tak powiem, w innym pliku. 276 00:12:58,350 --> 00:13:02,370 Więc zobaczymy dokładnie to, co .h plików jest kontra pliku .c, w końcu. 277 00:13:02,370 --> 00:13:04,710 Ale teraz, po prostu wiem, że printf np 278 00:13:04,710 --> 00:13:08,370 jest jedną z funkcji, które zostały zadeklarowana w innym pliku, gdzieś 279 00:13:08,370 --> 00:13:12,930 indziej na dysku twardym chmurze, że pozwala nam na dostęp do printf i używać go 280 00:13:12,930 --> 00:13:15,240 bez konieczności narastającymi że koło siebie. 281 00:13:15,240 --> 00:13:16,930 Tymczasem głównym. 282 00:13:16,930 --> 00:13:19,690 Jaki był analogowy głównego, w zeszłym tygodniu? 283 00:13:19,690 --> 00:13:20,190 Tak. 284 00:13:20,190 --> 00:13:21,460 >> PUBLICZNOŚCI PAŃSTWO: Zielona flaga kliknięciu. 285 00:13:21,460 --> 00:13:21,740 >> DAVID J MALAN: Tak. 286 00:13:21,740 --> 00:13:23,490 Scratch-tych, kiedy zielona flaga kliknięciu. 287 00:13:23,490 --> 00:13:25,560 To jak puzzle które rozpoczyna od rzeczy. 288 00:13:25,560 --> 00:13:28,306 I tak podobnie uczynił świat postanowił kilka lat temu, że w C, 289 00:13:28,306 --> 00:13:30,930 i kilka innych języków, jeśli chcesz napisać program, 290 00:13:30,930 --> 00:13:33,410 Twoja pierwsza funkcja ma się nazywać, głównym. 291 00:13:33,410 --> 00:13:34,641 I to ma wyglądać tak. 292 00:13:34,641 --> 00:13:36,640 Ale wrócimy, innym razem, na co, int, 293 00:13:36,640 --> 00:13:38,690 i nieważne, znaczy w tym kontekście. 294 00:13:38,690 --> 00:13:42,860 Na razie nawiasy klamrowe są mili jakby Scratch jest kawałek układanki kształtu 295 00:13:42,860 --> 00:13:45,080 że oddaje pewną liczbę linii. 296 00:13:45,080 --> 00:13:47,070 A wśród na liniach tutaj, tutaj jest ten jeden. 297 00:13:47,070 --> 00:13:51,610 printf jest funkcją, której celem w życie jest do drukowania sformatowany ciąg. 298 00:13:51,610 --> 00:13:55,010 A tak sformatowane, mam na myśli ciebie można podłączyć wartości zastępczych, 299 00:13:55,010 --> 00:13:58,360 i można określić, ile po przecinku punktów, ile liczb do wydrukowania 300 00:13:58,360 --> 00:14:00,040 po przecinku dziesiętnym i tym podobne. 301 00:14:00,040 --> 00:14:05,040 I printf, oczywiście, ma jedną lub więcej, argumenty lub parametry, 302 00:14:05,040 --> 00:14:06,770 zwie prościej jako wejścia. 303 00:14:06,770 --> 00:14:09,230 >> Więc printf, jak wiele funkcje, ma wejść. 304 00:14:09,230 --> 00:14:12,730 A te wejścia są objął przez dwa nawiasach tutaj. 305 00:14:12,730 --> 00:14:15,180 I wewnątrz nich jest jedno wejście. 306 00:14:15,180 --> 00:14:18,600 Jest to ciąg znaków, jak już nazwał go, która jest po prostu ciągiem znaków, 307 00:14:18,600 --> 00:14:22,310 jak słowo lub frazę lub całości Esej nawet w cudzysłowy. 308 00:14:22,310 --> 00:14:25,712 A to, co się dzieje, aby wpłynąć na Zachowanie printf, ponieważ, oczywiście, 309 00:14:25,712 --> 00:14:27,170 to tylko ogólny Funkcja drukowania. 310 00:14:27,170 --> 00:14:29,600 To nie będzie wiedział, co do drukowania, chyba, że ​​to powiesz. 311 00:14:29,600 --> 00:14:31,000 A potem, niektóre minucje. 312 00:14:31,000 --> 00:14:34,056 Co możemy powiedzieć, że to dziwne, sekwencja symboli jest? 313 00:14:34,056 --> 00:14:34,556 Tak. 314 00:14:34,556 --> 00:14:35,410 >> PUBLICZNOŚCI PAŃSTWO: Nowa linia. 315 00:14:35,410 --> 00:14:35,990 >> DAVID J MALAN: Nowa linia. 316 00:14:35,990 --> 00:14:39,340 Tak więc okazuje się, że nie można po prostu hit, wejść, kiedy piszesz program. 317 00:14:39,340 --> 00:14:42,590 Generalnie, kompilator będzie się trochę mylić, co masz na myśli. 318 00:14:42,590 --> 00:14:45,340 Raczej trzeba dosłownie powiedzieć, daj mi nową linię tutaj. 319 00:14:45,340 --> 00:14:49,506 I tak / n jest to, co na ogół zadzwoń znak escape. 320 00:14:49,506 --> 00:14:50,870 Więc n, dla nowej linii. 321 00:14:50,870 --> 00:14:53,810 I kompilator wie że gdy widzi / N 322 00:14:53,810 --> 00:14:57,420 powinna ona w rzeczywistości powodować komputer Ostatecznie lub printf, w tym przypadku, 323 00:14:57,420 --> 00:15:00,260 wydrukować rzeczywisty Nowy linia, jak uderzanie, wejść, 324 00:15:00,260 --> 00:15:01,480 klawisz na klawiaturze. 325 00:15:01,480 --> 00:15:05,620 I wreszcie, co nie powiedzieć ten kawałek jest dla składni? 326 00:15:05,620 --> 00:15:06,591 Co przedstawia? 327 00:15:06,591 --> 00:15:07,090 Tak. 328 00:15:07,090 --> 00:15:07,490 >> PUBLICZNOŚCI PAŃSTWO: [niesłyszalne] 329 00:15:07,490 --> 00:15:08,660 >> DAVID J MALAN: To jest po prostu Koniec linii. 330 00:15:08,660 --> 00:15:09,909 Koniec z rachunku. 331 00:15:09,909 --> 00:15:11,890 I uświadomić sobie, że nie robimy umieścić je wszędzie. 332 00:15:11,890 --> 00:15:13,900 Z pewnością nie je umieścić Na końcach każdego wiersza. 333 00:15:13,900 --> 00:15:16,680 Na przykład, nie ma nikt na Pierwsza linia, nie ma nic na linii 334 00:15:16,680 --> 00:15:18,680 z, głównym, nie ma żadnego po nawiasy, 335 00:15:18,680 --> 00:15:21,740 ale musisz zacząć, aby zobaczyć i uzyskać zna, gdzie jest wymagana. 336 00:15:21,740 --> 00:15:26,014 I to prawie zawsze po funkcji zadzwoń lub oświadczenie, niektóre działania 337 00:15:26,014 --> 00:15:27,180 że jesteś rzeczywiście biorąc. 338 00:15:27,180 --> 00:15:29,520 >> I wiem teraz, zwłaszcza jeśli wśród tych, mniej wygodne, 339 00:15:29,520 --> 00:15:32,540 są to rodzaje głupich rzeczy że będzie koniec przypadkowo uderzając 340 00:15:32,540 --> 00:15:33,873 Twoja głowa w ścianę nad. 341 00:15:33,873 --> 00:15:36,107 Ponieważ będziesz logicznie pewnie w jakimś problemem 342 00:15:36,107 --> 00:15:38,440 już rozwiązany dla problemu zestaw, a to cholerstwo się 343 00:15:38,440 --> 00:15:40,187 nie sporządza lub nawet uruchomić. 344 00:15:40,187 --> 00:15:43,270 I tak często, na początku, to będzie być dlatego, że brakowało nawias, 345 00:15:43,270 --> 00:15:44,455 lub nieodebranych średnik. 346 00:15:44,455 --> 00:15:46,547 I tak po prostu być świadoma z tych rodzajów rzeczy, 347 00:15:46,547 --> 00:15:49,380 i nie dajcie się sfrustrowany je, ponieważ bardzo szybko robi to 348 00:15:49,380 --> 00:15:50,640 stać się stary kapelusz. 349 00:15:50,640 --> 00:15:53,910 Ale to jest bardzo łatwo dostać się udaremnione na początku, w wyniku. 350 00:15:53,910 --> 00:15:57,020 >> Więc teraz, rzućmy okiem na jak linia ta jest rzeczywiście działa 351 00:15:57,020 --> 00:15:59,170 a następnie spojrzeć na lekko bardziej skomplikowany. 352 00:15:59,170 --> 00:16:02,017 Więc mamy ponad Tutaj Zdolność do rysowania na ekranie. 353 00:16:02,017 --> 00:16:04,100 I załóżmy, że to jest mój ekran komputera, 354 00:16:04,100 --> 00:16:08,589 ale piszę, cześć programu, a ja nie wdrożyły, printf. 355 00:16:08,589 --> 00:16:10,130 Ktoś wprowadził, printf. 356 00:16:10,130 --> 00:16:12,420 Kto chciałby twierdzić, Wdrożyliśmy printf? 357 00:16:12,420 --> 00:16:12,920 Jeśli możemy? 358 00:16:12,920 --> 00:16:13,830 Dobra, jak masz na imię? 359 00:16:13,830 --> 00:16:14,155 >> UCZEŃ 1: [? Kopal. ?] 360 00:16:14,155 --> 00:16:15,529 >> DAVID J MALAN: Copal, chodź na górę. 361 00:16:15,529 --> 00:16:16,430 Chodź na górę. 362 00:16:16,430 --> 00:16:17,070 W porządku. 363 00:16:17,070 --> 00:16:22,260 Tak więc mamy tu pewne identyfikatory, od zrobimy małą grę tego. 364 00:16:22,260 --> 00:16:26,270 A my będziemy cię nazywać, printf. 365 00:16:26,270 --> 00:16:30,170 A jeśli chcesz, aby tu przyjechać, co właśnie narysowany na ekranie, 366 00:16:30,170 --> 00:16:32,340 to po prostu nie ma mnie, to. 367 00:16:32,340 --> 00:16:35,550 >> W porządku, więc, witam mam na imię, printf, jeśli chcesz umieścić, że w dniu. 368 00:16:35,550 --> 00:16:35,740 W porządku. 369 00:16:35,740 --> 00:16:37,360 I czy można go stanowiska przez ekran komputera 370 00:16:37,360 --> 00:16:39,730 tak, jakby to funkcja, która przyszedł z tym systemem komputerowym. 371 00:16:39,730 --> 00:16:42,063 A twój cel w życiu jest faktycznie coś wydrukować. 372 00:16:42,063 --> 00:16:44,560 Ale podobnie jak w programie mamy właśnie miał na ekranie, tutaj, 373 00:16:44,560 --> 00:16:47,060 będziemy musieli faktycznie daje pewne wejście. 374 00:16:47,060 --> 00:16:51,810 >> I tak, w przypadku mojego wejścia, tutaj, jest najwyraźniej, co jest przekazywane do printf, 375 00:16:51,810 --> 00:16:53,730 niech rodzaj wyśmiewać go w ten sposób. 376 00:16:53,730 --> 00:16:58,720 Zamierzam dosłownie pisać na kawałek papieru, "Witaj, świecie" 377 00:16:58,720 --> 00:17:03,020 backslash N. I żeby było jasne, co Właśnie wyciągnąć na tej kartce papieru, 378 00:17:03,020 --> 00:17:04,020 wygląda to tak. 379 00:17:04,020 --> 00:17:08,730 Więc kiedy uruchomić ten program, a to żółta linia kodu zostanie wykonany, 380 00:17:08,730 --> 00:17:12,970 to tak, jakby I programu Witaj, jestem podając pewne wejście od do funkcji 381 00:17:12,970 --> 00:17:13,970 że ktoś inny napisał. 382 00:17:13,970 --> 00:17:16,595 >> A jeśli ciebie palcem, może rzeczywiście, palcem, 383 00:17:16,595 --> 00:17:21,520 rysowanie na ekranie, co to ty zostały wydane, 384 00:17:21,520 --> 00:17:27,465 efekt ostatecznie jest zobaczyć dokładnie, że na ekranie. 385 00:17:27,465 --> 00:17:29,140 I trochę przypadek rogu tutaj. 386 00:17:29,140 --> 00:17:31,540 I dobrze, że nie powinniśmy zobaczyć the, nowa linia, w tym momencie. 387 00:17:31,540 --> 00:17:33,900 Błędem byłoby dla Ciebie jawnie narysować znak nowej linii. 388 00:17:33,900 --> 00:17:36,810 Ale jeśli mieliśmy pisanie słowa na Ekran, to kończy się poniżej. 389 00:17:36,810 --> 00:17:39,560 >> Więc dziękuję bardzo, ale trzymać tu tylko na jedną chwilę. 390 00:17:39,560 --> 00:17:42,860 Teraz potrzebuję innego Wolontariat, gdybyśmy mogli, 391 00:17:42,860 --> 00:17:46,830 że będzie musiał odgrywać rolę of-- To tylko ludzi z orkiestrą 392 00:17:46,830 --> 00:17:47,355 teraz. 393 00:17:47,355 --> 00:17:47,980 Jak about-- OK. 394 00:17:47,980 --> 00:17:48,480 Dokładnie tutaj. 395 00:17:48,480 --> 00:17:49,180 Chodź na górę. 396 00:17:49,180 --> 00:17:49,955 Jak masz na imię? 397 00:17:49,955 --> 00:17:50,922 >> UCZEŃ 2: [? Ivay. ?] 398 00:17:50,922 --> 00:17:51,796 DAVID J MALAN: Słucham? 399 00:17:51,796 --> 00:17:52,990 UCZEŃ 2: [? Ivay. ?] 400 00:17:52,990 --> 00:17:55,320 DAVID J MALAN: Ethan, chodź na górę. 401 00:17:55,320 --> 00:17:55,820 Nie? 402 00:17:55,820 --> 00:17:58,390 Ja się że źle, nawet po to powiedział dwa razy? 403 00:17:58,390 --> 00:17:58,890 Chodź na górę. 404 00:17:58,890 --> 00:18:00,030 Trudno usłyszeć tutaj. 405 00:18:00,030 --> 00:18:05,240 406 00:18:05,240 --> 00:18:05,740 OK. 407 00:18:05,740 --> 00:18:07,190 I przykro mi, jak masz na imię? 408 00:18:07,190 --> 00:18:07,680 >> UCZEŃ 2: [? Ivay. ?] 409 00:18:07,680 --> 00:18:08,790 >> [? DAVID J MALAN: Ivay. ?] OK. 410 00:18:08,790 --> 00:18:10,430 Na razie, jeśli nie umysł, jesteś getString. 411 00:18:10,430 --> 00:18:11,013 >> UCZEŃ 2: OK. 412 00:18:11,013 --> 00:18:11,797 Chłodny. 413 00:18:11,797 --> 00:18:14,630 DAVID J MALAN: Więc jeśli chcesz stanąć tu na chwilę, 414 00:18:14,630 --> 00:18:17,100 rzućmy okiem na lekko bardziej skomplikowany program, który 415 00:18:17,100 --> 00:18:18,670 teraz ma trzy linie kodu. 416 00:18:18,670 --> 00:18:24,080 Tak więc mamy jeden, podać swoją nazwę za pomocą printf; dwa, wezwanie do getString, 417 00:18:24,080 --> 00:18:28,060 następnie przez przypisanie do zmienna o nazwie, łańcuch s, i nazywa s; 418 00:18:28,060 --> 00:18:31,260 a potem jeszcze wywołanie, printf, ale tym razem z dwoma wejściami. 419 00:18:31,260 --> 00:18:33,646 >> Więc mamy już zrobione stan imię i nazwisko, a raczej mamy 420 00:18:33,646 --> 00:18:34,770 już wykonane połączenia printf. 421 00:18:34,770 --> 00:18:38,960 Więc mam zamiar napisać, Podaj swoje imię. 422 00:18:38,960 --> 00:18:42,089 A tak, to co mam zamiar przekazać, printf, za chwilę, 423 00:18:42,089 --> 00:18:43,005 jest po prostu to. 424 00:18:43,005 --> 00:18:47,760 Więc jeśli chcesz iść do przodu i wyciągnąć to na ekranie, to jest twój wkład teraz. 425 00:18:47,760 --> 00:18:48,260 W porządku. 426 00:18:48,260 --> 00:18:51,160 I zapomnieć ciąg, teraz mamy nasza linia kodu tutaj. 427 00:18:51,160 --> 00:18:54,470 Więc, GetString, musimy rzeczywiście nazwać, getString. 428 00:18:54,470 --> 00:18:57,920 Więc twój cel w życiu jest po prostu chodzić się do orkiestry, jeśli można, 429 00:18:57,920 --> 00:18:58,980 i uzyskać czyjeś imię. 430 00:18:58,980 --> 00:19:00,860 Ale niech ci dać coś umieścić go na. 431 00:19:00,860 --> 00:19:02,908 Jeśli chcesz, idź do przodu i uzyskać ciąg, 432 00:19:02,908 --> 00:19:05,241 czyjąś nazwę na tym kawałek papieru, jeśli można. 433 00:19:05,241 --> 00:19:12,940 434 00:19:12,940 --> 00:19:13,530 >> W porządku. 435 00:19:13,530 --> 00:19:15,250 I zobaczymy, za chwilę, którego imię dostajemy. 436 00:19:15,250 --> 00:19:17,630 Tymczasem, co mam zamiar mają gotowe, jest puste fragment 437 00:19:17,630 --> 00:19:21,340 papieru, w którym mam zamiar do przechowywania niezależnie od wartości tego 438 00:19:21,340 --> 00:19:25,752 jest, że GetString wraca do mnie, Ja, jako zmienna ciąg nazywa, s. 439 00:19:25,752 --> 00:19:26,252 W porządku. 440 00:19:26,252 --> 00:19:27,293 Więc co tu mamy? 441 00:19:27,293 --> 00:19:27,950 Nik. 442 00:19:27,950 --> 00:19:28,450 W porządku. 443 00:19:28,450 --> 00:19:30,910 Mamy więc nazwę NIK tutaj. 444 00:19:30,910 --> 00:19:33,750 Więc to jest to, co dosłownie został zwrócony 445 00:19:33,750 --> 00:19:35,810 do mnie, że tak powiem, przez getString. 446 00:19:35,810 --> 00:19:38,720 >> I teraz, zamierzam wykonać w lewej 447 00:19:38,720 --> 00:19:43,440 tego słowa, w których po prostu skopiować w dół, dla dzisiejszych potrzeb, Nik. 448 00:19:43,440 --> 00:19:46,470 Więc teraz mam zmienną nazywa, s, przechowywania nazwę NIK. 449 00:19:46,470 --> 00:19:49,520 Ja już wręczone printf, poprzedni argumentem. 450 00:19:49,520 --> 00:19:52,800 Ale w naszej trzeciej i ostatniej linii Kod, tak naprawdę trzeba ręcznie printf 451 00:19:52,800 --> 00:19:58,500 coś trochę different-- "Witaj% s" odwrotny ukośnik n. 452 00:19:58,500 --> 00:20:01,510 >> I tak ostatnia linia idę do send-- ostatnią rzeczą jestem 453 00:20:01,510 --> 00:20:03,060 zamiar napisać teraz w dół, jest to. 454 00:20:03,060 --> 00:20:06,310 Tak więc dwie linie kodu, lub raczej ostatniej linii kodu, 455 00:20:06,310 --> 00:20:10,690 wzywa do dwóch inputs-- Jeden, i dwa, to. 456 00:20:10,690 --> 00:20:13,330 Jeśli więc nasza funkcja printf mogą teraz je jako wejście, 457 00:20:13,330 --> 00:20:16,000 pozwól mi wyczyścić ekran dla Ciebie. 458 00:20:16,000 --> 00:20:17,250 Właściwie nie, można iść dalej. 459 00:20:17,250 --> 00:20:19,333 Zostawimy go, ponieważ to jest w tym samym programie. 460 00:20:19,333 --> 00:20:21,760 461 00:20:21,760 --> 00:20:27,380 Powinniśmy zobaczyć, witam, Nik. 462 00:20:27,380 --> 00:20:27,880 W porządku. 463 00:20:27,880 --> 00:20:29,670 Więc to było sporo skakać przez obręcze, aby, po prostu 464 00:20:29,670 --> 00:20:31,620 napisać, podać wymienić, a cześć, Nik. 465 00:20:31,620 --> 00:20:37,210 Ale ta prosta idea przekazywania wiadomości, przemijania wejściowych i wyjściowych odbioru, 466 00:20:37,210 --> 00:20:40,430 jest dokładnie model będziemy mieć nawet najbardziej skomplikowanych funkcji. 467 00:20:40,430 --> 00:20:41,804 Więc dziękuję wam obu. 468 00:20:41,804 --> 00:20:43,730 Mamy piękny stres Piłka tu dla Ciebie. 469 00:20:43,730 --> 00:20:48,890 I dziękuję, że do naszego getString i printf wolontariuszy podobne. 470 00:20:48,890 --> 00:20:49,551 Dziękuję. 471 00:20:49,551 --> 00:20:50,050 W porządku. 472 00:20:50,050 --> 00:20:50,966 Dziękuję wam obu. 473 00:20:50,966 --> 00:20:56,640 474 00:20:56,640 --> 00:21:00,430 >> Więc rozmawialiśmy o do tej pory, głównie o strunach. 475 00:21:00,430 --> 00:21:06,550 I okazuje się, że C może faktycznie zrozumieć kilka różnych typów danych. 476 00:21:06,550 --> 00:21:08,860 W rzeczywistości, rzućmy spojrzeć na te tutaj. 477 00:21:08,860 --> 00:21:12,490 Więc C, a wiele języków, zrozumieć rzeczy zwanych znaków. 478 00:21:12,490 --> 00:21:16,852 Char jest na ogół jeden bajt lub osiem bitów. 479 00:21:16,852 --> 00:21:19,810 I reprezentuje jeden znak, jak litera A lub kapitału 480 00:21:19,810 --> 00:21:21,990 Litera A lub mała litera A, lub wykrzyknik, 481 00:21:21,990 --> 00:21:25,440 lub dowolny znak, że można wpisać na klawiatury, a czasami nawet więcej. 482 00:21:25,440 --> 00:21:26,795 Mamy też zdarzyć, aby zobaczyć pływaków. 483 00:21:26,795 --> 00:21:31,160 Pływak jest, ogólnie, 32-bitowa wartość, lub cztery bajty 484 00:21:31,160 --> 00:21:33,660 ponieważ jeszcze jeden bajt wynosi osiem bitów. 485 00:21:33,660 --> 00:21:36,675 >> Więc pływak jest wartością zmiennoprzecinkową, coś z przecinkiem. 486 00:21:36,675 --> 00:21:38,550 I rzeczywiście, to co film mówił 487 00:21:38,550 --> 00:21:42,240 o tym, kiedy mówili o zmiennym wartości punktowe, niektóre stałą liczbę bitów 488 00:21:42,240 --> 00:21:43,940 wykorzystywane do reprezentowania liczbę rzeczywistą. 489 00:21:43,940 --> 00:21:45,740 Ale jest też rzeczy zwane dwuosobowe. 490 00:21:45,740 --> 00:21:47,860 Istnieją one w Javie, jeśli już podjęte APC, 491 00:21:47,860 --> 00:21:51,540 oraz podwójne, jak sama nazwa na szczęście wskazuje, jest dwa razy większe od pływaka. 492 00:21:51,540 --> 00:21:54,540 To wciąż liczba rzeczywista, po prostu ma więcej bitów 493 00:21:54,540 --> 00:21:58,390 z którymi się coraz bardziej precyzyjne, lub zapisać nawet większe liczby. 494 00:21:58,390 --> 00:21:58,890 int jest łatwe. 495 00:21:58,890 --> 00:22:00,181 Rozmawialiśmy o tym ostatnio. 496 00:22:00,181 --> 00:22:01,160 To jest po prostu liczbą całkowitą. 497 00:22:01,160 --> 00:22:03,980 I to na ogół 32 bity lub cztery bajty. 498 00:22:03,980 --> 00:22:07,850 >> I tak, jeśli masz, zobaczmy teraz, 32 bits-- i zrobiliśmy to w tygodniu 0, 499 00:22:07,850 --> 00:22:10,820 nigdy tak briefly-- jeśli masz 32 bitów, co jest największym 500 00:22:10,820 --> 00:22:13,580 Numer można reprezentować jako liczba całkowita? 501 00:22:13,580 --> 00:22:16,080 Daj albo bierz? 502 00:22:16,080 --> 00:22:18,380 To jak 4 mld euro, i to tylko wtedy, gdy jesteśmy 503 00:22:18,380 --> 00:22:20,690 reprezentujący tylko liczby dodatnie. 504 00:22:20,690 --> 00:22:23,930 Jeśli masz 32 bity, a chcesz reprezentują liczby ujemne, jak również, 505 00:22:23,930 --> 00:22:27,100 Twoja oferta jest zasadniczo negatywne 2 mld do 2 mld pozytywna. 506 00:22:27,100 --> 00:22:29,250 Ale ogólnie, zaczniemy przy 0 udać się do 4 mld euro. 507 00:22:29,250 --> 00:22:32,400 >> Nie musisz wiedzieć dokładnie, ale możemy zobaczyć, w rzeczywistości, jeśli tylko 508 00:22:32,400 --> 00:22:36,400 otworzyć mały kalkulator, tutaj. 509 00:22:36,400 --> 00:22:41,070 Mogę zrobić 2 do 32, a to jest dokładnie, jak duże, 510 00:22:41,070 --> 00:22:43,190 jak wiele wartości można reprezentują, z 32 bitów. 511 00:22:43,190 --> 00:22:44,442 I to mniej więcej 4 mld. 512 00:22:44,442 --> 00:22:46,900 Więc będziemy trzymać widząc ten numer w kilku różnych miejscach. 513 00:22:46,900 --> 00:22:48,890 Ale jeśli trzeba dłużej numery niż, 514 00:22:48,890 --> 00:22:51,670 Okazuje się tam coś, co nazywa się długo długo. 515 00:22:51,670 --> 00:22:54,005 I długo długo zazwyczaj 64 bity, które 516 00:22:54,005 --> 00:22:56,380 oznacza, że ​​jest o rząd wielkości nawet większy niż int. 517 00:22:56,380 --> 00:22:59,510 >> Więc nie mogę nawet wymawia największym Numer że można reprezentować, 518 00:22:59,510 --> 00:23:01,340 ale jest znacznie większy. 519 00:23:01,340 --> 00:23:05,190 Teraz tak na marginesie, historycznie, jeśli int ma 32 bity, 520 00:23:05,190 --> 00:23:12,780 i długo długo jest 64 bitów, jak duży jest długa, nie długo, długo? 521 00:23:12,780 --> 00:23:16,500 522 00:23:16,500 --> 00:23:20,330 Można by pomyśleć, że to dłużej niż int ale być może mniej niż długi długi długi, 523 00:23:20,330 --> 00:23:21,400 ale to naprawdę zależy. 524 00:23:21,400 --> 00:23:23,400 >> I tak okazuje się jedną z frustracji też 525 00:23:23,400 --> 00:23:26,830 z pisania kodu w niektórych systemach, jest to, że nie wszystkie z tych typów danych 526 00:23:26,830 --> 00:23:28,440 mają wstępnie zdefiniowane wartości. 527 00:23:28,440 --> 00:23:29,771 Czasem jest to wiele bitów. 528 00:23:29,771 --> 00:23:31,020 Czasami jest to, że wiele bitów. 529 00:23:31,020 --> 00:23:32,750 Więc tak naprawdę trzeba wiedzieć, czasem, jaki sprzęt 530 00:23:32,750 --> 00:23:34,083 używasz oprogramowania na. 531 00:23:34,083 --> 00:23:36,960 Na szczęście, inne języki i inne typy danych, które już istnieją, 532 00:23:36,960 --> 00:23:38,400 pozwalają być bardziej precyzyjny. 533 00:23:38,400 --> 00:23:41,220 Cóż, widzieliśmy ciąg, i widzieliśmy bool też 534 00:23:41,220 --> 00:23:43,960 ale okazuje się, przyjdą tylko z biblioteki CS50. 535 00:23:43,960 --> 00:23:46,240 Więc tych, którzy nie są budowane w C, a nie Ci, 536 00:23:46,240 --> 00:23:49,340 są w tym pliku o nazwie CS50.h, że będziesz w końcu 537 00:23:49,340 --> 00:23:51,831 Zerwać warstw. 538 00:23:51,831 --> 00:23:53,830 Ale na razie, są one po prostu inne typy danych. 539 00:23:53,830 --> 00:23:57,060 Bool jest prawdziwe lub fałszywe, i ciąg jest ciągiem znaków, 540 00:23:57,060 --> 00:23:57,970 jak słowa. 541 00:23:57,970 --> 00:24:01,690 Teraz printf, widzieliśmy, ma zastępcze,% s jest jeden. 542 00:24:01,690 --> 00:24:05,430 I może być w stanie, do teraz, wywnioskować z tych innych przykładów, jak 543 00:24:05,430 --> 00:24:07,720 można mieć zastępczy dla różnych rodzajów danych. 544 00:24:07,720 --> 00:24:11,150 Na przykład, zgadywać, jeśli Ciebie chciał wydrukować pojedynczy char użyciu 545 00:24:11,150 --> 00:24:15,270 printf, symbol zastępczy jest prawdopodobnie% c. 546 00:24:15,270 --> 00:24:19,650 A jeśli chcesz się wypisuje Liczba całkowita z zastępczym,% i. 547 00:24:19,650 --> 00:24:25,150 % lld jest długa długa wartość dziesiętna, ale długo, długo, tak że mapy do tego. 548 00:24:25,150 --> 00:24:28,640 A następnie% f dla pływających Wartość punktu lub podwójne, 549 00:24:28,640 --> 00:24:31,270 więc czasami są one ponownie wykorzystane w różnych kontekstach. 550 00:24:31,270 --> 00:24:33,350 Więc zobaczymy i używać niektóre z nich w czasie. 551 00:24:33,350 --> 00:24:36,420 I printf i inne funkcje również sekwencje wspierać innych " 552 00:24:36,420 --> 00:24:38,080 a czasami to konieczne. 553 00:24:38,080 --> 00:24:39,770 Więc odwrotny ukośnik n to nowa linia. 554 00:24:39,770 --> 00:24:42,886 Backslash t, ma nikogo chcą wziąć ukłucie? 555 00:24:42,886 --> 00:24:43,760 PUBLICZNOŚCI PAŃSTWO: Tab. 556 00:24:43,760 --> 00:24:44,551 DAVID J MALAN: Tab. 557 00:24:44,551 --> 00:24:46,810 Więc jeśli naprawdę chcesz aby wydrukować kartę, nie 558 00:24:46,810 --> 00:24:49,940 stałą liczbę miejsc, ale rzeczywiste znak tabulacji, nie trafisz, 559 00:24:49,940 --> 00:24:53,490 Zakładka, klawisz na klawiaturze, na ogół, faktycznie zrobić ukośnika t. 560 00:24:53,490 --> 00:24:57,750 Backslash cudzysłów, dlaczego miałbym kiedykolwiek chcesz tego? 561 00:24:57,750 --> 00:24:58,250 Dobrze? 562 00:24:58,250 --> 00:25:00,417 Dlaczego nie mogę po prostu typ A cudzysłów na klawiaturze? 563 00:25:00,417 --> 00:25:02,124 PUBLICZNOŚCI PAŃSTWO: Ponieważ w przeciwnym razie, to jest 564 00:25:02,124 --> 00:25:04,830 będzie myślał, że to koniec od jak twój wydruku [? tekst. ?] 565 00:25:04,830 --> 00:25:05,420 >> DAVID J MALAN: Dokładnie. 566 00:25:05,420 --> 00:25:07,211 Pamiętaj, że z naszym printf przykłady, kiedy 567 00:25:07,211 --> 00:25:10,075 mijały do ​​printf na wejściu, z lewej strony tego łańcucha wejściowego 568 00:25:10,075 --> 00:25:12,950 a na prawo od tego wejścia wiosna, oczywiście, był to podwójny cudzysłów. 569 00:25:12,950 --> 00:25:16,270 Jeśli własne wejście ma podwójne cytat w środku, że 570 00:25:16,270 --> 00:25:18,920 komputer może potencjalnie się mylić, co do, 571 00:25:18,920 --> 00:25:20,760 robi to podwójny cudzysłów należą w środku? 572 00:25:20,760 --> 00:25:22,150 Czy należysz do lewej jeden? 573 00:25:22,150 --> 00:25:23,566 Czy należysz do prawej jeden? 574 00:25:23,566 --> 00:25:26,780 I tak, jeśli chcesz zrobić to bardzo jasne, ty interpretacja odwrotnego ukośnika podwójny cudzysłów, 575 00:25:26,780 --> 00:25:30,480 tak, że uciekł, by tak rzec, i to nie pomylili czegoś innego. 576 00:25:30,480 --> 00:25:34,400 I jest kilka innych tutaj, backslash r, pojedyncze cudzysłowy, 0, 577 00:25:34,400 --> 00:25:36,510 które możemy zobaczyć w czasie, jak również. 578 00:25:36,510 --> 00:25:37,760 A teraz, co z funkcji? 579 00:25:37,760 --> 00:25:41,630 >> Więc działań, które możemy podjąć tej pory w tym języku, C, dobrze, widzieliśmy, 580 00:25:41,630 --> 00:25:44,320 printf, oczywiście, a wszystko z innymi na ekranie, 581 00:25:44,320 --> 00:25:47,140 tutaj, że będziemy używać dla Kursu kilka pierwszych kilka tygodni, 582 00:25:47,140 --> 00:25:48,485 się, gdy biblioteka CS50. 583 00:25:48,485 --> 00:25:51,850 I o wiele łatwiejsze w C, rzeczywiście dostać dane wprowadzone przez użytkownika. 584 00:25:51,850 --> 00:25:54,200 Okazuje się, że w C, a szczerze mówiąc w kilku językach, 585 00:25:54,200 --> 00:25:57,450 to jest prawdziwy ból w szyi, aby zrobić coś prostego, jak skłonić użytkownika 586 00:25:57,450 --> 00:26:01,310 na klawiaturze, na jego wejściu. 587 00:26:01,310 --> 00:26:03,240 I tak te funkcje sprawiają, że łatwiej. 588 00:26:03,240 --> 00:26:05,472 >> I to również błąd sprawdzanie całej, 589 00:26:05,472 --> 00:26:07,180 tak, że kiedy Przypomnijmy w środę, my 590 00:26:07,180 --> 00:26:09,740 ten, ponownie, ostrzeżenie, kiedy nie współpracował, 591 00:26:09,740 --> 00:26:11,700 i wpisane słowo, zamiast numeru? 592 00:26:11,700 --> 00:26:15,402 Zrobiliśmy podnoszenia ciężkich wcześnie aby upewnić się, że użytkownik współpracuje. 593 00:26:15,402 --> 00:26:17,860 Ale to tylko trening Koła, które będziemy w końcu, 594 00:26:17,860 --> 00:26:19,640 i szybko zdjąć. 595 00:26:19,640 --> 00:26:22,630 >> Przypomnę więc, a następnie, rzućmy okiem, 596 00:26:22,630 --> 00:26:26,620 podobnie jak zrobiliśmy to z podstaw, na pewne kanoniczne konstrukcje w C 597 00:26:26,620 --> 00:26:28,580 Ma to na celu, sortowanie z, być trąba wycieczka, 598 00:26:28,580 --> 00:26:30,990 po prostu tak, że masz odniesienie i że widziałem rzeczy w pierwszej kolejności. 599 00:26:30,990 --> 00:26:34,100 Ale potem przyjrzymy się rzeczywistym kodowania korzystać z niektórych z tych bloków. 600 00:26:34,100 --> 00:26:36,710 Tak więc podobnie jak w Scratch, kiedy mieliśmy oświadczenia podoba, 601 00:26:36,710 --> 00:26:41,570 powiedzieć lub poczekaj, w C, mamy funkcje oraz, jak printf. 602 00:26:41,570 --> 00:26:45,350 >> Jeśli chcemy wyrazić stan w C, to jest podobne, w duchu, 603 00:26:45,350 --> 00:26:47,840 do tego kawałek układanki, który wyglądało to na początku. 604 00:26:47,840 --> 00:26:49,850 Jednak zamiast tego Dosłownie po prostu napisz, jeśli. 605 00:26:49,850 --> 00:26:51,830 A potem, w nawiasach, możemy postawić warunek, 606 00:26:51,830 --> 00:26:54,807 w przypadku, gdy warunek jest co będziesz zadzwonić, znowu, wyrażenie logiczne. 607 00:26:54,807 --> 00:26:56,390 I znowu, jest to rodzaj Pseudokod. 608 00:26:56,390 --> 00:26:58,830 I w rzeczywistości jest // komentarz. 609 00:26:58,830 --> 00:27:00,550 To tylko angielskie słowa do siebie. 610 00:27:00,550 --> 00:27:03,000 Ale to jest ogólna struktura, w razie, w stanie. 611 00:27:03,000 --> 00:27:05,220 Ale zobaczymy betonu Przykłady w chwilę. 612 00:27:05,220 --> 00:27:07,960 >> Jeśli chcesz mieć dwukierunkowa rozwidleniu dróg, 613 00:27:07,960 --> 00:27:11,740 tak jak to zrobiliśmy z naszym wolontariuszem na Środa, możesz mieć, else if. 614 00:27:11,740 --> 00:27:16,020 A jeśli chcesz mieć jedną trzecią i stan końcowy, lub domyślna sytuacja, 615 00:27:16,020 --> 00:27:19,006 można mieć tylko blok jeszcze nie. 616 00:27:19,006 --> 00:27:21,880 I podobnie, z wyrażeń logicznych, można, a, je razem. 617 00:27:21,880 --> 00:27:24,296 I zobaczyliśmy w środę, że to nie jest jeden ampersand, 618 00:27:24,296 --> 00:27:28,220 to dwa, z przyczyn niższego szczebla, które my w końcu zobaczyć i bawić się. 619 00:27:28,220 --> 00:27:30,410 Albo-ing rzeczy razem jest 2 pionowe paski. 620 00:27:30,410 --> 00:27:32,240 Na klawiaturze amerykańskiej, w tym Jest ogólnie klucz 621 00:27:32,240 --> 00:27:35,730 z klawiszem Shift powyżej Kluczem swoje Enter lub Return. 622 00:27:35,730 --> 00:27:38,620 >> Potem jest tych rzeczy, które użyjemy może raz lub dwa razy. 623 00:27:38,620 --> 00:27:42,570 Są to funkcjonalne równoważne co można zrobić z, jeśli else if, 624 00:27:42,570 --> 00:27:44,950 else if else, budowy, ale nazywa się przełącznik. 625 00:27:44,950 --> 00:27:48,020 Wyglądają one bardzo różne, ale będziesz zobacz w niektórych z naszego kodu dystrybucji, 626 00:27:48,020 --> 00:27:51,890 dla przyszłego zestawu problemów, najprawdopodobniej że czasem po prostu ładniejsza 627 00:27:51,890 --> 00:27:54,060 Sposób wyrażania całość kilka warunków, 628 00:27:54,060 --> 00:27:57,590 bez konieczności dużo nawiasy i dużo nawiasów i wgniecenia. 629 00:27:57,590 --> 00:28:01,910 Ale nam nie więcej energii niż mamy już. 630 00:28:01,910 --> 00:28:02,550 A teraz pętle. 631 00:28:02,550 --> 00:28:05,020 A ten, przyjrzymy przy nieco wolniej. 632 00:28:05,020 --> 00:28:08,470 Ale potem, zaczniemy ich używać, szczególnie dla tych, którzy już znają. 633 00:28:08,470 --> 00:28:13,830 To jest kanoniczny sposób, jeśli niewiarygodnie arcane sposób, aby napisać pętli w C 634 00:28:13,830 --> 00:28:15,896 >> Teraz pętla w Scratch było całkiem proste. 635 00:28:15,896 --> 00:28:17,020 Masz, na zawsze, blok. 636 00:28:17,020 --> 00:28:19,760 Masz, powtarzać, blok z tylko numer trzeba wpisać. 637 00:28:19,760 --> 00:28:22,220 I z, na pętli, można realizacji obu tych pomysłów, 638 00:28:22,220 --> 00:28:23,595 ale jest to trochę bardziej techniczny. 639 00:28:23,595 --> 00:28:25,994 Ale szczerze mówiąc, jest to również stosunkowo proste. 640 00:28:25,994 --> 00:28:28,160 Gdy wiesz, kolejność operacje, dosłownie 641 00:28:28,160 --> 00:28:30,910 są po prostu będzie podłączyć wartości i powiedzieć komputerowi, co robić. 642 00:28:30,910 --> 00:28:32,800 Tak oto przykład. 643 00:28:32,800 --> 00:28:38,040 Jest to pętla, dość wystarczy, liczy się z jednej liczby się 644 00:28:38,040 --> 00:28:40,187 przez drugiego. 645 00:28:40,187 --> 00:28:42,020 I po prostu spoglądając na to, nawet jeśli 646 00:28:42,020 --> 00:28:44,660 bez wcześniejszego doświadczenia z ten język, jaki numer 647 00:28:44,660 --> 00:28:46,920 to prawdopodobnie rozpocznie odliczanie? 648 00:28:46,920 --> 00:28:47,730 OK, 0. 649 00:28:47,730 --> 00:28:50,240 I zgaduję, że to dlatego, że Ciebie zobaczyć, że nie jest int i ja, 650 00:28:50,240 --> 00:28:51,073 który jest zmienny. 651 00:28:51,073 --> 00:28:52,390 Jest ustawiony na 0. 652 00:28:52,390 --> 00:28:55,670 >> A później, wygląda na to, przekazujemy printf, wartość. 653 00:28:55,670 --> 00:28:58,000 I rzeczywiście, zrobiłem trochę literówkę tutaj. 654 00:28:58,000 --> 00:28:59,850 Ale to łatwo naprawić. 655 00:28:59,850 --> 00:29:02,390 Dodam w, I tutaj. 656 00:29:02,390 --> 00:29:06,150 Mamy teraz printf samopoczucie przeszedł tę wartość zastępczy. 657 00:29:06,150 --> 00:29:08,299 A co się liczy w górę przez? 658 00:29:08,299 --> 00:29:08,840 PUBLICZNOŚCI: 50. 659 00:29:08,840 --> 00:29:09,340 50. 660 00:29:09,340 --> 00:29:10,160 49. 661 00:29:10,160 --> 00:29:10,910 DAVID J MALAN: 49. 662 00:29:10,910 --> 00:29:13,340 Więc 50, na pierwszy rzut oka, wydaje się słuszne. 663 00:29:13,340 --> 00:29:16,990 Ale, jak się okazuje, będzie nasz stan, który trzymamy kontroli. 664 00:29:16,990 --> 00:29:21,740 I mamy zamiar raz zatrzymać I już nie jest mniejsza niż 50. 665 00:29:21,740 --> 00:29:24,920 Więc to pętla, przeciwnie, powinna wykonanie, tak długo, jak jest mniej niż 50. 666 00:29:24,920 --> 00:29:28,891 Ale jak tylko będzie to 50 lub 51, lub, co gorsza, powinien automatycznie. 667 00:29:28,891 --> 00:29:29,390 W porządku. 668 00:29:29,390 --> 00:29:31,200 >> Więc co tak naprawdę dzieje się tutaj? 669 00:29:31,200 --> 00:29:33,160 Tak to jest na porządku Operacje na pętli. 670 00:29:33,160 --> 00:29:35,440 Jeden, masz tzw inicjalizacji. 671 00:29:35,440 --> 00:29:38,264 Ta żółta podświetlony fragment kod jest wykonywany po pierwsze, 672 00:29:38,264 --> 00:29:40,930 i ma taki skutek, że za Środa, można sobie wyobrazić. 673 00:29:40,930 --> 00:29:45,500 To tworzy zmienną i i go sklepy w tej zmiennej wartość 0. 674 00:29:45,500 --> 00:29:47,560 Więc jest 0 w tym momencie w historii. 675 00:29:47,560 --> 00:29:49,680 >> Następną rzeczą, że dzieje się w tej konstrukcji, 676 00:29:49,680 --> 00:29:51,540 Warunkiem jest, że zostanie sprawdzone. 677 00:29:51,540 --> 00:29:54,325 Więc sprawdzić natychmiast, i jest mniejsza niż 50? 678 00:29:54,325 --> 00:29:57,700 I oczywiście, odpowiedź teraz jest, to z pewnością tak. 679 00:29:57,700 --> 00:30:00,710 Tak, dlatego, że jest 0, a to jest na pewno mniej niż 50. 680 00:30:00,710 --> 00:30:03,866 Następnie, co się dzieje, jest to, że linia kodu zostanie wykonany. 681 00:30:03,866 --> 00:30:06,740 I rzeczywiście, jeśli jest wielokrotnością linie kodu w tych klamrach, 682 00:30:06,740 --> 00:30:09,020 wszyscy się wykonywane jedna po drugiej. 683 00:30:09,020 --> 00:30:11,450 >> I w efekcie tutaj jest najwyraźniej, aby wydrukować 684 00:30:11,450 --> 00:30:15,365 I numer, który będzie 0, a następnie 1, a następnie 2. 685 00:30:15,365 --> 00:30:15,865 Ale dlaczego? 686 00:30:15,865 --> 00:30:17,410 Dlaczego to się zwiększany? 687 00:30:17,410 --> 00:30:20,680 Cóż, czwarta rzecz, zdarza się, że tej składni 688 00:30:20,680 --> 00:30:22,610 zostanie wykonany, po średnikiem. 689 00:30:22,610 --> 00:30:27,506 i ++ jest skróconym sposobem na powiedzenie; przyjąć wartość i, i dodać 1 do niego; 690 00:30:27,506 --> 00:30:30,380 a następnie następnym razem, dodać 1 do niego; i następnym razem, 691 00:30:30,380 --> 00:30:31,330 dodać 1 do niej. 692 00:30:31,330 --> 00:30:33,640 >> Jeśli więc wracamy, co się wydarzy 693 00:30:33,640 --> 00:30:35,890 obok jest ja nie zamierzam zainicjować kiedykolwiek ponownie. 694 00:30:35,890 --> 00:30:38,290 Jeśli Ciągle inicjalizacji i 0, w tym przykładzie 695 00:30:38,290 --> 00:30:41,110 nigdy nie skończy, bo Chciałbym być zatrzymany na 0. 696 00:30:41,110 --> 00:30:43,870 Ale to, co ma się wydarzyć jest że warunek ten zostanie zaznaczone, 697 00:30:43,870 --> 00:30:54,280 linia kodu dostanie wykonana, I będzie zwiększana, 698 00:30:54,280 --> 00:30:56,970 warunek ten zostanie zaznaczone, kod zostanie wykonany. 699 00:30:56,970 --> 00:30:59,790 I przechowywane na rowerze ponownie, i znowu, i znowu, 700 00:30:59,790 --> 00:31:03,340 dopóki i ++ wywołuje wartość 50. 701 00:31:03,340 --> 00:31:05,870 >> Warunkiem następnie mówi, 50 mniej niż 50? 702 00:31:05,870 --> 00:31:09,360 Odpowiedź, oczywiście, nie jest i więc cały kod zatrzymuje wykonanie. 703 00:31:09,360 --> 00:31:13,020 A jeśli masz więcej kodu na ekranie na dole, to co dzieje się dalej. 704 00:31:13,020 --> 00:31:17,530 To wyskakuje z tych klamrach i nadal drukować więcej po tym. 705 00:31:17,530 --> 00:31:20,470 >> Więc żart teraz, od Foxtrot, że będziesz być może teraz rozumiem. 706 00:31:20,470 --> 00:31:30,810 707 00:31:30,810 --> 00:31:31,560 To zawsze jest zabawne. 708 00:31:31,560 --> 00:31:34,110 To jak chichotów rodzaj przenikać, 709 00:31:34,110 --> 00:31:38,370 i wtedy zdajesz sobie sprawę, że nie powinno być śmieje humoru tak. 710 00:31:38,370 --> 00:31:41,160 Ale istnieją pewne wynos tutaj, pedagogicznie, też. 711 00:31:41,160 --> 00:31:43,577 Tak więc okazuje się, że jestem brakuje kawałek składni, 712 00:31:43,577 --> 00:31:45,410 lub foxtrot pod brakuje kawałek składni tutaj. 713 00:31:45,410 --> 00:31:48,076 Czego brakuje, że mieliśmy każdy inny przykład dotychczasowych? 714 00:31:48,076 --> 00:31:51,599 715 00:31:51,599 --> 00:31:53,390 Wróć, to tam, więc to jest coś innego, 716 00:31:53,390 --> 00:31:54,440 że wrócimy do wkrótce. 717 00:31:54,440 --> 00:31:55,398 Czego brakuje, chociaż? 718 00:31:55,398 --> 00:31:55,908 Tak. 719 00:31:55,908 --> 00:31:58,150 >> PUBLICZNOŚCI członkowskie: inicjalizacja [niesłyszalne]. 720 00:31:58,150 --> 00:31:58,470 >> DAVID J MALAN: OK. 721 00:31:58,470 --> 00:31:58,980 O tak. 722 00:31:58,980 --> 00:32:03,210 Tak właściwie, to jest-- Cóż, i licznik jest inicjowany 723 00:32:03,210 --> 00:32:05,470 w górze, a raczej, oświadczył się powyżej. 724 00:32:05,470 --> 00:32:06,960 Tak więc jest to kolejny sposób to zrobić. 725 00:32:06,960 --> 00:32:08,685 Ale nie w jednej linii, że to ważne, choć. 726 00:32:08,685 --> 00:32:09,310 Jak się tutaj? 727 00:32:09,310 --> 00:32:10,196 >> PUBLICZNOŚCI PAŃSTWO: Czy to nawiasy klamrowe? 728 00:32:10,196 --> 00:32:10,640 >> DAVID J MALAN: Tak. 729 00:32:10,640 --> 00:32:12,080 Więc nawiasy klamrowe brakuje. 730 00:32:12,080 --> 00:32:15,495 Ale ten kod, to znaczy, do ich kredytu, jest w rzeczywistości, składniowo poprawny. 731 00:32:15,495 --> 00:32:17,610 Okazuje się, że tego nie zrobisz potrzebne nawiasy klamrowe 732 00:32:17,610 --> 00:32:21,691 jeśli masz tylko jeden wiersz kodu chcesz wykonać wewnątrz pętli. 733 00:32:21,691 --> 00:32:24,190 Teraz zawsze, w klasie, w wszystkie nasze kodu dystrybucji, 734 00:32:24,190 --> 00:32:26,730 zawierać nawiasy klamrowe tak, tak dla jasności. 735 00:32:26,730 --> 00:32:29,010 Ale sobie sprawę, że w podręcznikach i przykłady na forum, 736 00:32:29,010 --> 00:32:31,300 można bardzo dobrze zobaczyć kręcone szelki brakuje kiedyś. 737 00:32:31,300 --> 00:32:34,850 I to jest OK, jeśli to, co są wcięte i przeznaczone 738 00:32:34,850 --> 00:32:38,650 jest tylko jedna linia kodu, a nie wiele linii kodu, potencjalnie. 739 00:32:38,650 --> 00:32:39,150 W porządku. 740 00:32:39,150 --> 00:32:44,500 Więc związane z emisją brak precyzji, jest problem z przelewem, 741 00:32:44,500 --> 00:32:48,560 w tym sensie, że podobny są liczbami całkowitymi mają limity nich 742 00:32:48,560 --> 00:32:49,970 jak zmiennoprzecinkowych? 743 00:32:49,970 --> 00:32:53,120 W świecie zmiennoprzecinkowych wartości, możemy być tak dokładne, tylko, 744 00:32:53,120 --> 00:32:55,710 po czym, czasami złe rzeczy mogą się zdarzyć, 745 00:32:55,710 --> 00:32:57,760 a nasze programy mogą być buggy i błędów. 746 00:32:57,760 --> 00:33:00,050 Teraz nawet z liczb całkowitych, może pojawią się problemy. 747 00:33:00,050 --> 00:33:03,820 Teraz liczbą całkowitą nie mają numery punkt dziesiętny lub po nim. 748 00:33:03,820 --> 00:33:07,130 To tylko liczby naturalne, zwykle. 749 00:33:07,130 --> 00:33:09,430 Więc co może pójść nie tak z int? 750 00:33:09,430 --> 00:33:12,210 Jeśli używam int do liczyć, co może pójść źle? 751 00:33:12,210 --> 00:33:13,230 Wydaje się o wiele prostsze. 752 00:33:13,230 --> 00:33:13,873 Tak. 753 00:33:13,873 --> 00:33:16,240 >> PUBLICZNOŚCI użytkownika: Jeśli Numer dostaje [niesłyszalne] 754 00:33:16,240 --> 00:33:17,073 >> DAVID J MALAN: Tak. 755 00:33:17,073 --> 00:33:20,820 Co zrobić, jeśli nie liczyć tak wysokie, że Ciebie Nie potrafię wyrazić, że bardzo duża liczba. 756 00:33:20,820 --> 00:33:21,320 Dobrze? 757 00:33:21,320 --> 00:33:23,910 W pewnym momencie, będziesz przekracza granice 758 00:33:23,910 --> 00:33:27,077 o wartości 32-bitowej lub 64-bitowej wartości. 759 00:33:27,077 --> 00:33:29,410 Teraz znowu, nie jestem pewien, jak wymówić wartość 64-bitową, 760 00:33:29,410 --> 00:33:32,230 ale wiem, że w 32-bitowej liczby całkowitej, największą wartość może być, 761 00:33:32,230 --> 00:33:35,490 jeśli to tylko pozytywne wartości, jest mniej więcej 4 mld. 762 00:33:35,490 --> 00:33:39,000 Więc jeśli staram się liczyć do 5 mld euro, coś się wydarzy. 763 00:33:39,000 --> 00:33:41,050 Ale zobaczmy, co w rzeczywistości może się zdarzyć. 764 00:33:41,050 --> 00:33:44,570 W świecie całkowitej przepełnienie, w którym, w pewnym sensie, 765 00:33:44,570 --> 00:33:48,270 przepełnienie również zdolności całkowitą, co może się zdarzyć? 766 00:33:48,270 --> 00:33:51,190 >> Więc tutaj jest liczba binarna, jest powrotem do 0. 767 00:33:51,190 --> 00:33:54,630 To wszystko 1, a placeholder'y tam są potęgi 2, 768 00:33:54,630 --> 00:33:55,980 tak to jest binarny. 769 00:33:55,980 --> 00:33:59,416 Tak więc są to 8, 1 bit na ekranie. 770 00:33:59,416 --> 00:34:01,290 A jeśli przypomnieć sobie lub Ci szybko do matematyki, 771 00:34:01,290 --> 00:34:06,074 jaka wartość jest reprezentowany tutaj z tych ośmiu 1 bitów? 772 00:34:06,074 --> 00:34:06,950 255. 773 00:34:06,950 --> 00:34:09,260 I nawet jeśli nie byli pewni, z matematyki, można zrobić to na zewnątrz. 774 00:34:09,260 --> 00:34:10,550 Albo może po prostu rodzaj rozumu przez to, 775 00:34:10,550 --> 00:34:12,633 Chwileczkę, czy jestem co stanowi wartość 8 bitową, 776 00:34:12,633 --> 00:34:17,750 a ja mam 256 możliwych wartości, a pierwszy z nich oznacza 0, 777 00:34:17,750 --> 00:34:19,909 Wiem tylko, że Największym będzie 255, 778 00:34:19,909 --> 00:34:21,510 i to właśnie ta może być. 779 00:34:21,510 --> 00:34:26,060 >> Więc przypuszczam, staram się dodać 1 do tej wartości. 780 00:34:26,060 --> 00:34:28,750 Co zrobić w klasie Szkoła przy dodawaniu 1, i to 781 00:34:28,750 --> 00:34:31,139 tak naprawdę nie pasuje, bo musisz nosić 1? 782 00:34:31,139 --> 00:34:34,380 Co to jest liczba ta będzie stać się po dodaniu 1? 783 00:34:34,380 --> 00:34:37,030 To stanie się 0. 784 00:34:37,030 --> 00:34:37,530 Dobrze? 785 00:34:37,530 --> 00:34:41,139 Bo gdybyś miał więcej bits-- i będę spróbować, rodzaj, wpisz go here-- 786 00:34:41,139 --> 00:34:44,710 gdybyśmy mieli więcej bitów, co może zrobić tu dodać 1, 787 00:34:44,710 --> 00:34:47,370 a następnie, że mamy to. 788 00:34:47,370 --> 00:34:48,739 Ups. 789 00:34:48,739 --> 00:34:52,250 Musielibyśmy 1 bitowego całą drogę tutaj. 790 00:34:52,250 --> 00:34:55,530 >> Jednak, jeśli jest to ograniczone wartości, to jest tylko 8 bitów, 791 00:34:55,530 --> 00:34:57,480 i to jest z góry określony przez komputer 792 00:34:57,480 --> 00:34:59,370 1 to skutecznie, że nie istnieje. 793 00:34:59,370 --> 00:35:00,980 To po prostu rodzaj spada z klifu. 794 00:35:00,980 --> 00:35:05,480 I tak, jeśli dodać 1 do 255, co wartość pan podobno dostać? 795 00:35:05,480 --> 00:35:06,180 0. 796 00:35:06,180 --> 00:35:09,700 I tak numerów przypadkowo, i być może, w sposób niezamierzony, 797 00:35:09,700 --> 00:35:12,040 kończy się owijając się wokół tak. 798 00:35:12,040 --> 00:35:14,079 Więc co może być implikacją tego? 799 00:35:14,079 --> 00:35:15,620 Cóż, jest kilka różnych rzeczy. 800 00:35:15,620 --> 00:35:18,751 Tak jeden, to jednak w końcu wygląda jak 0, nieumyślnie, 801 00:35:18,751 --> 00:35:20,750 ale można trochę zobaczyć, nawet w świecie rzeczywistym, 802 00:35:20,750 --> 00:35:23,416 na lepsze lub na gorsze, przejawy tej idei limitu. 803 00:35:23,416 --> 00:35:26,630 Na przykład, każdy z was, którzy kiedykolwiek grał LEGO Star Wars, 804 00:35:26,630 --> 00:35:28,880 Czy ktoś się z wiedzą maksymalna liczba monet 805 00:35:28,880 --> 00:35:32,032 można zebrać w Lego Star Wars? 806 00:35:32,032 --> 00:35:35,640 Zgadywać na podstawie wiodące dzisiejsze pytania. 807 00:35:35,640 --> 00:35:39,140 Jest większy niż 256 lub 255. 808 00:35:39,140 --> 00:35:40,330 Jest to 4 mld. 809 00:35:40,330 --> 00:35:42,080 Tak więc okazuje się, oraz istnieje kilka people-- 810 00:35:42,080 --> 00:35:46,080 niektóre googling potwierdziła ostatnia night-- dostał 4 mld złotych monet, 811 00:35:46,080 --> 00:35:47,730 lub cokolwiek, w Lego Star Wars. 812 00:35:47,730 --> 00:35:49,860 Choć zdaje się, nie ma sposób oszukać grę, 813 00:35:49,860 --> 00:35:53,222 jest to błąd lub funkcja, która pozwala ci tylko naliczane wiele, wiele punktów. 814 00:35:53,222 --> 00:35:54,930 Ale największa Wartość, według 815 00:35:54,930 --> 00:35:58,360 w tym zrzucie ekranu z kimś I znaleźć w Internecie, to rzeczywiście, 4 mld. 816 00:35:58,360 --> 00:35:59,240 >> Teraz to dlaczego? 817 00:35:59,240 --> 00:36:03,040 To właśnie 4 miliardów, Prawdopodobnie dlatego, że ktoś postanowił, 818 00:36:03,040 --> 00:36:05,500 kto pisał tę grę, że mogą zrobić 4 miliardy, 819 00:36:05,500 --> 00:36:07,340 coś, coś, coś, jak wartości kładę się 820 00:36:07,340 --> 00:36:10,256 z kalkulatora wcześniej, ale to tylko trochę czystsze dla ludzi 821 00:36:10,256 --> 00:36:12,610 powiedzieć maksymalną liczbę z coins-- lub ćwiekami, 822 00:36:12,610 --> 00:36:14,860 jak nazywają them--, że Ciebie może zbierać to 4 mld. 823 00:36:14,860 --> 00:36:16,290 A więc, dlaczego tak jest? 824 00:36:16,290 --> 00:36:20,310 Jak to gra LEGO realizacji licznik 825 00:36:20,310 --> 00:36:23,420 który jest śledząc liczba monet masz? 826 00:36:23,420 --> 00:36:24,266 Oni używają, co? 827 00:36:24,266 --> 00:36:26,390 PUBLICZNOŚCI PAŃSTWO: Zatrzymuje licząc po 4 mld. 828 00:36:26,390 --> 00:36:27,720 DAVID J MALAN: Zatrzymuje licząc po 4 mld euro, 829 00:36:27,720 --> 00:36:29,525 co oznacza, że ​​może wywnioskować, jako programista, 830 00:36:29,525 --> 00:36:31,960 że są prawdopodobnie za pomocą 32-bitowej liczby całkowitej. 831 00:36:31,960 --> 00:36:35,380 Jak programista dosłownie wpisane, int, w swoim kodzie, 832 00:36:35,380 --> 00:36:39,620 i to jest typ zmiennej, oni używają do przechowywania czyjś kod. 833 00:36:39,620 --> 00:36:42,230 Więc nie ma innych objawów z tego rodzaju ograniczeń. 834 00:36:42,230 --> 00:36:45,063 >> Więc nie grałem to game-- a ja czytania historii 835 00:36:45,063 --> 00:36:48,470 w celu potwierdzenia, jak much-- ale w Oryginalna wersja Cywilizacji, gdzie 836 00:36:48,470 --> 00:36:53,240 Ci podobno współdziałają ze sobą i mogą prowadzić wojnę i mieć spokój, 837 00:36:53,240 --> 00:36:56,590 Gandhi miał być jednym z najspokojniejszych znaków, tak jak ja 838 00:36:56,590 --> 00:36:59,280 rozumiem, w pierwszym wersja Cywilizacji. 839 00:36:59,280 --> 00:37:03,250 I rzeczywiście, w skali od 1 do 10, jego agresywność był tylko jeden. 840 00:37:03,250 --> 00:37:05,620 Więc nigdy tak lekko agresywne, najwyraźniej. 841 00:37:05,620 --> 00:37:11,590 >> Ale w pewnym momencie, można podobno zainstalowanie demokracji w geografii. 842 00:37:11,590 --> 00:37:14,900 A jeśli zainstalowania demokracji do swojej wersji gry, 843 00:37:14,900 --> 00:37:17,320 to Twój poziom agresji idzie w dół. 844 00:37:17,320 --> 00:37:18,460 To jest dobra rzecz. 845 00:37:18,460 --> 00:37:20,890 Ludzie są bardziej spokojne najwyraźniej, w tej sytuacji. 846 00:37:20,890 --> 00:37:23,190 Ale widocznie ktoś zrobił nie mają, w razie, stan 847 00:37:23,190 --> 00:37:24,780 w oryginalnej wersji kodu. 848 00:37:24,780 --> 00:37:30,650 >> Tak więc poziom agresji Gandhiego wyszedł z pozytywna 1, minus 2, na negatywną 1, 849 00:37:30,650 --> 00:37:33,840 ale gra nie zrozumieć liczby ujemne. 850 00:37:33,840 --> 00:37:38,680 Więc co się stało, było agresji Gandhiego Poziom poszedł od 1, 0, 1 do negatywnej, 851 00:37:38,680 --> 00:37:40,900 którym skutkowały owijanie wokół bycia 852 00:37:40,900 --> 00:37:44,690 najbardziej agresywny charakter w grze, o wartości 255, 853 00:37:44,690 --> 00:37:46,630 w skali od 1 do 10. 854 00:37:46,630 --> 00:37:49,887 I od tego czasu nie było więcej inkarnacje tej grze, 855 00:37:49,887 --> 00:37:51,720 i oni przechowywać go jako rodzaj Easter egg, 856 00:37:51,720 --> 00:37:53,870 Gandhi jest najwyraźniej tak strasznie agresywny. 857 00:37:53,870 --> 00:37:56,740 Ale to było wynikiem bardzo prosty błąd programowania 858 00:37:56,740 --> 00:37:58,630 w tym bardzo wczesnej wersji gry. 859 00:37:58,630 --> 00:38:02,860 >> Teraz bardziej niepokojąco, więcej Niedawno, Boeing 787 860 00:38:02,860 --> 00:38:05,720 zostało udokumentowane jako mające błąd, nie rodzaj urządzenia 861 00:38:05,720 --> 00:38:07,340 Ci szczególnie chcą mieć błąd. 862 00:38:07,340 --> 00:38:10,130 A objawy, że będę czytać tu, z artykułu w Internecie, 863 00:38:10,130 --> 00:38:13,840 był to model 787 samolot który był zasilany w sposób ciągły 864 00:38:13,840 --> 00:38:18,030 do 248 dni, może stracić wszystko prądu zmiennego AC, 865 00:38:18,030 --> 00:38:20,850 energii elektrycznej, ze względu na Generator jednostki sterujące, 866 00:38:20,850 --> 00:38:23,330 GCUs jednocześnie wchodzenia w tryb awaryjny. 867 00:38:23,330 --> 00:38:26,790 Więc to było ostrzeżenie wydane gdy problem ten został odkryty. 868 00:38:26,790 --> 00:38:28,750 Stan ten jest spowodowany licznikiem oprogramowania 869 00:38:28,750 --> 00:38:32,230 wewnętrzna do GCUs, więc liczbą całkowitą lub zmienne, 870 00:38:32,230 --> 00:38:36,850 że wyleje się po 248 dni ciągłej mocy. 871 00:38:36,850 --> 00:38:40,350 Boeing w procesie opracowanie aktualizacji oprogramowania GCU, że 872 00:38:40,350 --> 00:38:42,350 usunie stanu niebezpiecznego. 873 00:38:42,350 --> 00:38:44,226 >> Tak więc podobnie jak pocisku Scenariusz, w którym 874 00:38:44,226 --> 00:38:46,850 mieli jakieś zmiennej że liczyłem, i liczenia, 875 00:38:46,850 --> 00:38:50,720 i liczenia, ale stopniowo przepełnione granice jego możliwości, 876 00:38:50,720 --> 00:38:54,890 podobnie uczynił ten cholerny samolot mają zmienną przepełnienia 877 00:38:54,890 --> 00:38:56,410 po dość czasu biegania. 878 00:38:56,410 --> 00:38:59,240 I tak aż język-w-policzek pracy wokół tego problemu 879 00:38:59,240 --> 00:39:04,400 jest naprawdę, restart, samolot każdego 247 dni, tak, że pamięć zostaje wycierane 880 00:39:04,400 --> 00:39:06,100 a zmienna wraca do 0. 881 00:39:06,100 --> 00:39:09,410 Ale sobie sprawę, że jest to bardzo duża wcielenie oprogramowania, 882 00:39:09,410 --> 00:39:14,070 ale przede wszystkim, jak słyszymy o Apple systemów operacyjnych będzie w samochodach, 883 00:39:14,070 --> 00:39:18,030 i samo prowadzenie samochodu z Google, a dowolna liczba wcieleń oprogramowania 884 00:39:18,030 --> 00:39:21,000 w naszym codziennym życiu, telewizory i zegarki, i więcej, 885 00:39:21,000 --> 00:39:24,950 sobie sprawę, zostali otoczeni przez oprogramowanie, wszystko, co jest napisane przez nas, ludzi. 886 00:39:24,950 --> 00:39:28,150 >> A jak my wszyscy wkrótce odkrywają, to bardzo proste i bardzo typowe 887 00:39:28,150 --> 00:39:30,250 popełniać błędy podczas pisania oprogramowania. 888 00:39:30,250 --> 00:39:32,745 A jeśli nie je złapać, złe rzeczy mogą się zdarzyć. 889 00:39:32,745 --> 00:39:35,400 Teraz czasem, niektóre śmieszne rzeczy może się zdarzyć, 890 00:39:35,400 --> 00:39:38,280 lub przynajmniej czasem wiedzieć, aby spodziewać się zło. 891 00:39:38,280 --> 00:39:41,550 Tak 0 podzielona przez 0, ze stopniem szkoła, jest na ogół złe. 892 00:39:41,550 --> 00:39:43,050 To nieokreślone. 893 00:39:43,050 --> 00:39:46,440 I okazuje out-- i zobaczmy, czy mój mikrofon może odebrać to up-- że Apple 894 00:39:46,440 --> 00:39:47,790 miał trochę zabawy z tym niedawno. 895 00:39:47,790 --> 00:39:48,850 Więc mam tutaj iPhone. 896 00:39:48,850 --> 00:39:54,160 Mam zamiar porozmawiać z Siri i poprosić ją, dać mi odpowiedź na 0 podzielony przez 0. 897 00:39:54,160 --> 00:39:55,850 Co jest 0 podzielona przez 0? 898 00:39:55,850 --> 00:39:59,350 899 00:39:59,350 --> 00:40:02,230 >> Siri: Wyobraź sobie, że masz 0 ciasteczka i podzielić je równo 900 00:40:02,230 --> 00:40:03,540 między 0 znajomymi. 901 00:40:03,540 --> 00:40:05,810 Ile ciasteczka ma każda osoba dostać? 902 00:40:05,810 --> 00:40:06,350 Widzieć? 903 00:40:06,350 --> 00:40:07,660 To nie ma sensu. 904 00:40:07,660 --> 00:40:10,540 I Cookie Monster jest smutny że nie ma ciasteczka. 905 00:40:10,540 --> 00:40:13,987 I jesteś smutny, że nie masz jeszcze żadnych znajomych. 906 00:40:13,987 --> 00:40:15,570 DAVID J MALAN: To trochę nieprzyjemny. 907 00:40:15,570 --> 00:40:17,550 Więc to jest to, co właśnie powiedział, że nie. 908 00:40:17,550 --> 00:40:21,380 To nieokreślone, to nie jest zdefiniowane, I rzeczywiście, wiele języków programowania 909 00:40:21,380 --> 00:40:24,950 lub, naprawdę, kompilatory wykrywać, kiedy, w programie, 910 00:40:24,950 --> 00:40:27,050 spróbuj podzielić 0 przez 0. 911 00:40:27,050 --> 00:40:29,830 Więcej zabawy, niż to jest jednak to, że najwyraźniej, Cookie Monster 912 00:40:29,830 --> 00:40:31,270 jest na Twitterze te dni. 913 00:40:31,270 --> 00:40:37,610 A on odpowiedział na to, z tym, co jest absolutnie urocze. 914 00:40:37,610 --> 00:40:40,110 Ale rzućmy okiem na kilka innych konstrukcji, 915 00:40:40,110 --> 00:40:43,459 a następnie umieścić niektóre z tych Kod w użyciu, w dobrych sposobów. 916 00:40:43,459 --> 00:40:45,250 Tak więc okazuje się, oprócz pętli, nie 917 00:40:45,250 --> 00:40:49,174 coś, co nazywa pętli while, że wygląda inaczej i jest realizowane 918 00:40:49,174 --> 00:40:51,590 trochę differently-- i my w końcu zobaczyć examples-- 919 00:40:51,590 --> 00:40:53,500 ale w pewnym sensie, to jest prostsze, ponieważ to 920 00:40:53,500 --> 00:40:56,670 nie pozwala przygotować i aktualizuje się w granicach od pętli. 921 00:40:56,670 --> 00:40:57,794 Nadal można wdrożyć. 922 00:40:57,794 --> 00:41:01,219 Więc można zrobić dokładnie te same rzeczy z pętli while, jak w pętli for, 923 00:41:01,219 --> 00:41:03,260 ale składnia, ultimately-- jak będziesz w końcu 924 00:41:03,260 --> 00:41:04,551 see-- będzie inna. 925 00:41:04,551 --> 00:41:07,450 Jest nawet robić podczas pętli, która w rzeczywistości jest trochę inaczej, 926 00:41:07,450 --> 00:41:09,640 w tym podczas gdy dla pętli i pętla while zawsze 927 00:41:09,640 --> 00:41:13,005 sprawdzić ich stan pierwsze, jeśli można przeczytać w tym rzecz, od góry do dołu, 928 00:41:13,005 --> 00:41:16,440 to niby wygląda to będzie sprawdzić, że to stan ostatnia, bo to 929 00:41:16,440 --> 00:41:17,910 naprawdę ostatnia linia kodu. 930 00:41:17,910 --> 00:41:20,580 I rzeczywiście, że będzie przydatna w niektórych programach, które piszą, 931 00:41:20,580 --> 00:41:23,746 jeśli chcesz tylko ślepo coś zrobić i ostatecznie sprawdzić stan. 932 00:41:23,746 --> 00:41:25,205 To nie musi być złe. 933 00:41:25,205 --> 00:41:27,912 Jeśli chcemy zmiennych, możemy zrobić on na kilka różnych sposobów. 934 00:41:27,912 --> 00:41:30,290 I zobaczyliśmy w Foxtrot kreskówki, jeden sposób to zrobić, 935 00:41:30,290 --> 00:41:33,400 gdzie można zadeklarować zmienną, jak int licznik średnikiem, 936 00:41:33,400 --> 00:41:36,570 a następnie later-- może następnym linia, może 10 linie later-- 937 00:41:36,570 --> 00:41:37,800 faktycznie go zainicjować. 938 00:41:37,800 --> 00:41:42,230 Więc te 2 linie kodu zadeklarować zmienną typu int 939 00:41:42,230 --> 00:41:44,930 i nazywają to licznik, więc daje mi na tyle bitów trzymać int. 940 00:41:44,930 --> 00:41:48,230 A potem w końcu, stawia wartość 0 do tej zmiennej. 941 00:41:48,230 --> 00:41:51,250 Organizuje się on w 0 i 1 wzór, który znamy z ostatniego tygodnia, 942 00:41:51,250 --> 00:41:53,260 oznacza liczbę znamy jako 0. 943 00:41:53,260 --> 00:41:56,920 Albo mówiąc, można to zrobić o wiele bardziej zwięźle, tak jak to. 944 00:41:56,920 --> 00:41:59,390 >> Teraz mamy także Możliwość wywoływać funkcje. 945 00:41:59,390 --> 00:42:03,070 I rzeczywiście, tu jest linia 2 Program, lub jego fragment, 946 00:42:03,070 --> 00:42:06,157 które pozwala nam właściwie napisać kod, który 947 00:42:06,157 --> 00:42:08,990 dostaje komunikat z user-- dużo jak nasz wolontariusz chwilę ago-- 948 00:42:08,990 --> 00:42:11,320 magazynowania wynik w zmienna nazywa nazwa, 949 00:42:11,320 --> 00:42:15,470 i then-- tak jak z naszym wolontariuszem z printf-- wypisuje wartości 950 00:42:15,470 --> 00:42:19,180 przekazując w dwóch argumentów łańcuch, a następnie przez zmienną 951 00:42:19,180 --> 00:42:20,781 nazywa, nazwa, sam. 952 00:42:20,781 --> 00:42:23,155 Warto więc przyjrzeć, zanim wracamy do Mario tam, 953 00:42:23,155 --> 00:42:26,010 na kilka teraz, tego przykładów. 954 00:42:26,010 --> 00:42:30,537 >> Mam zamiar iść do przodu i otwarta się, powiedzmy, funkcja-0.c. 955 00:42:30,537 --> 00:42:33,120 I jak zawsze, ten kod jest dostępny na stronie internetowej kursu, w 956 00:42:33,120 --> 00:42:35,660 dzięki czemu można grać razem na domu i patrzeć na nią później. 957 00:42:35,660 --> 00:42:40,400 Ale tu jest program w to istotą, z linii 17 do 22. 958 00:42:40,400 --> 00:42:43,270 Program główny, gdzie jest Program zawsze będzie zacząć. 959 00:42:43,270 --> 00:42:46,980 Program ten, jak widać, się dzieje wydrukować swoje nazwisko, okrężnicy. 960 00:42:46,980 --> 00:42:50,320 Jest to zamiar zadzwonić getString, tak jak zrobiliśmy to z naszych wolontariuszy. 961 00:42:50,320 --> 00:42:53,365 A potem, to jest interesujące, to się nazywają PrintName. 962 00:42:53,365 --> 00:42:56,490 Okazuje się, że przez cały ten czas, nie Wydaje się, że funkcja nazywa PrintName. 963 00:42:56,490 --> 00:42:57,614 Która drukuje czyjeś imię. 964 00:42:57,614 --> 00:43:01,210 Nie trzeba używać printf od yesteryear, nie PrintName. 965 00:43:01,210 --> 00:43:03,500 >> Ale to jest mylące ponieważ PrintName nie 966 00:43:03,500 --> 00:43:06,760 pochodzą z C. Ludzie nie wymyślać jakieś 40 czy 50 lat temu, 967 00:43:06,760 --> 00:43:07,990 Zrobiłem, zamiast. 968 00:43:07,990 --> 00:43:10,330 I rzeczywiście, jeśli przewijać się dalej, uprzedzenia 969 00:43:10,330 --> 00:43:14,200 Jak mogę napisać własny Funkcje w C będziemy w końcu 970 00:43:14,200 --> 00:43:16,319 wyjaśnić, dlaczego wciąż powtarzają, nieważne, w kilku miejscach, 971 00:43:16,319 --> 00:43:18,110 ale na dzień dzisiejszy, niech wystarczy spojrzeć na nazwy. 972 00:43:18,110 --> 00:43:20,905 >> W linii 24, jeśli chcesz stworzyć własną funkcję, 973 00:43:20,905 --> 00:43:22,780 dosłownie napisać Nazwa funkcji. 974 00:43:22,780 --> 00:43:24,340 Wybrałem PrintName. 975 00:43:24,340 --> 00:43:26,159 W nawiasach, to następnie określić, jakie rodzaje 976 00:43:26,159 --> 00:43:28,450 wejść i ilu Funkcja ta ma podjąć. 977 00:43:28,450 --> 00:43:31,906 W tym przypadku, chcę zrobić 1 zmienna o nazwie, nazwa, 978 00:43:31,906 --> 00:43:34,030 i to będzie od typ, string, więc to będzie 979 00:43:34,030 --> 00:43:35,780 być jakiś ciąg znaków. 980 00:43:35,780 --> 00:43:39,170 A potem, to program-- podobnie jak w Scratch, 981 00:43:39,170 --> 00:43:42,590 można mieć niestandardową puzzle pieces-- będzie miał ten zwyczaj zachowania. 982 00:43:42,590 --> 00:43:46,760 To się nazywają printf przechodząc, witam, zastępczy, 983 00:43:46,760 --> 00:43:49,110 i wtedy to się podłączyć w co nazywa się użytkownik. 984 00:43:49,110 --> 00:43:51,450 >> Więc to jest przykład tego, co informatykiem będzie 985 00:43:51,450 --> 00:43:55,090 połączenie abstrakcji lub funkcjonalne rozkładu, które są po prostu 986 00:43:55,090 --> 00:43:58,110 fantazyjne sposoby z saying-- jest, jeśli podoba Ci się ten pomysł na wysokim poziomie, 987 00:43:58,110 --> 00:44:01,569 jak chcę funkcjonalność drukuje czyjeś imię, absolutnie masz 988 00:44:01,569 --> 00:44:04,360 może dosłownie napisać printf a następnie przechodzą w argumentach, które chcesz, 989 00:44:04,360 --> 00:44:07,340 a program będzie działał, jak to ma od środy. 990 00:44:07,340 --> 00:44:10,510 Ale możesz zacząć abstrakcyjne się pojęcie drukowania nazwy. 991 00:44:10,510 --> 00:44:13,270 Możesz nadać mu nazwę, jak PrintName, a to 992 00:44:13,270 --> 00:44:15,280 Jest to idea warstw z tygodnia 0. 993 00:44:15,280 --> 00:44:19,910 >> Odtąd, ja i nie musisz wiedzieć lub opieki, jak PrintName jest realizowany. 994 00:44:19,910 --> 00:44:22,470 Tak używa printf, może to nie, kto wie, co wykorzystuje? 995 00:44:22,470 --> 00:44:23,410 Kogo to obchodzi? 996 00:44:23,410 --> 00:44:26,034 Teraz mówię tu, a nie tutaj. 997 00:44:26,034 --> 00:44:28,700 I rzeczywiście, jak nasze programy się bardziej zaawansowane i wyrafinowane, 998 00:44:28,700 --> 00:44:32,550 mamy zamiar utrzymać biorąc za pewnik że istnieje mniejsze kawałki poziom puzzle. 999 00:44:32,550 --> 00:44:34,780 Bo my je napisał lub ktoś inny tego nie zrobił, więc 1000 00:44:34,780 --> 00:44:36,910 które możemy następnie zbudować na nich. 1001 00:44:36,910 --> 00:44:39,430 Rzućmy okiem na to wariant funkcjonować jeden. 1002 00:44:39,430 --> 00:44:41,780 >> Więc ten jeden trochę bardziej zaawansowane, ale okazuje się, 1003 00:44:41,780 --> 00:44:44,570 że w bibliotece CS50, w jest tylko funkcją GetInt. 1004 00:44:44,570 --> 00:44:47,720 Nie sądziliśmy, lata temu, aby zaimplementować funkcję GetPositiveInt. 1005 00:44:47,720 --> 00:44:50,970 I to jest trochę denerwujące, bo jeśli Jesteście pisząc program w którym 1006 00:44:50,970 --> 00:44:53,325 chcesz uzyskać pozytywny całkowitą od użytkownika, 1007 00:44:53,325 --> 00:44:55,010 można absolutnie użyć GetInt. 1008 00:44:55,010 --> 00:44:57,840 I można absolutnie skontaktować się z stan i może pętla 1009 00:44:57,840 --> 00:45:00,320 jeśli int jest większa niż 0 i krzyczeć na użytkownika 1010 00:45:00,320 --> 00:45:02,699 jeśli on lub ona nie daje Ci liczbą dodatnią. 1011 00:45:02,699 --> 00:45:04,740 Ale zbudujmy ten Budynek blokuje się, a, 1012 00:45:04,740 --> 00:45:06,555 zwyczaj kawałek Scratch, jeśli będzie. 1013 00:45:06,555 --> 00:45:08,680 Mam zamiar mieć program tutaj, że ostatecznie, ja 1014 00:45:08,680 --> 00:45:11,780 Chcesz być w stanie zadzwonić GetPositiveInt, a ja chcę być 1015 00:45:11,780 --> 00:45:14,200 w stanie wydrukować cokolwiek to int jest. 1016 00:45:14,200 --> 00:45:16,240 Ale to jest oderwane od teraz. 1017 00:45:16,240 --> 00:45:19,050 To właśnie ze względu na wysoki poziom Nazwa, która mówi, co robi, 1018 00:45:19,050 --> 00:45:21,780 co jest wspaniałe, bo to bardzo intuicyjne teraz czytać. 1019 00:45:21,780 --> 00:45:24,710 A jeśli ja obchodzi mnie, co jest pod spodem kaptur, pozwól mi przewinąć w dół. 1020 00:45:24,710 --> 00:45:27,140 I to jest trochę przytłaczający Po pierwsze, szczególnie 1021 00:45:27,140 --> 00:45:29,470 jeśli jest to twój pierwszy program, ale rzućmy okiem. 1022 00:45:29,470 --> 00:45:32,860 >> Już nie mówię, nieważne, ponieważ okazuje się funkcje 1023 00:45:32,860 --> 00:45:34,777 podobnie jak getString, może zwracają wartość do mnie. 1024 00:45:34,777 --> 00:45:36,610 Nie tylko mają do drukowania na ekranie, 1025 00:45:36,610 --> 00:45:38,410 mogą one przekazać mi coś w zamian. 1026 00:45:38,410 --> 00:45:41,535 I podczas gdy przed PrintName, Nie trzeba z powrotem nic. 1027 00:45:41,535 --> 00:45:44,160 Potrzebowałem efekt uboczny coś, co pokazuje się na ekranie, 1028 00:45:44,160 --> 00:45:46,570 ale ja nie potrzebuję człowieka przekazać mi coś w zamian. 1029 00:45:46,570 --> 00:45:48,840 Tutaj, z GetPositiveInt, jak z GetInt, 1030 00:45:48,840 --> 00:45:50,640 Chcę zostać przekazany coś w zamian. 1031 00:45:50,640 --> 00:45:53,220 Więc mówię nie, nieważne, na linii 23, ale int, 1032 00:45:53,220 --> 00:45:55,570 która mówi, funkcja ta że piszę, 1033 00:45:55,570 --> 00:45:58,860 nazywa GetPositiveInt będzie wręczyć mi liczbę całkowitą, a nie nic, 1034 00:45:58,860 --> 00:45:59,890 Nie nieważne. 1035 00:45:59,890 --> 00:46:03,280 >> Tymczasem zajmie nie Wejścia, więc już, rodzaj, odwrócić je. 1036 00:46:03,280 --> 00:46:08,280 Nie dam GetPositiveInt dowolny wejście, chcę dać mi swoją moc. 1037 00:46:08,280 --> 00:46:09,800 A potem co się dzieje teraz? 1038 00:46:09,800 --> 00:46:11,640 Więc oto jak mogę zadeklarować zmienną. 1039 00:46:11,640 --> 00:46:15,090 Zrobiłem to na zewnątrz pętli, ze względów będziemy w końcu zobaczyć, 1040 00:46:15,090 --> 00:46:17,700 ale to po prostu daje mi 32 bitów nazywa, n, 1041 00:46:17,700 --> 00:46:20,952 i mam wstępnie ustalenia ich przechowywania całkowitą. 1042 00:46:20,952 --> 00:46:23,660 A oto, że zrobić, gdy konstrukt, i dlatego jest to przydatne. 1043 00:46:23,660 --> 00:46:26,700 Dosłownie to zrobić, zaś n jest mniejszy niż 1. 1044 00:46:26,700 --> 00:46:28,030 Zobaczmy więc, co się dzieje. 1045 00:46:28,030 --> 00:46:30,760 I wydrukować, proszę daje mi pozytywnego int. 1046 00:46:30,760 --> 00:46:34,300 I wtedy pojawia się int, przy użyciu CS50 na działać i przechowywane w n. 1047 00:46:34,300 --> 00:46:38,990 >> A potem, co linia kodu prawdopodobnie zostanie wykonany następny, logiczny? 1048 00:46:38,990 --> 00:46:41,890 Która linia numer? 1049 00:46:41,890 --> 00:46:42,571 Tak, więc 31. 1050 00:46:42,571 --> 00:46:45,320 Nie wiesz tego, dopóki nie został poinformowany lub rodzaj wywnioskować to, 1051 00:46:45,320 --> 00:46:45,986 ale to prawda. 1052 00:46:45,986 --> 00:46:48,280 To idzie od góry do dołu a następnie powtarza. 1053 00:46:48,280 --> 00:46:55,840 Więc jeśli mam wpisane powiedzmy, liczby ujemny 1, n jest mniejszy niż ujemna 1? 1054 00:46:55,840 --> 00:46:56,340 Tak. 1055 00:46:56,340 --> 00:46:58,470 Ponieważ negatywne 1 jest mniejsza niż 1. 1056 00:46:58,470 --> 00:46:59,510 Więc co się stanie? 1057 00:46:59,510 --> 00:47:03,260 Mam zamiar to zrobić podczas gdy n jest mniejsze niż 1, 1058 00:47:03,260 --> 00:47:05,760 więc mam zamiar wrócić do linii 28. 1059 00:47:05,760 --> 00:47:09,530 >> I każdy time-- i niech uruchomić this-- aby funkcja 1 go skompilować, 1060 00:47:09,530 --> 00:47:11,340 a teraz dot funkcję 1 slash. 1061 00:47:11,340 --> 00:47:14,280 Gdybym wpisać ujemną 1, to będzie trzymać na mnie krzyczeć 1062 00:47:14,280 --> 00:47:17,530 dopóki nie współpracują, ponieważ każdy z moich wejść wynosi mniej niż 1 1063 00:47:17,530 --> 00:47:20,070 i, jeśli jest, gdy mniej niż 1, Mam zamiar robić to. 1064 00:47:20,070 --> 00:47:24,240 Jeśli w końcu nadaje jej numer, jak 50, na szczęście, to mówi, dzięki za 50. 1065 00:47:24,240 --> 00:47:24,970 Czemu? 1066 00:47:24,970 --> 00:47:30,640 Ponieważ, jak tylko n jest nie mniejsza niż 1, przestaję utknięcie w tej pętli, 1067 00:47:30,640 --> 00:47:33,840 i to nowe słowo kluczowe dzisiaj, powrotu, dosłownie robi. 1068 00:47:33,840 --> 00:47:36,800 Więc ja właśnie realizowany, w sposób Poczucie, odpowiednik getString, 1069 00:47:36,800 --> 00:47:40,590 gdzie jestem oddając się kto używa mnie, jakąś wartość. 1070 00:47:40,590 --> 00:47:42,820 Nie muszą być ciąg, to int. 1071 00:47:42,820 --> 00:47:44,990 Tak więc proste, szybkie Przykładem, ale będziesz wkrótce 1072 00:47:44,990 --> 00:47:47,930 zobaczyć niektóre bardziej wyrafinowane wersje martwych. 1073 00:47:47,930 --> 00:47:53,882 W rzeczywistości, rzućmy okiem na jeden numeryczny, który nazywa return.c. 1074 00:47:53,882 --> 00:47:55,590 A ten jest naprawdę trochę prostsze. 1075 00:47:55,590 --> 00:47:59,010 Tak więc celem tego programu w life-- niech skompilować i uruchomić go, 1076 00:47:59,010 --> 00:48:03,090 więc dokonać zwrotu, kropka ukośnik, return-- Ogłoszenie 1077 00:48:03,090 --> 00:48:05,530 program po prostu kostki wartość 2. 1078 00:48:05,530 --> 00:48:08,410 To dość głupie, trudno Kod, nie potrzeba żadnych nakładów, 1079 00:48:08,410 --> 00:48:12,220 ale ma wykazać innym Funkcja pisałem ja. 1080 00:48:12,220 --> 00:48:15,760 Więc, mam uznany za Zmienna o nazwie x, typu int, 1081 00:48:15,760 --> 00:48:17,840 równa liczbie 2, całkowicie arbitralne. 1082 00:48:17,840 --> 00:48:19,530 To tylko niektóre puszyste drukowania. 1083 00:48:19,530 --> 00:48:23,070 Mówi x jest teraz, tak i takie, organizowania kostek dot dot dot. 1084 00:48:23,070 --> 00:48:26,390 A magia jest najwyraźniej w linii 21. 1085 00:48:26,390 --> 00:48:30,120 Dzwonię funkcję o nazwie, sześcian, Jestem wręczając mu kartkę papieru 1086 00:48:30,120 --> 00:48:32,890 z numerem 2, napisane na nim, i jaką wartość, matematycznie, 1087 00:48:32,890 --> 00:48:34,860 chcę się z niego? 1088 00:48:34,860 --> 00:48:36,570 Podobnie jak testow? 1089 00:48:36,570 --> 00:48:37,070 8. 1090 00:48:37,070 --> 00:48:37,570 Dobrze? 1091 00:48:37,570 --> 00:48:40,160 Chcę, 2 pokrojone w kostkę z powrotem, od 2 do moc 3, więc 8 powrotem. 1092 00:48:40,160 --> 00:48:42,570 >> Więc gdzie realizowany jest kostka? 1093 00:48:42,570 --> 00:48:44,349 Cóż, zawiadomienie to realizowane tutaj. 1094 00:48:44,349 --> 00:48:47,140 I tak jak wcześniej, logicznie, mimo, że składnia jest prawdopodobnie 1095 00:48:47,140 --> 00:48:49,320 bardzo nowe dla wielu z was, Chcę tę funkcję 1096 00:48:49,320 --> 00:48:51,780 wręczyć mi kartkę papier z int na nim. 1097 00:48:51,780 --> 00:48:53,990 Więc mam int, na Nazwa jest arbitralnie, 1098 00:48:53,990 --> 00:48:55,530 ale dogodnie nazywa kostki. 1099 00:48:55,530 --> 00:48:58,430 Wejście do niej, to n wpisz całkowitą, więc to 1100 00:48:58,430 --> 00:49:00,800 jak mogę przekazać liczby 2 na arkuszu papieru. 1101 00:49:00,800 --> 00:49:03,910 A potem okazuje się, C wsporniki matematyka, więc nie ma czasu dla x, 1102 00:49:03,910 --> 00:49:06,680 po prostu użyć gwiazdki mnożenia. 1103 00:49:06,680 --> 00:49:11,070 I to zwraca n razy n razy n, która jest po prostu wartość kostkę. 1104 00:49:11,070 --> 00:49:12,840 >> Więc gdzie jedziemy z tym wszystkim? 1105 00:49:12,840 --> 00:49:14,570 To na pewno wicher wycieczki, pewni, 1106 00:49:14,570 --> 00:49:16,410 że w super sekcji i problemu ustawić 1, 1107 00:49:16,410 --> 00:49:18,368 będziesz szedł przez to wszystko jeszcze bardziej. 1108 00:49:18,368 --> 00:49:22,490 I problemem ustaw 1, będziemy przechodzić z graficznym świata Scratch 1109 00:49:22,490 --> 00:49:25,640 na coś więcej linii poleceń w C. Ale będziemy czerpać inspiracje 1110 00:49:25,640 --> 00:49:27,680 z tego tutaj gry z przeszłości, w którym 1111 00:49:27,680 --> 00:49:31,591 za pomocą C i standardową edycję zestaw p będziesz realizować piramidę Mario. 1112 00:49:31,591 --> 00:49:34,340 A w wydaniu hakerów z zestaw p, jeśli tak zdecydujesz się wybrać, 1113 00:49:34,340 --> 00:49:38,280 będzie realizować nieco bardziej wyzwanie piramidę z dwoma szczytami. 1114 00:49:38,280 --> 00:49:41,239 Będziesz także wdrożenia w skali algorytm, algorytm zachłanny. 1115 00:49:41,239 --> 00:49:43,030 Okazuje się tam kilka ciekawych logika 1116 00:49:43,030 --> 00:49:45,640 Za procesem działa stacja kasjera 1117 00:49:45,640 --> 00:49:47,410 i faktycznie wręczając ktoś z powrotem zmiany. 1118 00:49:47,410 --> 00:49:50,410 Jest to algorytm, który jest dość proste, że może nawet 1119 00:49:50,410 --> 00:49:53,576 zrozumieć intuicyjnie, kiedy pierwszy raz przeczytałem it-- zdając sobie sprawę, że to, co zawsze 1120 00:49:53,576 --> 00:49:57,110 zrobić w każdej chwili dałem komuś jakąś Pieniądze back--, który pozwala na zawsze 1121 00:49:57,110 --> 00:50:00,679 zminimalizowanie liczby notatki papieru lub metalu monety 1122 00:50:00,679 --> 00:50:02,220 że jesteś przekazanie z powrotem do użytkownika. 1123 00:50:02,220 --> 00:50:04,610 I to, oczywiście, jest zwięzła bo jeśli idziesz do CVS czy etażerka, 1124 00:50:04,610 --> 00:50:06,430 nie chcesz być uczynku cała masa tych, 1125 00:50:06,430 --> 00:50:07,596 lub cała masa grosze. 1126 00:50:07,596 --> 00:50:10,120 Chcesz najmniejsza monety, prawdopodobnie możliwe. 1127 00:50:10,120 --> 00:50:13,070 >> Wreszcie, będziesz również zostać zakwestionowane babrać się w świecie wody 1128 00:50:13,070 --> 00:50:17,220 i rzeczywiście dostać uznanie do mapowania między prędkości przepływu, 1129 00:50:17,220 --> 00:50:19,890 od lubią, woda pod prysznicem, po prostu, ile wody jest używany. 1130 00:50:19,890 --> 00:50:22,640 A w niej aluzja, będzie ten klip tutaj, 1131 00:50:22,640 --> 00:50:24,840 które będziemy kończy się na zaledwie 60 sekund, które 1132 00:50:24,840 --> 00:50:29,070 maluje obraz niskiego przepływu głowice prysznicowe. 1133 00:50:29,070 --> 00:50:30,886 >> [ODTWARZANIE] 1134 00:50:30,886 --> 00:50:31,385 -W porządku. 1135 00:50:31,385 --> 00:50:32,774 Mam tu wszystko. 1136 00:50:32,774 --> 00:50:35,800 Mam Cyclone z serii F, Hydra, Jetflow, Sztokholm 1137 00:50:35,800 --> 00:50:37,660 Supersteam, to nazwę. 1138 00:50:37,660 --> 00:50:39,265 >> -A Co polecacie? 1139 00:50:39,265 --> 00:50:40,460 >> -Czego szukasz? 1140 00:50:40,460 --> 00:50:41,300 >> -Power Człowiekiem. 1141 00:50:41,300 --> 00:50:42,285 Moc. 1142 00:50:42,285 --> 00:50:42,910 -Jak Silkwood. 1143 00:50:42,910 --> 00:50:44,520 -To Dla promieniowania. 1144 00:50:44,520 --> 00:50:46,335 -To prawda. 1145 00:50:46,335 --> 00:50:48,275 -Teraz Co to jest? 1146 00:50:48,275 --> 00:50:49,704 -To Commando 450. 1147 00:50:49,704 --> 00:50:50,620 Nie sprzedaję tego. 1148 00:50:50,620 --> 00:50:51,700 >> -Ale To jest to, co chcemy. 1149 00:50:51,700 --> 00:50:52,680 Jest to komando 450. 1150 00:50:52,680 --> 00:50:53,882 >> -Nie Wierzysz mi. 1151 00:50:53,882 --> 00:50:55,090 Jest używany tylko w cyrku. 1152 00:50:55,090 --> 00:50:56,512 To dla słoni. 1153 00:50:56,512 --> 00:50:59,356 >> -I'll Nic płacić. 1154 00:50:59,356 --> 00:51:01,252 >> -Co O Jerry? 1155 00:51:01,252 --> 00:51:02,760 >> -On Nie mógł sobie z tym poradzić. 1156 00:51:02,760 --> 00:51:04,910 Jest delikatna. 1157 00:51:04,910 --> 00:51:05,750 O tak. 1158 00:51:05,750 --> 00:51:36,737 1159 00:51:36,737 --> 00:51:37,320 [Zakończyć odtwarzanie] 1160 00:51:37,320 --> 00:51:37,700 DAVID J MALAN: Wszystko w porządku. 1161 00:51:37,700 --> 00:51:38,820 To, czy dla CS50. 1162 00:51:38,820 --> 00:51:40,050 Do zobaczenia w przyszłym tygodniu. 1163 00:51:40,050 --> 00:51:45,910 1164 00:51:45,910 --> 00:51:49,029 >> Głośnik 1: [? Scully?] [? Ian?] w zakresie tego projektu outro, 1165 00:51:49,029 --> 00:51:50,362 co ty faceci wymyślić? 1166 00:51:50,362 --> 00:51:51,990 >> GŁOŚNIK 2: Cóż, daliśmy że wiele myśli, 1167 00:51:51,990 --> 00:51:53,250 i uważamy, że najlepszym sposobem to-- 1168 00:51:53,250 --> 00:51:53,660 >> GŁOŚNIK 3: Mogę? 1169 00:51:53,660 --> 00:51:54,326 >> 2 głośnik: Tak. 1170 00:51:54,326 --> 00:51:56,360 Na wszelkie sposoby, faktycznie. 1171 00:51:56,360 --> 00:51:59,425 >> GŁOŚNIK 3: Więc myślę, że możemy podsumować nasz pomysł 1172 00:51:59,425 --> 00:52:05,450 dla Outros z jednej word-- nic. 1173 00:52:05,450 --> 00:52:08,950 1174 00:52:08,950 --> 00:52:10,409 >> DAVID J MALAN: Nic? 1175 00:52:10,409 --> 00:52:11,200 GŁOŚNIK 3: Nic. 1176 00:52:11,200 --> 00:52:12,990 DAVID J MALAN: Co to oznacza? 1177 00:52:12,990 --> 00:52:16,260 GŁOŚNIK 3: outros są o niczym. 1178 00:52:16,260 --> 00:52:21,720 GŁOŚNIK 2: Cóż, mam na myśli, filozofii, To znaczy, nic nie jest zawsze coś. 1179 00:52:21,720 --> 00:52:24,200 Głośnik 1: Więc what's-- co jest przesłanką? 1180 00:52:24,200 --> 00:52:25,720 GŁOŚNIK 3: Tak to jest jak życie. 1181 00:52:25,720 --> 00:52:26,680 OK. 1182 00:52:26,680 --> 00:52:28,294 Co robiłeś dzisiaj? 1183 00:52:28,294 --> 00:52:31,811 >> DAVID J MALAN: Wstałem, miał śniadanie, i przyszedł do pracy. 1184 00:52:31,811 --> 00:52:34,056 >> GŁOŚNIK 3: To outro. 1185 00:52:34,056 --> 00:52:36,806 GŁOŚNIK 2: Ale, mam na myśli, nie powinien coś się z nim na the-- 1186 00:52:36,806 --> 00:52:37,889 GŁOŚNIK 3: Nie, nie, nie, nie. 1187 00:52:37,889 --> 00:52:40,220 Nic się nie dzieje. 1188 00:52:40,220 --> 00:52:42,910 >> Głośnik 1: Więc dlaczego oglądamy? 1189 00:52:42,910 --> 00:52:46,956 >> GŁOŚNIK 3: Bo jest to outro dla CS50. 1190 00:52:46,956 --> 00:52:48,652 >> DAVID J MALAN: Jeszcze nie. 1191 00:52:48,652 --> 00:52:49,151