1 00:00:00,000 --> 00:00:11,280 2 00:00:11,280 --> 00:00:13,650 >> SPEAKER 1: W porządku. 3 00:00:13,650 --> 00:00:14,390 Witamy z powrotem. 4 00:00:14,390 --> 00:00:19,260 To jest Tydzień Dwa CS50 i mamy dotychczas funkcji, ale był używany 5 00:00:19,260 --> 00:00:20,830 w dużym stopniu wziąć je za pewnik. 6 00:00:20,830 --> 00:00:23,430 Użyliśmy printf, która ma Efektem ubocznym drukowania 7 00:00:23,430 --> 00:00:24,110 rzeczy na ekranie. 8 00:00:24,110 --> 00:00:25,790 Użyliśmy get-int, dostać unosić. 9 00:00:25,790 --> 00:00:29,230 >> Ale co, jeśli rzeczywiście chcemy stworzyć własne funkcje, jak niektóre 10 00:00:29,230 --> 00:00:31,740 może już się rozpoczęły zrobić dla zestawu Problem One, choć 11 00:00:31,740 --> 00:00:33,140 nie absolutnie konieczne? 12 00:00:33,140 --> 00:00:37,150 Cóż, idziemy do przodu i ponownie, że Problem zadaje użytkownikowi na 13 00:00:37,150 --> 00:00:40,660 Nazwa i drukowanie ich na coś ekran, ale starają się uwzględniać się niektóre 14 00:00:40,660 --> 00:00:44,000 o wspólności, że mamy widać w naszym kodzie tej pory. 15 00:00:44,000 --> 00:00:45,120 Więc mam tu na myśli następujące. 16 00:00:45,120 --> 00:00:47,315 >> Mam zamiar iść do przodu i tworzyć Nowy program, wystarczy zadzwonić 17 00:00:47,315 --> 00:00:49,320 to hello.c jak zwykle. 18 00:00:49,320 --> 00:00:53,730 Mam zamiar iść do przodu i dać sobie zawierają standardowe io.h na górze. 19 00:00:53,730 --> 00:00:57,040 Zamierzam też dać sobie preemptively CS50 biblioteki, tak aby 20 00:00:57,040 --> 00:00:59,080 I nie daj się krzyknął przez kompilator. 21 00:00:59,080 --> 00:01:02,400 A teraz mam zamiar iść do przodu i zadeklarować int, główny, nieważne. 22 00:01:02,400 --> 00:01:09,020 >> A potem tu, to tam, gdzie chcę rozpocząć outsourcingu funkcji do 23 00:01:09,020 --> 00:01:12,090 inna funkcja, że ​​ja sam jestem zamiar napisać, ale to nie 24 00:01:12,090 --> 00:01:13,820 obecnie istnieje. 25 00:01:13,820 --> 00:01:19,210 Na przykład, załóżmy, że chcę napisać funkcję, która pozwala mi 26 00:01:19,210 --> 00:01:23,830 wydrukować Witaj, przecinek, i następnie niektóre nazwa użytkownika. 27 00:01:23,830 --> 00:01:29,010 Zamiast kontynuować zrobić printf hello,% s, nie byłoby miło, gdyby 28 00:01:29,010 --> 00:01:33,380 było po prostu nazywa funkcja nie printf ale nazwa print? 29 00:01:33,380 --> 00:01:36,600 >> Tak więc, innymi słowy, że chce móc napisać program, który robi trochę 30 00:01:36,600 --> 00:01:37,710 coś takiego. 31 00:01:37,710 --> 00:01:42,070 Po pierwsze, mam zamiar powiedzieć printf Państwa Nazwa, co skłania użytkownika do 32 00:01:42,070 --> 00:01:46,150 daj mi swoje imię, a następnie jestem zamierza wykorzystać znane s string do 33 00:01:46,150 --> 00:01:47,290 Oświadczam ciąg. 34 00:01:47,290 --> 00:01:50,420 Daj mi zmienną typu string, Nazywamy to s, i przechowywać w które 35 00:01:50,420 --> 00:01:52,120 wyniku wywołania uzyskać ciąg. 36 00:01:52,120 --> 00:01:56,060 Ale teraz w tydzień ostatnich, musiałbym nieco mozolnego zrobić hello,% s / n. 37 00:01:56,060 --> 00:01:58,630 38 00:01:58,630 --> 00:02:02,570 >> A to znaczy, widzieliśmy to przykład kilka razy, i to 39 00:02:02,570 --> 00:02:05,280 trywialny przykład, ponieważ jest tylko jeden linii kodu, więc to naprawdę nie jest 40 00:02:05,280 --> 00:02:06,860 big deal zachować wpisując ponownie. 41 00:02:06,860 --> 00:02:09,990 Ale załóżmy, że ta linia kodu rzeczywiście stawały się ciężarem, a 42 00:02:09,990 --> 00:02:12,900 nie jedna linia kodu jest, ale to 10 linii kodu kilka tygodni od teraz, 43 00:02:12,900 --> 00:02:15,190 i jesteś po prostu zmęczenia kopiowania i wklejania lub 44 00:02:15,190 --> 00:02:17,180 przepisywania tego samego kodu. 45 00:02:17,180 --> 00:02:22,100 Czy nie byłoby miło, zamiast robić printf hello,% s, i tak dalej, 46 00:02:22,100 --> 00:02:26,500 Czy nie byłoby miło, gdyby były tylko Funkcja o nazwie print, że nazwa 47 00:02:26,500 --> 00:02:27,560 przyjmuje argument - 48 00:02:27,560 --> 00:02:29,120 innymi słowy, zajmuje wejście - 49 00:02:29,120 --> 00:02:30,620 i średnik. 50 00:02:30,620 --> 00:02:33,240 Tak, że funkcja, prawda Bądź miły, jeżeli istnieje? 51 00:02:33,240 --> 00:02:36,690 Wtedy nie będę musiał martwić się o co printf to, co% s, a wszystkie 52 00:02:36,690 --> 00:02:39,400 te zawiłości, które są nie wszystko, co ciekawe. 53 00:02:39,400 --> 00:02:40,570 Są one użyteczne. 54 00:02:40,570 --> 00:02:44,700 >> Więc nazwa print, niestety, nie było wynaleziony jakiś 40 Plus lat temu. 55 00:02:44,700 --> 00:02:45,980 Nikt nie pomyślał, aby napisać. 56 00:02:45,980 --> 00:02:48,300 Ale to piękno ma język programowania, tak jak w 57 00:02:48,300 --> 00:02:52,930 Scratch można zdefiniować własne bloki, więc w C i najbardziej każdy język, prawda 58 00:02:52,930 --> 00:02:57,260 zdefiniować własne funkcje, może zdefiniować własne funkcje. 59 00:02:57,260 --> 00:03:01,710 Więc nawet jeśli mamy głównie przez automatycznie za darmo, możemy zadeklarować 60 00:03:01,710 --> 00:03:02,730 nasze własne funkcje. 61 00:03:02,730 --> 00:03:05,670 >> Więc mam zamiar zrobić trochę miejsca tutaj do góry, i mam zamiar zadeklarować moje 62 00:03:05,670 --> 00:03:08,210 własna funkcja, która będzie wyglądać trochę dziwne, ale w pierwszym wrócimy 63 00:03:08,210 --> 00:03:09,400 powrót do tego niedługo. 64 00:03:09,400 --> 00:03:12,310 I powiem nieważne, co wskazanie tej funkcji nie 65 00:03:12,310 --> 00:03:16,040 coś, ma efekt uboczny, ale nie zwraca mi coś w 66 00:03:16,040 --> 00:03:18,810 sam sposób uzyskać int lub uzyskać ciąg sam robi. 67 00:03:18,810 --> 00:03:22,450 I mam zamiar dać tej funkcji wymienić nazwy wydruku i mam zamiar 68 00:03:22,450 --> 00:03:26,470 określić, że ten facet ma zamiar wziąć ciąg, i mam zamiar zadzwonić, że 69 00:03:26,470 --> 00:03:27,600 Nazwa ciągu. 70 00:03:27,600 --> 00:03:32,100 Mogę nazwać to na co mam ochotę, ale chce mój kod na własny dokumentowania. 71 00:03:32,100 --> 00:03:34,770 Innymi słowy, jeśli jedna z miały otwórz ten plik i go przeczytać, mógłbyś 72 00:03:34,770 --> 00:03:39,020 rodzaj wywnioskować z nazwy, które Wejście jaką rolę miało grać. 73 00:03:39,020 --> 00:03:42,270 >> A teraz poniżej, mam zamiar otworzyć nawias klamrowy i zamknięty nawias klamrowy, 74 00:03:42,270 --> 00:03:47,140 i tak zauważysz I już po same wzór na linii cztery przez siedem, jak 75 00:03:47,140 --> 00:03:51,622 Śledzę na dobry tydzień powiększonej teraz między, powiedzmy, linii dziewięciu i 76 00:03:51,622 --> 00:03:53,400 14, które tworzą główną. 77 00:03:53,400 --> 00:03:56,160 Innymi słowy, należy wydrukować nazwę jest inna funkcja. 78 00:03:56,160 --> 00:03:58,990 Teraz, kompilator nie będzie wiedzieć nazwać tę rzecz automatycznie 79 00:03:58,990 --> 00:04:02,670 bo dosłownie wymyślił, ale to wiem jeszcze zadzwonić głównym 80 00:04:02,670 --> 00:04:08,710 automatycznie, a następnie oczywiście w linia 13, wzywam własną funkcję. 81 00:04:08,710 --> 00:04:12,805 A ponieważ ja oświadczył, że funkcja się na linii czterech przed głównymi, 82 00:04:12,805 --> 00:04:16,579 to będzie uczyć kompilator co cytat cytatu, "nazwa print" 83 00:04:16,579 --> 00:04:18,140 Oznacza to, i to, co powinna zrobić. 84 00:04:18,140 --> 00:04:22,700 Więc jestem jakby dając mu nowe, niestandardowe zablokować w kontekście, powiedzmy, Scratch. 85 00:04:22,700 --> 00:04:27,240 >> Więc tutaj, mogę umieścić, że bardzo często lub powtarzające wzór kodu trzymam 86 00:04:27,240 --> 00:04:32,300 pisania w klasie, printf % S hello,% s / n ", - 87 00:04:32,300 --> 00:04:36,720 88 00:04:36,720 --> 00:04:37,590 co chcę umieścić tutaj? 89 00:04:37,590 --> 00:04:39,200 S? 90 00:04:39,200 --> 00:04:41,420 Tak, chcę, aby umieścić nazwisko w tym kontekście. 91 00:04:41,420 --> 00:04:43,440 Więc zauważyć trochę dychotomii tutaj. 92 00:04:43,440 --> 00:04:47,680 Ponieważ jestem deklarując własną funkcję i ja nieco arbitralnie nazwie 93 00:04:47,680 --> 00:04:50,880 drukować nazwę, a ponieważ mam podano w nawiasach, że ta 94 00:04:50,880 --> 00:04:55,035 Funkcja przyjmuje jeden argument, typ który jest string - więc jest to słowo 95 00:04:55,035 --> 00:05:00,010 lub zwrot lub coś w tym stylu - i Dzwonię, że nazwy argumentu, że 96 00:05:00,010 --> 00:05:04,770 Oznacza to, jedyną zmienną, która jest w Zakres, że tak powiem, to nazwa. 97 00:05:04,770 --> 00:05:07,780 >> S istnieje tylko między tym, co dwa nawiasy klamrowe, oczywiście? 98 00:05:07,780 --> 00:05:12,990 No naprawdę, podobnie jak linii 10 przez 14, tak samo jak w poniedziałek, nie można używać 99 00:05:12,990 --> 00:05:17,650 S, ale co mogę zrobić, to przekazać S pod nazwą wydruku. 100 00:05:17,650 --> 00:05:21,030 Wydrukuj nazwa tak się dać to alias, synonimów, pseudonim, 101 00:05:21,030 --> 00:05:24,400 nazywając to imię, a teraz używania go w tej pozycji. 102 00:05:24,400 --> 00:05:26,840 Więc teraz chciałbym zapisać to, pomniejszyć. 103 00:05:26,840 --> 00:05:31,250 >> Pozwólcie mi iść do przodu i robić cześć. 104 00:05:31,250 --> 00:05:32,400 Wygląda dobrze. 105 00:05:32,400 --> 00:05:36,110 Nie wypluć żadnych błędów. . / Hello Enter. 106 00:05:36,110 --> 00:05:37,020 Jak się nazywam? 107 00:05:37,020 --> 00:05:38,060 David. 108 00:05:38,060 --> 00:05:39,270 I cześć David. 109 00:05:39,270 --> 00:05:41,820 Tak więc nie wszystko, co ciekawe, ale po prostu, że teraz. 110 00:05:41,820 --> 00:05:44,310 Teraz masz ten sam składnik jak my w Scratch do 111 00:05:44,310 --> 00:05:45,420 zrobić własne funkcje. 112 00:05:45,420 --> 00:05:46,770 >> Ale jest trochę haczyka. 113 00:05:46,770 --> 00:05:50,620 Załóżmy, że tak naprawdę nie myśli to przez i rzeczywiście bez 114 00:05:50,620 --> 00:05:54,250 naprawdę myśli o tym napisał że funkcja tutaj. 115 00:05:54,250 --> 00:05:55,420 Czuje się całkowicie uzasadnione. 116 00:05:55,420 --> 00:05:58,440 W Scratch nie istnieje pojęcie z lokalizacją w skryptach. 117 00:05:58,440 --> 00:06:00,670 Możesz umieścić jeden tu, jeden tu, jeden tutaj, a to może zacząć 118 00:06:00,670 --> 00:06:03,310 wyglądać trochę bałagan, jeśli nie położyć go porządnie, ale tak nie jest 119 00:06:03,310 --> 00:06:05,910 znaczenia, gdzie fizycznie skryptów się na ekranie. 120 00:06:05,910 --> 00:06:09,660 Niestety w C - i to jest w przeciwieństwie do w językach takich jak Java i Python 121 00:06:09,660 --> 00:06:13,600 i inne, które możesz znać z - niestety w C, aby nie 122 00:06:13,600 --> 00:06:15,830 znaczenia, bo co to watch wydarzy się teraz. 123 00:06:15,830 --> 00:06:19,010 >> Funkcja domyślnie, że będzie do wykonania jest oczywiście głównym. 124 00:06:19,010 --> 00:06:22,290 Main będzie zadzwonić nazwę druku na linia osiem, ale niestety, 125 00:06:22,290 --> 00:06:26,660 kompilator nie wie nawet, że nazwa druku istnieje, dopóki nie dotrze do linii 11, 126 00:06:26,660 --> 00:06:28,520 co niestety jest będzie za późno. 127 00:06:28,520 --> 00:06:30,660 Więc robią komentarzy. 128 00:06:30,660 --> 00:06:32,950 A teraz, cholera, dwa błędy generowane. 129 00:06:32,950 --> 00:06:36,050 Więc teraz chciałbym przejść do bardzo po pierwsze, jak zawsze powinniśmy robić, a 130 00:06:36,050 --> 00:06:39,560 Zauważ, że to na mnie krzyczeć, "Niejawna deklaracja funkcji 131 00:06:39,560 --> 00:06:40,540 wydrukować imię. " 132 00:06:40,540 --> 00:06:43,860 >> Więc widziałem tę wiadomość przed, niejawna deklaracja funkcji. 133 00:06:43,860 --> 00:06:48,080 Kiedy widzieliśmy ten rodzaj błędu? 134 00:06:48,080 --> 00:06:49,180 Kiedy nie to biblioteka. 135 00:06:49,180 --> 00:06:53,470 Jeśli zapomniałeś cs50.h i chciałbym uzyskać krzyknął do uzyskać ciąg lub uzyskać int. 136 00:06:53,470 --> 00:06:56,880 Jednak w tym przypadku, ta funkcja druku nazwa nie jest w bibliotece, prawda? 137 00:06:56,880 --> 00:07:00,230 Jest to dosłownie w tym pliku, więc co tak naprawdę chodzi? 138 00:07:00,230 --> 00:07:04,660 >> No niestety w C, przejście tak bardzo dosłownie, że jeśli 139 00:07:04,660 --> 00:07:08,640 chcą funkcję o nazwie nazwa wydruku istnieje, trzeba albo wprowadzić 140 00:07:08,640 --> 00:07:11,940 które działają na samej górze kod tak, że jest dostępna w celu obniżenia 141 00:07:11,940 --> 00:07:15,070 funkcje, ale szczerze mówiąc, to staje się byle szybko. 142 00:07:15,070 --> 00:07:18,160 Osobiście lubię kładąc główny pierwszy bo to jest bardzo jasne, co to 143 00:07:18,160 --> 00:07:19,890 Program ma na pierwszy rzut oka. 144 00:07:19,890 --> 00:07:23,290 A Plus, można dostać się do dziwnej rogu przypadki, w których, jeśli x chce zadzwonić 145 00:07:23,290 --> 00:07:27,530 y, ale y mogą nazwać x, po prostu fizycznie nie może faktycznie umieścić jeden 146 00:07:27,530 --> 00:07:28,540 nad drugim. 147 00:07:28,540 --> 00:07:31,230 >> Okazuje się jednak, w C, może się rozwiązać ten problem w bardzo prosty sposób. 148 00:07:31,230 --> 00:07:34,010 Mam zamiar umieścić trochę miejsca tu, a ja po prostu się 149 00:07:34,010 --> 00:07:38,170 zapobiegawczo, choć nieco nadmiarowo, nauczy 150 00:07:38,170 --> 00:07:42,320 kompilator, że istnieje funkcja nazywa nazwę druku, która przyjmuje ciąg znaków, 151 00:07:42,320 --> 00:07:46,330 i mam zamiar zadzwonić to nazwać średnik. 152 00:07:46,330 --> 00:07:50,220 >> Tak to się teraz w kolejce cztery, które nie widział, jest deklaracja 153 00:07:50,220 --> 00:07:53,940 z nazwy wydruku funkcji, ale to tylko Obietnica, że ​​funkcja ta będzie 154 00:07:53,940 --> 00:07:56,620 ostatecznie określone, w końcu być realizowane. 155 00:07:56,620 --> 00:08:00,180 To teraz mogę zostawić w spokoju, bo teraz jest to definicja, 156 00:08:00,180 --> 00:08:04,090 realizacja, rodzaj ostatniej mili realizacji tego 157 00:08:04,090 --> 00:08:05,130 dana funkcja. 158 00:08:05,130 --> 00:08:08,450 Tak szczerze, że to głupie, to irytujące, , ale w ten sposób C, a to 159 00:08:08,450 --> 00:08:12,050 ponieważ zajmuje się bardzo dosłownie i, jak komputer szczerze powinien, 160 00:08:12,050 --> 00:08:16,020 tylko nie dokładnie to, co możesz powiedzieć, że do zrobić i tak, że kolejność jest ważna. 161 00:08:16,020 --> 00:08:18,940 >> Miejcie to na uwadze, i jeszcze raz, zacząć zawiadomienia powtarzaniu wzorów. 162 00:08:18,940 --> 00:08:21,850 Kursy to będzie, jeśli nie mają już zaczynają napotkać komunikaty 163 00:08:21,850 --> 00:08:24,700 tak, że na pierwszy rzut oka wydaje całkowicie tajemnicze, ale jeśli zaczniesz 164 00:08:24,700 --> 00:08:29,000 szukać tych kluczowych słów jak "Niejawna deklaracja," wspomina 165 00:08:29,000 --> 00:08:32,380 funkcja w tym przypadku - i szczerze mówiąc, to czasem nawet się trochę zielono 166 00:08:32,380 --> 00:08:35,010 symbol marchewka, który mówi, gdzie problem prawdopodobnie jest - 167 00:08:35,010 --> 00:08:40,980 możesz zacząć pracować na swój sposób poprzez jeszcze niewidoczne komunikaty o błędach. 168 00:08:40,980 --> 00:08:45,860 Wszelkie pytania na temat pisania własna funkcja w ten sposób? 169 00:08:45,860 --> 00:08:47,540 >> Zróbmy coś, co jest trochę bardziej przekonujące. 170 00:08:47,540 --> 00:08:51,760 Zamiast po prostu zrobić coś, co ma Efektem ubocznym drukowania, pozwól mi odejść 171 00:08:51,760 --> 00:08:55,340 dalej i zapisać nowy plik, a my będziemy Nazywamy to positive.c, choć to 172 00:08:55,340 --> 00:08:57,600 będzie trochę inaczej w porównaniu do ostatniej chwili. 173 00:08:57,600 --> 00:09:01,910 I tym razem, chcę, aby ponownie wprowadzić ostatni raz w positive.C przykład, który 174 00:09:01,910 --> 00:09:04,430 jest zmuszają użytkownika uzyskując mnie dodatnia. 175 00:09:04,430 --> 00:09:07,280 Ale musiałem użyć dostać int ostatni. 176 00:09:07,280 --> 00:09:10,780 Czy nie byłoby miło, gdyby nie było Funkcja o nazwie uzyskać pozytywną int 177 00:09:10,780 --> 00:09:13,610 , że mogę po prostu zlecić to kawałek funkcjonalności? 178 00:09:13,610 --> 00:09:16,480 Więc różnica polega my będziemy wdrożenia uzyskać pozytywną int, ale w przeciwieństwie do 179 00:09:16,480 --> 00:09:20,330 Nazwa druku które wystąpiły działania niepożądane - to nie wrócił do mnie jak coś 180 00:09:20,330 --> 00:09:21,710 liczba lub ciąg - 181 00:09:21,710 --> 00:09:25,510 uzyskać pozytywną int jest, oczywiście, będzie wrócić, mam nadzieję, pozytywny int. 182 00:09:25,510 --> 00:09:26,170 >> Więc zróbmy to. 183 00:09:26,170 --> 00:09:30,840 Dołącz cs50.h, zawierać standardowe io.h. 184 00:09:30,840 --> 00:09:33,520 Int main pustkę. 185 00:09:33,520 --> 00:09:42,160 A teraz tutaj, mam zamiar iść do przodu i powiedzmy, int, nazywamy to n, jest równa 186 00:09:42,160 --> 00:09:44,270 uzyskać pozytywną int. 187 00:09:44,270 --> 00:09:49,080 I jak uzyskać int już istnieje ponieważ pracownicy to napisał, mam zamiar 188 00:09:49,080 --> 00:09:53,950 założyć na chwilę, że dostać pozytywne int istnieje, a teraz mam zamiar 189 00:09:53,950 --> 00:09:57,730 pójść dalej i powiedzieć, printf, dzięki za% i / n ", n. 190 00:09:57,730 --> 00:10:02,940 191 00:10:02,940 --> 00:10:07,770 >> Więc teraz, jeśli mogę skompilować ten program, co będzie się działo w moim terminalu 192 00:10:07,770 --> 00:10:09,075 Okno w dolnej części ekranu? 193 00:10:09,075 --> 00:10:11,580 194 00:10:11,580 --> 00:10:13,900 Będę prawdopodobnie się, że sam błąd jak wcześniej. 195 00:10:13,900 --> 00:10:14,570 Więc spróbujmy. 196 00:10:14,570 --> 00:10:16,450 Bądź pozytywny. 197 00:10:16,450 --> 00:10:19,900 I znowu, niejawna deklaracja funkcji, uzyskać pozytywną int. 198 00:10:19,900 --> 00:10:21,970 Tak więc możemy rozwiązać ten problem w kilka sposobów. 199 00:10:21,970 --> 00:10:27,310 Zamierzam zachować proste i po prostu umieścić moje oświadczenie tutaj i uzyskać 200 00:10:27,310 --> 00:10:28,120 pozytywne int. 201 00:10:28,120 --> 00:10:29,720 Muszę tak zwany podpisem. 202 00:10:29,720 --> 00:10:32,410 Podpis tylko odnosi do estetyki 203 00:10:32,410 --> 00:10:34,090 Pierwsza linia programu. 204 00:10:34,090 --> 00:10:37,420 Więc co należy uzyskać pozytywne int powrót? 205 00:10:37,420 --> 00:10:37,970 >> Więc int. 206 00:10:37,970 --> 00:10:41,540 Chodzi mi najlepiej, to powróci coś pozytywnego int, ale to 207 00:10:41,540 --> 00:10:42,160 nie istnieje. 208 00:10:42,160 --> 00:10:45,280 Nie widziałem, że wśród naszych danych typy, więc mamy do czynienia z 209 00:10:45,280 --> 00:10:47,170 Fakt, że mamy bardzo mało typy danych do pracy. 210 00:10:47,170 --> 00:10:50,360 Ale możemy powrócić int i tylko Wierzymy, że będzie ona dodatnia. 211 00:10:50,360 --> 00:10:52,690 To będzie się nazywać uzyskać pozytywną int. 212 00:10:52,690 --> 00:10:55,122 >> A teraz, jak o swoich argumentów? 213 00:10:55,122 --> 00:10:56,440 Czy to odbiera żadnych danych? 214 00:10:56,440 --> 00:10:58,280 Czy potrzebujesz żadnych danych? 215 00:10:58,280 --> 00:11:00,900 Więc to nie musi wiedzieć w nic zaliczki. 216 00:11:00,900 --> 00:11:03,220 Pobierz ciąg nie, dostać int nie. 217 00:11:03,220 --> 00:11:06,430 Printf nie - to musi mieć jakiś Wejście przeszedł w tym - i nazwa print 218 00:11:06,430 --> 00:11:09,020 potrzebne jakieś wejście, ale się pozytywne int nie. 219 00:11:09,020 --> 00:11:11,530 Więc mam zamiar wyraźnie powiedzieć pustkę kompilatora. 220 00:11:11,530 --> 00:11:13,470 Pustka jest brak czegokolwiek innego. 221 00:11:13,470 --> 00:11:17,990 Więc nic nie oznacza nieważności dzieje wewnątrz z tych nawiasach, średnik. 222 00:11:17,990 --> 00:11:20,840 >> I teraz w głębi pliku - i ponownie, jestem po prostu rodzaj anal 223 00:11:20,840 --> 00:11:23,640 o wprowadzenie głównym u góry, które jest dobra praktyka, ponieważ ten sposób, 224 00:11:23,640 --> 00:11:26,220 w dowolnym momencie lub kogoś innego otwiera plik, 225 00:11:26,220 --> 00:11:27,400 funkcjonalność jest właśnie tam. 226 00:11:27,400 --> 00:11:29,660 Można nurkować od punktu wyjścia. 227 00:11:29,660 --> 00:11:34,190 Więc teraz będę powielać tego, uzyskać pozytywną int pustkę, ale nie jestem 228 00:11:34,190 --> 00:11:35,430 uderzy średnik teraz. 229 00:11:35,430 --> 00:11:38,280 Zamierzam otworzyć nawiasy klamrowe, i teraz muszę pożyczyć 230 00:11:38,280 --> 00:11:39,700 kilka pomysłów od poniedziałku. 231 00:11:39,700 --> 00:11:44,450 >> Tak jak pamiętam, że zrobił coś jak wykonać następujące czynności podczas 232 00:11:44,450 --> 00:11:45,830 coś, co było prawdą. 233 00:11:45,830 --> 00:11:46,630 I co mam zrobić? 234 00:11:46,630 --> 00:11:51,540 Zrobiłem coś takiego dać mnie dodatnia, 235 00:11:51,540 --> 00:11:52,430 trochę zachęty. 236 00:11:52,430 --> 00:11:53,540 Można używać żadnych słów, które chcę. 237 00:11:53,540 --> 00:11:54,960 A potem użyłem co? 238 00:11:54,960 --> 00:11:59,530 Int n równa się dostać int, żadne argumenty do niej. 239 00:11:59,530 --> 00:12:00,550 >> I zauważyć różnicę. 240 00:12:00,550 --> 00:12:04,680 Po wywołaniu funkcji, gdy używasz funkcja, nie umieścić w próżni. 241 00:12:04,680 --> 00:12:08,570 To zrobić tylko, że podczas deklarowania Funkcja, ucząc kompilator, co 242 00:12:08,570 --> 00:12:09,780 należy się spodziewać. 243 00:12:09,780 --> 00:12:11,650 Więc nie trzeba umieścić unieważnić tam samemu. 244 00:12:11,650 --> 00:12:12,940 >> A teraz to, co mój stan? 245 00:12:12,940 --> 00:12:19,670 Również, n nie jest równa pozytywne, ale to tylko pseudo-code. 246 00:12:19,670 --> 00:12:22,530 Więc jak mam wyrazić to czyściej? 247 00:12:22,530 --> 00:12:24,090 Tak więc mniejsza lub równa zeru. 248 00:12:24,090 --> 00:12:26,250 Więc znowu, zauważyć można zrobić mniejsza lub równa. 249 00:12:26,250 --> 00:12:28,100 Mimo to dwa oddzielne symbole, można to zrobić na 250 00:12:28,100 --> 00:12:29,350 klawiatura jako takie. 251 00:12:29,350 --> 00:12:33,950 >> Ale wciąż jest błąd, który I wkręca się ostatnio zbyt. 252 00:12:33,950 --> 00:12:36,950 Muszę oświadczyć - 253 00:12:36,950 --> 00:12:37,460 dokładnie. 254 00:12:37,460 --> 00:12:39,640 Muszę oświadczyć n zewnątrz z pętli. 255 00:12:39,640 --> 00:12:44,180 Więc muszę umieścić n tutaj, a ja nie chcesz ponownie zgłosić go tutaj 256 00:12:44,180 --> 00:12:46,480 bo mam nową zmienną. 257 00:12:46,480 --> 00:12:48,860 Chcę tylko, aby przypisać wartość tutaj. 258 00:12:48,860 --> 00:12:54,320 >> I teraz nie jestem dość zrobić tutaj. 259 00:12:54,320 --> 00:12:57,290 Niech mi przed siebie i udawać, że jestem skończony. 260 00:12:57,290 --> 00:13:01,220 Bądź pozytywny, a teraz nowe error. 261 00:13:01,220 --> 00:13:04,550 Kontrola osiągnie koniec non-void funkcja. 262 00:13:04,550 --> 00:13:07,760 Tak więc nowy komunikat o błędzie, ale jeśli rodzaj z odciąć każdego słowy 263 00:13:07,760 --> 00:13:09,620 prawdopodobnie aluzja do tego, co się stało. 264 00:13:09,620 --> 00:13:11,240 >> Kontrolować. 265 00:13:11,240 --> 00:13:14,250 Kontrola oznacza po prostu do porządku operacji w programie. 266 00:13:14,250 --> 00:13:16,510 Komputer znajduje się w kontroli i coś poszło nie tak. 267 00:13:16,510 --> 00:13:18,510 Tak więc dochodzi do końca non-void funkcja. 268 00:13:18,510 --> 00:13:21,760 Jaka funkcja jest najwyraźniej dotyczy? 269 00:13:21,760 --> 00:13:24,790 Jaka funkcja nie jest nieważne? 270 00:13:24,790 --> 00:13:27,400 Więc pozytywny int, i trochę mylące, że dobrze, 271 00:13:27,400 --> 00:13:29,010 jest to rodzaj pustki. 272 00:13:29,010 --> 00:13:33,070 Ma specyfikację pustki dla jego argumenty, ale jego produkcja będzie 273 00:13:33,070 --> 00:13:34,540 być n typu. 274 00:13:34,540 --> 00:13:37,260 Więc słowo po lewej stronie jest tzw. typ zwracany. 275 00:13:37,260 --> 00:13:40,320 Słowo wewnątrz tutaj jest na zero lub więcej argumentów 276 00:13:40,320 --> 00:13:41,970 że funkcja przyjmuje. 277 00:13:41,970 --> 00:13:44,060 >> Więc co muszę zrobić? 278 00:13:44,060 --> 00:13:47,650 W tym momencie w moim kodu, linia 21, w którym miga prompt to, że 279 00:13:47,650 --> 00:13:51,430 pozytywnie int wewnątrz zmiennej o nazwie n. 280 00:13:51,430 --> 00:13:55,200 Jak mogę go oddać do main? 281 00:13:55,200 --> 00:13:55,960 Dosłownie. 282 00:13:55,960 --> 00:13:59,320 Powrót średnik n. 283 00:13:59,320 --> 00:14:04,090 >> Więc tak jak Colton wrócił kawałek papieru z odpowiedzią na mnie przez upuszczenie 284 00:14:04,090 --> 00:14:07,020 że kawałek papieru w małej czarnej pudełko na stole, do tego w 285 00:14:07,020 --> 00:14:10,100 Kod, dosłownie po prostu napisz, powrót n, i to tak, jakby były Colton 286 00:14:10,100 --> 00:14:12,140 wręczając mi coś fizycznego pleców. 287 00:14:12,140 --> 00:14:15,870 W tym przypadku, co się dzieje, to dostać pozytywne int będzie do przekazania z powrotem 288 00:14:15,870 --> 00:14:19,220 co zapewne pozytywnie całkowita do kogo? 289 00:14:19,220 --> 00:14:21,380 Skąd ta wartość skończyć? 290 00:14:21,380 --> 00:14:29,080 Które kończy się w tej zmiennej, N, i potem kontynuować linii dziewięciu. 291 00:14:29,080 --> 00:14:31,920 >> Tak więc, innymi słowy, aby z operacje, program ten zaczyna 292 00:14:31,920 --> 00:14:34,430 wykonania, a kompilator sobie sprawę, oh, chcesz bibliotekę? 293 00:14:34,430 --> 00:14:36,310 Puść mnie chwycić, co jest w środku tego. 294 00:14:36,310 --> 00:14:37,750 Oh, chcesz standardowej biblioteki IO? 295 00:14:37,750 --> 00:14:39,660 Puść mnie chwycić, co jest w środku tego. 296 00:14:39,660 --> 00:14:44,510 Co mówią do siebie kompilator gdy trafi linia cztery? 297 00:14:44,510 --> 00:14:47,980 Oh, obiecałeś do wdrożenia Funkcja o nazwie uzyskać pozytywny, ale 298 00:14:47,980 --> 00:14:50,820 Wrócimy do tego później, coś w tym kierunku. 299 00:14:50,820 --> 00:14:53,450 >> Int main void oznacza po prostu tu jest wnętrzności mojego programu. 300 00:14:53,450 --> 00:14:54,990 Linia siedem jest tylko nawias klamrowy. 301 00:14:54,990 --> 00:14:59,540 Linia osiem mówi, po lewej stronie, podać me 32 bitów dla liczby całkowitej, nazywają to n. 302 00:14:59,540 --> 00:15:02,160 Po prawej stronie, to mówiąc uzyskać pozytywną int. 303 00:15:02,160 --> 00:15:07,120 Teraz przerwa niech ta historia, ponieważ teraz I nie ruszać, mój kursor w dół. 304 00:15:07,120 --> 00:15:11,720 Mój kursor teraz idzie w dół tutaj, bo teraz uzyskać pozytywne int wykonuje. 305 00:15:11,720 --> 00:15:13,100 Int n jest zadeklarowany. 306 00:15:13,100 --> 00:15:14,040 Wykonaj następujące czynności. 307 00:15:14,040 --> 00:15:16,090 Printf daje mi całkowitą dodatnią. 308 00:15:16,090 --> 00:15:19,740 >> Get int od użytkownika, należy go przechowywać w N, i może to zrobić ponownie. 309 00:15:19,740 --> 00:15:23,010 Pętla ta oznacza, że ​​ten kod może wykonać w górę iw dół, jak to jeszcze raz 310 00:15:23,010 --> 00:15:25,810 i ponownie, ale gdy użytkownik Wreszcie współpracuje i daje mi pozytywne 311 00:15:25,810 --> 00:15:31,750 int, I hit linii 21, w którym momencie Numer zostanie wydany, a który 312 00:15:31,750 --> 00:15:34,280 należy podkreślić teraz? 313 00:15:34,280 --> 00:15:35,070 Dziewięć. 314 00:15:35,070 --> 00:15:39,010 Kontrola, że ​​tak powiem, zwraca do linii dziewięć. 315 00:15:39,010 --> 00:15:40,650 To linia, która jest obecnie odpowiedzialna za. 316 00:15:40,650 --> 00:15:43,250 >> Więc to, co się dzieje wszystko tym razem pod maską, ale 317 00:15:43,250 --> 00:15:46,480 kiedy używaliśmy funkcji jak printf lub nawet uzyskać ciąg, że ktoś inny 318 00:15:46,480 --> 00:15:50,600 napisał dla Ciebie, kontrola była przekazana off do cudzego linii kodu 319 00:15:50,600 --> 00:15:51,290 by linia po linii. 320 00:15:51,290 --> 00:15:53,770 To jest po prostu nie mogliśmy go zobaczyć, a my może naprawdę nie przedstawiają go w tym 321 00:15:53,770 --> 00:15:57,620 program, ponieważ jest to w jakiś inny plik na dysku twardym 322 00:15:57,620 --> 00:16:00,000 wiemy o nas. 323 00:16:00,000 --> 00:16:02,100 Więc właściwie skompilować i uruchomieniu tego teraz. 324 00:16:02,100 --> 00:16:03,890 >> Bądź pozytywny. 325 00:16:03,890 --> 00:16:05,260 Kompilacja, to postęp. 326 00:16:05,260 --> 00:16:06,650 . / Pozytywne. 327 00:16:06,650 --> 00:16:08,020 Daj mi dodatnia. 328 00:16:08,020 --> 00:16:08,800 Bądźmy trudne. 329 00:16:08,800 --> 00:16:10,430 Negative 1. 330 00:16:10,430 --> 00:16:11,360 Zero. 331 00:16:11,360 --> 00:16:13,370 Dajmy mu 50. 332 00:16:13,370 --> 00:16:18,100 Dzięki za 50, a więc kontroli Obecnie powrócił. 333 00:16:18,100 --> 00:16:21,750 Wszelkie pytania, a następnie, na które? 334 00:16:21,750 --> 00:16:23,180 Tak? 335 00:16:23,180 --> 00:16:25,630 >> [Niesłyszalne]. 336 00:16:25,630 --> 00:16:26,130 >> Powiedz jeszcze raz. 337 00:16:26,130 --> 00:16:27,860 O, dobre pytanie. 338 00:16:27,860 --> 00:16:31,100 Tak więc można zauważyć paralelę tutaj Jestem rodzaju cięcia kąt na. 339 00:16:31,100 --> 00:16:35,420 W linii 12, mówię, uzyskać pozytywną int zwraca int, ale przez to samo 340 00:16:35,420 --> 00:16:39,660 logika, teraz się rozumieć, że w linia sześć, mówię, że główne powraca 341 00:16:39,660 --> 00:16:44,040 int, ale to, co nigdy nie my miał w jednym z naszych programów? 342 00:16:44,040 --> 00:16:46,470 Nigdy nie mieliśmy wzmianki ten klucz powrót słowo. 343 00:16:46,470 --> 00:16:49,970 >> Tak więc okazuje się, że w C, co najmniej wersja tego, że używamy 344 00:16:49,970 --> 00:16:55,750 wykonane w 1999 roku, pod względem technicznym, to jest dzieje się automatycznie. 345 00:16:55,750 --> 00:16:59,300 Zawsze można realizować program i ty realizacji funkcji o nazwie main, 346 00:16:59,300 --> 00:17:04,230 że funkcja zwróci zero przez domyślnie, jeśli nie mówią inaczej, 347 00:17:04,230 --> 00:17:05,849 i zero tylko konwencja. 348 00:17:05,849 --> 00:17:09,430 Świat zwraca zero tym samym wskazuje, że wszystko jest dobrze, 349 00:17:09,430 --> 00:17:13,040 skutecznie zostawiając nas z czterech miliardów możliwych rzeczy, które mogą pójść 350 00:17:13,040 --> 00:17:17,530 nie tak tak, że jeśli wrócimy jednego, że może oznaczać kod, który oznacza to 351 00:17:17,530 --> 00:17:18,310 coś poszło nie tak. 352 00:17:18,310 --> 00:17:20,589 Możemy wrócić dwa, co oznacza, to inna rzecz, poszło źle. 353 00:17:20,589 --> 00:17:23,440 Możemy wrócić czterech miliardów, które oznacza to inna rzecz, poszło źle. 354 00:17:23,440 --> 00:17:27,170 >> A jeśli teraz myśleć o własnych PC lub Mac, można przypomnieć, że 355 00:17:27,170 --> 00:17:29,610 czasami można dostać tajemnicze komunikaty o błędach z oprogramowaniem, że jesteś 356 00:17:29,610 --> 00:17:32,650 przy użyciu, a czasem ma ludzkie przyjazny opis, ale nie 357 00:17:32,650 --> 00:17:35,265 często kod lub numer na ekranie? 358 00:17:35,265 --> 00:17:37,800 Jeśli to nie przychodzi do głowy, tylko miej oko na to. 359 00:17:37,800 --> 00:17:40,790 To jest zwykle to, co je Kody na myśli. 360 00:17:40,790 --> 00:17:44,200 Są one zawarte w programie Microsoft Word, a inne programy tak, że jeśli plik 361 00:17:44,200 --> 00:17:48,850 zgłoś błąd w firmie, można powiedz im, oh, mam numer błędu 45. 362 00:17:48,850 --> 00:17:51,750 A niektóre z powrotem programista w firmie może wyglądać, że w jego lub jej 363 00:17:51,750 --> 00:17:54,940 kod i powiedzieć, oh, to dlatego, że zrobiłem ten błąd i dlatego użytkownik 364 00:17:54,940 --> 00:17:56,240 dostał tę wiadomość. 365 00:17:56,240 --> 00:17:59,490 >> Ale szczerze mówiąc, to tylko trochę rozpraszać i mało uciążliwe 366 00:17:59,490 --> 00:18:02,130 stwierdzić, że, przynajmniej na naszym Pierwsze programy, więc mamy 367 00:18:02,130 --> 00:18:02,970 było pominięcie go. 368 00:18:02,970 --> 00:18:07,450 Ale przez cały ten czas każdy z Twoich Funkcje główne potajemnie miał tego 369 00:18:07,450 --> 00:18:11,600 linia automatycznie dodana dla Ciebie przez kompilator, tylko na mocy konwencji 370 00:18:11,600 --> 00:18:13,172 zaoszczędzić trochę czasu. 371 00:18:13,172 --> 00:18:14,620 >> [Niesłyszalne]. 372 00:18:14,620 --> 00:18:16,250 >> Nie ma potrzeby, aby umieścić go w głównym. 373 00:18:16,250 --> 00:18:16,700 To dobrze. 374 00:18:16,700 --> 00:18:20,260 Trzeba włączyć go, jeśli były realizacji funkcji takich jak ta. 375 00:18:20,260 --> 00:18:22,850 W przeciwnym razie funkcja płaskie obecnie nie działa. 376 00:18:22,850 --> 00:18:24,480 Ale w głównym, to nie jest konieczne. 377 00:18:24,480 --> 00:18:28,450 W tydzień lub dwa, zaczniemy się do tego zwyczaju raz chcemy rozpocząć 378 00:18:28,450 --> 00:18:29,690 sygnalizując błędy. 379 00:18:29,690 --> 00:18:32,550 Bardzo dobre pytanie. 380 00:18:32,550 --> 00:18:36,880 >> Tak szybkie werbalne wspomnieć, że przerwa w piątek, że nie będzie obiad 381 00:18:36,880 --> 00:18:39,980 per se, ale będziemy na kolacji z niektórych studentów i pracowników. 382 00:18:39,980 --> 00:18:42,940 Jeśli chcesz do nas dołączyć, prosimy wolne, aby przejść do cs50.net/rsvp. 383 00:18:42,940 --> 00:18:45,030 18:00 w piątek. 384 00:18:45,030 --> 00:18:47,990 Przestrzeń jest, jak zawsze, ograniczone, ale my będziemy nadal robi to na prawie 385 00:18:47,990 --> 00:18:51,420 raz w tygodniu, jeśli przestrzeń skończy się w tym tygodniu. 386 00:18:51,420 --> 00:18:56,160 >> Więc cliffhanger, że skończyliśmy na Poniedziałek był, że może faktycznie strings 387 00:18:56,160 --> 00:19:00,520 być indeksowane na, co oznacza po prostu cię może dostać się do pierwszego znaku, 388 00:19:00,520 --> 00:19:03,770 Drugi znak, trzeci znak i tak dalej, ponieważ można 389 00:19:03,770 --> 00:19:07,860 skutecznie, że z ciągu, podobnie jak witam, jak jest w tym przypadku pięć 390 00:19:07,860 --> 00:19:09,670 Litery wewnątrz pudełka. 391 00:19:09,670 --> 00:19:13,370 I można dostać w każdym z tych Składnia pola z tym, co nam zrobił 392 00:19:13,370 --> 00:19:15,230 przedstawić w poniedziałek? 393 00:19:15,230 --> 00:19:16,760 Te nawiasy kwadratowe na klawiaturze. 394 00:19:16,760 --> 00:19:18,980 To po prostu znaczy iść do miejsca zerowego. 395 00:19:18,980 --> 00:19:22,840 >> Zaczynamy odliczanie od zera, więc uchwyt zera oznacza H, łącznik jeden 396 00:19:22,840 --> 00:19:25,170 oznacza, e, i tak dalej. 397 00:19:25,170 --> 00:19:28,490 I tak cały czas, gdy byliśmy za pomocą łańcuchów i wpisując "hello" 398 00:19:28,490 --> 00:19:31,250 i "Świat" i inne rzeczy na Ekran, to był przechowywany 399 00:19:31,250 --> 00:19:32,820 w polach takich jak ten. 400 00:19:32,820 --> 00:19:33,370 I zgadywać. 401 00:19:33,370 --> 00:19:37,470 Co każde pole reprezentuje fizycznie wewnątrz komputera? 402 00:19:37,470 --> 00:19:38,250 >> [Niesłyszalne]. 403 00:19:38,250 --> 00:19:39,150 >> Sorry? 404 00:19:39,150 --> 00:19:39,580 >> Znaki. 405 00:19:39,580 --> 00:19:44,760 >> Więc postać, na pewno w przypadku ciągów, a postać jest po prostu 406 00:19:44,760 --> 00:19:46,800 osiem bitów lub jeden bajt. 407 00:19:46,800 --> 00:19:49,550 Więc prawdopodobnie są przynajmniej niejasno znane z tego, że Twój 408 00:19:49,550 --> 00:19:50,500 komputer ma pamięć. 409 00:19:50,500 --> 00:19:52,110 Posiada dwa rodzaje pamięci, co najmniej. 410 00:19:52,110 --> 00:19:54,810 Jednym z nich jest dysk twardy, gdzie można zapisać takie tam na stałe, a to 411 00:19:54,810 --> 00:19:57,400 zazwyczaj duże, więc można mieć filmy i muzyka, i tak dalej. 412 00:19:57,400 --> 00:20:04,010 >> Wtedy masz inny typ pamięci zwany RAM, R-M, Random Access 413 00:20:04,010 --> 00:20:07,510 Pamięć, i jest to typ pamięci , które stosuje się, gdy komputer jest 414 00:20:07,510 --> 00:20:11,520 działa, ale jeśli straci moc lub twój umiera baterii, wszystko, co jest zapisane 415 00:20:11,520 --> 00:20:15,300 w pamięci RAM znika w przypadku utraty zasilania w ogóle, ponieważ nie jest 416 00:20:15,300 --> 00:20:16,060 trwałe. 417 00:20:16,060 --> 00:20:19,120 Zazwyczaj mają te dni, Koncert z nim, dwa koncerty, a może więcej. 418 00:20:19,120 --> 00:20:23,490 I odwrotnie RAM jest to, że wiele dużo, dużo szybciej niż dysk twardy 419 00:20:23,490 --> 00:20:27,390 lub nawet półprzewodnikowe dyski te dni, ale zwykle droższe więc 420 00:20:27,390 --> 00:20:28,480 masz mniej. 421 00:20:28,480 --> 00:20:32,400 >> Tak naprawdę dzisiejsza rozmowa dotyczy do pamięci RAM, to pamięć, 422 00:20:32,400 --> 00:20:35,270 istnieje tylko wtedy, gdy nie ma mocy są wprowadzane do komputera. 423 00:20:35,270 --> 00:20:40,530 Tak więc po wpisaniu w H-E-L-L-O, Enter na klawiatury H będzie w jednym 424 00:20:40,530 --> 00:20:44,550 bajt pamięci RAM, E będzie w kolejny bajt pamięci RAM, jak 425 00:20:44,550 --> 00:20:45,800 Pozostała część słowa. 426 00:20:45,800 --> 00:20:49,010 Tak więc przypomnieć, co byliśmy w stanie zrobić ostatni raz to było. 427 00:20:49,010 --> 00:20:53,940 Pozwólcie mi iść do przodu i otworzyć plik które nazwaliśmy string.c i przypomnieć 428 00:20:53,940 --> 00:20:56,860 że wyglądało to trochę coś takiego. 429 00:20:56,860 --> 00:20:59,860 Pozwól, że rzeczywiście wycofać i zmienić to dokładnie jak to wyglądało, 430 00:20:59,860 --> 00:21:02,654 Długość ciąg s. 431 00:21:02,654 --> 00:21:04,560 >> Więc spójrz na program tutaj. 432 00:21:04,560 --> 00:21:08,530 We obejmują CS50 bibliotekę tak że możemy użyć uzyskać ciąg. 433 00:21:08,530 --> 00:21:11,400 We zawierają standardowe io.h więc możemy użyć printf. 434 00:21:11,400 --> 00:21:13,580 Dlaczego my to string.h? 435 00:21:13,580 --> 00:21:16,980 To był nowy w poniedziałek. 436 00:21:16,980 --> 00:21:18,230 Więc chcieliśmy długość ciągu. 437 00:21:18,230 --> 00:21:19,090 Str leng. 438 00:21:19,090 --> 00:21:21,470 Ludzie postanowili lat temu, niech po prostu być zwięzłe. 439 00:21:21,470 --> 00:21:24,290 Zamiast nazywać to "długość ciągu" nazwijmy to "str leng" i niech 440 00:21:24,290 --> 00:21:28,540 postać świata, który obecnie, i tak to jest co dostajemy dostęp do z string.h. 441 00:21:28,540 --> 00:21:29,390 >> To jest znane. 442 00:21:29,390 --> 00:21:30,320 To jest znane. 443 00:21:30,320 --> 00:21:31,450 To jest znane. 444 00:21:31,450 --> 00:21:32,370 To jest trochę nowych. 445 00:21:32,370 --> 00:21:35,420 W wierszu 22 - i wrócimy do tego, ale teraz wiem - 446 00:21:35,420 --> 00:21:37,880 i może tylko wiedzieć to z konieczności zapoznać się z dokumentacją lub jeśli 447 00:21:37,880 --> 00:21:39,010 wiedziałeś C już - 448 00:21:39,010 --> 00:21:41,510 Czasami można uzyskać ciąg śruba się. 449 00:21:41,510 --> 00:21:45,130 Jeśli użytkownik jest naprawdę kontradyktoryjności lub niechętne do współpracy, a on lub ona po prostu 450 00:21:45,130 --> 00:21:49,450 nie nic pisać na klawiaturze lub typy tak dużo, że na klawiaturze 451 00:21:49,450 --> 00:21:53,760 to przytłacza pamięci komputera, teoretycznie uzyskać ciąg może wrócić 452 00:21:53,760 --> 00:21:56,270 coś innego niż ciąg znaków. 453 00:21:56,270 --> 00:22:01,930 Może zwrócić szczególną nazwie wartości NULL wielkimi literami, N-U-L-L, a to 454 00:22:01,930 --> 00:22:03,390 tylko tak zwana wartość sentinel. 455 00:22:03,390 --> 00:22:08,010 To oznacza, że ​​szczególną wartość coś złego się stało w tym przypadku. 456 00:22:08,010 --> 00:22:10,520 To jest brak napisu. 457 00:22:10,520 --> 00:22:16,190 >> Więc wartość null Jestem sprawdzanie po prostu tak, że Krótko mówiąc, str dł. i 458 00:22:16,190 --> 00:22:20,230 inne funkcje, które pochodzą z C, jeśli oczekują ciąg, ale przekazać je 459 00:22:20,230 --> 00:22:23,630 brak ciągu, jeśli przechodzą im NULL, komputer lub program 460 00:22:23,630 --> 00:22:25,000 po prostu upaść wprost. 461 00:22:25,000 --> 00:22:25,610 Będzie to powiesić. 462 00:22:25,610 --> 00:22:27,250 Będzie rzucać jakiś komunikat o błędzie. 463 00:22:27,250 --> 00:22:28,690 Złe rzeczy się wydarzy. 464 00:22:28,690 --> 00:22:31,130 Dlatego, mimo że jest to nadal nie dobrze zdefiniowane - 465 00:22:31,130 --> 00:22:33,730 będzie to więcej sensu w tygodniu lub dwa - w linii 22, to jest po prostu 466 00:22:33,730 --> 00:22:38,790 Przykładem samodzielnego sprawdzania błędów obronnej tylko w przypadku, raz z 467 00:22:38,790 --> 00:22:42,040 milion coś pójdzie nie tak, na najmniej mój program nie będzie katastrofy. 468 00:22:42,040 --> 00:22:45,960 >> Więc jeśli s nie równa się coś złego, Mam to w pętli, i to było 469 00:22:45,960 --> 00:22:47,710 gdzie mieliśmy, że inne nowy kawałek składni. 470 00:22:47,710 --> 00:22:51,580 Mam dla pętli iteracji od zero, do czasu trwania S. 471 00:22:51,580 --> 00:22:56,140 I to tutaj, byłem drukowania s Uchwyt i, ale dlaczego używam C% wszystkich 472 00:22:56,140 --> 00:23:00,770 Nagle zamiast% s nawet jeśli s jest ciągiem? 473 00:23:00,770 --> 00:23:02,110 To znak, prawda? 474 00:23:02,110 --> 00:23:06,560 S jest ciągiem, ale coś wspornik s, s uchwyt i gdzie jest zero 475 00:23:06,560 --> 00:23:10,380 lub jeden lub dwa, to jednostka znaków w ciągu, a więc dla 476 00:23:10,380 --> 00:23:14,970 że printf musi być poinformowany, że to rzeczywiście postać się spodziewać. 477 00:23:14,970 --> 00:23:18,096 >> A potem przypominam sobie, co to zrobił Program rzeczywiście zrobić? 478 00:23:18,096 --> 00:23:19,848 >> Wydrukowano go w kolumnach. 479 00:23:19,848 --> 00:23:21,120 >> Tak, dokładnie. 480 00:23:21,120 --> 00:23:24,990 To po prostu drukowane słowo, które wpisuję w kolumna, jeden znak w wierszu. 481 00:23:24,990 --> 00:23:26,190 Zobaczmy więc, jeszcze raz. 482 00:23:26,190 --> 00:23:27,810 Tak zrobić łańcuch. 483 00:23:27,810 --> 00:23:30,200 Zestawione OK. . / String. 484 00:23:30,200 --> 00:23:35,560 Pozwól mi wpisać H-E-L-L-O, Enter i naprawdę rozumiem, po jednym w wierszu. 485 00:23:35,560 --> 00:23:37,280 >> Więc pozwól mi zrobić jedną optymalizację tutaj. 486 00:23:37,280 --> 00:23:40,240 Jeśli myślisz o tym, zwłaszcza jeśli już zaprogramowane wcześniej, istnieje 487 00:23:40,240 --> 00:23:43,340 prawdopodobnie nieefektywność w linii 24. 488 00:23:43,340 --> 00:23:46,160 Innymi słowy, to nie koniecznie najlepszy projekt. 489 00:23:46,160 --> 00:23:50,200 Proste, przynajmniej raz Ciebie pamiętam, co str leng jest, ale to 490 00:23:50,200 --> 00:23:52,640 robi coś głupiego potencjalnie. 491 00:23:52,640 --> 00:23:54,863 Co może być tego przyczyna? 492 00:23:54,863 --> 00:23:56,280 >> [Niesłyszalne]. 493 00:23:56,280 --> 00:23:56,800 >> Dokładnie. 494 00:23:56,800 --> 00:24:00,340 To sprawdzanie długości s za każdym razem, chociaż 495 00:24:00,340 --> 00:24:02,980 H-E-L-L-O jest zawsze będzie się pięć znaków. 496 00:24:02,980 --> 00:24:05,490 Za każdym razem, za pośrednictwem tej pętli, pięć nie zmienia. 497 00:24:05,490 --> 00:24:08,750 I może być zwiększany i, ale to, co ma długość s na każdy 498 00:24:08,750 --> 00:24:09,690 iteracji tej pętli? 499 00:24:09,690 --> 00:24:15,810 To jest pięć, to pięć, to pięć, a jeszcze jestem jednak pytaniem, to 500 00:24:15,810 --> 00:24:18,320 pytanie jeszcze raz i jeszcze raz i jeszcze raz. 501 00:24:18,320 --> 00:24:20,750 Teraz szczerze, że komputer jest tak cholernie szybko, nikt nie zauważy 502 00:24:20,750 --> 00:24:23,780 Różnica w tym przypadku, ale tego rodzaju złych decyzji projektowych może 503 00:24:23,780 --> 00:24:28,330 zacząć dodać, jeśli kompilator sam nie stara się rozwiązać ten problem dla Ciebie, które 504 00:24:28,330 --> 00:24:30,630 Zazwyczaj nie będzie w czasie najmniej w urządzenia. 505 00:24:30,630 --> 00:24:31,540 >> Więc mam zamiar to zrobić. 506 00:24:31,540 --> 00:24:34,580 Mam zamiar dodać przecinek po moja pierwsza zmienna, i. 507 00:24:34,580 --> 00:24:37,310 Mam zamiar dać sobie inną zmienna, nazywając go n, tak by 508 00:24:37,310 --> 00:24:41,330 Konwencja numerów, a następnie jestem zamiar przypisać n wartość ciągu 509 00:24:41,330 --> 00:24:42,530 Długość tych. 510 00:24:42,530 --> 00:24:46,060 A potem mam zamiar zmienić mój stan się, co? 511 00:24:46,060 --> 00:24:51,960 Mam zamiar zmienić mój stan się podczas gdy jest mniejsza niż N. 512 00:24:51,960 --> 00:24:55,700 >> Więc teraz, ile razy mam sprawdzenie długości S? 513 00:24:55,700 --> 00:25:00,110 Raz, ale to jest OK, by sprawdzić i. przed n znowu i znowu, bo teraz te 514 00:25:00,110 --> 00:25:03,170 wartości nie są rzeczywiście się zmienia. 515 00:25:03,170 --> 00:25:06,020 Teraz na razie, po prostu wiem, że w każdej chwili wywołania funkcji, jest trochę 516 00:25:06,020 --> 00:25:09,930 nad głową, nie wystarczy, aby zniechęcić naprawdę od zawsze przy użyciu funkcji, ale 517 00:25:09,930 --> 00:25:12,750 pewnością, gdy istnieje linia kodu tak - i linie dostanie 518 00:25:12,750 --> 00:25:15,490 ciekawsze niedługo - gdzie istnieje możliwość, że, jeśli 519 00:25:15,490 --> 00:25:18,320 wpisz ten kod, jak wiele razy będzie wykonywał? 520 00:25:18,320 --> 00:25:20,950 Zaczniesz widzieć w czasie tej wydajność programów może 521 00:25:20,950 --> 00:25:21,660 rzeczywiście zmienić. 522 00:25:21,660 --> 00:25:24,110 >> W rzeczywistości, jeden z problemu ustawia mamy wykonane w poprzednich latach wiąże 523 00:25:24,110 --> 00:25:27,600 realizacji, jak może pamiętacie z tydzień zero, sprawdzania pisowni, ale 524 00:25:27,600 --> 00:25:31,380 sprawdzanie pisowni, który jest zaprojektowany, aby wspierać Słownik 150.000 Plus 525 00:25:31,380 --> 00:25:32,860 Słowa, które dajemy wam. 526 00:25:32,860 --> 00:25:37,100 Trzeba by napisać kod, który ładuje te słowa do pamięci RAM, więc do 527 00:25:37,100 --> 00:25:40,700 pudełka, jak widzieliśmy na ekranie na chwilę temu, a następnie jak najszybciej 528 00:25:40,700 --> 00:25:43,740 można, trzeba być w stanie odpowiedzieć na Kwestia formy, jest to słowo 529 00:25:43,740 --> 00:25:44,280 błędnie? 530 00:25:44,280 --> 00:25:45,420 Czy to słowo błędnie? 531 00:25:45,420 --> 00:25:46,770 Czy to słowo błędnie? 532 00:25:46,770 --> 00:25:49,525 >> A w czymś takim, co mamy wykonane w latach przeszłość włączeniu go, 533 00:25:49,525 --> 00:25:53,500 choć na opt-in dobrowolności, Konkurs rodzaju, przy czym 534 00:25:53,500 --> 00:25:59,470 studentów, którzy używają mniej pamięci RAM i mniej czas, mniej cykli procesora, w końcu 535 00:25:59,470 --> 00:26:02,640 pęcherzyków do góry trochę liderów i ranking, który kładziemy na 536 00:26:02,640 --> 00:26:04,770 Kurs jest strona główna, jak mamy wykonane w latach poprzednich. 537 00:26:04,770 --> 00:26:08,100 Więc znowu, całkowicie opcjonalny, ale to przemawia do możliwości projektowych 538 00:26:08,100 --> 00:26:11,250 , które są przed nami raz zaczniemy budowanie szczycie niektóre z nich 539 00:26:11,250 --> 00:26:14,010 podstawowe cegiełki. 540 00:26:14,010 --> 00:26:16,780 >> Więc pozwól mi wrócić do tego schematu dla tylko chwila i ujawniają niewiele 541 00:26:16,780 --> 00:26:17,610 coś więcej. 542 00:26:17,610 --> 00:26:21,400 To rzeczywiście jest łańcuch, i podjęliśmy Zaletą kilku bibliotekach 543 00:26:21,400 --> 00:26:25,150 średnia io.h który ma - 544 00:26:25,150 --> 00:26:26,110 >> Printf. 545 00:26:26,110 --> 00:26:27,860 >> Printf, między innymi. 546 00:26:27,860 --> 00:26:31,540 cs50.h, które dostać int i uzyskać ciąg i tak dalej, string.h, które 547 00:26:31,540 --> 00:26:32,570 miał str Leng. 548 00:26:32,570 --> 00:26:34,800 Ale okazuje się, że jest jeszcze inny. 549 00:26:34,800 --> 00:26:38,540 Szczerze mówiąc, jest tam wiele, wiele nagłówka pliki, które deklarują funkcji 550 00:26:38,540 --> 00:26:43,320 dla bibliotek, ale ctype.h jest faktycznie będzie nieco 551 00:26:43,320 --> 00:26:46,900 korzystne, ponieważ mam zamiar iść do przodu i realizować jeden 552 00:26:46,900 --> 00:26:48,120 inny program tutaj. 553 00:26:48,120 --> 00:26:52,420 >> Pozwólcie mi iść do przodu i otworzyć coś Pisałem wcześniej o nazwie 554 00:26:52,420 --> 00:26:55,750 capitalize.c i rzućmy Zobacz, jak to działa. 555 00:26:55,750 --> 00:27:00,340 Zauważ, że używam, w tej wersji z niego, trzy znajome plików. 556 00:27:00,340 --> 00:27:04,110 Zauważ, że w linii 18, jestem coraz linię tekstu. 557 00:27:04,110 --> 00:27:07,660 Wskazówki w linii 21, twierdząc, że jestem Poniższy kod będzie 558 00:27:07,660 --> 00:27:12,170 wykorzystać s, co użytkownik wpisze , i jak mam robić? 559 00:27:12,170 --> 00:27:13,300 Cóż, zabieram - 560 00:27:13,300 --> 00:27:14,750 lekcja z ostatniej chwili - 561 00:27:14,750 --> 00:27:18,370 Jestem deklarowania i i n i iteracji ciągu znaków w ciągu. 562 00:27:18,370 --> 00:27:22,720 A potem to, co jest ten blok Kod w linii 24 przez 27 563 00:27:22,720 --> 00:27:24,550 robi w laika? 564 00:27:24,550 --> 00:27:27,766 565 00:27:27,766 --> 00:27:29,730 >> Mała litera powrotem. 566 00:27:29,730 --> 00:27:30,430 >> Dokładnie. 567 00:27:30,430 --> 00:27:35,920 Jeśli s uchwyt i - jeśli to i- charakter S, która jest specyficzna 568 00:27:35,920 --> 00:27:40,220 char w ciąg, jest większa niż lub równa małe i - 569 00:27:40,220 --> 00:27:42,670 Przypomnijmy, że podwójne ampersanda oznacza i - 570 00:27:42,670 --> 00:27:46,810 i ten sam znak, s uchwyt i jest mniejsza lub równa małe litery Z, 571 00:27:46,810 --> 00:27:50,600 to oznacza, że ​​to b lub lub c lub dot, dot, dot, lub z, co oznacza, 572 00:27:50,600 --> 00:27:51,340 to jest małe. 573 00:27:51,340 --> 00:27:52,900 Co chcę zrobić w tym przypadku? 574 00:27:52,900 --> 00:27:55,010 Cóż, można to zrobić nieco tajemniczo, ale 575 00:27:55,010 --> 00:27:56,160 niech dokuczać to apart. 576 00:27:56,160 --> 00:28:00,210 >> Mam zamiar zadzwonić do printf, drukuje% c bo chcę wydrukować to 577 00:28:00,210 --> 00:28:01,580 znaków na ekranie. 578 00:28:01,580 --> 00:28:06,650 Jestem wtedy zajmie s wspornika Ja, i-ty znak w S, a następnie, dlaczego 579 00:28:06,650 --> 00:28:12,330 ja robię tę sztuczkę tutaj, małe minusa kapitałem? 580 00:28:12,330 --> 00:28:16,352 Co to jest, że da mnie, mówiąc ogólnie? 581 00:28:16,352 --> 00:28:18,600 >> [Niesłyszalne]. 582 00:28:18,600 --> 00:28:19,390 >> Dokładnie. 583 00:28:19,390 --> 00:28:20,860 Naprawdę nie pamiętam - 584 00:28:20,860 --> 00:28:24,390 to było 65 dla kapitału A. I naprawdę nie pamiętam, co małe jest, 585 00:28:24,390 --> 00:28:25,540 ale nie ważne. 586 00:28:25,540 --> 00:28:26,580 Komputer wie. 587 00:28:26,580 --> 00:28:30,380 Więc mówiąc, małe minusa kapitału, to dziwne być 588 00:28:30,380 --> 00:28:33,530 odjęcie jednego char od drugiego, ale jakie są znaki, pod maską? 589 00:28:33,530 --> 00:28:34,520 Są tylko numery. 590 00:28:34,520 --> 00:28:36,980 Tak więc bez względu na te numery są, niech komputer pamięta go 591 00:28:36,980 --> 00:28:38,240 zamiast mnie człowiek. 592 00:28:38,240 --> 00:28:41,710 >> Tak małe ujemny kapitał jest da mi różnicy. 593 00:28:41,710 --> 00:28:45,370 Zdarza się, 32, i które byłyby w przypadku małych liter b i kapitału B 594 00:28:45,370 --> 00:28:45,930 i tak dalej. 595 00:28:45,930 --> 00:28:47,710 To pozostaje spójna, na szczęście. 596 00:28:47,710 --> 00:28:51,930 Więc jestem w zasadzie mówiąc, wziąć litery, które należy odjąć od 597 00:28:51,930 --> 00:28:55,340 średnia różnica, a i skutecznie zmienia s uchwyt z 598 00:28:55,340 --> 00:28:59,400 małe litery, oczywiście, wielkie litery, bez my naprawdę konieczności myślenia 599 00:28:59,400 --> 00:29:03,040 o czy pamiętać, jakie były te numery Rozmawialiśmy o po osiem 600 00:29:03,040 --> 00:29:04,800 wolontariusze wpadł na scenę? 601 00:29:04,800 --> 00:29:08,800 Teraz Tymczasem, w innym, jeśli nie jest małe litery, jak określono 602 00:29:08,800 --> 00:29:10,400 przez linię 24, po prostu go wydrukować. 603 00:29:10,400 --> 00:29:12,590 Chcę tylko dotknąć znaków, które były 604 00:29:12,590 --> 00:29:14,410 faktycznie początkowo małe. 605 00:29:14,410 --> 00:29:15,150 >> Zobaczmy więc, ta. 606 00:29:15,150 --> 00:29:17,400 Należy wykorzystać. 607 00:29:17,400 --> 00:29:18,470 Zestawione, OK. 608 00:29:18,470 --> 00:29:19,730 . / Wykorzystać. 609 00:29:19,730 --> 00:29:23,530 I pozwól mi wpisać H-E-L-L-O małymi literami, Enter. 610 00:29:23,530 --> 00:29:26,370 I zauważyć, że to jest konwertowany pod wielkimi literami. 611 00:29:26,370 --> 00:29:27,940 Pozwól mi zrobić to ponownie inny wyraz. 612 00:29:27,940 --> 00:29:32,720 Jak o D-A-V-I-D z pierwszym D kapitalizowane jako nazwa jest zazwyczaj? 613 00:29:32,720 --> 00:29:33,560 Wprowadź. 614 00:29:33,560 --> 00:29:34,870 Zauważ, że to nadal poprawne. 615 00:29:34,870 --> 00:29:40,250 To po prostu wyprowadzane że najpierw D bez zmian poprzez które jeszcze budowy. 616 00:29:40,250 --> 00:29:42,170 >> Tak więc należy pamiętać, a następnie, Kilka rzeczy tutaj. 617 00:29:42,170 --> 00:29:45,060 One, jeśli kiedykolwiek chcesz sprawdzić dwa warunki na raz, można i ich 618 00:29:45,060 --> 00:29:46,500 razem, jak przewidywaliśmy. 619 00:29:46,500 --> 00:29:49,900 Możesz porównać znaki w ten sposób i znaków, jak skutecznie leczyć 620 00:29:49,900 --> 00:29:53,050 numery, ale szczerze mówiąc, to jest tak cholernie tajemnicze Nigdy nie będę pamiętać 621 00:29:53,050 --> 00:29:56,510 jak wymyślić to od podstaw bez uzasadnienia przez to na dość 622 00:29:56,510 --> 00:29:57,140 trochę czasu. 623 00:29:57,140 --> 00:30:00,590 >> Czy nie byłoby miło, gdyby ktoś tam napisał funkcję o nazwie jest 624 00:30:00,590 --> 00:30:05,390 obniżenia, które mogą odpowiedzieć na mnie prawdziwą lub false, ta postać jest małe? 625 00:30:05,390 --> 00:30:09,350 No na szczęście, kto napisał ctype.h zrobił dokładnie to. 626 00:30:09,350 --> 00:30:15,540 Puść mnie tutaj i dodawać ctype dla c rodzaje, a teraz pozwól mi zejść tutaj i 627 00:30:15,540 --> 00:30:18,820 przepisać ten wiersz w następujący sposób. 628 00:30:18,820 --> 00:30:27,510 >> Więc jeśli to się nazywa jest niższa, I twierdzą, s Uchwyt i, następnie idę do usunięcia 629 00:30:27,510 --> 00:30:29,400 te dwie linie w ogóle. 630 00:30:29,400 --> 00:30:32,570 Więc teraz ktoś inny, mam nadzieję, napisał wywoływana funkcja jest niższa, i to 631 00:30:32,570 --> 00:30:36,250 Okazuje się, że nie i że zadeklarowane to wewnątrz ctype.h. 632 00:30:36,250 --> 00:30:39,480 A teraz mam zamiar opuścić linię 27 sam mam zamiar opuścić linię 31 633 00:30:39,480 --> 00:30:41,890 sam, ale zauważ, jak wiele mam zaostrzyło mój kod. 634 00:30:41,890 --> 00:30:42,690 To teraz czystsze. 635 00:30:42,690 --> 00:30:47,250 To mniej trudne do przeglądania bo teraz funkcję, ponadto jest 636 00:30:47,250 --> 00:30:50,080 tak pięknie nazwał ją po prostu robi to, co mówi. 637 00:30:50,080 --> 00:30:51,520 >> Więc teraz mam zamiar zapisać to. 638 00:30:51,520 --> 00:30:52,930 Idę, aby pomniejszyć. 639 00:30:52,930 --> 00:30:56,650 I tak jak w Scratch można mieć Boolean, wartość logiczną true lub 640 00:30:56,650 --> 00:31:01,530 fałszywe, to jest dokładnie to, co jest niższe skutecznie zyski. 641 00:31:01,530 --> 00:31:02,960 Pozwól mi skompilować. 642 00:31:02,960 --> 00:31:04,500 Pozwól, że re-run. 643 00:31:04,500 --> 00:31:07,350 A teraz spróbujmy to jeszcze raz, H-E-L-P-O, Enter. 644 00:31:07,350 --> 00:31:07,970 To jest bardzo dobre. 645 00:31:07,970 --> 00:31:10,150 I spróbuj jeszcze raz, upewnij się, że nie nakręcić coś. 646 00:31:10,150 --> 00:31:11,670 To jest aktywowane jako dobrze. 647 00:31:11,670 --> 00:31:14,190 >> Ale to nie jest wystarczająco dobre, ponieważ Inna sprawa, że ​​ja nigdy nie będę 648 00:31:14,190 --> 00:31:19,090 pamiętam, chyba że działa przez to bardzo ostrożnie na, powiedzmy, papier jest 649 00:31:19,090 --> 00:31:19,920 to cholernie linii. 650 00:31:19,920 --> 00:31:23,450 Czy nie byłoby miło, gdyby nie było Funkcja nazywa się górna? 651 00:31:23,450 --> 00:31:26,930 Okazuje się, że jest w ctype.h również. 652 00:31:26,930 --> 00:31:30,150 Mam zamiar iść do przodu i wpisz - 653 00:31:30,150 --> 00:31:31,340 pozwól mi przynieść tę linię z powrotem. 654 00:31:31,340 --> 00:31:36,430 Zamiast tego tutaj, pozwól mi iść do przodu i powiedzieć, zastępować w% c 655 00:31:36,430 --> 00:31:42,110 Wynik wywołanie tej funkcji Górna na i-tym znaku s. 656 00:31:42,110 --> 00:31:45,430 A teraz zauważyć, że coraz mało zrównoważony. 657 00:31:45,430 --> 00:31:48,870 Muszę śledzić, ile nawiasy mam otwarte i zamknięte. 658 00:31:48,870 --> 00:31:50,050 >> Więc teraz to nawet sprzątaczka. 659 00:31:50,050 --> 00:31:53,460 Teraz ten program jest coraz lepiej i lepiej zaprojektowane prawdopodobnie dlatego, że jest 660 00:31:53,460 --> 00:31:56,450 dużo, dużo bardziej czytelny, ale to no niech poprawić. 661 00:31:56,450 --> 00:31:57,600 Należy wykorzystać. 662 00:31:57,600 --> 00:31:58,930 . / Wykorzystać. 663 00:31:58,930 --> 00:32:03,220 H-E-L-L-O. Przyjrzyjmy się jeszcze raz, D--V-I-D. OK, więc nadal jesteśmy w 664 00:32:03,220 --> 00:32:04,250 pretty good shape. 665 00:32:04,250 --> 00:32:06,030 >> Ale teraz do górnej. 666 00:32:06,030 --> 00:32:09,720 Proponuję jeszcze jedna wyrafinowanie mogliśmy zrobić, że będzie 667 00:32:09,720 --> 00:32:12,820 bardzo ładne, że naprawdę może dokręcić do tego kodu i naprawdę dają nam pięć 668 00:32:12,820 --> 00:32:15,150 z pięciu do projektowania, na przykład. 669 00:32:15,150 --> 00:32:16,510 Co byłoby miło, aby pozbyć? 670 00:32:16,510 --> 00:32:20,770 Cóż, wygląda jak cholernie długi ten blok kod jest po prostu zrobić coś prostego. 671 00:32:20,770 --> 00:32:23,850 >> Teraz, jak na bok, jak można mieć zobaczyć w sekcji to obok super- 672 00:32:23,850 --> 00:32:27,570 weekend, nie jest ściśle konieczne nawiasy klamrowe, gdy tylko jedno 673 00:32:27,570 --> 00:32:32,180 linii kodu, mimo że proponowany trzymając je tak, że to sprawia, że ​​wiele 674 00:32:32,180 --> 00:32:36,190 bardziej jasne, jak w Scratch w kształcie litery U bloków, co jest w środku oddziału. 675 00:32:36,190 --> 00:32:40,170 Ale czy nie byłoby miło, gdyby do górnej, gdy z uwagi na jego wejście, zwrócił się do 676 00:32:40,170 --> 00:32:44,730 wielkie, jeśli nie jest, i co być wspaniałe w przeciwnym przypadku, jeśli 677 00:32:44,730 --> 00:32:47,210 to już wielkie litery? 678 00:32:47,210 --> 00:32:49,620 Wystarczy przekazać je poprzez i zostawić ją w spokoju. 679 00:32:49,620 --> 00:32:50,660 >> Więc może to nie robi. 680 00:32:50,660 --> 00:32:52,990 Mógłbym spróbować i po prostu nadzieję, że to, że nie, ale niech mnie 681 00:32:52,990 --> 00:32:54,450 wprowadzić jedną rzecz. 682 00:32:54,450 --> 00:32:57,440 Zamiast korzystania z wbudowanego terminala okno w dół tutaj przypomnieć, że 683 00:32:57,440 --> 00:33:01,130 ta ikona kwadratu black daje większe okno terminala, że ​​mogę pełna 684 00:33:01,130 --> 00:33:02,260 ekranie, jeśli chcę? 685 00:33:02,260 --> 00:33:05,820 Tak więc okazuje się, że są jakby dziwnie nazwany, ale nie te rzeczy nazywane 686 00:33:05,820 --> 00:33:10,970 strony man, strony podręcznika, w skrócie, mężczyzna i mogę do nich dostęp 687 00:33:10,970 --> 00:33:14,515 Człowiek wpisując - 688 00:33:14,515 --> 00:33:15,570 co chcę wpisać? 689 00:33:15,570 --> 00:33:17,830 Człowiek do cholewki. 690 00:33:17,830 --> 00:33:21,090 >> A teraz uwaga, jeśli istnieje funkcjonować wewnątrz komputera, w 691 00:33:21,090 --> 00:33:23,970 W tym przypadku urządzenie, które jest po prostu system operacyjny Linux, to będzie 692 00:33:23,970 --> 00:33:27,920 dać mi trochę tajemnicze zestaw wyjście, ale przekonasz się, że na czas 693 00:33:27,920 --> 00:33:31,720 to zawsze jest sformatowany prawie same więc zacząć się do tego przyzwyczaić. 694 00:33:31,720 --> 00:33:35,130 Wskazówka na górze do górnej i podobno jest taka sama dokumentacja 695 00:33:35,130 --> 00:33:35,680 dla obniżenia. 696 00:33:35,680 --> 00:33:38,740 Kto napisał to było cięcie niektórych narożniki i umieścić to wszystko na jednej stronie. 697 00:33:38,740 --> 00:33:40,720 Celem tych rzeczy "w życie jest do konwersji 698 00:33:40,720 --> 00:33:42,780 List do wielkości liter. 699 00:33:42,780 --> 00:33:46,290 >> Zauważ, że w Synopsis, strona man uczy mnie, co plik mam 700 00:33:46,290 --> 00:33:48,130 zawierać używać tej rzeczy. 701 00:33:48,130 --> 00:33:51,320 To daje mi podpisy dla nich funkcje, obie z nich, nawet 702 00:33:51,320 --> 00:33:53,510 choć teraz tylko dbają o jednym. 703 00:33:53,510 --> 00:33:54,730 Oto teraz opis. 704 00:33:54,730 --> 00:33:58,800 Do górnej przekształca nas c na wielkie litery, jeśli to możliwe. 705 00:33:58,800 --> 00:34:02,280 >> Jeszcze nie tak pouczające, ale niech mi teraz poszukaj w wartości zwracanej, rzeczy 706 00:34:02,280 --> 00:34:03,520 , które jest zwracane. 707 00:34:03,520 --> 00:34:08,600 Więc wróciliśmy jest to wartość zamienione litery lub c, jeśli 708 00:34:08,600 --> 00:34:09,870 przekształcenie nie jest możliwe. 709 00:34:09,870 --> 00:34:11,202 Co to jest c? 710 00:34:11,202 --> 00:34:12,560 >> Oryginalny charakter. 711 00:34:12,560 --> 00:34:15,370 >> Oryginalny charakter i wiemy że znów będzie do 712 00:34:15,370 --> 00:34:19,179 streszczenie, a kto to napisał funkcja po prostu uznał, że wejście 713 00:34:19,179 --> 00:34:22,909 się do górnej i dolnej jest tylko arbitralnie się nazywać c. 714 00:34:22,909 --> 00:34:24,909 Mogli nazwał go najbardziej wszystko chcą, ale ciągle go 715 00:34:24,909 --> 00:34:26,270 proste jak w.. 716 00:34:26,270 --> 00:34:27,880 Tak już konsultowany na stronie man. 717 00:34:27,880 --> 00:34:31,870 To zdanie przekonuje mnie, że jeśli to nie jest mała litera, to 718 00:34:31,870 --> 00:34:34,969 będzie po prostu oddaj mi c, która jest perfect, które oznacza, że ​​mogę pozbyć się 719 00:34:34,969 --> 00:34:36,199 mój inny warunek. 720 00:34:36,199 --> 00:34:39,679 >> Więc pozwól mi wrócić do gedit i teraz pozwól mi to zrobić. 721 00:34:39,679 --> 00:34:41,960 Mam zamiar skopiować mój printf. 722 00:34:41,960 --> 00:34:45,969 Mam zamiar iść do przodu i prawo wewnątrz do druku pętli, że obecnie, a otrzymasz 723 00:34:45,969 --> 00:34:48,760 pozbyć się tego całego jeśli konstrukt. 724 00:34:48,760 --> 00:34:51,860 Czy nie jest to zły pomysł, i to było bardzo bardzo poprawne i zgodne z 725 00:34:51,860 --> 00:34:54,100 Wszystko, co głosił, ale nie tylko jest to konieczne. 726 00:34:54,100 --> 00:34:57,070 Jak najszybciej zrealizować niektóre biblioteki funkcja istnieje, że ktoś inny 727 00:34:57,070 --> 00:35:01,340 napisał, czy może w innym miejscu napisał plik, można go używać i bardzo 728 00:35:01,340 --> 00:35:02,690 początku do zaostrzenia kod. 729 00:35:02,690 --> 00:35:06,080 >> I kiedy mówię takie rzeczy jak dobrym stylu, Fakt, że ta osoba nazwie 730 00:35:06,080 --> 00:35:11,490 funkcjonować do górnej lub wcześniej jest niższy jest cudownie przydatne, ponieważ 731 00:35:11,490 --> 00:35:12,900 są bardzo opisowe. 732 00:35:12,900 --> 00:35:16,120 Nie chcesz, aby zadzwonić do funkcji x i y, z, które mają 733 00:35:16,120 --> 00:35:19,620 dużo, dużo mniej sens. 734 00:35:19,620 --> 00:35:25,160 Wszelkie pytania na temat tej serii usprawnień? 735 00:35:25,160 --> 00:35:28,010 >> Więc wystarczy powiedzieć, jednego z dania na wynos jest nawet własnego problemu 736 00:35:28,010 --> 00:35:30,960 set - może set problemem jeden, ale pewnością P zestaw dwóch i dalej, nawet 737 00:35:30,960 --> 00:35:34,380 kiedy są poprawne niekoniecznie oznacza, że ​​są idealne tylko 738 00:35:34,380 --> 00:35:36,155 jeszcze ani szczególnie dobrze zaprojektowane. 739 00:35:36,155 --> 00:35:38,420 Które znajduje się w drugiej osi zacząć myśleć o tym. 740 00:35:38,420 --> 00:35:41,730 Więc to było w środku napis z Twoich pamięci komputera, ale jeśli masz 741 00:35:41,730 --> 00:35:46,180 cała masa znaków jak H-E-L-L-O wewnątrz pamięci RAM, i załóżmy 742 00:35:46,180 --> 00:35:51,330 że w swoim programie wywołać uzyskać ciąg wiele razy tak, że 743 00:35:51,330 --> 00:35:54,200 zadzwoń uzyskać ciąg raz, to zadzwoń uzyskać ciąg ponownie. 744 00:35:54,200 --> 00:35:55,880 Cóż, co się stało się w czasie? 745 00:35:55,880 --> 00:35:59,170 >> Innymi słowy, jeśli masz linię Kod, choć z kontekstu, jak 746 00:35:59,170 --> 00:36:02,120 string s dostaje - 747 00:36:02,120 --> 00:36:02,960 zróbmy to. 748 00:36:02,960 --> 00:36:05,270 String name równa uzyskać ciąg. 749 00:36:05,270 --> 00:36:08,590 Więc załóżmy, że linia kodu jest przeznaczona poprosić użytkownika o jego nazwisko. 750 00:36:08,590 --> 00:36:14,580 To następna linia kodu ma zapytać łatwy do jej szkoły i 751 00:36:14,580 --> 00:36:15,920 to następna linia, i tak dalej. 752 00:36:15,920 --> 00:36:18,150 Załóżmy, że mamy prosić użytkownika do drugiego i 753 00:36:18,150 --> 00:36:19,750 inny, a drugi ciąg. 754 00:36:19,750 --> 00:36:22,390 Zamierzają zatrzymać w pamięci w tym samym czasie. 755 00:36:22,390 --> 00:36:24,280 Nie ma clobber inne. 756 00:36:24,280 --> 00:36:26,420 Szkoła nie jest zastąpienie innych. 757 00:36:26,420 --> 00:36:28,520 Ale gdzie oni wszyscy kończy się w pamięci? 758 00:36:28,520 --> 00:36:32,030 >> Cóż, jeśli zaczniemy rysować na ekranie, które możemy wykorzystać tę rzecz 759 00:36:32,030 --> 00:36:35,800 tu jak tablicy, jeśli ten czarny prostokąt reprezentuje komputer-tych 760 00:36:35,800 --> 00:36:39,800 pamięci, mam zamiar arbitralnie zacząć dzieląc je na małe kwadraty, 761 00:36:39,800 --> 00:36:42,120 z których każdy reprezentuje jeden bajt pamięci. 762 00:36:42,120 --> 00:36:46,560 Szczerze mówiąc, jeśli masz gigabajt pamięci RAM te dni, masz miliard bajtów 763 00:36:46,560 --> 00:36:49,540 pamięci w komputerze, więc mld z tych kwadratów. 764 00:36:49,540 --> 00:36:52,110 Więc wystarczy powiedzieć, to naprawdę nie jest w skali. 765 00:36:52,110 --> 00:36:58,250 >> Ale możemy zachować rysunek wszystkie te wyraźnie nie w skali kwadratów, a to 766 00:36:58,250 --> 00:37:01,260 łącznie stanowi mojej pamięci komputera. 767 00:37:01,260 --> 00:37:03,136 Teraz tylko zrobię kropka, kropka, kropka. 768 00:37:03,136 --> 00:37:06,260 Więc innymi słowy, kiedy wyświetlał Użytkownik z get ciąg dać mi 769 00:37:06,260 --> 00:37:07,350 łańcuch, co się dzieje? 770 00:37:07,350 --> 00:37:14,270 Jeśli użytkownik wpisze w "hello", który kończy w H-E-L-L-O. Załóżmy jednak, że 771 00:37:14,270 --> 00:37:15,720 Następnie użytkownik typy w - 772 00:37:15,720 --> 00:37:17,250 Właściwie to nie powinienem tego robić witam, ponieważ pytamy 773 00:37:17,250 --> 00:37:18,330 za ich nazw. 774 00:37:18,330 --> 00:37:20,580 Więc wróćmy, czy mogę to zrobić. 775 00:37:20,580 --> 00:37:26,130 >> Więc jeśli typ w D-A-V-I-D dla mojego imienia, ale przypominam, że druga linia 776 00:37:26,130 --> 00:37:29,220 Kod został uzyskać ciąg ponownie aby ich szkoły. 777 00:37:29,220 --> 00:37:32,090 Gdzie to jest słowo, które użytkownik typy w zamiar iść dalej? 778 00:37:32,090 --> 00:37:38,290 Cóż, może to się udać do H-A-R-V-A-R-D. Dlatego, mimo że mam 779 00:37:38,290 --> 00:37:41,560 wyciągnąć go w dwóch rzędach, to tylko cała masa bajtów w pliku 780 00:37:41,560 --> 00:37:42,710 pamięci RAM komputera. 781 00:37:42,710 --> 00:37:46,560 Nie ma teraz problem, bo teraz, czy jestem przy użyciu pamięci RAM w tym bardzo rozsądne 782 00:37:46,560 --> 00:37:49,910 ale jakby naiwny sposób, co można najwyraźniej nie rozróżnia? 783 00:37:49,910 --> 00:37:52,640 784 00:37:52,640 --> 00:37:54,680 W przypadku, gdy jeden zaczyna się i gdzie jedno kończy, prawda? 785 00:37:54,680 --> 00:37:55,860 Są swego rodzaju rozmycia razem. 786 00:37:55,860 --> 00:37:57,920 >> Tak więc okazuje się, że komputer nie to zrobić. 787 00:37:57,920 --> 00:38:04,720 Pozwól mi faktycznie przewijania do tyłu w czasie o Kilka znaków, a zamiast Harvardzie 788 00:38:04,720 --> 00:38:09,570 będzie bezpośrednio po nazwie użytkownika, użytkownik w rzeczywistości pobiera, za 789 00:38:09,570 --> 00:38:12,000 sceny, znak specjalny dodany przez 790 00:38:12,000 --> 00:38:13,885 komputer dla niego. 791 00:38:13,885 --> 00:38:19,470 / 0, inaczej znany jako NUL irytująco nazwie N-U-L, nie 792 00:38:19,470 --> 00:38:22,190 N-U-L-L, ale piszę to jak / 0. 793 00:38:22,190 --> 00:38:27,130 To jest po prostu wszystkie bity zerowe jest marker w między pierwszym słowem, które użytkownik-tych 794 00:38:27,130 --> 00:38:28,290 wpisane i sekundy. 795 00:38:28,290 --> 00:38:33,020 >> Więc Harvard rzeczywiście teraz kończy się w tej kolejności znaków 796 00:38:33,020 --> 00:38:36,110 i jeszcze jedno / 0. 797 00:38:36,110 --> 00:38:41,690 Tak więc, innymi słowy, poprzez te Wartości wskaźnikowe, osiem sąsiadujących zera 798 00:38:41,690 --> 00:38:45,220 bity, możesz teraz zacząć rozróżniać jeden znak od drugiego. 799 00:38:45,220 --> 00:38:49,720 Więc cały ten czas, co było "cześć" jest faktycznie "hello" z / 0, a 800 00:38:49,720 --> 00:38:53,580 tymczasem, że może bardzo dobrze być trochę więcej RAM 801 00:38:53,580 --> 00:38:56,400 wewnątrz komputera. 802 00:38:56,400 --> 00:38:57,810 >> Pozwól mi zrobić jedną rzecz teraz. 803 00:38:57,810 --> 00:39:01,800 Okazuje się, że wszystkie z tych kwadratów byliśmy rysunku, są one, tak, 804 00:39:01,800 --> 00:39:06,140 struny, ale bardziej ogólnie, te rzeczy są tablice. 805 00:39:06,140 --> 00:39:10,590 Tablica jest po prostu kawałek pamięci to z powrotem do tyłu, aby z powrotem do tyłu, 806 00:39:10,590 --> 00:39:15,130 i zazwyczaj używać tablicy w drodze tego zapisu kwadratowego uchwytu. 807 00:39:15,130 --> 00:39:18,210 Więc idziemy zobaczyć te trochę w czasie, ale pozwól mi iść do przodu i 808 00:39:18,210 --> 00:39:21,160 otworzyć się, nazwijmy to grupy wiekowe. 809 00:39:21,160 --> 00:39:23,920 I zauważyć, co możemy zrobić z te same sztuczki, małe 810 00:39:23,920 --> 00:39:25,750 nieco bardziej składnia tutaj. 811 00:39:25,750 --> 00:39:29,270 >> Tak więc w wierszu 17 tego programu - faktycznie, pozwól mi najpierw uruchomić program 812 00:39:29,270 --> 00:39:30,770 , dzięki czemu możemy zobaczyć, co to coś robi. 813 00:39:30,770 --> 00:39:33,530 Zadzwonię zrobić wieki skompilować program. 814 00:39:33,530 --> 00:39:34,950 . Wieku /. 815 00:39:34,950 --> 00:39:36,480 Ile osób w pokoju? 816 00:39:36,480 --> 00:39:38,020 Nazwijmy to trzy. 817 00:39:38,020 --> 00:39:39,575 Wiek pierwszej osoby? 818 00:39:39,575 --> 00:39:42,710 18, 19 i 20. 819 00:39:42,710 --> 00:39:46,770 A teraz trochę śmiesznie, po prostu dokonały program że epoki te 820 00:39:46,770 --> 00:39:47,740 trzy osoby. 821 00:39:47,740 --> 00:39:50,390 >> Więc jest wyraźnie okazja dla zabawy arytmetyki tutaj. 822 00:39:50,390 --> 00:39:51,560 Na szczęście, matematyka jest prawidłowe. 823 00:39:51,560 --> 00:39:54,720 18 udał się do 19, 19 poszedł do 20 i tak dalej. 824 00:39:54,720 --> 00:39:58,510 Ale co tak naprawdę znaczy być ilustracyjny o to, jak jesteśmy przechowywania 825 00:39:58,510 --> 00:40:00,190 wieku tych trzech ludzi. 826 00:40:00,190 --> 00:40:02,370 Pozwól mi przybliżyć, co jest tu dzieje. 827 00:40:02,370 --> 00:40:06,240 >> Więc po pierwsze, te pierwsze kilka linii powinna być coraz całkiem znajomo. 828 00:40:06,240 --> 00:40:08,770 Jestem po prostu pyta użytkownika o liczba osób w pokoju. 829 00:40:08,770 --> 00:40:11,490 Następnie używam uzyskać int i zrobić, gdy do zrobić to znowu i znowu i znowu. 830 00:40:11,490 --> 00:40:15,780 Widzieliśmy, że wzór wcześniej, ale Linia 27 jest nowy i całkiem 831 00:40:15,780 --> 00:40:18,160 przydatne i będzie coraz bardziej przydatne. 832 00:40:18,160 --> 00:40:21,620 Zauważ, że co innego w linii 27 jest to, że wydaje się być stwierdzenie 833 00:40:21,620 --> 00:40:23,960 int o nazwie wiek, ale czekać. 834 00:40:23,960 --> 00:40:27,140 To nie tylko int wieku. 835 00:40:27,140 --> 00:40:30,130 Jest te nawiasy kwadratowe, wewnątrz, który jest N. 836 00:40:30,130 --> 00:40:35,150 >> Tak więc wspornik N w tym kontekście, nie wewnątrz printf tutaj, ale 837 00:40:35,150 --> 00:40:44,370 w tym wyłącznie linii 27, ta linia jest mówiąc: daj mi n wskazówki, z których każda 838 00:40:44,370 --> 00:40:46,080 jest typu int. 839 00:40:46,080 --> 00:40:49,870 Więc to jest wiadro, by tak rzec, z, W tym przypadku, trzy liczby całkowite z powrotem do 840 00:40:49,870 --> 00:40:52,770 z powrotem do tyłu, tak, że skutecznie mają trzy zmienne. 841 00:40:52,770 --> 00:40:54,890 Alternatywą, jest jasne, byłoby to. 842 00:40:54,890 --> 00:40:57,400 >> Gdybym chciał najpierw studenta wiek, może to zrobić. 843 00:40:57,400 --> 00:40:59,520 Gdybym chciał sekund studenta wiek może to zrobić. 844 00:40:59,520 --> 00:41:01,860 Gdybym chciał trzecia studenta wiek, może to zrobić. 845 00:41:01,860 --> 00:41:04,320 I broń Boże musimy wszyscy są wiek w tym pokoju - 846 00:41:04,320 --> 00:41:07,670 To znaczy, jest to kawał egzemplarza, wklej jeszcze raz i jeszcze raz i jeszcze raz. 847 00:41:07,670 --> 00:41:10,870 A Plus raz skompilować ten program, czy inny student wchodzi na out 848 00:41:10,870 --> 00:41:14,200 z tych drzwi, teraz mój numer zmiennych jest nieprawidłowy. 849 00:41:14,200 --> 00:41:17,450 >> Więc co jest ładne o tablicy jest tylko zaczniesz czuć się 850 00:41:17,450 --> 00:41:20,190 kopiowanie i wklejanie, kursy są to nie jest najlepszym rozwiązaniem. 851 00:41:20,190 --> 00:41:22,240 Tablica jest dynamiczny potencjalnie. 852 00:41:22,240 --> 00:41:24,610 Nie wiem z góry, ile osób będą w pokoju, 853 00:41:24,610 --> 00:41:28,670 ale wiem, że muszę na północ od nich, i będę dowiedzieć się, n, gdy nadejdzie czas. 854 00:41:28,670 --> 00:41:35,500 Ten wiersz kodu oznacza teraz, daj mi fragment pamięci, który wygląda tak 855 00:41:35,500 --> 00:41:40,380 w którym liczba skrzynek na ekranie jest całkowicie zależne od n, że 856 00:41:40,380 --> 00:41:42,010 użytkownik wpisze w. 857 00:41:42,010 --> 00:41:44,850 >> Więc teraz reszta tego programu jest rzeczywiście bardzo podobny do tego, co 858 00:41:44,850 --> 00:41:46,860 po prostu nie z postaciami. 859 00:41:46,860 --> 00:41:49,970 Zauważ, mam dla pętli począwszy od linii 30. 860 00:41:49,970 --> 00:41:54,920 Więc zaraz po mam tablicę, I iteracji od y jest równa zero na do n. 861 00:41:54,920 --> 00:41:58,890 Mam tylko to pouczające printf Komunikat po prostu mówiąc, daj mi wiek 862 00:41:58,890 --> 00:42:03,690 osoby #% i, tak, numer jeden, numer dwa, numer trzy. 863 00:42:03,690 --> 00:42:04,730 I dlaczego mam to zrobić? 864 00:42:04,730 --> 00:42:08,870 Szczerze mówiąc, ludzie wolą liczyć od jednego On Up natomiast informatyków, 865 00:42:08,870 --> 00:42:09,620 zera w górę. 866 00:42:09,620 --> 00:42:11,700 informatycy nie będą korzystać z tego rodzaju programu, więc jesteśmy 867 00:42:11,700 --> 00:42:13,990 będzie po prostu zacząć odliczanie w jednym, jak normalni ludzie. 868 00:42:13,990 --> 00:42:17,630 >> A teraz, w linii 33, zauważyć nieznacznie inny element składni. 869 00:42:17,630 --> 00:42:23,710 I-tym wieku w zmiennej typu array dostanie int. 870 00:42:23,710 --> 00:42:25,770 A teraz na koniec, to dopiero arytmetyka tutaj. 871 00:42:25,770 --> 00:42:29,200 Postanowiłem w osobnej pętli do żądania jakiś czas mija, a teraz w tym 872 00:42:29,200 --> 00:42:31,400 osobna pętla, linie te wykonać. 873 00:42:31,400 --> 00:42:35,810 >> Za rok, osoba i będzie i lat, ale zauważ, to nie jest 874 00:42:35,810 --> 00:42:36,500 zmiennej i. 875 00:42:36,500 --> 00:42:38,390 To jest teraz% i do int. 876 00:42:38,390 --> 00:42:43,210 I zauważ, jako pierwszy zastępczy, I wtyczka w I plus 1, więc liczymy jak 877 00:42:43,210 --> 00:42:44,250 normalny człowiek. 878 00:42:44,250 --> 00:42:49,190 I wtedy dla wartości ich życia, dla i. lat, I wziąć wieku wspornik 879 00:42:49,190 --> 00:42:52,980 i - i dlaczego robię plus jeden tutaj? 880 00:42:52,980 --> 00:42:53,760 Oni właśnie wieku. 881 00:42:53,760 --> 00:42:55,030 To mój głupi wybór programów. 882 00:42:55,030 --> 00:42:56,810 Oni po prostu w wieku jednego roku. 883 00:42:56,810 --> 00:42:59,770 Mogę wpisać w dowolnej ilości tego I rzeczywiście chcą tam. 884 00:42:59,770 --> 00:43:02,430 >> Więc co tak naprawdę wszystko Znaczenie tutaj? 885 00:43:02,430 --> 00:43:07,610 Cóż, pozwól mi faktycznie przewijania tutaj i malować obraz 886 00:43:07,610 --> 00:43:10,830 z tego, co nas czeka. 887 00:43:10,830 --> 00:43:15,720 Co będziemy robić z naszym następnym Set Problem Two jest para się 888 00:43:15,720 --> 00:43:17,070 świat kryptografii. 889 00:43:17,070 --> 00:43:22,500 Więc to jest ciąg znaków, więc Kolejność wielu znaków, a co 890 00:43:22,500 --> 00:43:23,750 to mówi? 891 00:43:23,750 --> 00:43:28,530 892 00:43:28,530 --> 00:43:30,600 To nie jest w wersji online ze slajdów. 893 00:43:30,600 --> 00:43:35,880 >> Więc twierdzenie, że to równa się to, głupia reklama od wielu lat 894 00:43:35,880 --> 00:43:39,950 temu, że w rzeczywistości może przywołać jeden z jego pochodzenia. 895 00:43:39,950 --> 00:43:42,740 Tak więc jest to przykład szyfrowanie czy kryptografii. 896 00:43:42,740 --> 00:43:46,150 Okazuje się, że jeśli chcesz rzeczywiście wysłać informacje lub akcje 897 00:43:46,150 --> 00:43:49,310 Informacje z kimś bezpiecznie jak wiadomości jak ta, można 898 00:43:49,310 --> 00:43:50,500 wyścig litery. 899 00:43:50,500 --> 00:43:53,170 Ale zazwyczaj, słowa są nie kodowany losowo. 900 00:43:53,170 --> 00:43:56,365 Są one przesuwane w jakiś sposób zmienił w jakiś sposób tak, że - oops. 901 00:43:56,365 --> 00:43:59,040 To zabawne spoiler na następny raz. 902 00:43:59,040 --> 00:44:04,390 >> Więc można odwzorować to, co jest pozornie O zauważyć, że linie się B. 903 00:44:04,390 --> 00:44:05,420 kapitalizacja mądry. 904 00:44:05,420 --> 00:44:07,960 Najwyraźniej r staje się e. 905 00:44:07,960 --> 00:44:14,000 Najwyraźniej F-H-E-R staje S-U-R-E. Tak okazuje się, że to mapowanie, w 906 00:44:14,000 --> 00:44:18,720 ta sprawa jest całkiem głupi mapowanie czy ktoś zdobione? 907 00:44:18,720 --> 00:44:21,440 To jest coś, co nazywa Rot 13, Obrót 13. 908 00:44:21,440 --> 00:44:24,760 To najgłupsza szyfrowania mechanizmy, ponieważ dosłownie 909 00:44:24,760 --> 00:44:29,160 dodaje 13 do każdej z liter, głupi w tym sensie, że jeśli tylko 910 00:44:29,160 --> 00:44:31,890 mają trochę wolnego czasu na rękach i ołówek, lub po prostu, że to 911 00:44:31,890 --> 00:44:35,260 przez w głowie, możesz spróbować wszystkie możliwe dodatki - jeden, dwa, 912 00:44:35,260 --> 00:44:38,470 trzy, kropka, kropka, kropka, 25 to po prostu obracać cały alfabet, i 913 00:44:38,470 --> 00:44:40,860 w końcu, będzie można dowiedzieć się, co ta wiadomość jest. 914 00:44:40,860 --> 00:44:43,700 Więc jeśli zrobił coś takiego w klasy szkoły przekazując wiadomości do 915 00:44:43,700 --> 00:44:46,830 najlepszym przyjacielem, jeśli grade school nauczyciel po prostu przeczytać 916 00:44:46,830 --> 00:44:50,320 wiadomości i brute zmuszeni rozwiązanie, można zdobyć 917 00:44:50,320 --> 00:44:52,550 Odpowiedz przez to. 918 00:44:52,550 --> 00:44:54,970 >> Teraz oczywiście, w świecie rzeczywistym, kryptografia jest bardziej wyrafinowane. 919 00:44:54,970 --> 00:45:00,120 To jest fragment tekstu z System komputerowy, który nazwy użytkownika i 920 00:45:00,120 --> 00:45:03,630 Hasła, jak prawie wszystkie nasze uwagi i to właśnie hasło może 921 00:45:03,630 --> 00:45:07,260 wyglądać, jeśli jest przechowywany na twardym jechać, ale w postaci zaszyfrowanej. 922 00:45:07,260 --> 00:45:11,050 To nie jest tylko rotacja liter jest Jest B, a B jest C. Jest 923 00:45:11,050 --> 00:45:15,620 znacznie bardziej wyrafinowany, ale korzysta , co jest powszechnie znane jako tajnego klucza 924 00:45:15,620 --> 00:45:16,690 kryptografia. 925 00:45:16,690 --> 00:45:20,210 To zdjęcie mówi następujące historia z kilkoma ikonami. 926 00:45:20,210 --> 00:45:22,250 >> Po lewej stronie, mamy to, co zadzwonimy zwykły tekst. 927 00:45:22,250 --> 00:45:25,420 W świecie kryptografii, zwykły Tekst jest tylko oryginalna wiadomość 928 00:45:25,420 --> 00:45:29,050 w języku angielskim lub francuskim lub w jakimkolwiek języku. 929 00:45:29,050 --> 00:45:32,405 Jeśli chcesz zaszyfrować, miniemy to obrazowo przez kłódkę, więc 930 00:45:32,405 --> 00:45:35,580 niektóre rodzaj algorytmu, niektóre funkcje lub programu, że ktoś napisał 931 00:45:35,580 --> 00:45:39,880 że szyfruje litery miejmy nadzieję bardziej skomplikowanej niż tylko dodanie 13 932 00:45:39,880 --> 00:45:40,980 w każdym z nich. 933 00:45:40,980 --> 00:45:43,780 >> Co masz z tego procesu w middle tam nazywa zaszyfrowane. 934 00:45:43,780 --> 00:45:44,850 Więc niby sexy słowa. 935 00:45:44,850 --> 00:45:47,630 To po prostu oznacza, że ​​jest szyfrowany wersja zwykłego tekstu. 936 00:45:47,630 --> 00:45:52,570 I tylko wtedy, gdy ten sam sekret, 13 lub minus 13, czy jesteś w stanie 937 00:45:52,570 --> 00:45:54,970 odszyfrować wiadomość tak. 938 00:45:54,970 --> 00:45:57,770 >> Więc problemu ustawić dwa, wśród rzeczy zrobisz, jeśli w Hacker 939 00:45:57,770 --> 00:46:01,860 Edition, trzeba będzie napisać kod złamania tych haseł, zastanawianie się, 940 00:46:01,860 --> 00:46:05,170 co to było i jak były one szyfrowane, chociaż robimy dać trochę 941 00:46:05,170 --> 00:46:06,460 prowadzenie wzdłuż drogi. 942 00:46:06,460 --> 00:46:09,320 W wersji Standard Edition, wprowadzamy Kilka cyfr, szyfrowanie 943 00:46:09,320 --> 00:46:12,400 mechanizmy, jeden o nazwie Cezar, jeden nazywa Vigenere, że są jeszcze 944 00:46:12,400 --> 00:46:16,100 rotacyjne szyfry gdzie staje coś, B staje się czymś, ale 945 00:46:16,100 --> 00:46:18,820 trzeba to zrobić programowo bo rzeczywiście będzie tajemnicą 946 00:46:18,820 --> 00:46:22,840 Klucz zaangażowane która jest zazwyczaj numer lub słowo kluczowe, które tylko 947 00:46:22,840 --> 00:46:26,420 nadawca i odbiorca są Komunikaty powinny zrozumieć. 948 00:46:26,420 --> 00:46:28,660 >> Teraz, to faktycznie ma wcieleń w świecie rzeczywistym. 949 00:46:28,660 --> 00:46:32,910 To, na przykład, jest mało sierocy Secret pierścień Annie dekoder, i 950 00:46:32,910 --> 00:46:35,180 może rzeczywiście realizować te Szyfry - obrotowa 951 00:46:35,180 --> 00:46:37,930 Staje się czymś, B staje się coś - z parą kół, 952 00:46:37,930 --> 00:46:40,840 jedna na zewnątrz, jeden w środku takie, że jeśli obrót kółka lub 953 00:46:40,840 --> 00:46:44,170 Pierścień, rzeczywiście można wyrównać listów z różnych liter, 954 00:46:44,170 --> 00:46:45,430 się tajny kod. 955 00:46:45,430 --> 00:46:48,110 I tak jak cliffhanger na dzisiaj, to, co myślałem, że wystarczy trochę 956 00:46:48,110 --> 00:46:52,170 cofnięcie się, że po włączeniu telewizora w dniu 24 grudnia, można oglądać 957 00:46:52,170 --> 00:46:55,390 film ad nauseum 24 godzin z rzędu. 958 00:46:55,390 --> 00:47:06,030 Ale na dzisiaj, będę go otworzyć tutaj i daje nam zaledwie dwie minuty 959 00:47:06,030 --> 00:47:13,493 pedagogicznie istotne Christmas Story z trochę faceta o imieniu Ralphie. 960 00:47:13,493 --> 00:47:14,400 >> [PLAYBACK VIDEO] 961 00:47:14,400 --> 00:47:17,420 >> -Być wiadomo wszem i wobec, że Ralph Parker zostaje mianowany 962 00:47:17,420 --> 00:47:20,650 członkiem Little Orphan Annie tajemnicy okrąg i ma prawo do wszystkich 963 00:47:20,650 --> 00:47:23,460 zaszczyty i korzyści występujących z nimi. 964 00:47:23,460 --> 00:47:25,990 >> -Podpis, Mały Orphan Annie. 965 00:47:25,990 --> 00:47:30,100 Podpisanych, Pierre Andre atramentem. 966 00:47:30,100 --> 00:47:34,270 Nagrody i korzyści już w wieku dziewięciu lat. 967 00:47:34,270 --> 00:47:39,440 >> [Krzyczy na Radio] 968 00:47:39,440 --> 00:47:40,770 >> Chodź, zabierzmy się za to. 969 00:47:40,770 --> 00:47:44,965 I nie trzeba cały ten jazz o przemytnicy i piraci. 970 00:47:44,965 --> 00:47:48,270 >> -Słuchaj jutro dla zawieranie przygoda black 971 00:47:48,270 --> 00:47:49,650 statek piracki. 972 00:47:49,650 --> 00:47:53,320 Teraz nadszedł czas na Tajemnicy Annie Wiadomość dla Ciebie członków 973 00:47:53,320 --> 00:47:55,720 tajnego koła. 974 00:47:55,720 --> 00:47:56,580 Pamiętaj, dzieci. 975 00:47:56,580 --> 00:48:01,720 Tylko członkowie Secret Circle Annie może dekodować tajne wiadomości Annie. 976 00:48:01,720 --> 00:48:05,872 Pamiętaj, Annie jest w zależności od Ciebie. 977 00:48:05,872 --> 00:48:08,670 Ustaw pineski do B2. 978 00:48:08,670 --> 00:48:11,000 Oto wiadomość. 979 00:48:11,000 --> 00:48:12,335 12, 11, 2 - 980 00:48:12,335 --> 00:48:14,670 >> -Jestem w moim pierwszym posiedzeniu tajnym. 981 00:48:14,670 --> 00:48:19,720 >> -25, 14, 11, 18, 16 - 982 00:48:19,720 --> 00:48:21,650 >> -Pierre był w wielkiej dziś głosu. 983 00:48:21,650 --> 00:48:24,830 Widziałem, że dzisiejszy komunikat było naprawdę ważne. 984 00:48:24,830 --> 00:48:26,400 >> -3, 25. 985 00:48:26,400 --> 00:48:28,540 To jest wiadomość od Annie siebie. 986 00:48:28,540 --> 00:48:30,086 Pamiętaj, nie mów nikomu. 987 00:48:30,086 --> 00:48:34,370 988 00:48:34,370 --> 00:48:38,710 >> -90 Sekund później, jestem w jedynym pokoju w domu, w którym chłopiec z dziewięciu 989 00:48:38,710 --> 00:48:42,668 może siedzieć w zaciszu i dekodowania. 990 00:48:42,668 --> 00:48:47,628 Aha, B. poszedłem dalej. 991 00:48:47,628 --> 00:48:53,060 E. Pierwsze słowo jest "być". S. Dochodził łatwiej. 992 00:48:53,060 --> 00:48:54,980 U. 25. 993 00:48:54,980 --> 00:48:55,940 To R. 994 00:48:55,940 --> 00:48:56,900 >> -Chodź, Ralphie. 995 00:48:56,900 --> 00:48:57,860 Muszę iść. 996 00:48:57,860 --> 00:48:59,780 >> -I 'll być w prawo w dół, Ma. 997 00:48:59,780 --> 00:49:01,030 Gee świst. 998 00:49:01,030 --> 00:49:04,300 999 00:49:04,300 --> 00:49:08,220 >> -T. O. Upewnij się. 1000 00:49:08,220 --> 00:49:09,500 Upewnij się, że co? 1001 00:49:09,500 --> 00:49:11,660 Jaki był mały Orphan Annie chce powiedzieć? 1002 00:49:11,660 --> 00:49:12,844 Upewnij się, że co? 1003 00:49:12,844 --> 00:49:14,732 >> -Ralphie, Randy musi odejść. 1004 00:49:14,732 --> 00:49:16,148 Czy możesz wyjść? 1005 00:49:16,148 --> 00:49:17,092 >> -Wszystko w porządku, mamo. 1006 00:49:17,092 --> 00:49:18,510 Zaraz będę się. 1007 00:49:18,510 --> 00:49:20,270 >> -I było coraz bliżej do teraz. 1008 00:49:20,270 --> 00:49:21,823 Napięcie było straszne. 1009 00:49:21,823 --> 00:49:23,045 Co to było? 1010 00:49:23,045 --> 00:49:26,510 Los planety może wisi na włosku. 1011 00:49:26,510 --> 00:49:28,985 >> -Ralphie, Randy muszę iść. 1012 00:49:28,985 --> 00:49:32,680 >> -I 'll być prosto do płakać. 1013 00:49:32,680 --> 00:49:33,956 >> -Już prawie. 1014 00:49:33,956 --> 00:49:35,140 Moje palce poleciał. 1015 00:49:35,140 --> 00:49:36,880 Mój umysł był pułapką stali. 1016 00:49:36,880 --> 00:49:38,010 Każda pora wibruje. 1017 00:49:38,010 --> 00:49:39,878 To było niemal oczywiste. 1018 00:49:39,878 --> 00:49:43,210 Tak, tak, tak, tak, tak. 1019 00:49:43,210 --> 00:49:49,030 >> -Pamiętaj, aby pić Ovaltine. 1020 00:49:49,030 --> 00:49:50,280 Ovaltine? 1021 00:49:50,280 --> 00:49:53,980 1022 00:49:53,980 --> 00:49:55,230 Kiepska handlowych? 1023 00:49:55,230 --> 00:49:58,572 1024 00:49:58,572 --> 00:50:00,694 Sukinsyn. 1025 00:50:00,694 --> 00:50:01,900 >> [END PLAYBACK VIDEO] 1026 00:50:01,900 --> 00:50:04,260 >> SPEAKER 1: To jest CS50, i że Problem będzie Set Two. 1027 00:50:04,260 --> 00:50:06,305 Do zobaczenia w przyszłym tygodniu. 1028 00:50:06,305 --> 00:50:08,800 >> Głośnik 2: Na następny CS50, to się stanie. 1029 00:50:08,800 --> 00:50:11,060 >> SPEAKER 1: Więc jeden temat nie mamy spojrzał na tak daleko jest 1030 00:50:11,060 --> 00:50:12,220 że wśród wskaźników funkcji. 1031 00:50:12,220 --> 00:50:14,540 Teraz jest tylko wskaźnik funkcji adres publiczny 1032 00:50:14,540 --> 00:50:17,000 funkcja, ale podobnie jak - 1033 00:50:17,000 --> 00:50:18,250 syn - 1034 00:50:18,250 --> 00:50:19,670