1 00:00:00,000 --> 00:00:00,940 2 00:00:00,940 --> 00:00:05,440 >> [MUZYKA GRA] 3 00:00:05,440 --> 00:00:11,577 4 00:00:11,577 --> 00:00:12,660 David J. MALAN: Wszystko w porządku. 5 00:00:12,660 --> 00:00:15,590 Jest CS50, a to jest początek tygodnia dwóch. 6 00:00:15,590 --> 00:00:19,120 Zacznijmy więc już dziś z błędu. 7 00:00:19,120 --> 00:00:20,974 Błąd, oczywiście, błąd w programie, 8 00:00:20,974 --> 00:00:22,890 i dostaniesz bardzo zaznajomieni z tej koncepcji 9 00:00:22,890 --> 00:00:26,050 jeśli nigdy nie zaprogramowany wcześniej. pset0 i teraz pset1. 10 00:00:26,050 --> 00:00:29,280 Ale rozważmy coś trochę proste na początku. 11 00:00:29,280 --> 00:00:32,189 Ten program tutaj, że wyrzucił wraz z góry 12 00:00:32,189 --> 00:00:37,280 i twierdzą, że powinno to wydrukować 10 gwiazd na ekranie za pomocą printf, 13 00:00:37,280 --> 00:00:41,020 ale to najwyraźniej buggy w jakiś sposób. 14 00:00:41,020 --> 00:00:45,370 >> Biorąc pod uwagę, że specyfikacja należy wydrukować 10 gwiazdek, 15 00:00:45,370 --> 00:00:50,230 jednak nie widać, co będzie ubiegać się błąd? 16 00:00:50,230 --> 00:00:52,004 Tak? 17 00:00:52,004 --> 00:00:54,420 Więc jest to poza jednym błędem, a co masz na myśli? 18 00:00:54,420 --> 00:01:00,991 19 00:01:00,991 --> 00:01:01,490 OK. 20 00:01:01,490 --> 00:01:09,820 21 00:01:09,820 --> 00:01:10,410 Doskonałe. 22 00:01:10,410 --> 00:01:13,930 Więc mamy określony rozpocząć wartość zero dla i, 23 00:01:13,930 --> 00:01:18,399 i jakie określono wartość n wynosi 10, ale używaliśmy mniejsza niż lub równa. 24 00:01:18,399 --> 00:01:21,190 A to dlatego, że dwa znaków, a nie tylko jeden symbol, 25 00:01:21,190 --> 00:01:22,630 jak w książce z matematyki, jest to, że nie masz 26 00:01:22,630 --> 00:01:24,880 Sposób wyrażania jeden odpowiednik znaków. 27 00:01:24,880 --> 00:01:28,450 >> To znaczy, że mniej niż ale jeśli zaczynasz liczenie od zera, 28 00:01:28,450 --> 00:01:31,690 ale liczy się aż się przez i równy 10, 29 00:01:31,690 --> 00:01:34,170 jesteś oczywiście będzie liczyć 11 rzeczy, w sumie. 30 00:01:34,170 --> 00:01:35,900 I tak masz zamiar wydrukować 11 gwiazd. 31 00:01:35,900 --> 00:01:37,990 Więc co może być rozwiązaniem tego problemu? 32 00:01:37,990 --> 00:01:39,970 Tak? 33 00:01:39,970 --> 00:01:43,980 >> Więc po prostu ustawić mniej niż lub równa prostu mniej niż 34 00:01:43,980 --> 00:01:46,250 a tam, ja twierdzą, być może Innym rozwiązaniem zbyt. 35 00:01:46,250 --> 00:01:47,210 Co może jeszcze zrobić? 36 00:01:47,210 --> 00:01:48,590 Tak? 37 00:01:48,590 --> 00:01:53,660 >> A więc do wyrównywania jej do 1, a pozostawić mniejsza niż lub równa. 38 00:01:53,660 --> 00:01:56,187 I szczerze mówiąc chciałbym ubiegać że w przypadku typowego człowieka, 39 00:01:56,187 --> 00:01:57,770 to jest chyba prostsze. 40 00:01:57,770 --> 00:02:00,280 Rozpocząć odliczanie od 1 i liczyć do 10. 41 00:02:00,280 --> 00:02:01,690 W zasadzie to, co masz na myśli. 42 00:02:01,690 --> 00:02:04,010 >> Ale rzeczywistość jest w programowania, jak widzieliśmy, 43 00:02:04,010 --> 00:02:07,598 informatycy i programiści zwykle zaczynają liczenie od zera. 44 00:02:07,598 --> 00:02:09,389 I tak to jest w porządku, gdy można się do tego przyzwyczaić. 45 00:02:09,389 --> 00:02:12,640 Twój stan będzie na ogół być czymś mniej niż. 46 00:02:12,640 --> 00:02:14,910 Więc po prostu logiczne błąd, że mogliśmy teraz 47 00:02:14,910 --> 00:02:17,990 naprawić i ostatecznie rekompilacji to i dostać tylko 10. 48 00:02:17,990 --> 00:02:19,610 >> Cóż, jak o tym błędzie tutaj? 49 00:02:19,610 --> 00:02:24,200 Tutaj znowu, ja twierdzą, że mam Celem drukowania 10 stars-- 50 00:02:24,200 --> 00:02:28,140 Ten jeden na linię czasu, ale tak nie jest. 51 00:02:28,140 --> 00:02:30,940 Proponujemy to, co przed Poprawka jest, co to 52 00:02:30,940 --> 00:02:34,640 wydrukować wizualnie gdybym skompilować i uruchomić ten program o tym sądzisz? 53 00:02:34,640 --> 00:02:35,140 Tak? 54 00:02:35,140 --> 00:02:38,360 55 00:02:38,360 --> 00:02:38,860 >> Gwiazdkowy. 56 00:02:38,860 --> 00:02:41,690 Więc wszystkie gwiazdy na tej samej linii, co słyszałem, 57 00:02:41,690 --> 00:02:43,391 a następnie znak nowego wiersza. 58 00:02:43,391 --> 00:02:44,140 Warto więc spróbować. 59 00:02:44,140 --> 00:02:48,710 Tak zrobić buggy-1, wprowadź, i widzę polecenia clang 60 00:02:48,710 --> 00:02:50,090 że rozmawialiśmy o ostatnim czasie. 61 00:02:50,090 --> 00:02:55,180 ./buggy-1, a nawet widzę wszystkie 10 gwiazdek na tej samej linii, choć twierdzą, 62 00:02:55,180 --> 00:02:58,690 w moim opisie tylko komentarz na szczycie Kod, który chciałem zrobić jeden na 63 00:02:58,690 --> 00:02:59,230 linia. 64 00:02:59,230 --> 00:03:00,580 Ale wygląda to dobrze. 65 00:03:00,580 --> 00:03:04,620 >> Teraz linia 15 wygląda jak jestem drukowania gwiazdę, a następnie linia 16 66 00:03:04,620 --> 00:03:06,620 wygląda na to, że jestem drukowanie nowego wiersza, 67 00:03:06,620 --> 00:03:09,560 i są one zarówno wcięty tak Jestem wewnątrz pętli wyraźnie. 68 00:03:09,560 --> 00:03:13,610 Więc nie powinienem robić gwiazdę, nowy linia, gwiazda, nowa linia, gwiazda, nowa linia? 69 00:03:13,610 --> 00:03:14,110 Tak? 70 00:03:14,110 --> 00:03:18,430 71 00:03:18,430 --> 00:03:21,240 >> Tak, jak w przeciwieństwie do języka Python, jeśli znasz, 72 00:03:21,240 --> 00:03:23,540 wcięcia nie znaczenia do komputera. 73 00:03:23,540 --> 00:03:25,280 To ma znaczenie tylko dla ludzi. 74 00:03:25,280 --> 00:03:29,860 Tak więc, podczas gdy tutaj mam wymyślonych linii 15 i 16--, że wygląda pięknie, 75 00:03:29,860 --> 00:03:31,330 ale komputer nie obchodzi. 76 00:03:31,330 --> 00:03:34,640 Komputer dba o faktycznie posiadające nawiasy klamrowe 77 00:03:34,640 --> 00:03:36,310 wokół tych linii kodu. 78 00:03:36,310 --> 00:03:39,520 >> Tak, że to jest tak jak w clear-- Scratch-- że tych dwóch linii kodu 79 00:03:39,520 --> 00:03:40,450 powinna zostać wykonana. 80 00:03:40,450 --> 00:03:44,390 Jak jeden z tych żółtym Scratch puzzle sztuk znowu i znowu i znowu. 81 00:03:44,390 --> 00:03:50,920 >> Więc teraz, jeśli ponowne uruchomienie tego program-- ./buggy-2-- Hm. 82 00:03:50,920 --> 00:03:51,770 Mam błąd teraz. 83 00:03:51,770 --> 00:03:54,212 Co ja o tym zapomnieć? 84 00:03:54,212 --> 00:03:55,420 Tak, więc nie skompilować. 85 00:03:55,420 --> 00:03:56,740 Tak zrobić buggy-2. 86 00:03:56,740 --> 00:03:59,840 Nie ma takiego pliku, bo nie faktycznie kompilacji drugą wersję. 87 00:03:59,840 --> 00:04:04,860 Więc teraz ciekawa nierejestrowana nie zmienna-- 2. 88 00:04:04,860 --> 00:04:05,510 Robimy 1. 89 00:04:05,510 --> 00:04:11,050 Dodać do buggy-1-- ./buggy-1-- i teraz każdy z nich znajduje się na tej samej linii. 90 00:04:11,050 --> 00:04:13,880 >> Teraz nie jest wyjątkiem to ma moją twierdzą 91 00:04:13,880 --> 00:04:15,520 że trzeba te nawiasy klamrowe. 92 00:04:15,520 --> 00:04:20,160 Gdy jest to faktycznie OK-- jeśli masz Zauważyłem w sekcji lub textbooks-- 93 00:04:20,160 --> 00:04:22,130 pominąć nawiasy klamrowe? 94 00:04:22,130 --> 00:04:22,630 Tak? 95 00:04:22,630 --> 00:04:26,290 96 00:04:26,290 --> 00:04:26,870 >> Dokładnie. 97 00:04:26,870 --> 00:04:28,940 Gdy jest tylko jeden linii kodu, które Cię 98 00:04:28,940 --> 00:04:32,830 chcesz być związane z pętli, jak w naszym pierwszym przykładzie. 99 00:04:32,830 --> 00:04:36,380 Jest to całkowicie zgodne z prawem pominąć nawiasy klamrowe 100 00:04:36,380 --> 00:04:40,310 tak jak swego rodzaju udogodnienie z kompilatora do Ciebie. 101 00:04:40,310 --> 00:04:40,810 Tak? 102 00:04:40,810 --> 00:04:43,347 103 00:04:43,347 --> 00:04:43,930 Dobre pytanie. 104 00:04:43,930 --> 00:04:45,500 Byłoby to uznać za błąd styl? 105 00:04:45,500 --> 00:04:49,340 Chcemy promote-- jak CS50 Podręcznik stylu, URL, dla których 106 00:04:49,340 --> 00:04:51,926 w pset1-- które zawsze używać nawiasów klamrowych. 107 00:04:51,926 --> 00:04:53,550 Z pewnością, jeśli jesteś nowy w programowaniu. 108 00:04:53,550 --> 00:04:56,800 W rzeczywistości jest to, że nie jesteśmy zamiar zakazać wam 109 00:04:56,800 --> 00:04:58,680 od robienia tego udogodnienia. 110 00:04:58,680 --> 00:05:00,846 Ale jeśli tylko się do huśtania się rzeczy, 111 00:05:00,846 --> 00:05:04,020 absolutnie po prostu zawsze używać kręcone szelki, aż pojawi się zawiesić ją. 112 00:05:04,020 --> 00:05:04,640 Dobre pytanie. 113 00:05:04,640 --> 00:05:05,320 >> Wszystko w porządku. 114 00:05:05,320 --> 00:05:07,660 Tak, że to był błąd. 115 00:05:07,660 --> 00:05:09,190 Przynajmniej w coś dość prosty. 116 00:05:09,190 --> 00:05:11,260 A jednak można, że ​​to jest dość prymitywny, prawda? 117 00:05:11,260 --> 00:05:13,635 Jest to rodzaj pierwszego tygodnia patrzenia na języku 118 00:05:13,635 --> 00:05:14,890 jak można znaleźć się w nim błędy. 119 00:05:14,890 --> 00:05:17,250 Ale rzeczywistość to faktycznie reprezentatywna 120 00:05:17,250 --> 00:05:20,310 niektórych dość przerażających problemów , które mogą pojawić się w realnym świecie. 121 00:05:20,310 --> 00:05:23,530 >> Tak, niektórzy z was mogą przypomnieć jeśli się tech wiadomości, 122 00:05:23,530 --> 00:05:25,740 lub może nawet złapać wiatr w lutym tego 123 00:05:25,740 --> 00:05:29,434 z tego ostatniego roku, że Apple miał się trochę błąd w obu iOS, 124 00:05:29,434 --> 00:05:31,350 system operacyjny na ich telefony, a także 125 00:05:31,350 --> 00:05:34,220 Mac OS systemu operacyjnego na swoich komputerach stacjonarnych i przenośnych. 126 00:05:34,220 --> 00:05:36,480 I zobaczyłem takie nagłówki, jak to. 127 00:05:36,480 --> 00:05:41,120 A następnie, Apple obiecał naprawić ten błąd, 128 00:05:41,120 --> 00:05:45,950 i bardzo szybko zrobił to naprawić w iOS, ale ostatecznie stała się w systemie Mac OS 129 00:05:45,950 --> 00:05:46,810 oraz. 130 00:05:46,810 --> 00:05:50,370 >> Teraz żaden z tych tytułów sam naprawdę ujawniają, co było zasadniczym problemem, 131 00:05:50,370 --> 00:05:55,640 ale błąd został ostatecznie zmniejszony do błąd w SSL, Secure Sockets Layer. 132 00:05:55,640 --> 00:05:57,390 I długie opowiadanie, to oprogramowanie 133 00:05:57,390 --> 00:06:01,030 że nasze i innych przeglądarek Oprogramowanie wykorzystywane do tego, co? 134 00:06:01,030 --> 00:06:04,090 135 00:06:04,090 --> 00:06:06,860 >> Gdybym powiedział, że SSL jest zaangażowany, gdy ci 136 00:06:06,860 --> 00:06:13,920 odwiedź adres URL zaczyna się od https, co to może być związane z SSL? 137 00:06:13,920 --> 00:06:14,580 Szyfrowania. 138 00:06:14,580 --> 00:06:16,470 Będziemy więc mówić o to w najbliższych dniach. 139 00:06:16,470 --> 00:06:18,750 Szyfrowania, sztuka kodowania informacji. 140 00:06:18,750 --> 00:06:22,200 >> Ale krótko mówiąc, Apple jakiś czas temu, że popełnił błąd 141 00:06:22,200 --> 00:06:25,970 w ich realizacji SSL, na oprogramowanie, które ostatecznie realizuje 142 00:06:25,970 --> 00:06:30,120 Adresy URL, takie jak HTTPS lub max Połączenia tam. 143 00:06:30,120 --> 00:06:32,850 Wynik, który jest to, że Połączenia może potencjalnie 144 00:06:32,850 --> 00:06:33,920 zostać przechwycone. 145 00:06:33,920 --> 00:06:37,130 A Twoje połączenia były niekoniecznie kodowane 146 00:06:37,130 --> 00:06:40,350 jeśli miał złe facet pomiędzy ty i witryny docelowej, którzy 147 00:06:40,350 --> 00:06:42,170 wiedział, jak to wykorzystać. 148 00:06:42,170 --> 00:06:45,090 >> Teraz ostatecznie wysłane Jabłko za to w końcu naprawić, 149 00:06:45,090 --> 00:06:46,920 i opis ich poprawki było to. 150 00:06:46,920 --> 00:06:49,878 Bezpieczny transport nie zatwierdza Autentyczność połączenia. 151 00:06:49,878 --> 00:06:52,920 Problem został rozwiązany przez przywrócenie brakujących kroki sprawdzania poprawności. 152 00:06:52,920 --> 00:06:57,250 >> Więc to jest bardzo ręcznie faliste wyjaśnienie o po prostu, że nie przejmował się. 153 00:06:57,250 --> 00:07:00,920 Tam jest dosłownie jeden linii kodu, który był wadliwy 154 00:07:00,920 --> 00:07:05,130 w ich realizacji i SSL Jeśli w trybie online i szukaj tego 155 00:07:05,130 --> 00:07:07,210 rzeczywiście można znaleźć Kod oryginalnego źródła. 156 00:07:07,210 --> 00:07:11,960 Na przykład, jest to zrzut ekranu z tylko część dość dużego pliku, 157 00:07:11,960 --> 00:07:15,965 ale to prawdopodobnie zwana funkcja Sprawdzić wymianę kluczy SSL serwera znak. 158 00:07:15,965 --> 00:07:17,840 A to trwa kilka argumenty i wejścia. 159 00:07:17,840 --> 00:07:20,298 I nie zamierzamy się skupić za dużo tam minutia, 160 00:07:20,298 --> 00:07:24,390 ale jeśli skupić się na kodzie wewnątrz tego najwyższego function-- niech 161 00:07:24,390 --> 00:07:25,590 powiększyć, że. 162 00:07:25,590 --> 00:07:28,140 Może już podejrzewać co błędu może 163 00:07:28,140 --> 00:07:31,230 być, nawet jeśli nie masz pojęcia ostatecznie to, czego szukasz na. 164 00:07:31,230 --> 00:07:35,924 Jest rodzajem anomalii tutaj, co jest co? 165 00:07:35,924 --> 00:07:38,940 >> Tak, ja naprawdę nie lubię Spojrzenie z dwóch goto nie. 166 00:07:38,940 --> 00:07:42,060 Szczerze mówiąc, nie wiem, co goto nie oznacza, ale o dwa z nich 167 00:07:42,060 --> 00:07:42,810 z powrotem do tyłu. 168 00:07:42,810 --> 00:07:45,290 Że po prostu rodzaj ściera mnie intelektualnie w niewłaściwy sposób, 169 00:07:45,290 --> 00:07:48,910 i rzeczywiście, gdybyśmy powiększyć tylko tych linii, to jest C. 170 00:07:48,910 --> 00:07:52,220 >> Tak więc dużo kodu Apple sama jest napisany w języku C, 171 00:07:52,220 --> 00:07:55,780 i to podobno jest naprawdę equivalent-- 172 00:07:55,780 --> 00:07:59,060 nie do tego ładna wcięcia wersja, ale jeśli uznają fakt, 173 00:07:59,060 --> 00:08:02,560 że nie ma nawiasy klamrowe, co Apple naprawdę napisał był kod, który wygląda 174 00:08:02,560 --> 00:08:03,540 tak. 175 00:08:03,540 --> 00:08:07,080 Tak już pomniejszony i po prostu stałe wcięcie w sensie 176 00:08:07,080 --> 00:08:10,690 , że jeśli nie ma nawiasów klamrowych, że drugie goto nie to na żółto 177 00:08:10,690 --> 00:08:12,500 zamierza wykonać nie wiem co. 178 00:08:12,500 --> 00:08:15,540 To nie jest związane z jeśli stan nad nim. 179 00:08:15,540 --> 00:08:19,590 >> Więc nawet raz nie, jeśli nie dość zrozumieć, co to może być może 180 00:08:19,590 --> 00:08:23,230 się robi, wiem, że każdy z nich conditions-- każda z tych linii 181 00:08:23,230 --> 00:08:26,180 jest bardzo ważnym etapem W procesie sprawdzania 182 00:08:26,180 --> 00:08:28,350 jeśli dane są w rzeczywistości zaszyfrowane. 183 00:08:28,350 --> 00:08:31,710 Więc pomijając jeden z nich kroki, nie najlepszy pomysł. 184 00:08:31,710 --> 00:08:34,840 >> Ale dlatego, że mamy w tym Drugi goto nie w kolorze żółtym, 185 00:08:34,840 --> 00:08:36,840 i dlatego, kiedy już rodzaj estetycznie 186 00:08:36,840 --> 00:08:40,480 przesuń go w lewo, gdzie go logicznego jest w danym momencie, co 187 00:08:40,480 --> 00:08:43,230 to oznacza dla linii kodu poniżej tego drugiego goto 188 00:08:43,230 --> 00:08:46,480 nie można pomyśleć? 189 00:08:46,480 --> 00:08:48,860 To zawsze będzie pominięty. 190 00:08:48,860 --> 00:08:52,100 Więc GOTOS są ogólnie mile widziana powodów nie będziemy naprawdę iść do, 191 00:08:52,100 --> 00:08:54,940 i rzeczywiście w CS50 nie wydają uczyć to goto, 192 00:08:54,940 --> 00:08:58,130 ale można to goto nie w ten sposób, to go skoku 193 00:08:58,130 --> 00:08:59,600 do innej części kodu. 194 00:08:59,600 --> 00:09:03,120 >> Innymi słowy przeskoczyć ta ostatnia linia w ogóle, 195 00:09:03,120 --> 00:09:07,420 a więc wynik ten głupie proste, że to tylko pomyłka 196 00:09:07,420 --> 00:09:10,330 Wynik chyba kogoś kopiowanie i wklejanie jednej zbyt 197 00:09:10,330 --> 00:09:14,150 wiele razy, że cała bezpieczeństwo iOS i Mac OS 198 00:09:14,150 --> 00:09:18,240 było narażone na przechwycenie przez złych facetów już od jakiegoś czasu. 199 00:09:18,240 --> 00:09:19,940 , Aż w końcu stała to firmy Apple. 200 00:09:19,940 --> 00:09:23,100 >> Teraz, jeśli niektórzy z was są w rzeczywistości działa stare wersje iOS lub Mac OS, 201 00:09:23,100 --> 00:09:27,250 można przejść do gotofail.com które jest na stronie internetowej, że ktoś skonfigurować 202 00:09:27,250 --> 00:09:29,190 na zasadzie określenia programowo 203 00:09:29,190 --> 00:09:30,980 jeśli Twój komputer jest nadal zagrożone. 204 00:09:30,980 --> 00:09:33,600 I szczerze mówiąc, jeśli jest, to chyba dobry pomysł 205 00:09:33,600 --> 00:09:36,870 zaktualizować swój telefon lub Mac w tym momencie. 206 00:09:36,870 --> 00:09:40,120 Ale nie tylko świadectwem, jak aprecjacja tych niższym poziomie 207 00:09:40,120 --> 00:09:42,400 szczegóły i dość proste pomysły mogą naprawdę 208 00:09:42,400 --> 00:09:44,590 przekładają się na decyzje i problemy, które 209 00:09:44,590 --> 00:09:47,320 affected-- w tym case-- miliony ludzi. 210 00:09:47,320 --> 00:09:49,107 >> Teraz słowo o administracji. 211 00:09:49,107 --> 00:09:50,690 Sekcja rozpocznie najbliższą niedzielę. 212 00:09:50,690 --> 00:09:53,360 Otrzymasz e-mail przez Weekend o sekcji, w którym momencie 213 00:09:53,360 --> 00:09:55,290 Proces resectioning rozpocznie się, jeśli masz 214 00:09:55,290 --> 00:09:56,998 zrealizowane masz teraz niektóre nowe konflikty. 215 00:09:56,998 --> 00:10:00,180 Tak dzieje się co roku, a my zmieści się w nadchodzących dniach. 216 00:10:00,180 --> 00:10:02,430 >> Biuro hours-- zrobić utrzymać oko na tym harmonogramie tutaj. 217 00:10:02,430 --> 00:10:05,100 Zmienia się trochę w tym tygodniu, Szczególnie czas rozpoczęcia 218 00:10:05,100 --> 00:10:08,180 i miejsce, więc skonsultować że przed wyruszeniem do godzin pracy biura 219 00:10:08,180 --> 00:10:09,520 każdy z następnych czterech dni. 220 00:10:09,520 --> 00:10:12,680 A teraz słowo o ocenę, szczególnie podczas nurkowania w błąd 221 00:10:12,680 --> 00:10:14,350 ustawia jeden i poza nią. 222 00:10:14,350 --> 00:10:17,070 >> Tak ze specyfikacją, Są to na ogół 223 00:10:17,070 --> 00:10:20,360 osie, wzdłuż której oceniamy swoją pracę. 224 00:10:20,360 --> 00:10:23,170 Zakres odnosi się do tego, co Kod stopniu swoje narzędzia 225 00:10:23,170 --> 00:10:25,690 funkcje wymagane według naszych specyfikacji. 226 00:10:25,690 --> 00:10:28,290 Innymi słowy, jak duża część zestaw kawałek skończyłeś ukąsić. 227 00:10:28,290 --> 00:10:30,440 Czy zrobić jedną trzecią z nich, połowę, 100% z niego. 228 00:10:30,440 --> 00:10:33,000 Nawet jeśli to nie jest prawidłowe, ile nie spróbujesz? 229 00:10:33,000 --> 00:10:35,290 Tak, że oddaje poziom wysiłku i kwoty 230 00:10:35,290 --> 00:10:38,260 do której odgryzł Usterka Seta. 231 00:10:38,260 --> 00:10:40,690 >> Correctness-- ten, do jakim stopniu, to kod 232 00:10:40,690 --> 00:10:43,150 zgodne z naszymi specyfikacje i wolne od błędów. 233 00:10:43,150 --> 00:10:44,770 Tak to działa poprawnie? 234 00:10:44,770 --> 00:10:48,700 Jeśli damy mu jakieś wejście, to robi daje nam wyjście, że oczekujemy? 235 00:10:48,700 --> 00:10:52,570 Zamiary teraz jest to przede Szczególnie te, jakościowe 236 00:10:52,570 --> 00:10:56,180 lub te, które wymagają ludzkiego osądu. 237 00:10:56,180 --> 00:10:59,690 I rzeczywiście, to dlaczego mamy pracowników tak wielu kolegów nauczania i oczywiście 238 00:10:59,690 --> 00:11:00,350 asystenci. 239 00:11:00,350 --> 00:11:03,480 W jakim stopniu jest Twój Kod napisany dobrze? 240 00:11:03,480 --> 00:11:05,810 >> I znowu jest to bardzo ocena jakościowa 241 00:11:05,810 --> 00:11:09,100 że będzie z wami na dwukierunkowo w nadchodzących tygodniach. 242 00:11:09,100 --> 00:11:12,060 Tak, że kiedy nie dostać tylko liczbowe wyniki, ale także 243 00:11:12,060 --> 00:11:16,682 pisemne wyniki lub wpisane informacje zwrotne, lub pisemne informacje zwrotne w angielskich słów. 244 00:11:16,682 --> 00:11:19,640 To, co użyjemy do kierowania ku rzeczywiście pisanie lepszego kodu. 245 00:11:19,640 --> 00:11:23,320 W wykładzie i sekcji, postaramy wskazać out-- tak często jak my can-- 246 00:11:23,320 --> 00:11:26,420 co sprawia, że ​​nie tylko program prawidłowe i funkcjonalnie dobre, 247 00:11:26,420 --> 00:11:28,200 ale także dobrze zaprojektowany. 248 00:11:28,200 --> 00:11:31,850 Najbardziej skuteczne może być lub nawet najpiękniejsza może być. 249 00:11:31,850 --> 00:11:33,100 >> Która prowadzi nas do stylu. 250 00:11:33,100 --> 00:11:36,876 Styl ostatecznie jest estetyczny wyrok. 251 00:11:36,876 --> 00:11:38,750 Wybraliście dobry nazwy zmiennych? 252 00:11:38,750 --> 00:11:40,330 Czy wcięty kod poprawnie? 253 00:11:40,330 --> 00:11:44,010 To wygląda dobrze, i dlatego, jest to łatwe dla drugiego człowieka 254 00:11:44,010 --> 00:11:46,550 do zapoznania się z odpowiednią jego poprawność. 255 00:11:46,550 --> 00:11:50,300 >> Generalnie na programie nauczania, to strzeli te rzeczy na skali pięciopunktowej. 256 00:11:50,300 --> 00:11:53,640 I niech mi wbijać domu punkt że trzech jest rzeczywiście dobry. 257 00:11:53,640 --> 00:11:55,550 Bardzo szybko do ludzi zacząć robić arytmetyki. 258 00:11:55,550 --> 00:11:58,133 Kiedy się trzy z pięć na poprawność jakiegoś Pset 259 00:11:58,133 --> 00:12:02,040 i myślą, cholera, mam zamiar do 60% która jest zasadniczo D lub E. 260 00:12:02,040 --> 00:12:03,980 >> To nie jest sposób, w jaki myślę o tych liczbach. 261 00:12:03,980 --> 00:12:06,880 Trzy jest rzeczywiście dobre, a co my generalnie spodziewać na początku 262 00:12:06,880 --> 00:12:09,820 terminu jest to, że jeśli się Pęczek three's-- może kilka 263 00:12:09,820 --> 00:12:12,540 targów, kilka fours-- lub kilka dwójek, kilka fours-- 264 00:12:12,540 --> 00:12:13,748 to dobre miejsce, aby rozpocząć. 265 00:12:13,748 --> 00:12:16,320 I tak długo, jak widzimy, trend wzrostowy z czasem 266 00:12:16,320 --> 00:12:18,540 jesteś w szczególnie dobrym miejscu. 267 00:12:18,540 --> 00:12:20,752 >> Wzór używamy do jest w istocie rzeczy masa 268 00:12:20,752 --> 00:12:22,710 to na programie nauczania, co oznacza po prostu, że my 269 00:12:22,710 --> 00:12:24,750 daje większą wagę do poprawności. 270 00:12:24,750 --> 00:12:27,930 Bo to bardzo często prawidłowość że zajmuje najwięcej czasu. 271 00:12:27,930 --> 00:12:28,760 Zaufaj mi teraz. 272 00:12:28,760 --> 00:12:31,190 Będziesz find-- przynajmniej w jednym pset-- że ci 273 00:12:31,190 --> 00:12:36,790 spędzają 90% swojego czasu pracuje na 10% problemu. 274 00:12:36,790 --> 00:12:39,320 >> I wszystko jakby działa z wyjątkiem jednego lub dwóch błędów, 275 00:12:39,320 --> 00:12:41,570 i są to błędy, które utrzymać się późno w nocy. 276 00:12:41,570 --> 00:12:43,380 To są te, które rodzaj ucieczki cię. 277 00:12:43,380 --> 00:12:45,560 Ale po spanie na nim, godziny pracy lub uczestniczenia 278 00:12:45,560 --> 00:12:48,844 lub zadawać pytania on-line, jest kiedy dojdziesz do tego 100% bramki, 279 00:12:48,844 --> 00:12:50,760 i dlatego waga poprawności najbardziej. 280 00:12:50,760 --> 00:12:54,102 Zaprojektuj trochę mniej, a styl trochę mniej. 281 00:12:54,102 --> 00:12:56,060 Ale należy mind-- stylu jest chyba najprostszym 282 00:12:56,060 --> 00:12:58,890 z nich, aby ukąsić jak na przewodniku. 283 00:12:58,890 --> 00:13:01,580 >> I teraz, bardziej poważne Uwaga na uczciwości akademickiej. 284 00:13:01,580 --> 00:13:05,000 CS50 ma niestety rozróżnienie jest największym producentem reklam Zarządu 285 00:13:05,000 --> 00:13:07,330 przypadki niemal co roku historycznie. 286 00:13:07,330 --> 00:13:11,012 To nie jest, ponieważ studenci oszukują w CS50 więcej niż jakakolwiek inną klasę 287 00:13:11,012 --> 00:13:13,720 ale dlatego, że przez charakter pracy, Fakt, że znajduje się elektroniczny 288 00:13:13,720 --> 00:13:16,636 Fakt, że patrzymy na to, i Fakt, że są informatycy, 289 00:13:16,636 --> 00:13:20,570 Mogę powiedzieć, że są jeszcze bardzo dobry w wykrywaniu go. 290 00:13:20,570 --> 00:13:22,710 >> Więc co to oznacza w ujęciu realnym? 291 00:13:22,710 --> 00:13:24,820 Tak więc, na programie nauczania, Kurs jest filozofia 292 00:13:24,820 --> 00:13:28,090 naprawdę nie sprowadzają się być rozsądne. 293 00:13:28,090 --> 00:13:31,684 Jest to granica między robi swoją pracę na własną rękę 294 00:13:31,684 --> 00:13:34,100 i coraz trochę rozsądne pomoc od znajomego, 295 00:13:34,100 --> 00:13:38,020 a wręcz robi to pracy dla przyjaciel, lub wysyłając mu swój kod 296 00:13:38,020 --> 00:13:41,080 tak, że on lub ona może po prostu podjęcia lub pożyczyć go prawo. 297 00:13:41,080 --> 00:13:43,580 I że przecina linię że zasysane klasy. 298 00:13:43,580 --> 00:13:45,410 >> Zobacz, program nauczania ostatecznie na linii 299 00:13:45,410 --> 00:13:48,209 że zwracamy za rozsądne i nieracjonalne zachowanie, 300 00:13:48,209 --> 00:13:50,000 ale to naprawdę nie gotować aż do istoty 301 00:13:50,000 --> 00:13:53,980 swojej pracy potrzeby być własne w końcu. 302 00:13:53,980 --> 00:13:56,230 Teraz z tym powiedział, jest heurystyczna. 303 00:13:56,230 --> 00:13:58,980 Bo jak można imagine-- od godzin pracy biura i wizualizacje 304 00:13:58,980 --> 00:14:01,060 i filmy mamy przedstawiono zatem far-- CS50 305 00:14:01,060 --> 00:14:04,530 jest rzeczywiście przeznaczona do współpracy, jak oraz spółdzielni i jako społeczne 306 00:14:04,530 --> 00:14:06,450 jak to możliwe. 307 00:14:06,450 --> 00:14:08,570 Jak wspólne, jak to jest rygorystyczny. 308 00:14:08,570 --> 00:14:11,314 >> Ale z tym powiedział, heurystyczna, jak zobaczysz w programie nauczania, 309 00:14:11,314 --> 00:14:12,980 jest to, że jeśli masz jakiś problem. 310 00:14:12,980 --> 00:14:16,470 Masz jakiś błąd w kodzie, że ci nie można rozwiązać, jest to uzasadnione dla Ciebie 311 00:14:16,470 --> 00:14:18,039 pokazać swój kod do kogoś innego. 312 00:14:18,039 --> 00:14:21,080 Przyjaciel nawet w klasie, przyjaciel siedzi obok ciebie w godzinach pracy urzędu, 313 00:14:21,080 --> 00:14:22,680 lub członek personelu. 314 00:14:22,680 --> 00:14:25,810 Ale nie może pokazać swój kod do Ciebie. 315 00:14:25,810 --> 00:14:27,710 >> Innymi słowy odpowiedzi do question-- 316 00:14:27,710 --> 00:14:29,940 Muszę help-- nie oh, tu jest mój kod. 317 00:14:29,940 --> 00:14:32,440 Spójrz na to i wywnioskować z niego to, co będzie. 318 00:14:32,440 --> 00:14:34,580 Teraz, oczywiście, nie sposób wyraźnie do gry 319 00:14:34,580 --> 00:14:37,760 to system, w którym pokażę ci mój kod przed o pytanie. 320 00:14:37,760 --> 00:14:40,150 Pokażesz mi swój kod przed o pytanie. 321 00:14:40,150 --> 00:14:45,870 Ale zobaczę program nauczania dla drobniejsze szczegóły, gdzie ta linia jest. 322 00:14:45,870 --> 00:14:50,606 >> Tylko teraz namalować obraz i podziel sposób jak najbardziej transparentny 323 00:14:50,606 --> 00:14:53,480 gdzie znajdują się w ostatnich latach jest to liczba przypadków Ogłoszenie Zarządu 324 00:14:53,480 --> 00:14:56,260 że CS50 został odwiedzony przez W ciągu ostatnich siedmiu lat. 325 00:14:56,260 --> 00:14:58,717 14 przypadków to najnowsza upadku. 326 00:14:58,717 --> 00:15:01,300 W odniesieniu do uczniów zaangażowanych, to było jakieś dziwne studentów 20 327 00:15:01,300 --> 00:15:02,490 w ostatni upadek. 328 00:15:02,490 --> 00:15:05,670 Było szczytowa 33 studentów kilka lat temu. 329 00:15:05,670 --> 00:15:08,830 Wiele z nich to niestety nie jest już tutaj na kampusie. 330 00:15:08,830 --> 00:15:13,100 >> Studenci zaangażowani w procentach Klasa historycznie w zakresie od 0% 331 00:15:13,100 --> 00:15:17,300 5,3%, co jest tylko powiedzieć jest corocznie wyzwaniem. 332 00:15:17,300 --> 00:15:20,390 I do tego celu, co chcemy zrobić, to przekazać jeden 333 00:15:20,390 --> 00:15:24,310 że dd-- tylko FYI-- porównać na sprawiedliwość dla tych studentów, którzy 334 00:15:24,310 --> 00:15:26,520 są po linii odpowiednio. 335 00:15:26,520 --> 00:15:29,620 Robimy porównać wszystkie aktualne wysłanych przeciwko wszystkich ostatnich misjach 336 00:15:29,620 --> 00:15:30,840 z ostatnich lat. 337 00:15:30,840 --> 00:15:33,620 >> Wiemy też, jak to google wokół i znaleźć repozytoria kodu 338 00:15:33,620 --> 00:15:36,360 online, fora dyskusyjne online, miejscach pracy online. 339 00:15:36,360 --> 00:15:41,580 Jeśli student może go znaleźć, możemy z pewnością uważają, że tak jak my niestety nie. 340 00:15:41,580 --> 00:15:45,330 Więc to, co zobaczysz w programie nauczania choć jest to klauzula żal. 341 00:15:45,330 --> 00:15:47,500 Z pewnością mogę docenić, a my wszyscy ma 342 00:15:47,500 --> 00:15:50,870 Pracownicy zrobiwszy przebieg jak ten lub ten sam z czasem 343 00:15:50,870 --> 00:15:53,997 na pewno wiesz, jak to jest, gdy życie staje na drodze, gdy masz 344 00:15:53,997 --> 00:15:56,080 niektóre późno w nocy deadline-- Nie tylko w tej klasie 345 00:15:56,080 --> 00:15:58,660 ale another-- gdy jesteś całkowicie wyczerpany, zestresowany, 346 00:15:58,660 --> 00:16:00,659 mają nadmierną liczbę innych rzeczy do zrobienia. 347 00:16:00,659 --> 00:16:03,660 Będziesz się w pewnym momencie w Życie na pewno źle, być może późno 348 00:16:03,660 --> 00:16:04,620 Decyzja noc. 349 00:16:04,620 --> 00:16:06,520 >> Więc na programie nauczania, nie jest to klauzula, 350 00:16:06,520 --> 00:16:10,629 takie, że jeśli w ciągu 72 godzin dokonywania jakiś biedny decyzja, masz do niej 351 00:16:10,629 --> 00:16:12,670 i dotrzeć do mnie i jeden z szefów kursu w 352 00:16:12,670 --> 00:16:14,300 i będziemy mieć rozmowę. 353 00:16:14,300 --> 00:16:16,220 Będziemy obsługiwać rzeczy wewnętrznie w nadziei 354 00:16:16,220 --> 00:16:18,770 o to coraz więcej Chwilę nauczania lub lekcji życia, 355 00:16:18,770 --> 00:16:22,120 a nie coś z szczególnie drastyczne konsekwencje 356 00:16:22,120 --> 00:16:24,570 jak można zobaczyć na tych wykresach tutaj. 357 00:16:24,570 --> 00:16:26,540 >> Więc to jest bardzo poważny ton. 358 00:16:26,540 --> 00:16:29,960 Zatrzymajmy się na zaledwie kilka sekundy przerwy napięcie. 359 00:16:29,960 --> 00:16:34,442 >> [MUZYKA GRA] 360 00:16:34,442 --> 00:17:17,768 361 00:17:17,768 --> 00:17:20,250 >> David J. MALAN: Dobra, tak, jak to było na segue? 362 00:17:20,250 --> 00:17:22,059 Do dzisiejszych głównych tematów. 363 00:17:22,059 --> 00:17:23,859 Pierwszy z nich jest abstrakcją. 364 00:17:23,859 --> 00:17:26,900 Innym który będzie reprezentacja danych, które szczerze mówiąc 365 00:17:26,900 --> 00:17:31,640 jest bardzo suchy sposób powiedzieć, jak możemy go o rozwiązywaniu problemów i myślenia 366 00:17:31,640 --> 00:17:33,250 o rozwiązywaniu problemów? 367 00:17:33,250 --> 00:17:37,285 Więc widzieliście w Scratch i masz widział może już w pset1 z C 368 00:17:37,285 --> 00:17:39,930 że nie tylko mogą korzystać Funkcje, takie jak printf, 369 00:17:39,930 --> 00:17:42,770 że inne osoby w lat przeszłości pisał dla Ciebie. 370 00:17:42,770 --> 00:17:45,340 Możesz również pisać własne funkcje. 371 00:17:45,340 --> 00:17:48,440 >> I mimo, że może nie mieć zrobić to w C, i szczerze mówiąc w pset1 372 00:17:48,440 --> 00:17:51,866 naprawdę nie trzeba pisać własna funkcja ponieważ problem-- 373 00:17:51,866 --> 00:17:53,990 , podczas gdy być może trudne w Pierwszy glance-- zobaczysz 374 00:17:53,990 --> 00:17:57,910 ostatecznie może być rozwiązany z nie wszystkie, że wiele linii kodu. 375 00:17:57,910 --> 00:18:01,140 Ale powiedział, że w zakresie z pisania własnych funkcji, 376 00:18:01,140 --> 00:18:03,570 sobie sprawę, że C nie daje Ci taką możliwość. 377 00:18:03,570 --> 00:18:06,940 >> Mam zamiar iść w dzisiejszym kodu źródłowego, , który jest dostępny już w Internecie, 378 00:18:06,940 --> 00:18:10,900 i mam zamiar iść do przodu i otwarte się program o nazwie funkcja 0.C, 379 00:18:10,900 --> 00:18:14,620 w funkcji zerowej zobaczymy kilka rzeczy. 380 00:18:14,620 --> 00:18:19,160 W pierwszej linii od 18 do 23 jest moim głównym zadaniem. 381 00:18:19,160 --> 00:18:22,414 A teraz, zaczynamy czytać Kod, że nie piszesz w locie, 382 00:18:22,414 --> 00:18:25,080 lecz pisałem wcześniej lub że w błąd ustawić 383 00:18:25,080 --> 00:18:27,910 może otrzymać konieczności zostało napisane wcześniej. 384 00:18:27,910 --> 00:18:30,040 Dobrym sposobem, aby rozpocząć czytanie cudzego kodu 385 00:18:30,040 --> 00:18:31,400 jest szukanie głównej funkcji. 386 00:18:31,400 --> 00:18:34,420 Dowiedzieć się, gdzie ten wpis Chodzi o uruchomienie programu, 387 00:18:34,420 --> 00:18:36,580 a następnie go logicznie stamtąd. 388 00:18:36,580 --> 00:18:40,190 >> Więc ten program podobno drukuje Twoje imię następuje dwukropek. 389 00:18:40,190 --> 00:18:42,490 Następnie używamy getString Z biblioteki CS50 390 00:18:42,490 --> 00:18:46,050 aby uzyskać ciąg, lub słowo lub frazę przez użytkownika za pomocą klawiatury. 391 00:18:46,050 --> 00:18:48,390 A jeszcze ta rzeczą tutaj-- PrintName. 392 00:18:48,390 --> 00:18:51,420 >> Teraz nie jest PrintName funkcja, która pochodzi z C 393 00:18:51,420 --> 00:18:52,970 To nie jest w standardzie io.h. 394 00:18:52,970 --> 00:18:55,570 To nie jest w CS50.h. 395 00:18:55,570 --> 00:18:57,880 To raczej w tym samym pliku. 396 00:18:57,880 --> 00:19:01,000 Zauważ, jeśli przewijać a bit-- linie 25 do 27-- 397 00:19:01,000 --> 00:19:05,330 to jest po prostu ładny sposób komentowania Twój kod za pomocą gwiazdy i ukośniki. 398 00:19:05,330 --> 00:19:07,320 Jest to multi-line skomentować, i to jest właśnie 399 00:19:07,320 --> 00:19:10,570 mój opis w błękicie co ta funkcja robi. 400 00:19:10,570 --> 00:19:14,530 >> Ponieważ w linii 28 do 31, Napisałem bardzo prostą funkcję 401 00:19:14,530 --> 00:19:16,280 którego nazwa jest PrintName. 402 00:19:16,280 --> 00:19:19,560 Ile trwa argumenty można by powiedzieć? 403 00:19:19,560 --> 00:19:25,120 Więc jeden argument-- bo jest jeden Argument wymienione w nawiasach. 404 00:19:25,120 --> 00:19:27,000 Typ, który jest String. 405 00:19:27,000 --> 00:19:30,240 To znaczy PrintName jest jak tego czarnej skrzynki 406 00:19:30,240 --> 00:19:32,910 Funkcja, która wykonuje lub jako wejście ciąg. 407 00:19:32,910 --> 00:19:35,730 >> I nazwa tego String Nazwa będzie wygodnie. 408 00:19:35,730 --> 00:19:37,840 Nie jest, nie na północ, ale nazwa. 409 00:19:37,840 --> 00:19:41,090 Więc co PrintName zrobić? 410 00:19:41,090 --> 00:19:42,210 To miłe, proste. 411 00:19:42,210 --> 00:19:45,390 Tak jak jednej linii kodu dla printf, ale najwyraźniej to 412 00:19:45,390 --> 00:19:47,950 drukuje "Witaj," tak i tak. 413 00:19:47,950 --> 00:19:50,070 Gdzie tak i tak pochodzi od argumentu. 414 00:19:50,070 --> 00:19:52,300 >> Teraz nie jest to ogromna innowacja tutaj. 415 00:19:52,300 --> 00:19:56,710 Naprawdę, mam wziąć program, który mógł, zostały napisane w jednej linii kodu 416 00:19:56,710 --> 00:20:00,190 poprzez umieszczenie tego tutaj, i zmienił go na coś 417 00:20:00,190 --> 00:20:04,920 która obejmuje niektóre sześć lub siedem lub tak linii kodu w dół tutaj. 418 00:20:04,920 --> 00:20:08,190 >> Ale to praktykowanie zwana zasada abstrakcji. 419 00:20:08,190 --> 00:20:12,550 Rodzaj enkapsulacji wewnątrz nowy Funkcja, która ma nazwę i lepiej 420 00:20:12,550 --> 00:20:14,590 jeszcze, że nazwa dosłownie mówi to, co robi. 421 00:20:14,590 --> 00:20:16,880 To znaczy, że nie jest printf-- szczególnie opisowe. 422 00:20:16,880 --> 00:20:18,932 Jeśli chcę, aby utworzyć kawałek układanki, lub gdybym 423 00:20:18,932 --> 00:20:21,140 Aby utworzyć funkcję że drukuje czyjeś imię, 424 00:20:21,140 --> 00:20:23,230 Piękno robi jest to, że mogę faktycznie 425 00:20:23,230 --> 00:20:27,170 dać tej funkcji nazwę , który opisuje to, co robi. 426 00:20:27,170 --> 00:20:29,844 >> Teraz zajmuje się wejście, które Ja arbitralnie nazwie nazwa, 427 00:20:29,844 --> 00:20:32,760 ale to też jest cudownie opisowe zamiast trochę 428 00:20:32,760 --> 00:20:36,140 generic jak S. i nieważne, teraz, po prostu oznacza, 429 00:20:36,140 --> 00:20:38,330 że ta funkcja nie wręczyć mnie nic. 430 00:20:38,330 --> 00:20:41,127 To nie jest tak, że getString dosłownie ręce mnie ciąg 431 00:20:41,127 --> 00:20:43,960 tak jak my z kawałków papieru z kolegami w zeszłym tygodniu, 432 00:20:43,960 --> 00:20:45,990 ale raczej ma tylko efekt uboczny. 433 00:20:45,990 --> 00:20:48,080 Wypisuje coś na ekranie. 434 00:20:48,080 --> 00:20:53,880 >> A więc na końcu dnia, jeżeli robią funkcja-0, ./function-0, 435 00:20:53,880 --> 00:20:55,450 zobaczymy, że pyta o moje imię. 436 00:20:55,450 --> 00:20:58,150 Wpisuję David, i to typy z moim nazwiskiem. 437 00:20:58,150 --> 00:21:01,080 Jeśli zrobić to ponownie z Robem, to będzie powiedzieć "cześć, Rob." 438 00:21:01,080 --> 00:21:04,280 Tak prosty pomysł, ale może ekstrapolacji z tego psychicznie 439 00:21:04,280 --> 00:21:06,750 że programy się trochę bardziej skomplikowane, 440 00:21:06,750 --> 00:21:10,290 i chcesz napisać kawałek Kod i wezwanie, które code-- Invoke 441 00:21:10,290 --> 00:21:13,270 że code-- przez niektóre opisowe nazwij jak PrintName, 442 00:21:13,270 --> 00:21:15,600 C ma pozwolić nam taką możliwość. 443 00:21:15,600 --> 00:21:17,660 >> Oto kolejny prosty przykład. 444 00:21:17,660 --> 00:21:22,940 Na przykład, jeżeli otworzy plik od dziś nazywa return.c, 445 00:21:22,940 --> 00:21:24,270 zauważyć, co zrobiłem tutaj. 446 00:21:24,270 --> 00:21:26,330 Większość z tej funkcji głównej jest printf. 447 00:21:26,330 --> 00:21:30,360 Pierwszy raz arbitralnie zainicjować zmienna o nazwie x do liczby 2. 448 00:21:30,360 --> 00:21:34,110 Następnie wydrukować "x jest teraz % I "przekazując wartości x. 449 00:21:34,110 --> 00:21:35,500 Więc ja tylko mówię, co to jest. 450 00:21:35,500 --> 00:21:37,208 >> Teraz jestem po prostu śmiało twierdząc z printf. 451 00:21:37,208 --> 00:21:42,050 Jestem wytwarzającego kostki że wartość x, a ja jestem robi to przez wywołanie funkcji 452 00:21:42,050 --> 00:21:45,590 zwana kostka mijania w X jako argument, 453 00:21:45,590 --> 00:21:49,300 , a następnie zapisać dane wyjściowe W tej samej zmiennej x. 454 00:21:49,300 --> 00:21:51,340 Więc jestem przebijania wartość x. 455 00:21:51,340 --> 00:21:53,380 Jestem nadrzędnymi wartość x z co 456 00:21:53,380 --> 00:21:56,510 Wynikiem wywoływania funkcja ta kostka jest. 457 00:21:56,510 --> 00:21:59,530 A potem po prostu wydrukować niektóre puszyste rzeczy tutaj, mówiąc to, co zrobiłem. 458 00:21:59,530 --> 00:22:01,600 >> Więc co to jest kostka? 459 00:22:01,600 --> 00:22:03,510 Zauważ, co jest fundamentalnie inny tutaj. 460 00:22:03,510 --> 00:22:05,540 Dałem funkcji Nazwa, jak wcześniej. 461 00:22:05,540 --> 00:22:08,270 Mam podano nazwę argumentu. 462 00:22:08,270 --> 00:22:11,650 Tym razem nazywa się n zamiast nazwy, ale mogę nazwać to coś chcę. 463 00:22:11,650 --> 00:22:12,650 Jest to jednak różne. 464 00:22:12,650 --> 00:22:14,080 To coś na lewo. 465 00:22:14,080 --> 00:22:16,290 Wcześniej to było to, co kluczowe? 466 00:22:16,290 --> 00:22:16,870 Chłopcy. 467 00:22:16,870 --> 00:22:18,580 Teraz jest to oczywiście int. 468 00:22:18,580 --> 00:22:20,630 >> Więc co może zabrać? 469 00:22:20,630 --> 00:22:24,090 Natomiast void oznacza rodzaj nicość, i tak było. 470 00:22:24,090 --> 00:22:25,970 PrintName zwróciło nic. 471 00:22:25,970 --> 00:22:27,942 To nie coś, ale nie oddać mnie 472 00:22:27,942 --> 00:22:30,650 coś, co mógłbym umieścić na lewa strona od znaku równości 473 00:22:30,650 --> 00:22:32,460 jak robiłem tutaj na linii 22. 474 00:22:32,460 --> 00:22:36,780 >> Więc jeśli powiem w sprawie linii 30, co sugeruje, że prawdopodobnie 475 00:22:36,780 --> 00:22:38,610 o tym, co dla mnie robi kostka? 476 00:22:38,610 --> 00:22:41,110 Tak? 477 00:22:41,110 --> 00:22:42,310 Zwraca liczbę całkowitą. 478 00:22:42,310 --> 00:22:44,590 Więc ręce mnie, dla instancji, kawałek papieru 479 00:22:44,590 --> 00:22:46,580 na której napisał odpowiedź. 480 00:22:46,580 --> 00:22:50,130 2 pokrojone w kostkę, pokrojone w kostkę lub 3 lub 4 cubed-- cokolwiek przekazany, 481 00:22:50,130 --> 00:22:51,540 i jak zaimplementować to? 482 00:22:51,540 --> 00:22:54,810 Cóż, po prostu n razy n razy n to jak mogę kostka wartość. 483 00:22:54,810 --> 00:22:57,110 Więc jeszcze raz, bardzo proste pomysł, ale poglądowe 484 00:22:57,110 --> 00:23:00,100 teraz jak możemy napisać funkcje że rzeczywiście miał nas 485 00:23:00,100 --> 00:23:02,380 wartości, które mogą być interesujące. 486 00:23:02,380 --> 00:23:05,740 >> Spójrzmy na jeden ostatni przykład o nazwie funkcja jeden. 487 00:23:05,740 --> 00:23:08,530 W tym przykładzie, zaczyna aby uzyskać bardziej atrakcyjne. 488 00:23:08,530 --> 00:23:12,400 Więc w funkcji jednego, to program-- anons ostatecznie 489 00:23:12,400 --> 00:23:14,920 zwraca funkcja nazywa GetPositiveInt. 490 00:23:14,920 --> 00:23:17,800 GetPositiveInt nie funkcja w bibliotece CS50, 491 00:23:17,800 --> 00:23:20,400 ale zdecydowaliśmy, że chciałby on istnieć. 492 00:23:20,400 --> 00:23:24,550 >> Jeśli więc przewijać później w pliku, zauważyć, jak poszedłem na temat realizacji 493 00:23:24,550 --> 00:23:26,560 uzyskać pozytywną int, a ja powiedzieć, że jest bardziej atrakcyjne 494 00:23:26,560 --> 00:23:28,992 bo to jest przyzwoity liczba linii kodu. 495 00:23:28,992 --> 00:23:30,700 To nie jest po prostu głupie mały program zabawki. 496 00:23:30,700 --> 00:23:33,870 To faktycznie ma jakieś sprawdzanie błędów i robić coś bardziej pożytecznego. 497 00:23:33,870 --> 00:23:38,470 >> Więc jeśli nie widziałeś solucja filmy, które zostały osadzone w pset1, 498 00:23:38,470 --> 00:23:42,350 że jest to typ pętli w C, w duchu podobnym 499 00:23:42,350 --> 00:23:44,270 do rodzaju rzeczy Scratch może zrobić. 500 00:23:44,270 --> 00:23:46,320 A czy mówi to zrobić. 501 00:23:46,320 --> 00:23:47,500 Wydrukuj to. 502 00:23:47,500 --> 00:23:51,860 Następnie iść do przodu i uzyskać n-- uzyskać int i przechowywać go w N, 503 00:23:51,860 --> 00:23:55,760 i mieć to robić znowu i znowu i ponownie, tak długo, jak liczba N jest mniejsza od jedności. 504 00:23:55,760 --> 00:23:58,720 >> Tak więc brak będzie mniejsza niż jedna tylko wtedy, gdy człowiek nie współpracuje. 505 00:23:58,720 --> 00:24:01,980 Jeśli on lub ona jest wpisanie w 0 lub -1 lub -50, 506 00:24:01,980 --> 00:24:04,790 Ta pętla jest zamiar utrzymać wykonywania w kółko. 507 00:24:04,790 --> 00:24:07,549 I ostatecznie zauważyć, że po prostu zwraca wartość. 508 00:24:07,549 --> 00:24:09,590 Więc teraz mamy funkcję że byłem miło 509 00:24:09,590 --> 00:24:14,040 jeśli CS50 będzie wdrożyć w CS50.h i CS50.c dla Ciebie, 510 00:24:14,040 --> 00:24:16,520 ale tutaj możemy teraz zaimplementować to sami. 511 00:24:16,520 --> 00:24:19,230 >> Ale dwie uwagi na temat niektórych kluczowych informacji. 512 00:24:19,230 --> 00:24:24,390 Jedno- dlaczego Oświadczam int n, myślisz, on line 29 513 00:24:24,390 --> 00:24:27,139 zamiast po prostu robi to tutaj, który jest 514 00:24:27,139 --> 00:24:28,930 bardziej zgodne z co zrobiliśmy w zeszłym tygodniu? 515 00:24:28,930 --> 00:24:29,430 Tak? 516 00:24:29,430 --> 00:24:34,485 517 00:24:34,485 --> 00:24:35,110 Dobra myśl. 518 00:24:35,110 --> 00:24:37,080 Więc gdybyśmy go umieścić tutaj, to tak, jakbyśmy 519 00:24:37,080 --> 00:24:39,110 zachować deklarując go ponownie i ponownie. 520 00:24:39,110 --> 00:24:42,000 Które samo w sobie jest problematyczne nie per se 521 00:24:42,000 --> 00:24:43,940 ponieważ musimy tylko Wartość raz, a następnie 522 00:24:43,940 --> 00:24:45,330 mamy zamiar uzyskać nowy tak. 523 00:24:45,330 --> 00:24:45,940 Ale dobra myśl. 524 00:24:45,940 --> 00:24:46,440 Tak? 525 00:24:46,440 --> 00:24:52,770 526 00:24:52,770 --> 00:24:53,330 >> Zamknij. 527 00:24:53,330 --> 00:24:59,030 Tak, bo już zadeklarowane n na linia 29 na zewnątrz pętli 528 00:24:59,030 --> 00:25:01,390 jest dostępny w całym Cała ta funkcja. 529 00:25:01,390 --> 00:25:05,400 Nie, bo na inne funkcje n jest nadal wewnątrz tych kręconych 530 00:25:05,400 --> 00:25:06,470 szelki tutaj. 531 00:25:06,470 --> 00:25:07,940 Więc-- pewno. 532 00:25:07,940 --> 00:25:12,430 533 00:25:12,430 --> 00:25:12,940 >> Dokładnie. 534 00:25:12,940 --> 00:25:14,356 Więc to jest jeszcze bardziej do rzeczy. 535 00:25:14,356 --> 00:25:18,600 Gdybyśmy zamiast oświadczył n tu na linii 32, 536 00:25:18,600 --> 00:25:22,340 jest to problematyczne, ponieważ odgadnięcia gdzie indziej muszę do niego dostęp? 537 00:25:22,340 --> 00:25:25,620 W linii 34 i prosta zasada jest 538 00:25:25,620 --> 00:25:30,060 że można używać tylko zmienne wewnątrz ostatnich klamrach 539 00:25:30,060 --> 00:25:31,420 , w którym oświadczył, że. 540 00:25:31,420 --> 00:25:35,230 >> Niestety, linia 34 Linia jest za późno, 541 00:25:35,230 --> 00:25:38,560 bo ja już zamknięte nawias klamrowy na linii 33 542 00:25:38,560 --> 00:25:41,220 odpowiadający nawias klamrowy na linii 30. 543 00:25:41,220 --> 00:25:44,180 A więc jest to sposób na powiedzenie że ta zmienna int jest objęty zakresem, 544 00:25:44,180 --> 00:25:46,970 że tak powiem, tylko wewnątrz tych klamrach. 545 00:25:46,970 --> 00:25:48,910 To nie istnieje poza nimi. 546 00:25:48,910 --> 00:25:51,580 >> Tak naprawdę, jeśli mogę to zrobić źle, niech zapisać kod 547 00:25:51,580 --> 00:25:53,530 jak to błędnie napisane jest--. 548 00:25:53,530 --> 00:25:57,990 Pozwólcie mi iść do przodu i rób Funkcja-1 i notice-- błędów. 549 00:25:57,990 --> 00:26:03,502 Korzystanie z nielegalnej identyfikator n na linii 35, która jest tutaj. 550 00:26:03,502 --> 00:26:05,210 A jeśli przewijać w górę dalej, jeszcze jeden. 551 00:26:05,210 --> 00:26:08,750 Korzystanie z nierejestrowana Identyfikator n na linii 34. 552 00:26:08,750 --> 00:26:11,200 >> Więc kompilator, Clang, zauważyć, że jest to po prostu 553 00:26:11,200 --> 00:26:13,720 nie występuje, chociaż wyraźnie, że tam jest wizualnie. 554 00:26:13,720 --> 00:26:16,090 Tak prosta poprawka deklaruje go tam. 555 00:26:16,090 --> 00:26:18,790 >> Teraz pozwól mi przejść do początku pliku. 556 00:26:18,790 --> 00:26:21,080 Co wyskakuje na ciebie jest trochę inaczej 557 00:26:21,080 --> 00:26:23,070 od rzeczy patrzyliśmy na ostatnim tygodniu? 558 00:26:23,070 --> 00:26:26,990 Nie tylko nie mam nazwy, nie tylko Mam niektóre ostre obejmuje do góry, 559 00:26:26,990 --> 00:26:29,340 Mam coś, co ja dzwoniąc prototyp. 560 00:26:29,340 --> 00:26:36,100 Teraz to wygląda strasznie podobny do tego, co właśnie przed chwilą widziałem na linii 27. 561 00:26:36,100 --> 00:26:39,230 >> Warto więc wywnioskować z inna komunikat o błędzie, dlaczego zrobiłem to. 562 00:26:39,230 --> 00:26:42,050 Pozwólcie mi iść do przodu i usunąć te linie nie. 563 00:26:42,050 --> 00:26:44,240 I tak nic nie wiedzą o prototypie. 564 00:26:44,240 --> 00:26:45,430 Remake tego pliku. 565 00:26:45,430 --> 00:26:46,890 Dodać funkcję jednego. 566 00:26:46,890 --> 00:26:48,090 A teraz, cholera, cztery błędy. 567 00:26:48,090 --> 00:26:50,220 Załóżmy, przewiń do pierwszego. 568 00:26:50,220 --> 00:26:55,070 >> Niejawna deklaracja funkcji uzyskać pozytywną int jest nieważny w C99. 569 00:26:55,070 --> 00:26:57,780 C99 oznacza po prostu 1999 wersji języka 570 00:26:57,780 --> 00:26:59,710 C, który jest to, co mamy rzeczywiście używany. 571 00:26:59,710 --> 00:27:01,050 Więc co to oznacza? 572 00:27:01,050 --> 00:27:05,250 Cóż C-- a dokładniej C compilers-- są programy całkiem głupi. 573 00:27:05,250 --> 00:27:07,420 Wiedzą tylko, co masz powiedział im, i to 574 00:27:07,420 --> 00:27:08,960 faktycznie tematyczny z ostatniego tygodnia. 575 00:27:08,960 --> 00:27:12,910 >> Problemem jest to, że jeśli pójdę o wdrażaniu nazwę tutaj, 576 00:27:12,910 --> 00:27:17,640 i wywołać funkcję o nazwie GetPositiveInt tutaj na linii 20, 577 00:27:17,640 --> 00:27:22,520 że technicznie nie ma funkcji istnieje aż 27 linii kompilator widzi. 578 00:27:22,520 --> 00:27:25,450 Niestety, kompilator robi rzeczy góry, w dół, w lewo, w prawo, 579 00:27:25,450 --> 00:27:29,580 tak dlatego, że nie widział Realizacja GetPositiveInt, 580 00:27:29,580 --> 00:27:32,400 ale widzi próby używać go tutaj, 581 00:27:32,400 --> 00:27:35,810 to po prostu będzie bail-- krzyczeć na Ci z błędem message-- może 582 00:27:35,810 --> 00:27:38,440 tajemnicze, a nie w rzeczywistości skompilować plik. 583 00:27:38,440 --> 00:27:41,940 >> Tak więc tak zwane prototyp się tutaj jest wprawdzie zbędna. 584 00:27:41,940 --> 00:27:47,870 Dosłownie, poszedłem na dół i kopiowane i wkleić to, i umieścić go tutaj. 585 00:27:47,870 --> 00:27:51,020 Void byłoby bardziej właściwe, więc będziesz dosłownie skopiować i wkleić go w ten czas. 586 00:27:51,020 --> 00:27:52,854 I dosłownie kopiować i wklejać go. 587 00:27:52,854 --> 00:27:54,270 Naprawdę tak jak miękiszu chleba. 588 00:27:54,270 --> 00:27:56,260 >> Trochę wskazówką dla kompilatora. 589 00:27:56,260 --> 00:27:58,860 Nie wiem co to robi jeszcze, ale ja obiecuję wam 590 00:27:58,860 --> 00:28:00,260 że będzie występować w końcu. 591 00:28:00,260 --> 00:28:04,010 I dlatego w tym line-- Linia 16-- kończy się średnikiem. 592 00:28:04,010 --> 00:28:05,486 Jest zwolnionych przez design. 593 00:28:05,486 --> 00:28:05,986 Tak? 594 00:28:05,986 --> 00:28:11,340 595 00:28:11,340 --> 00:28:14,360 >> Jeśli nie odwołuje się do biblioteki do do-- och, dobre pytanie. 596 00:28:14,360 --> 00:28:17,350 Ostry zawiera inkluzje pliku nagłówka. 597 00:28:17,350 --> 00:28:20,040 Muszą być: powinno prawie być zawsze na samym szczycie 598 00:28:20,040 --> 00:28:23,270 pliku dla similar-- dla dokładnie z tego samego powodu, tak. 599 00:28:23,270 --> 00:28:26,430 Ponieważ w standardzie io.h to dosłownie linia 600 00:28:26,430 --> 00:28:30,560 w ten sposób, ale z printf tekstów, a z jego argumentami i jego typ zwracany. 601 00:28:30,560 --> 00:28:33,310 I tak przez to się robi ostry tu, co ty jesteś dosłownie robi 602 00:28:33,310 --> 00:28:36,380 jest kopiowanie i wklejanie zawartości ktoś inny napisał do góry. 603 00:28:36,380 --> 00:28:39,660 Co cluing swój kod w celu Fakt, że te funkcje nie istnieją. 604 00:28:39,660 --> 00:28:40,160 Tak? 605 00:28:40,160 --> 00:28:47,520 606 00:28:47,520 --> 00:28:48,260 >> Absolutnie. 607 00:28:48,260 --> 00:28:51,690 Tak, bardzo mądry i prawidłowe rozwiązaniem byłoby, wiesz co? 608 00:28:51,690 --> 00:28:53,760 Nie wiem, co Prototyp jest, ale wiem, 609 00:28:53,760 --> 00:28:56,390 jeśli dobrze rozumiem, że C jest po prostu głupi i rethinks góry do dołu. 610 00:28:56,390 --> 00:28:57,820 No dajmy jej to, co chce. 611 00:28:57,820 --> 00:29:01,650 Skończmy ten kod, wklej go góry, a teraz wcisnąć Głównym dół. 612 00:29:01,650 --> 00:29:03,470 To też nie rozwiązuje problemu. 613 00:29:03,470 --> 00:29:07,409 >> Ale można bardzo łatwo wymyślić Scenariusz, w którym trzeba zadzwonić B, 614 00:29:07,409 --> 00:29:10,075 a może B oddzwania do A. jest coś, co nazywa rekurencja, 615 00:29:10,075 --> 00:29:11,370 i wrócimy do tego. 616 00:29:11,370 --> 00:29:13,911 I może być lub może nie być dobrym rzecz, ale na pewno można 617 00:29:13,911 --> 00:29:15,110 złamać tego rozwiązania. 618 00:29:15,110 --> 00:29:17,690 >> I co więcej, chciałbym twierdzą, stylistycznie, 619 00:29:17,690 --> 00:29:20,760 zwłaszcza, gdy swoje programy się tak długo i tak długo, 620 00:29:20,760 --> 00:29:23,064 to jest po prostu bardzo wygodne umieścić na wierzchu głównego 621 00:29:23,064 --> 00:29:25,730 bo to, co najbardziej Programiści będą zależy. 622 00:29:25,730 --> 00:29:28,150 A więc jest to trochę czystsze, zapewne, aby zrobić to tak, 623 00:29:28,150 --> 00:29:30,380 I zrobił to pierwotnie Nawet z prototypem 624 00:29:30,380 --> 00:29:33,396 choć wygląda trochę zwolnionych na pierwszy rzut oka. 625 00:29:33,396 --> 00:29:33,895 Tak? 626 00:29:33,895 --> 00:29:36,472 627 00:29:36,472 --> 00:29:37,680 Niestety, można powiedzieć, że coraz głośniej? 628 00:29:37,680 --> 00:29:45,650 629 00:29:45,650 --> 00:29:49,580 >> Jeśli zmienisz lokalizacje realizacja i prototyp? 630 00:29:49,580 --> 00:29:51,270 Więc to jest dobre pytanie. 631 00:29:51,270 --> 00:29:53,780 Jeśli to ponownie zadeklarować dół tutaj, zobaczmy, co się stanie. 632 00:29:53,780 --> 00:29:55,530 Więc jeśli mogę umieścić to w dół tutaj, mówisz. 633 00:29:55,530 --> 00:29:57,860 634 00:29:57,860 --> 00:29:58,360 Och, przepraszam. 635 00:29:58,360 --> 00:29:58,859 Głośniej? 636 00:29:58,859 --> 00:30:02,000 637 00:30:02,000 --> 00:30:04,011 Jeszcze głośniej. 638 00:30:04,011 --> 00:30:04,760 O, dobre pytanie. 639 00:30:04,760 --> 00:30:05,860 To utratę funkcji? 640 00:30:05,860 --> 00:30:08,901 Wiesz, po tych wszystkich latach, nigdy nie umieścić prototyp później. 641 00:30:08,901 --> 00:30:13,810 Więc robią funkcyjny-1 po robić. 642 00:30:13,810 --> 00:30:15,279 >> [Mamrocząc] 643 00:30:15,279 --> 00:30:16,320 David J. MALAN: Och, czekaj. 644 00:30:16,320 --> 00:30:17,944 Musimy jeszcze włożyć wszystko do góry. 645 00:30:17,944 --> 00:30:21,400 Więc zróbmy to tutaj, czy jestem rozumiejąc poprawnie na pytanie. 646 00:30:21,400 --> 00:30:24,700 Kładę wszystko, w tym Prototyp nad głównym, 647 00:30:24,700 --> 00:30:28,180 ale Kładę prototyp poniżej wykonania. 648 00:30:28,180 --> 00:30:33,190 >> Więc jeśli zrobię jeden, jestem coraz Powrót error-- niewykorzystane zmiennej n. 649 00:30:33,190 --> 00:30:37,280 650 00:30:37,280 --> 00:30:37,860 Och, nie. 651 00:30:37,860 --> 00:30:38,360 Dziękujemy. 652 00:30:38,360 --> 00:30:39,430 Zobaczmy, pozbędziemy się tego. 653 00:30:39,430 --> 00:30:41,304 To inny błąd, więc niech to zignorować. 654 00:30:41,304 --> 00:30:43,910 Zróbmy to naprawdę szybko przerobić. 655 00:30:43,910 --> 00:30:48,100 >> OK, więc dane nie argumentem wykorzystywane przez format string 656 00:30:48,100 --> 00:30:52,310 n-- oh, to dlatego, Zmieniłem na nich tutaj. 657 00:30:52,310 --> 00:30:55,885 Dobrze wiemy, co odpowiedź będzie to-- dobrze, jedziemy. 658 00:30:55,885 --> 00:31:00,560 Ach, dziękuję za pozytywne. 659 00:31:00,560 --> 00:31:03,430 Dobrze, będzie naprawić ten kod after-- zignorować ten szczególny błąd 660 00:31:03,430 --> 00:31:08,300 ponieważ was-- działa to odpowiedź. 661 00:31:08,300 --> 00:31:11,560 >> Więc nie nadpisać , co właśnie zrobił. 662 00:31:11,560 --> 00:31:14,800 Podejrzewam, kompilator jest napisane w taki sposób, 663 00:31:14,800 --> 00:31:18,420 że ignoruje swój prototyp ponieważ organizm, że tak powiem, 664 00:31:18,420 --> 00:31:20,922 z funkcja ma już wdrożono wyżej. 665 00:31:20,922 --> 00:31:23,380 Musiałbym rzeczywiście skonsultować Instrukcja kompilatora 666 00:31:23,380 --> 00:31:26,171 zrozumieć, czy jest jakaś inna implikacja, ale na pierwszy rzut oka 667 00:31:26,171 --> 00:31:29,290 po prostu stara i eksperymentowanie, wydaje się, że nie ma wpływu. 668 00:31:29,290 --> 00:31:30,730 Dobre pytanie. 669 00:31:30,730 --> 00:31:33,660 >> Warto więc posunąć się naprzód teraz, przesuwając od efektów ubocznych, które 670 00:31:33,660 --> 00:31:36,660 to funkcje, które robią coś wizualnie na ekranie z printf, 671 00:31:36,660 --> 00:31:38,090 ale nie zwraca wartości. 672 00:31:38,090 --> 00:31:41,550 I funkcji, które mają zwrot Wartości takie jak właśnie widzieliśmy kilka. 673 00:31:41,550 --> 00:31:45,350 Widzieliśmy już to pojęcie zakresu, i zobaczymy to jeszcze raz i jeszcze raz. 674 00:31:45,350 --> 00:31:47,210 Ale teraz znowu użyj regułę 675 00:31:47,210 --> 00:31:51,410 że zmienna może być stosowany tylko wewnątrz niedawno otwarty 676 00:31:51,410 --> 00:31:54,350 i zamknięte nawiasy klamrowe jak my widział w tym konkretnym przykładzie. 677 00:31:54,350 --> 00:31:56,910 >> A jak zauważył, jest ability-- 678 00:31:56,910 --> 00:32:00,040 można rozwiązać niektóre z tych problemów przez wprowadzenie zmiennej globalnej 679 00:32:00,040 --> 00:32:01,290 na samym początku pliku. 680 00:32:01,290 --> 00:32:03,630 Jednak w większości przypadków my boczyć na tym, 681 00:32:03,630 --> 00:32:06,170 i rzeczywiście nawet nie udać do tego roztworu do teraz. 682 00:32:06,170 --> 00:32:09,890 Więc na razie, jest to, że na wynos zmienne mają tę ideę zakresu. 683 00:32:09,890 --> 00:32:13,430 >> Ale teraz spójrzmy na inny suchy sposób rzeczywiście patrząc 684 00:32:13,430 --> 00:32:15,810 na niektóre dość ciekawe szczegóły realizacji. 685 00:32:15,810 --> 00:32:17,810 Jak możemy reprezentować informacji. 686 00:32:17,810 --> 00:32:20,370 I już wyglądało na to W pierwszym tygodniu klasy. 687 00:32:20,370 --> 00:32:23,320 Patrząc na pliki binarne, a przypominając sobie o przecinku. 688 00:32:23,320 --> 00:32:28,310 >> Ale pamiętam z ostatniego tygodnia, że ​​C ma Różne typy danych i bukiety więcej, 689 00:32:28,310 --> 00:32:30,600 Ale najbardziej przydatne z nich teraz może być to. 690 00:32:30,600 --> 00:32:36,030 Char, lub postaci, która się dzieje jako jeden bajt lub osiem bitów całkowite. 691 00:32:36,030 --> 00:32:40,060 A to znaczy, że wielkość z char jest tylko jeden bajt. 692 00:32:40,060 --> 00:32:45,370 Bajt osiem bitów, więc oznacza to, że możemy reprezentować ile znaków. 693 00:32:45,370 --> 00:32:47,320 Ile liter lub Znaki na klawiaturze 694 00:32:47,320 --> 00:32:49,210 jeśli mamy jeden bajt lub osiem bitów. 695 00:32:49,210 --> 00:32:51,546 Pomyśl o tydzień zera. 696 00:32:51,546 --> 00:32:53,420 Jeśli masz osiem bitów, ile suma wartości 697 00:32:53,420 --> 00:32:55,503 można reprezentować w wzory z zer i jedynek? 698 00:32:55,503 --> 00:32:58,170 699 00:32:58,170 --> 00:33:00,260 Jedno- więcej. 700 00:33:00,260 --> 00:33:03,490 Więc jeśli ty ogółem 256 zaczynały się od zera. 701 00:33:03,490 --> 00:33:07,120 Więc jeśli masz osiem bits-- Jeśli więc mieliśmy nasze żarówki binarne się tu ponownie, 702 00:33:07,120 --> 00:33:12,180 możemy zamienić na żarówki i wyłącza każdy z 256 unikalnych wzorów. 703 00:33:12,180 --> 00:33:13,640 >> Teraz jest problematyczne. 704 00:33:13,640 --> 00:33:16,857 Nie tyle dla języka angielskiego i Języki romans, ale z pewnością 705 00:33:16,857 --> 00:33:19,190 kiedy wprowadzać do przykład języki azjatyckie, które 706 00:33:19,190 --> 00:33:22,580 mają znacznie więcej symboli niż jak 26 liter alfabetu. 707 00:33:22,580 --> 00:33:24,390 Faktycznie może potrzebować więcej niż jednego bitu. 708 00:33:24,390 --> 00:33:28,240 I na szczęście w ostatnich latach społeczeństwo 709 00:33:28,240 --> 00:33:31,040 przyjęte standardy, które używają innych więcej niż jeden bajt za opłatą. 710 00:33:31,040 --> 00:33:34,210 >> Ale teraz w C, domyślnie jest tylko jeden bajt lub osiem bitów. 711 00:33:34,210 --> 00:33:38,195 Całkowitą, w międzyczasie, jest cztery bajtów, inaczej znany jako 32 bitów. 712 00:33:38,195 --> 00:33:41,320 Co oznacza, że ​​to, co znajduje się największa Numer można reprezentować przy wew 713 00:33:41,320 --> 00:33:41,820 podobno? 714 00:33:41,820 --> 00:33:44,426 715 00:33:44,426 --> 00:33:45,050 Z miliard. 716 00:33:45,050 --> 00:33:46,760 Więc to cztery miliardy mniej więcej. 717 00:33:46,760 --> 00:33:49,840 2 do 32th mocy, jeśli zakładamy żadnych negatywnych numery 718 00:33:49,840 --> 00:33:52,530 i po prostu korzystać wszystkie pozytywne numery, to cztery miliardy 719 00:33:52,530 --> 00:33:53,730 lub dać możliwości. 720 00:33:53,730 --> 00:33:57,890 Pływak, w międzyczasie, jest inny rodzaj od typu danych w C to wciąż numer, 721 00:33:57,890 --> 00:33:58,990 ale jest to liczba rzeczywista. 722 00:33:58,990 --> 00:34:00,660 Coś z przecinkiem. 723 00:34:00,660 --> 00:34:03,000 I okazuje się, że C wykorzystuje również cztery bajty 724 00:34:03,000 --> 00:34:05,340 reprezentować liczby rzeczywiste. 725 00:34:05,340 --> 00:34:09,420 >> Niestety, jak wiele pływających wartości punktowe są tam w świecie? 726 00:34:09,420 --> 00:34:11,582 Ile prawdziwe liczby są tam? 727 00:34:11,582 --> 00:34:13,540 Istnieje nieskończona numer, a dla tej sprawy 728 00:34:13,540 --> 00:34:15,164 istnieje nieskończenie wiele liczb całkowitych. 729 00:34:15,164 --> 00:34:18,070 Więc jesteśmy już trochę kopania sobie dziurę tutaj. 730 00:34:18,070 --> 00:34:21,780 Przy czym najwyraźniej w computers-- na Najmniej programy napisane w C na them-- 731 00:34:21,780 --> 00:34:24,110 można liczyć tylko tak wysoka jak cztery miliardy lub dać, 732 00:34:24,110 --> 00:34:26,260 i zmiennoprzecinkowych może tylko pozornie 733 00:34:26,260 --> 00:34:28,330 jakieś skończoną ilość precyzją. 734 00:34:28,330 --> 00:34:30,810 Tylko tyle cyfr po ich punkt dziesiętny. 735 00:34:30,810 --> 00:34:32,822 >> Ponieważ, oczywiście, o ile masz tylko 32 bitów, 736 00:34:32,822 --> 00:34:36,030 Nie wiem, w jaki sposób mamy zamiar go o stanowiących prawdziwą numbers-- prawdopodobnie 737 00:34:36,030 --> 00:34:37,409 z różnych rodzajów wzorów. 738 00:34:37,409 --> 00:34:40,030 Ale na pewno jest skończona Liczba takich wzorców 739 00:34:40,030 --> 00:34:41,830 tak i tu jest problem. 740 00:34:41,830 --> 00:34:43,710 >> Teraz możemy uniknąć problemu lekko. 741 00:34:43,710 --> 00:34:45,710 Jeśli nie korzystasz z pływaka, można użyć podwójnego 742 00:34:45,710 --> 00:34:50,230 w C, co daje osiem bajtów, które jest bardziej możliwe wzory zer 743 00:34:50,230 --> 00:34:50,730 i jedynek. 744 00:34:50,730 --> 00:34:55,199 Ale to jeszcze skończony, który będzie się problematyczne, jeśli piszesz oprogramowanie 745 00:34:55,199 --> 00:34:57,670 dla grafiki lub fantazji wzory matematyczne. 746 00:34:57,670 --> 00:35:00,410 Więc może rzeczywiście chcesz liczyć się większy. 747 00:35:00,410 --> 00:35:05,640 Długo long-- głupio named-- jest ośmiu bajtów lub 64 bitów, 748 00:35:05,640 --> 00:35:10,260 i jest dwa razy dłuższy od int, i to przez długi liczby całkowitej. 749 00:35:10,260 --> 00:35:15,655 >> Zabawa fact-- jeśli int jest cztery bajty, jak długo jest długo w C zazwyczaj? 750 00:35:15,655 --> 00:35:18,290 751 00:35:18,290 --> 00:35:21,560 Również cztery bajty, ale długo, długo jest osiem bajtów, 752 00:35:21,560 --> 00:35:23,050 a to ze względów historycznych. 753 00:35:23,050 --> 00:35:26,450 >> Ale teraz na wynos jest tak, że dane mają 754 00:35:26,450 --> 00:35:29,625 być reprezentowane w computer-- który jest fizyczne urządzenie z prądu, 755 00:35:29,625 --> 00:35:32,190 to ogólnie jazdy te zera i ones-- 756 00:35:32,190 --> 00:35:34,320 z ograniczonej ilości precyzją. 757 00:35:34,320 --> 00:35:35,620 Więc w czym problem, a następnie? 758 00:35:35,620 --> 00:35:37,480 >> Dobrze, że jest problem z całkowitą przepełnienia. 759 00:35:37,480 --> 00:35:39,780 Nie tylko w C, ale w komputerów w ogóle. 760 00:35:39,780 --> 00:35:42,590 Na przykład, jeżeli Bajt jest wart bit-- 761 00:35:42,590 --> 00:35:45,120 jeśli tak, to wszystkie osiem bit-- z których są numerem jeden. 762 00:35:45,120 --> 00:35:47,300 Co to jest numer reprezentujący jeśli założymy 763 00:35:47,300 --> 00:35:50,730 to wszystkie pozytywne wartości w systemie binarnym? 764 00:35:50,730 --> 00:35:54,410 >> 255, i to nie jest 256, ponieważ zero to najniższy numer. 765 00:35:54,410 --> 00:35:56,760 Tak więc 255 jest najwyższa jeden, ale problem 766 00:35:56,760 --> 00:36:00,330 jest przypuszczać, że chciałem przyrost wartości tej zmiennej, która 767 00:36:00,330 --> 00:36:04,030 jest za pomocą ośmiu bitów, razem jeśli chcę ją zwiększyć. 768 00:36:04,030 --> 00:36:07,160 >> Cóż, jak tylko dodać jeden wszystkim w tych, 769 00:36:07,160 --> 00:36:10,500 można chyba wyobrazić visually-- tylko jak niosący jedną używając decimals-- 770 00:36:10,500 --> 00:36:12,300 coś się przepływ w lewo. 771 00:36:12,300 --> 00:36:15,590 I rzeczywiście, jeśli dodać numer jednego z tym, co się dzieje w układzie binarnym 772 00:36:15,590 --> 00:36:17,670 jest to, że przelewa się z powrotem do zera. 773 00:36:17,670 --> 00:36:21,730 >> Więc jeśli tylko nie use-- int, ale jeden bajt liczyć liczb całkowitych 774 00:36:21,730 --> 00:36:27,170 w programie, przez default-- jak najszybciej można dostać się do 250, 251, 252, 253, 254, 775 00:36:27,170 --> 00:36:32,710 255-- 0 przychodzi po 255, które prawdopodobnie nie to, co jest 776 00:36:32,710 --> 00:36:34,790 użytkownik będzie spodziewać. 777 00:36:34,790 --> 00:36:39,620 >> Teraz zaś w świat liczb zmiennoprzecinkowych, masz też podobny problem. 778 00:36:39,620 --> 00:36:42,670 Nie tyle z największą number-- mimo to wciąż problem. 779 00:36:42,670 --> 00:36:45,360 Ale z ilością precyzją że można reprezentować. 780 00:36:45,360 --> 00:36:49,490 Warto więc spojrzeć na ten przykład tutaj również z dzisiejszej źródłowego code-- 781 00:36:49,490 --> 00:36:52,070 unosić-0.c. 782 00:36:52,070 --> 00:36:54,280 >> I zauważyć, że to bardzo prosty program, który 783 00:36:54,280 --> 00:36:56,580 najwyraźniej powinien wydrukować, co wartość? 784 00:36:56,580 --> 00:37:00,777 785 00:37:00,777 --> 00:37:04,110 Co pan postawić to będzie drukować chociaż jest trochę nowej składni 786 00:37:04,110 --> 00:37:05,540 tutaj? 787 00:37:05,540 --> 00:37:06,700 Więc mam nadzieję, że 0.1. 788 00:37:06,700 --> 00:37:10,000 Tak więc równoważne jednej dziesiątej bo robię 1 podzielone przez 10. 789 00:37:10,000 --> 00:37:12,430 Jestem przechowywania odpowiedź w zmiennej o nazwie f. 790 00:37:12,430 --> 00:37:15,850 Że zmienna jest typu float, które jest kluczowe właśnie proponowany istniał. 791 00:37:15,850 --> 00:37:18,910 >> Nie widziałem tego wcześniej, ale jest to rodzaj schludny sposób w printf 792 00:37:18,910 --> 00:37:22,110 Aby określić liczbę cyfr można chcą zobaczyć po przecinku. 793 00:37:22,110 --> 00:37:25,020 Więc to po prostu oznacza, notacja że tutaj jest symbolem zastępczym. 794 00:37:25,020 --> 00:37:27,900 To dla zmiennoprzecinkowych wartość, a tak przy okazji, 795 00:37:27,900 --> 00:37:31,389 pokazać go z miejsca po przecinku z jedna liczba po przecinku. 796 00:37:31,389 --> 00:37:33,180 Więc to jest liczba cyfr znaczących, 797 00:37:33,180 --> 00:37:34,650 że tak powiem, że warto. 798 00:37:34,650 --> 00:37:40,450 >> Więc pozwól mi iść do przodu i robić się unosić-0, ./float-0, 799 00:37:40,450 --> 00:37:46,660 i najwyraźniej 1 podzielone przez 10 wynosi 0,0. 800 00:37:46,660 --> 00:37:47,760 Teraz, dlaczego to jest? 801 00:37:47,760 --> 00:37:51,380 >> Cóż znowu, komputer bierze mi dosłownie, a ja napisałem 1 802 00:37:51,380 --> 00:37:56,680 i mam napisane 10 i zgadywać, co Zakłada to typ danych dla tych dwóch 803 00:37:56,680 --> 00:37:58,440 wartości? 804 00:37:58,440 --> 00:38:00,970 Int, jest to technicznie coś trochę innego. 805 00:38:00,970 --> 00:38:04,150 To zwykle długo, ale to ostatecznie wartość całki. 806 00:38:04,150 --> 00:38:06,030 Nie wartością zmiennoprzecinkową. 807 00:38:06,030 --> 00:38:09,456 >> To znaczy, że jeśli ten Int i jest to int 808 00:38:09,456 --> 00:38:11,830 Problemem jest to, że komputer nie mają zdolności 809 00:38:11,830 --> 00:38:13,680 do nawet zapisać ten punkt dziesiętny. 810 00:38:13,680 --> 00:38:16,430 Więc kiedy robisz 1 podzielone o 10 za pomocą liczb całkowitych 811 00:38:16,430 --> 00:38:20,950 zarówno w liczniku i mianownik, odpowiedź powinna być 0,1. 812 00:38:20,950 --> 00:38:24,930 Ale computer-- ponieważ to są integers-- 813 00:38:24,930 --> 00:38:27,430 nie wie, co zrobić z 0,1. 814 00:38:27,430 --> 00:38:30,010 >> Więc co to jest wyraźnie robi? 815 00:38:30,010 --> 00:38:33,120 To jest po prostu rzuca ją, i co widzę ostatecznie 816 00:38:33,120 --> 00:38:38,830 0.0 tylko dlatego, że twierdził, że printf pokaż mi jednego miejsca po przecinku. 817 00:38:38,830 --> 00:38:41,740 Ale problemem jest to, że jeśli podzielić liczbę całkowitą przez liczbę całkowitą, 818 00:38:41,740 --> 00:38:44,347 będziesz get-- z definicji z C-- liczbę całkowitą. 819 00:38:44,347 --> 00:38:46,680 I to nie zrobi coś miło i wygodnie 820 00:38:46,680 --> 00:38:49,040 jak okrągłe to do Najbliższy górę lub w dół. 821 00:38:49,040 --> 00:38:51,860 To będzie obciąć wszystko po przecinku. 822 00:38:51,860 --> 00:38:54,030 >> Więc po prostu intuicyjnie, co pewnie naprawić? 823 00:38:54,030 --> 00:38:55,351 Co Najprostszą tutaj? 824 00:38:55,351 --> 00:38:55,850 Tak? 825 00:38:55,850 --> 00:39:00,570 826 00:39:00,570 --> 00:39:01,100 Dokładnie. 827 00:39:01,100 --> 00:39:04,200 Dlaczego nie możemy po prostu traktować je jako skutecznie zmiennoprzecinkowych 828 00:39:04,200 --> 00:39:05,860 zamieniając je w pływaki lub dwuosobowe. 829 00:39:05,860 --> 00:39:10,500 A teraz, jeśli robią pływaki-0, lub jeśli skompilować pływaków-1, 830 00:39:10,500 --> 00:39:12,570 który jest identyczny co właśnie zaproponował. 831 00:39:12,570 --> 00:39:16,400 A teraz mam pace-0, teraz dostanę 0,1. 832 00:39:16,400 --> 00:39:17,234 >> Teraz jest to niesamowite. 833 00:39:17,234 --> 00:39:19,441 Ale teraz mam zamiar zrobić coś trochę innego. 834 00:39:19,441 --> 00:39:22,280 Jestem ciekaw, co jest naprawdę dzieje pod maską, 835 00:39:22,280 --> 00:39:26,050 i mam zamiar wydrukować ten się do 28 miejsc po przecinku. 836 00:39:26,050 --> 00:39:29,730 Chcę, aby naprawdę zobaczyć 0.1000-- infinite-- 837 00:39:29,730 --> 00:39:32,710 [Niesłyszalne] 27 zerami po tej 0,1. 838 00:39:32,710 --> 00:39:34,740 >> No zobaczymy, czy to , co rzeczywiście dostać. 839 00:39:34,740 --> 00:39:39,430 Dodać 0 pływający-sam plik. 840 00:39:39,430 --> 00:39:41,150 ./floats-0. 841 00:39:41,150 --> 00:39:44,380 Miejmy powiększyć dramatycznej odpowiedzi. 842 00:39:44,380 --> 00:39:49,980 Przez cały ten czas, już myśli 1 podzielone przez 10 to 10%, lub 0,1. 843 00:39:49,980 --> 00:39:50,810 To nie jest. 844 00:39:50,810 --> 00:39:53,210 Przynajmniej o ile Komputer jest zaniepokojony. 845 00:39:53,210 --> 00:39:57,060 >> Teraz why-- OK, to jest kompletna kłamstwo 1 podzielone przez 10 wynosi 0,1. 846 00:39:57,060 --> 00:39:59,710 Ale nie jest to why-- dania na wynos dziś. 847 00:39:59,710 --> 00:40:04,010 Więc dlaczego komputer myśleć, w przeciwieństwie do każdego z nas w pokoju, 848 00:40:04,010 --> 00:40:06,870 1, który jest podzielony przez 10 faktycznie, że szalony wartość? 849 00:40:06,870 --> 00:40:10,620 Co komputer robi podobno? 850 00:40:10,620 --> 00:40:12,490 Co to jest? 851 00:40:12,490 --> 00:40:13,785 >> To nie jest przepełnienie, per se. 852 00:40:13,785 --> 00:40:15,910 Przepełnienie jest zazwyczaj, gdy owinąć wokół wartości. 853 00:40:15,910 --> 00:40:18,970 To jest ten problem z niedokładności w wartości zmiennoprzecinkowej 854 00:40:18,970 --> 00:40:22,220 gdzie masz tylko 32 lub może nawet 64 bit. 855 00:40:22,220 --> 00:40:25,230 Ale jeśli jest nieskończona liczba rzeczywistym numbers-- 856 00:40:25,230 --> 00:40:27,940 numery z kropkami i na pewno numery thereafter-- 857 00:40:27,940 --> 00:40:29,380 nie może reprezentować wszystkie z nich. 858 00:40:29,380 --> 00:40:32,870 Więc komputer dał nam najbliższa 859 00:40:32,870 --> 00:40:37,090 wartości może reprezentować przy użyciu tego wiele bitów do wartości faktycznie chcę, 860 00:40:37,090 --> 00:40:38,690 który wynosi 0,1. 861 00:40:38,690 --> 00:40:40,685 >> Niestety, jeśli zacząć robić matematyki, albo 862 00:40:40,685 --> 00:40:44,360 rozpocząć z udziałem tego rodzaju pływające Wartości punktowe w ważnej programs-- 863 00:40:44,360 --> 00:40:46,770 oprogramowanie finansowe, wojskowy software-- coś 864 00:40:46,770 --> 00:40:49,090 gdzie percepcja jest chyba dość ważne. 865 00:40:49,090 --> 00:40:51,520 I rozpocząć dodawanie Numery takie jak ten, i zacząć 866 00:40:51,520 --> 00:40:54,050 działa, że ​​oprogramowanie z naprawdę dużych nakładów 867 00:40:54,050 --> 00:40:56,890 lub na wiele godzin lub partii dni lub wiele lat, 868 00:40:56,890 --> 00:41:01,060 te malutkie błędy z pewnością można dodać w czasie. 869 00:41:01,060 --> 00:41:04,252 >> Teraz, jak na bok, jeśli kiedykolwiek widziałem Superman 3 lub biurowe 870 00:41:04,252 --> 00:41:05,960 a może pamiętacie jak ci faceci ukradli 871 00:41:05,960 --> 00:41:08,668 dużo pieniędzy z komputera przy użyciu pływających wartości punktowe 872 00:41:08,668 --> 00:41:11,290 i dodanie trochę Resztki, miejmy nadzieję, że film 873 00:41:11,290 --> 00:41:12,390 teraz ma więcej sensu. 874 00:41:12,390 --> 00:41:14,930 To jest to, co było nawiązując w tym filmie. 875 00:41:14,930 --> 00:41:16,710 Fakt, że większość firmy nie będzie wyglądać 876 00:41:16,710 --> 00:41:18,600 Po pewnej liczbie miejsc po przecinku, 877 00:41:18,600 --> 00:41:20,009 ale to są ułamki centów. 878 00:41:20,009 --> 00:41:22,550 Więc zacząć dodawać je, zacząć zarabiać dużo pieniędzy 879 00:41:22,550 --> 00:41:23,424 na koncie bankowym. 880 00:41:23,424 --> 00:41:25,160 Więc to biurowe wyjaśnił. 881 00:41:25,160 --> 00:41:28,220 >> Teraz niestety poza Powierzchnie biurowe, istnieje 882 00:41:28,220 --> 00:41:31,794 niepokojące są pewne legalnie i znaczące wpływy 883 00:41:31,794 --> 00:41:33,710 tych rodzajów podstawowe decyzje projektowe, 884 00:41:33,710 --> 00:41:35,990 i rzeczywiście jedną z przyczyn używamy C w trakcie 885 00:41:35,990 --> 00:41:39,640 jest tak, że naprawdę masz tę ziemię do zrozumienia, jak działają komputery, 886 00:41:39,640 --> 00:41:42,440 jak działa program, a nie brać niczego za pewnik. 887 00:41:42,440 --> 00:41:45,820 >> I rzeczywiście, niestety, nawet z że fundamentalne zrozumienie, 888 00:41:45,820 --> 00:41:47,370 my, ludzie popełniają błędy. 889 00:41:47,370 --> 00:41:51,310 I co ja pomyślałem, że podzielę się to osiem minut film tutaj brane 890 00:41:51,310 --> 00:41:56,980 z Współczesne cuda odcinka, który jest pokaż edukacyjna na jak to wszystko działa 891 00:41:56,980 --> 00:42:00,370 że maluje dwa zdjęcia od kiedy niewłaściwe użycie 892 00:42:00,370 --> 00:42:02,540 i zrozumienie zmiennoprzecinkowych 893 00:42:02,540 --> 00:42:05,610 doprowadziły do ​​niektórych znacząca niefortunne wyniki. 894 00:42:05,610 --> 00:42:06,363 Rzućmy okiem. 895 00:42:06,363 --> 00:42:07,029 [ODTWARZANIE] 896 00:42:07,029 --> 00:42:11,290 -Mamy Teraz wrócić do "Inżynierii Katastrofy "na Modern Marvels. 897 00:42:11,290 --> 00:42:12,940 Komputery. 898 00:42:12,940 --> 00:42:15,580 My wszyscy przychodzą do zaakceptowania frustrujące problemy, które często 899 00:42:15,580 --> 00:42:20,960 dostaliśmy z them-- błędów, wirusów i glitches-- oprogramowanie dla małych cenach 900 00:42:20,960 --> 00:42:23,100 kosztami dla wygody. 901 00:42:23,100 --> 00:42:27,770 Ale w wysokiej technologii i wysokiej prędkości Zastosowania wojskowe i programu kosmicznego, 902 00:42:27,770 --> 00:42:32,780 Najmniejszy błąd może być powiększony do katastrofy. 903 00:42:32,780 --> 00:42:38,880 >> W dniu 4 czerwca 1996 roku, naukowcy przygotowany uruchomienie bezzałogowy rakiety Ariane 5. 904 00:42:38,880 --> 00:42:41,190 To niósł naukowe Satelity zaprojektowany 905 00:42:41,190 --> 00:42:44,570 ustalić dokładnie, jak Pole magnetyczne Ziemi współdziała 906 00:42:44,570 --> 00:42:47,380 z wiatrów słonecznych. 907 00:42:47,380 --> 00:42:50,580 Rakieta została zbudowana na Europejska Agencja Kosmiczna, 908 00:42:50,580 --> 00:42:54,400 i podniósł się ze swojego zakładu na wybrzeżu Gujany Francuskiej. 909 00:42:54,400 --> 00:42:57,520 >> -at Około 37 sekund do lotu, po raz pierwszy 910 00:42:57,520 --> 00:42:59,070 Zauważyłem coś się dzieje źle. 911 00:42:59,070 --> 00:43:02,240 Że dysze zostały skręcie w sposób naprawdę nie powinno. 912 00:43:02,240 --> 00:43:06,550 Około 40 sekundach lotu, wyraźnie pojazd miał kłopoty, 913 00:43:06,550 --> 00:43:08,820 i to jest, gdy się Decyzja, by go zniszczyć. 914 00:43:08,820 --> 00:43:12,370 Zakres oficer bezpieczeństwa, z ogromne wnętrzności, wciśnięty przycisk 915 00:43:12,370 --> 00:43:18,030 i wysadzili rakiety zanim mogłem stanowić zagrożenie dla bezpieczeństwa publicznego. 916 00:43:18,030 --> 00:43:21,010 >> -To Było panieńskie rejs na Ariane 5, 917 00:43:21,010 --> 00:43:23,920 i jego zniszczenie trwało miejsce ze względu na wadę 918 00:43:23,920 --> 00:43:25,932 osadzone w oprogramowaniu rakiety. 919 00:43:25,932 --> 00:43:27,640 -The Problem na Ariane to, że nie 920 00:43:27,640 --> 00:43:30,500 to ilość wymagana 64 bity, aby wyrazić, 921 00:43:30,500 --> 00:43:33,560 i chcieli przekształcić go do 16-bitowa. 922 00:43:33,560 --> 00:43:36,820 Zakłada się, że ich liczby nigdy nie będzie bardzo duża. 923 00:43:36,820 --> 00:43:40,940 Że większość z tych cyfr w 64-bitowy numer były zerami. 924 00:43:40,940 --> 00:43:42,450 Byli w błędzie. 925 00:43:42,450 --> 00:43:45,000 >> -The Niezdolność jednego program do zaakceptowania 926 00:43:45,000 --> 00:43:49,460 rodzaj liczby generowane przez inny był u podstaw niepowodzenia. 927 00:43:49,460 --> 00:43:54,260 Rozwoju oprogramowania stał bardzo kosztowna część nowej technologii. 928 00:43:54,260 --> 00:43:57,060 Rakieta Ariane miał 4 była bardzo udana. 929 00:43:57,060 --> 00:44:01,600 Tyle oprogramowania utworzonego na jest także stosowany w Ariane 5. 930 00:44:01,600 --> 00:44:04,790 >> -The Podstawowy problem było to, że Ariane 5. 931 00:44:04,790 --> 00:44:11,200 Został faster-- przyspieszone szybciej i oprogramowanie nie stanowiło to. 932 00:44:11,200 --> 00:44:14,910 >> -The Zniszczenie rakiety była ogromna katastrofa finansowa. 933 00:44:14,910 --> 00:44:18,630 Wszystko z powodu błędu oprogramowania minut. 934 00:44:18,630 --> 00:44:21,160 Ale to nie był pierwszy Problemy w czasie konwersji danych 935 00:44:21,160 --> 00:44:24,770 był nękany nowoczesną technologię rakietową. 936 00:44:24,770 --> 00:44:28,020 >> -in 1991 z początku pierwszej wojny w Zatoce Perskiej, 937 00:44:28,020 --> 00:44:30,540 rakietowej Patriot doświadczył podobnego rodzaju 938 00:44:30,540 --> 00:44:32,465 problem konwersji numer. 939 00:44:32,465 --> 00:44:36,760 Iw rezultacie 28 ludzie-- 28 Amerykańska soldiers-- zginęło, 940 00:44:36,760 --> 00:44:39,010 i około stu innych rannych. 941 00:44:39,010 --> 00:44:42,830 Kiedy Patriot, która miała ochrona przed przychodzących kiełże, 942 00:44:42,830 --> 00:44:45,780 nie udało się wystrzelić rakietę. 943 00:44:45,780 --> 00:44:51,610 >> -Gdy Irak zaatakował Kuwejt, i Amerykę rozpoczęła Pustynna Burza na początku 1991 roku, 944 00:44:51,610 --> 00:44:55,720 Baterie rakiet Patriot zostały rozmieszczone ochrona Arabię ​​Saudyjską i Izrael 945 00:44:55,720 --> 00:44:59,180 z irackich ataków rakietowych Scud. 946 00:44:59,180 --> 00:45:03,080 Patriot jest US średniego zasięgu ziemia-powietrze systemu 947 00:45:03,080 --> 00:45:06,530 produkowany przez firmę Raytheon. 948 00:45:06,530 --> 00:45:09,500 >> -Rozmiar Patriot interceptor itself-- 949 00:45:09,500 --> 00:45:14,705 to jest o około 20 metrów długości, i waży około 2000 kilogramów. 950 00:45:14,705 --> 00:45:19,090 I niesie głowicę około, Myślę, że mniej więcej 150 funtów. 951 00:45:19,090 --> 00:45:23,880 A sama głowica jest wysoka wybuchowy, co 952 00:45:23,880 --> 00:45:26,700 zawiera fragmenty wokół niego. 953 00:45:26,700 --> 00:45:31,630 Tak więc obudowa głowicy ma zaprojektowany, aby działać jak śrut. 954 00:45:31,630 --> 00:45:34,040 >> -The Pociski są realizowane cztery na pojemniku, 955 00:45:34,040 --> 00:45:37,170 i są transportowane przez naczepy. 956 00:45:37,170 --> 00:45:44,880 >> -The System anty-rakietowej Patriot sięga co najmniej 20 lat. 957 00:45:44,880 --> 00:45:48,380 Pierwotnie był on przeznaczony jako pocisk obrony powietrznej 958 00:45:48,380 --> 00:45:50,810 zestrzelić samoloty wroga. 959 00:45:50,810 --> 00:45:54,410 W pierwszej wojnie w Zatoce Perskiej gdy przyszedł na tę wojnę, 960 00:45:54,410 --> 00:45:59,650 Armia chciała użyć go do zestrzelić kiełże, a nie samoloty. 961 00:45:59,650 --> 00:46:03,580 Air Force był iracki nie tyle problem, 962 00:46:03,580 --> 00:46:06,590 ale armia martwi kiełże. 963 00:46:06,590 --> 00:46:10,120 I tak starali się uaktualnić Patriot. 964 00:46:10,120 --> 00:46:12,740 >> -Intercepting Wroga pocisk porusza się Mach 5 965 00:46:12,740 --> 00:46:15,670 miał być dość trudne. 966 00:46:15,670 --> 00:46:18,440 Ale kiedy Patriot został przewieziony do eksploatacji, 967 00:46:18,440 --> 00:46:22,580 Armia nie była świadoma Modyfikacja, że ​​iracki 968 00:46:22,580 --> 00:46:25,880 przedstawili swoje kiełże prawie można go. 969 00:46:25,880 --> 00:46:30,690 >> Co się stało, że jest kiełże wchodzili były niestabilne. 970 00:46:30,690 --> 00:46:32,000 Byli chwiejne. 971 00:46:32,000 --> 00:46:37,210 Powodem tego był Iraqis-- W celu uzyskania 600 km na 972 00:46:37,210 --> 00:46:41,680 o zasięgu 300 kilometrów missile-- trwało masy z przodu głowicy, 973 00:46:41,680 --> 00:46:43,340 i głowica wykonane zapalniczki. 974 00:46:43,340 --> 00:46:48,490 Więc teraz Patriot próbuje się w Scud i większość time-- 975 00:46:48,490 --> 00:46:52,880 Zdecydowana większość time-- to tylko latać przez Scud. 976 00:46:52,880 --> 00:46:57,120 >> -Po Operatorów systemu Patriot realizowane Patriot przegapić swój cel, 977 00:46:57,120 --> 00:47:01,630 one zdetonowane Patriot w głowicę aby uniknąć ewentualnych wypadków czy to 978 00:47:01,630 --> 00:47:04,440 pozwolono opaść do podłoża. 979 00:47:04,440 --> 00:47:08,700 >> -To Było to, co większość ludzi widziało jak wielkie kule ognia na niebie, 980 00:47:08,700 --> 00:47:14,180 i źle rozumiane jako przechwytuje z głowic Scud. 981 00:47:14,180 --> 00:47:18,020 >> -Mimo W nocne niebo, Patriotów wydają się być skutecznie niszczą 982 00:47:18,020 --> 00:47:23,280 Kiełże na Dhahran mogą istnieć nie pomyłka o jego wydajności. 983 00:47:23,280 --> 00:47:27,930 Istnieje system radarowy Patriota za stracił utwór przychodzących Scud 984 00:47:27,930 --> 00:47:30,260 i nigdy nie rozpoczął z powodu do wada oprogramowania. 985 00:47:30,260 --> 00:47:34,060 986 00:47:34,060 --> 00:47:38,880 >> To było Izraelczyków, którzy po raz pierwszy odkryta że dłuższy system jest włączony, 987 00:47:38,880 --> 00:47:41,130 większa rozbieżność czas stał. 988 00:47:41,130 --> 00:47:44,770 Ze względu na tryb osadzony w komputerze systemu. 989 00:47:44,770 --> 00:47:48,190 >> -O Dwa tygodnie przed Tragedia w Dhahran, 990 00:47:48,190 --> 00:47:50,720 Izraelczycy zgłaszane Departament Obrony 991 00:47:50,720 --> 00:47:52,410 że system został straty czasu. 992 00:47:52,410 --> 00:47:54,410 Po około osiem godzin z rzędu, zauważyli 993 00:47:54,410 --> 00:47:57,690 system ten jest coraz znacznie mniej dokładne. 994 00:47:57,690 --> 00:48:01,850 W odpowiedzi Departament Obrony mówi wszystko baterii Patriot 995 00:48:01,850 --> 00:48:04,800 aby nie pozostawić systemów od dłuższego czasu. 996 00:48:04,800 --> 00:48:06,980 Nigdy nie powiedział, co było dawno. 997 00:48:06,980 --> 00:48:09,140 8 godzin, 10 godzin, tysiąc godzin. 998 00:48:09,140 --> 00:48:11,300 Nikt nie wiedział. 999 00:48:11,300 --> 00:48:13,320 >> -The Baterii Patriot stacjonujących w koszarach 1000 00:48:13,320 --> 00:48:18,310 w Dhahran i jego wadliwa wewnętrzny Zegar Minęło ponad 100 godzin 1001 00:48:18,310 --> 00:48:21,520 w nocy z 25 lutego. 1002 00:48:21,520 --> 00:48:25,792 >> -it Śledzone czas z dokładnością około jednej dziesiątej sekundy. 1003 00:48:25,792 --> 00:48:27,950 Teraz dziesiątej sekundy Numer jest ciekawa 1004 00:48:27,950 --> 00:48:31,850 ponieważ nie może być wyrażona binarnie dokładnie, co 1005 00:48:31,850 --> 00:48:36,500 oznacza, że ​​nie może być dokładnie wyrażony w każdym nowoczesnym komputerze cyfrowym. 1006 00:48:36,500 --> 00:48:41,070 Trudno w to uwierzyć, ale używać jako przykład. 1007 00:48:41,070 --> 00:48:43,420 >> Weźmy liczbę jedną trzecią. 1008 00:48:43,420 --> 00:48:47,330 Jedna trzecia nie może być wyrażoną w postaci dziesiętnej dokładnie. 1009 00:48:47,330 --> 00:48:52,060 Jedna trzecia jest 0.333 dzieje się na nieskończoność. 1010 00:48:52,060 --> 00:48:56,420 Nie ma sposobu, aby to zrobić z Dokładność bezwzględna w przecinku. 1011 00:48:56,420 --> 00:48:59,530 To jest dokładnie ten rodzaj problemu , które stało się w Patriot. 1012 00:48:59,530 --> 00:49:04,040 Już układ pobiegłszy gorszy błąd czas stał. 1013 00:49:04,040 --> 00:49:08,840 >> -Po 100 godzinach pracy, Błąd w czasie tylko około jednej trzeciej 1014 00:49:08,840 --> 00:49:10,440 sekundy. 1015 00:49:10,440 --> 00:49:14,150 Jednak w warunkach kierowania pocisk porusza się Mach 5, 1016 00:49:14,150 --> 00:49:18,560 Wynikało to w śledzeniu Błąd z ponad 600 metrów. 1017 00:49:18,560 --> 00:49:21,870 Byłoby to błąd krytyczny dla żołnierzy w Dhahran. 1018 00:49:21,870 --> 00:49:28,455 >> Co stało się uruchomienie Scud było wykryte przez satelity wczesnego ostrzegania, 1019 00:49:28,455 --> 00:49:32,710 i wiedzieli Scud nadchodzi w ich ogólnym kierunku. 1020 00:49:32,710 --> 00:49:35,150 Nie wiem, gdzie to nastąpi. 1021 00:49:35,150 --> 00:49:38,210 To było teraz do radaru Składnik systemu Patriot 1022 00:49:38,210 --> 00:49:43,150 Broniąca Dhahran zlokalizować i zachować utwór z nadchodzącego wroga pocisków. 1023 00:49:43,150 --> 00:49:44,561 >> -The Radar był bardzo inteligentny. 1024 00:49:44,561 --> 00:49:46,560 To faktycznie utwór Stanowisko Scud 1025 00:49:46,560 --> 00:49:48,930 i przewidzieć, gdzie Prawdopodobnie będzie to 1026 00:49:48,930 --> 00:49:51,380 Następnym razem Radar wysłany impuls z. 1027 00:49:51,380 --> 00:49:53,040 Które nazwano brama zakres. 1028 00:49:53,040 --> 00:49:57,620 >> -Potem Raz Patriot ma wystarczająco dużo czasu, decyduje 1029 00:49:57,620 --> 00:50:02,400 przeszedł wrócić i sprawdzić następny Lokalizacja tego wykrytego obiektu 1030 00:50:02,400 --> 00:50:03,550 wraca. 1031 00:50:03,550 --> 00:50:07,820 Tak więc, gdy wrócił do złego miejsce, to wtedy nie widzi obiektu. 1032 00:50:07,820 --> 00:50:10,360 I decyduje, że nie było celem. 1033 00:50:10,360 --> 00:50:13,630 Że było fałszywe wykrywanie i spada z toru. 1034 00:50:13,630 --> 00:50:16,970 >> -The Przychodzące Scud zniknął z ekranu radaru, 1035 00:50:16,970 --> 00:50:20,200 i sekundy później, to uderzył w koszarach. 1036 00:50:20,200 --> 00:50:22,570 Scud zabił 28. 1037 00:50:22,570 --> 00:50:26,110 Był to ostatni zwolniony podczas pierwszej wojny w Zatoce Perskiej. 1038 00:50:26,110 --> 00:50:31,920 Niestety, zaktualizowane oprogramowanie przybył o świcie następnego dnia. 1039 00:50:31,920 --> 00:50:34,870 Usterka oprogramowania miał zostały ustalone, zamykanie 1040 00:50:34,870 --> 00:50:39,150 jeden rozdział w kłopoty Historia rakiet Patriot. 1041 00:50:39,150 --> 00:50:40,030 >> [KONIEC ODTWARZANIE] 1042 00:50:40,030 --> 00:50:41,488 >> David J. MALAN: To jest to dla CS50. 1043 00:50:41,488 --> 00:50:42,820 Do zobaczenia w środę. 1044 00:50:42,820 --> 00:50:46,420 1045 00:50:46,420 --> 00:50:50,370 >> [MUZYKA GRA] 1046 00:50:50,370 --> 00:54:23,446