1 00:00:00,000 --> 00:00:04,664 2 00:00:04,664 --> 00:00:05,580 DOUG LLOYD: Wszystko w porządku. 3 00:00:05,580 --> 00:00:08,877 Więc teraz, w tej akcji niech bardzo obszerny temat, funkcje. 4 00:00:08,877 --> 00:00:11,460 Do tej pory w toku, wszystko programy, które byliśmy pisanie 5 00:00:11,460 --> 00:00:12,969 zostały napisane wewnątrz główne. 6 00:00:12,969 --> 00:00:14,260 Są one dość proste programy. 7 00:00:14,260 --> 00:00:16,940 Nie trzeba mieć wszystko gałęzie i rzeczy dzieje. 8 00:00:16,940 --> 00:00:18,773 Możemy po prostu zmieścić wszystko wewnątrz głównej i 9 00:00:18,773 --> 00:00:20,407 nie dostaje strasznie przytłaczające. 10 00:00:20,407 --> 00:00:22,990 Ale jak oczywiście długa jak zacząć rozwijać programy 11 00:00:22,990 --> 00:00:26,260 niezależnie, są one prawdopodobnie będzie zacząć, aby uzyskać o wiele więcej niż 10 12 00:00:26,260 --> 00:00:27,200 lub 15 linii. 13 00:00:27,200 --> 00:00:31,400 Możesz dostać setki lub tysiące lub dziesiątki tysięcy linii kodu. 14 00:00:31,400 --> 00:00:34,690 I to naprawdę nie jest że szalona myśl. 15 00:00:34,690 --> 00:00:39,720 Jako takie, nie jest dobrym pomysłem aby wszystko wewnątrz z głównym. 16 00:00:39,720 --> 00:00:43,240 To może być trochę trudne do znalezienia czego szukasz, jeśli to zrobisz. 17 00:00:43,240 --> 00:00:47,040 >> Na szczęście, choć C, i prawie każdy inny język programowania, który 18 00:00:47,040 --> 00:00:50,386 Może pracować, pozwala nam napisać funkcje. 19 00:00:50,386 --> 00:00:52,260 A ja po prostu się wziąć szybki bok tutaj 20 00:00:52,260 --> 00:00:54,971 wspomnieć, że funkcje są jeden obszar informatyki. 21 00:00:54,971 --> 00:00:57,970 A zobaczysz dużo więcej z nich w różne punkty w trakcie trwania 22 00:00:57,970 --> 00:00:59,290 i jeśli dalej. 23 00:00:59,290 --> 00:01:02,280 Tam, gdzie jest dużo synonimy dla tego samego słowa. 24 00:01:02,280 --> 00:01:03,390 Tak nazywamy funkcje. 25 00:01:03,390 --> 00:01:05,980 Ale może również je usłyszeć dalej procedur 26 00:01:05,980 --> 00:01:09,570 lub metod, szczególnie, jeśli kiedykolwiek zrobić żadnego programowania obiektowego 27 00:01:09,570 --> 00:01:11,950 before-- i nie martw się jeśli nie, nie 28 00:01:11,950 --> 00:01:14,280 duża deal-- ale w Języki audytu zorientowanych 29 00:01:14,280 --> 00:01:16,129 są często nazywane metody. 30 00:01:16,129 --> 00:01:17,670 Czasami nazywa się je podprogramów. 31 00:01:17,670 --> 00:01:20,690 Ale tak naprawdę odnoszą do tej samej podstawowej idei. 32 00:01:20,690 --> 00:01:22,480 >> Zobaczmy, co to pomysł jest. 33 00:01:22,480 --> 00:01:23,310 Co to jest funkcja? 34 00:01:23,310 --> 00:01:26,470 Cóż funkcją jest naprawdę nic więcej niż czarnej skrzynki. 35 00:01:26,470 --> 00:01:31,430 Czarna skrzynka, która posiada zestaw zera lub większej liczby wejść i jedno wyjście. 36 00:01:31,430 --> 00:01:33,420 Tak na przykład, może być funkcją. 37 00:01:33,420 --> 00:01:35,510 Jest to funkcja o nazwie func. 38 00:01:35,510 --> 00:01:39,330 I trwa trzy wejścia a, b oraz c. 39 00:01:39,330 --> 00:01:42,580 A w środku tej czarnej skrzynki, mamy nie wiem dokładnie, co robi, 40 00:01:42,580 --> 00:01:45,100 ale przetwarza wejść w pewien sposób, a następnie 41 00:01:45,100 --> 00:01:48,680 daje pojedyncze wyjście, w tym przypadku, z. 42 00:01:48,680 --> 00:01:50,504 Teraz, aby to trochę mniej abstrakcyjny, mamy 43 00:01:50,504 --> 00:01:52,420 Można powiedzieć, że być może posiada funkcję o nazwie 44 00:01:52,420 --> 00:01:58,750 dodać, że ma trzy wejścia A, B, i c i przetwarza dane wyjściowe w jakiś sposób 45 00:01:58,750 --> 00:02:01,010 wewnątrz czarnej skrzynki do Produkujemy pojedyncze wyjście. 46 00:02:01,010 --> 00:02:05,190 Tak więc w tym przypadku, jeżeli dodaj trwa 3, 6 i 7. 47 00:02:05,190 --> 00:02:07,020 Gdzieś wewnątrz dodać funkcję, że będzie 48 00:02:07,020 --> 00:02:09,750 spodziewamy się, że być sumowane w celu wytworzenia wyjścia, który 49 00:02:09,750 --> 00:02:13,220 jest 3 oraz 6 oraz 7 lub 16. 50 00:02:13,220 --> 00:02:17,940 >> Podobnie, masz funkcję o nazwie mult, że ma dwa wejścia, A i B, 51 00:02:17,940 --> 00:02:21,070 przetwarza je w inny sposób tak że wyjście funkcji 52 00:02:21,070 --> 00:02:22,920 Jest to produkt z dwóch wejść. 53 00:02:22,920 --> 00:02:25,080 Dwa wejścia pomnożone razem. 54 00:02:25,080 --> 00:02:29,150 4 i 5, są przekazywane do mult, coś się stanie, wyjście oczekujemy 55 00:02:29,150 --> 00:02:31,090 20. 56 00:02:31,090 --> 00:02:32,507 Dlaczego nazywamy to czarna skrzynka? 57 00:02:32,507 --> 00:02:34,840 Cóż, jeśli nie są pisanie działa się, które 58 00:02:34,840 --> 00:02:36,869 zrobiliśmy trochę tak daleko CS50. 59 00:02:36,869 --> 00:02:39,910 Widzieliśmy druku f, na przykład, które Jest to funkcja, która nie pisaliśmy 60 00:02:39,910 --> 00:02:42,305 sami, ale używam cały czas. 61 00:02:42,305 --> 00:02:44,180 Jeśli nie piszemy funkcje siebie, 62 00:02:44,180 --> 00:02:48,450 naprawdę nie trzeba wiedzieć, jak to jest faktycznie realizowane pod maską. 63 00:02:48,450 --> 00:02:51,710 >> Tak na przykład czarna skrzynka I po prostu pokazałem mnożenia, 64 00:02:51,710 --> 00:02:53,740 Mult a, b może być defined-- i to jest po prostu 65 00:02:53,740 --> 00:02:57,902 niektóre pseudocode-- może być zdefiniowane jako wyjście a razy b. 66 00:02:57,902 --> 00:02:58,860 To ma sens, prawda. 67 00:02:58,860 --> 00:03:01,370 Jeśli mamy funkcję o nazwie mult, że ma dwa wejścia. 68 00:03:01,370 --> 00:03:04,750 Oczekujemy, że wyjście będzie być dwa wejścia pomnożone razem, 69 00:03:04,750 --> 00:03:06,240 a razy b. 70 00:03:06,240 --> 00:03:09,170 Mult, ale może być również realizowane w ten sposób, 71 00:03:09,170 --> 00:03:13,150 mamy zmienną licznika do przygotuj się wewnątrz mult 0. 72 00:03:13,150 --> 00:03:18,000 A potem powtórzyć ten proces b czasy dodać do licznika. 73 00:03:18,000 --> 00:03:24,270 Na przykład, jeśli pomnożyć 3a przez 5b, moglibyśmy powiedzieć, ustawić licznik na 0, 74 00:03:24,270 --> 00:03:27,700 powtórzyć pięć razy, dodać 3 do licznika. 75 00:03:27,700 --> 00:03:34,490 Więc zaczynamy od 0, a następnie robimy to pięć razy 3, 6, 9, 12, 15. 76 00:03:34,490 --> 00:03:37,500 To jest ten sam wynik. My nadal się 3 razy 5 tylko 77 00:03:37,500 --> 00:03:39,500 realizacja jest inna. 78 00:03:39,500 --> 00:03:41,490 >> To, co mamy na myśli, kiedy mówimy czarną skrzynkę. 79 00:03:41,490 --> 00:03:44,406 To po prostu oznacza, że ​​nie obchodzi jak to jest realizowane pod maską 80 00:03:44,406 --> 00:03:46,170 pod warunkiem, że wyjściowy oczekujemy. 81 00:03:46,170 --> 00:03:49,045 W rzeczywistości, jest to część umowy wykorzystywania funkcji, w szczególności 82 00:03:49,045 --> 00:03:50,630 Funkcje, które inni piszą. 83 00:03:50,630 --> 00:03:53,980 Zachowanie zawsze będzie być typowe, nieprzewidywalny 84 00:03:53,980 --> 00:03:55,420 w oparciu o nazwę funkcji. 85 00:03:55,420 --> 00:03:57,500 A to dlatego, że to naprawdę Pisząc ważne funkcje 86 00:03:57,500 --> 00:04:00,020 lub gdy inni ludzie piszą Funkcje, które można użyć, 87 00:04:00,020 --> 00:04:03,590 że te funkcje mają jasne, dość oczywiste nazwy, 88 00:04:03,590 --> 00:04:04,990 i są dobrze udokumentowane. 89 00:04:04,990 --> 00:04:08,560 Co jest z pewnością w przypadku dla funkcji, takich jak drukarki f. 90 00:04:08,560 --> 00:04:09,860 >> Dlaczego więc używać funkcji? 91 00:04:09,860 --> 00:04:14,220 Cóż, jak powiedziałem wcześniej, jeśli piszemy wszystkie nasze kodu wewnątrz głównych rzeczy 92 00:04:14,220 --> 00:04:17,120 Można się naprawdę uciążliwe i bardzo skomplikowane. 93 00:04:17,120 --> 00:04:19,980 Funkcje pozwalają nam możliwość zorganizować rzeczy i zerwać 94 00:04:19,980 --> 00:04:24,540 bardzo skomplikowany problem w dużo łatwiejsze w zarządzaniu części sub. 95 00:04:24,540 --> 00:04:28,130 Funkcje pozwalają nam także uproszczenie procesu kodowania. 96 00:04:28,130 --> 00:04:33,080 Jest to o wiele łatwiejsze do debugowania 10 Funkcja linii w porównaniu z 100 linii 97 00:04:33,080 --> 00:04:35,890 Funkcja lub funkcją 1000 linii. 98 00:04:35,890 --> 00:04:38,400 Jeśli mamy tylko do debugowania małe kawałki na raz, 99 00:04:38,400 --> 00:04:42,110 lub napisać małe kawałki w momencie, to sprawia, że ​​doświadczenie w programowaniu 100 00:04:42,110 --> 00:04:43,070 dużo lepiej. 101 00:04:43,070 --> 00:04:44,910 Zaufaj mi na jednym. 102 00:04:44,910 --> 00:04:48,400 >> Wreszcie, jeśli piszemy funkcji mamy można ponownie wykorzystać te różne części. 103 00:04:48,400 --> 00:04:49,880 Funkcje mogą być poddane recyklingowi. 104 00:04:49,880 --> 00:04:51,880 Można je stosować w jeden program lub inny. 105 00:04:51,880 --> 00:04:53,713 Masz już napisane funkcja, wszystko co 106 00:04:53,713 --> 00:04:56,530 musisz zrobić, to powiedzieć, że program, gdzie znaleźć tę funkcję. 107 00:04:56,530 --> 00:04:59,680 Byliśmy recyklingu i za pomocą drukowania f od ponad 40 lat. 108 00:04:59,680 --> 00:05:02,150 Ale to było tylko napisane jeden raz. 109 00:05:02,150 --> 00:05:04,270 Całkiem przydatne, prawda. 110 00:05:04,270 --> 00:05:04,830 W porządku. 111 00:05:04,830 --> 00:05:06,040 Więc funkcje są świetne. 112 00:05:06,040 --> 00:05:06,860 Wiemy to. 113 00:05:06,860 --> 00:05:08,700 Teraz zacznijmy je pisać. 114 00:05:08,700 --> 00:05:10,830 Zacznijmy się je do naszych programów. 115 00:05:10,830 --> 00:05:13,869 Aby to zrobić, pierwszy co możemy zrobić, to zadeklarować funkcję. 116 00:05:13,869 --> 00:05:16,160 Kiedy deklarujesz funkcję co masz w zasadzie robi 117 00:05:16,160 --> 00:05:18,900 mówi kompilatorowi, hej, tak wiesz, 118 00:05:18,900 --> 00:05:20,850 Mam zamiar pisać funkcja później 119 00:05:20,850 --> 00:05:22,987 i oto, co to będzie wyglądać. 120 00:05:22,987 --> 00:05:24,820 Powodem tego jest to, ponieważ kompilatory mogą 121 00:05:24,820 --> 00:05:27,900 zrobić jakieś dziwne rzeczy, jeśli widzą zbiór symboli 122 00:05:27,900 --> 00:05:29,560 że nie są znane. 123 00:05:29,560 --> 00:05:33,000 Więc po prostu dać kompilatora A kieruje, Tworzę funkcji 124 00:05:33,000 --> 00:05:35,492 i to będzie to zrobić. 125 00:05:35,492 --> 00:05:38,450 Deklaracje funkcji Generalnie, jeśli jesteś organizowania kodu w taki sposób, 126 00:05:38,450 --> 00:05:41,872 inni będą mogli zrozumieć i wykorzystać, 127 00:05:41,872 --> 00:05:44,330 generalnie chcą umieścić wszystkie swoich deklaracjach funkcji 128 00:05:44,330 --> 00:05:48,220 na samym początku kodu, tuż przed rozpoczęciem pisania Głównym nawet. 129 00:05:48,220 --> 00:05:50,770 I wygodnie, nie bardzo standardowy formularz 130 00:05:50,770 --> 00:05:53,500 że każda deklaracja funkcji następuje. 131 00:05:53,500 --> 00:05:56,090 Wszyscy prawie wyglądać. 132 00:05:56,090 --> 00:06:01,440 Istnieją trzy części do funkcji oświadczenie, rodzaj powrotu, nazwa, 133 00:06:01,440 --> 00:06:03,420 i lista jej argumentów. 134 00:06:03,420 --> 00:06:07,180 >> Teraz zwracany typ, jaki rodzaj Zmienna wyjście funkcja. 135 00:06:07,180 --> 00:06:10,710 Tak na przykład, jeśli myślimy z powrotem minutę temu do pomnożenia dwóch 136 00:06:10,710 --> 00:06:15,690 Funkcja numery, czego się spodziewać, jeśli pomnożyć liczbę całkowitą przez liczbę całkowitą 137 00:06:15,690 --> 00:06:18,502 wyjście będzie Prawdopodobnie liczbą całkowitą rację. 138 00:06:18,502 --> 00:06:20,710 Pomnożone dwie liczby całkowite razem, masz całkowitą. 139 00:06:20,710 --> 00:06:24,167 Więc typu zwracanej, że Funkcja będzie int. 140 00:06:24,167 --> 00:06:26,000 Nazwa jest to, co chcesz aby połączyć się z funkcji. 141 00:06:26,000 --> 00:06:29,330 To jest chyba najmniej istotne część deklaracji funkcji, 142 00:06:29,330 --> 00:06:30,827 pod względem funkcjonalności. 143 00:06:30,827 --> 00:06:33,160 Ale w rzeczywistości prawdopodobnie jednym z najważniejszych części 144 00:06:33,160 --> 00:06:36,243 deklaracji funkcji w kategoriach wiedząc, co funkcja rzeczywiście 145 00:06:36,243 --> 00:06:37,120 robi. 146 00:06:37,120 --> 00:06:40,474 Jeśli nazwać funkcję f lub g lub h lub tajemnica czy coś takiego, 147 00:06:40,474 --> 00:06:42,765 pewnie dostanie trochę potknął się stara 148 00:06:42,765 --> 00:06:44,650 Pamiętasz, co zrobić, aby te funkcje. 149 00:06:44,650 --> 00:06:47,880 Dlatego tak ważne jest, aby dać znaczące nazwy funkcji. 150 00:06:47,880 --> 00:06:51,030 >> Wreszcie, lista jej argumentów lista oddzielonych przecinkami 151 00:06:51,030 --> 00:06:55,260 wszystkich wejść do swojej funkcji, z których każdy ma rodzaj i nazwę. 152 00:06:55,260 --> 00:06:57,840 Więc nie tylko masz do określić, jaki typ zmiennej 153 00:06:57,840 --> 00:07:00,760 wyjście funkcji spowoduje, chcemy także, aby określić 154 00:07:00,760 --> 00:07:07,694 jaki rodzaj i typy zmiennych w Funkcja będzie przyjmując jako wejścia. 155 00:07:07,694 --> 00:07:08,860 Więc zróbmy tu przykład. 156 00:07:08,860 --> 00:07:10,220 Miejmy tylko spojrzeć w bardziej konkretny jeden. 157 00:07:10,220 --> 00:07:13,130 Więc oto przykład funkcji Deklaracja dla funkcji, które 158 00:07:13,130 --> 00:07:14,925 by dodać dwie liczby całkowite razem. 159 00:07:14,925 --> 00:07:17,800 Sumy dwóch liczb całkowitych ma być liczbą całkowitą, a także, jak to tylko 160 00:07:17,800 --> 00:07:18,450 omówione. 161 00:07:18,450 --> 00:07:21,610 I tak zwracany typ, tutaj na zielono, byłoby int. 162 00:07:21,610 --> 00:07:25,190 To po prostu mówi nam, że dodanie dwóch ints ma na końcu dnia, 163 00:07:25,190 --> 00:07:28,799 wyjście, albo pluć go z powrotem się do nas, liczbą całkowitą. 164 00:07:28,799 --> 00:07:31,590 Biorąc pod uwagę to, co ta funkcja robi my chce dać mu nazwę. 165 00:07:31,590 --> 00:07:33,630 Dodaj dwa ints wydaje właściwe, biorąc pod uwagę 166 00:07:33,630 --> 00:07:37,574 Bierzemy dwie liczby całkowite, jak wejść i mam nadzieję, że ich pomnażania. 167 00:07:37,574 --> 00:07:40,240 To może być trochę kłopotliwe Nazwa i szczerze mówiąc ta funkcja 168 00:07:40,240 --> 00:07:42,430 Prawdopodobnie nie ma potrzeby ponieważ mamy dodawanie 169 00:07:42,430 --> 00:07:46,310 Operator, jeśli pamiętam z naszej omówienie operatorów wcześniej. 170 00:07:46,310 --> 00:07:49,650 Ale powiedzmy, że dla dobra Argument, że funkcja ta jest przydatna 171 00:07:49,650 --> 00:07:52,860 i tak będziemy nazywać go dodać dwa ints. 172 00:07:52,860 --> 00:07:55,230 Wreszcie, funkcja ta ma dwa wejścia. 173 00:07:55,230 --> 00:07:56,960 Z których każdy jest liczbą całkowitą. 174 00:07:56,960 --> 00:07:59,900 Więc mamy ten przecinek oddzielone lista wejść. 175 00:07:59,900 --> 00:08:02,830 Teraz na ogół chcą nadanie nazwy każdego z nich 176 00:08:02,830 --> 00:08:05,070 tak, że mogą być stosowane w funkcji. 177 00:08:05,070 --> 00:08:07,180 Nazwy nie są strasznie ważne. 178 00:08:07,180 --> 00:08:11,400 >> W tym przypadku, nie koniecznie ma żadnego znaczenia z nimi związane. 179 00:08:11,400 --> 00:08:13,140 Tak więc możemy po prostu zadzwonić do nich a i b. 180 00:08:13,140 --> 00:08:14,257 To jest całkowicie w porządku. 181 00:08:14,257 --> 00:08:16,090 Jeżeli jednak znajdziesz się w sytuacji, 182 00:08:16,090 --> 00:08:19,497 których nazwy zmiennych w rzeczywistości może być ważne, 183 00:08:19,497 --> 00:08:21,830 możesz do nich zadzwonić coś innego niż aib 184 00:08:21,830 --> 00:08:24,701 dać im coś więcej symboliczny sens. 185 00:08:24,701 --> 00:08:27,700 Ale w tym przypadku naprawdę nie wiedzieć coś jeszcze o funkcji. 186 00:08:27,700 --> 00:08:29,320 Chcemy tylko, aby dodać dwie liczby całkowite. 187 00:08:29,320 --> 00:08:32,429 Więc po prostu zadzwonić te liczby całkowite a i b. 188 00:08:32,429 --> 00:08:33,990 To jeden z przykładów. 189 00:08:33,990 --> 00:08:36,287 >> Dlaczego nie wziąć drugi myśleć o tym jednym, 190 00:08:36,287 --> 00:08:38,870 jak można napisać funkcję Deklaracja dla funkcji, które 191 00:08:38,870 --> 00:08:42,940 mnoży dwie liczby zmiennoprzecinkowe? 192 00:08:42,940 --> 00:08:45,910 Czy pamiętasz, co Liczba zmiennoprzecinkowa jest? 193 00:08:45,910 --> 00:08:48,120 Co by ta funkcja Deklaracja wygląda? 194 00:08:48,120 --> 00:08:53,330 I rzeczywiście polecam zatrzymać wideo tutaj i wziąć, ile czasu trzeba. 195 00:08:53,330 --> 00:08:55,521 Pomyśl o tym, co to deklaracja funkcji będzie? 196 00:08:55,521 --> 00:08:56,770 Co typ zwracany będzie? 197 00:08:56,770 --> 00:08:58,103 Co taką nazwę będzie? 198 00:08:58,103 --> 00:08:59,580 Co by wejść być? 199 00:08:59,580 --> 00:09:03,190 Więc dlaczego nie można zatrzymać wideo tutaj i pisać-deklarację funkcji 200 00:09:03,190 --> 00:09:07,640 dla funkcji, które pomnożyć dwóch liczb zmiennoprzecinkowych razem. 201 00:09:07,640 --> 00:09:09,330 Mam nadzieję, że zatrzymał się film. 202 00:09:09,330 --> 00:09:12,950 >> Warto więc spojrzeć na przykład jednej z możliwych deklaracji. 203 00:09:12,950 --> 00:09:17,340 Float mult dwa reals unosić x, float y. 204 00:09:17,340 --> 00:09:19,090 Produkt dwóch liczb zmiennoprzecinkowych, 205 00:09:19,090 --> 00:09:21,710 które pamiętam to jak reprezentacji liczb rzeczywistych 206 00:09:21,710 --> 00:09:26,770 lub numery z wartości dziesiętnych w C, będzie liczba zmiennoprzecinkowa. 207 00:09:26,770 --> 00:09:28,570 Gdy pomnożyć dziesiętne przez przecinku, 208 00:09:28,570 --> 00:09:30,460 pewnie dostanie po przecinku. 209 00:09:30,460 --> 00:09:31,960 Chcesz, aby nadać mu odpowiednią nazwę. 210 00:09:31,960 --> 00:09:33,810 Pomnożyć dwie Real wydaje się dobrze. 211 00:09:33,810 --> 00:09:36,620 Ale można to nazwać mult dwa pływaki lub mult pływaki. 212 00:09:36,620 --> 00:09:39,540 Coś w tym stylu, tak długo, jak to dał jakiś rzeczywisty sens tego, co 213 00:09:39,540 --> 00:09:41,469 to czarna skrzynka zamierza zrobić. 214 00:09:41,469 --> 00:09:44,260 I znowu, w tym przypadku, nie robimy wydają się mieć jakiekolwiek znaczenie dołączone 215 00:09:44,260 --> 00:09:46,390 z nazwiskami zmienne jesteśmy przechodzące w, 216 00:09:46,390 --> 00:09:48,645 więc po prostu zadzwonić im x i y. 217 00:09:48,645 --> 00:09:51,020 Teraz, jeśli nazywają je coś indziej, to jest całkowicie w porządku. 218 00:09:51,020 --> 00:09:53,310 W rzeczywistości, jeśli nie deklaracja ta, zamiast 219 00:09:53,310 --> 00:09:55,450 za pomocą podwójnych zamiast od pływaków, jeśli przypomnieć 220 00:09:55,450 --> 00:09:59,100 że podwaja to inna sposób dokładniej 221 00:09:59,100 --> 00:10:02,330 określenie liczby rzeczywiste lub pływających zmiennych punkt. 222 00:10:02,330 --> 00:10:03,620 To jest zupełnie w porządku. 223 00:10:03,620 --> 00:10:04,670 Albo jeden z tych będzie dobrze. 224 00:10:04,670 --> 00:10:06,711 W rzeczywistości, istnieje kilka Różne kombinacje 225 00:10:06,711 --> 00:10:08,410 sposobów zadeklarować tę funkcję. 226 00:10:08,410 --> 00:10:10,884 Ale to są dwie całkiem dobre. 227 00:10:10,884 --> 00:10:12,550 Mamy oświadczył funkcję, to świetnie. 228 00:10:12,550 --> 00:10:15,700 Powiedzieliśmy kompilator, co to jest, co będziemy robić. 229 00:10:15,700 --> 00:10:17,630 Teraz właściwie napisać taką funkcję. 230 00:10:17,630 --> 00:10:20,750 Dajmy jej definicję, tak że we wnętrzu czarnej skrzynki 231 00:10:20,750 --> 00:10:22,840 przewidywalne zachowanie się dzieje. 232 00:10:22,840 --> 00:10:26,270 W rzeczywistości, jesteśmy pomnożenie dwóch rzeczywistych numery razem, lub numery dodawanie 233 00:10:26,270 --> 00:10:29,760 razem, lub robi cokolwiek to jest które poprosiliśmy naszą funkcję do zrobienia. 234 00:10:29,760 --> 00:10:32,780 >> Faktycznie więc, spróbujmy zdefiniować pomnożyć dwa Reale, które po prostu 235 00:10:32,780 --> 00:10:35,350 mówił o sekundę temu. 236 00:10:35,350 --> 00:10:38,560 Teraz początek definicja funkcji 237 00:10:38,560 --> 00:10:41,720 wygląda prawie dokładnie tak samo w deklaracji funkcji. 238 00:10:41,720 --> 00:10:43,170 Mam oba tutaj. 239 00:10:43,170 --> 00:10:47,770 Na górze jest deklaracja funkcji, Rodzaj, nazwa, oddzielonych przecinkami argumentem 240 00:10:47,770 --> 00:10:49,410 lista, średnik. 241 00:10:49,410 --> 00:10:53,800 Średnik oznacza, że że jest to deklaracja funkcji. 242 00:10:53,800 --> 00:10:57,060 Początek funkcja Definicja wygląda niemal dokładnie 243 00:10:57,060 --> 00:11:03,790 ten sam typ, nazwa, oddzielone przecinkiem Lista argumentów, nie średnik, 244 00:11:03,790 --> 00:11:05,206 otworzyć nawias klamrowy. 245 00:11:05,206 --> 00:11:07,580 Otwarty nawias klamrowy, tak jak robiliśmy z głównym, 246 00:11:07,580 --> 00:11:09,540 Oznacza to, że teraz jesteśmy zaczynają definiować 247 00:11:09,540 --> 00:11:14,567 co dzieje się wewnątrz czarnej skrzynki, która zdecydowaliśmy się zadzwonić Mult dwa Reale. 248 00:11:14,567 --> 00:11:15,900 Oto jeden sposób na jego realizację. 249 00:11:15,900 --> 00:11:20,370 Moglibyśmy powiedzieć, możemy zadeklarować nowy zmienna typu float o nazwie produktu 250 00:11:20,370 --> 00:11:24,020 i przypisać tej zmiennej do wartości x razy y. 251 00:11:24,020 --> 00:11:27,306 A następnie powrót produkt. 252 00:11:27,306 --> 00:11:28,430 Co oznacza zwrot na myśli. 253 00:11:28,430 --> 00:11:31,090 Dobrze jest droga powrotna wskazać, że to, jak 254 00:11:31,090 --> 00:11:33,400 przekazujemy wyjście wycofać. 255 00:11:33,400 --> 00:11:38,160 Tak więc powrót co jest taka sama jak Ten sygnał wyjściowy z czarnej skrzynki. 256 00:11:38,160 --> 00:11:40,732 Tak, to w jaki sposób to zrobić. 257 00:11:40,732 --> 00:11:42,190 Oto kolejny sposób na jego realizację. 258 00:11:42,190 --> 00:11:45,050 Moglibyśmy wrócić x razy y. 259 00:11:45,050 --> 00:11:45,870 x jest pływaka. 260 00:11:45,870 --> 00:11:46,660 y jest pływak. 261 00:11:46,660 --> 00:11:48,490 Więc x razy y jest także pływak. 262 00:11:48,490 --> 00:11:50,750 Nie trzeba nawet tworzenie innej zmiennej. 263 00:11:50,750 --> 00:11:56,750 Więc to jest inny sposób realizować dokładnie tę samą czarną skrzynkę. 264 00:11:56,750 --> 00:11:58,570 >> Teraz poświęć chwilę, wstrzymać wideo 265 00:11:58,570 --> 00:12:01,680 i spróbować zdefiniować dodać dwa ints, która jest inna funkcja to 266 00:12:01,680 --> 00:12:03,090 mówił o chwilę temu. 267 00:12:03,090 --> 00:12:06,440 Znowu tutaj, mam umieścić funkcję oświadczenie, i tak średnik, 268 00:12:06,440 --> 00:12:08,420 oraz otwarty nawias klamrowy i zamknięty kręcone 269 00:12:08,420 --> 00:12:12,080 nawiasów, aby wskazać, gdzie będziemy wypełniać w treści dodać dwa ints, 270 00:12:12,080 --> 00:12:15,530 tak, że możemy zdefiniować konkretny Zachowanie wewnątrz czarnej skrzynki. 271 00:12:15,530 --> 00:12:16,380 Więc zatrzymać wideo. 272 00:12:16,380 --> 00:12:18,790 I wziąć tyle czasu, ile trzeba spróbować zdefiniować 273 00:12:18,790 --> 00:12:25,040 implementacja dodać dwa ints, takie że gdy funkcja generuje wartości 274 00:12:25,040 --> 00:12:29,209 tak jest, w rzeczywistości, powrót suma z dwóch wejść. 275 00:12:29,209 --> 00:12:32,000 Tak jak w poprzednim przykładzie, istnieje kilka różnych sposobów 276 00:12:32,000 --> 00:12:34,210 że można wdrożyć dodać dwa ints. 277 00:12:34,210 --> 00:12:35,130 Oto jeden. 278 00:12:35,130 --> 00:12:37,172 Tu w orange mam po prostu miał kilka comments-- 279 00:12:37,172 --> 00:12:38,880 Właśnie dodałem niektóre komentarze do wskazania 280 00:12:38,880 --> 00:12:41,400 co dzieje się na każdej linii kodu. 281 00:12:41,400 --> 00:12:45,430 Więc zadeklarować zmienną zwana suma typu int. 282 00:12:45,430 --> 00:12:47,279 Mówię suma równa się PLUS B. 283 00:12:47,279 --> 00:12:50,070 To miejsce, gdzie jesteśmy rzeczywiście robi praca dodawania A i B razem. 284 00:12:50,070 --> 00:12:51,850 I wrócę sumę. 285 00:12:51,850 --> 00:12:56,460 I to ma sens, ponieważ Suma kontrolna jest zmienna typu int. 286 00:12:56,460 --> 00:13:00,180 A co to typ danych, które to Funkcja mówi mi, to będzie wyjście? 287 00:13:00,180 --> 00:13:00,680 Int. 288 00:13:00,680 --> 00:13:03,072 Więc wracam sumę, która jest zmienną całkowitą. 289 00:13:03,072 --> 00:13:06,030 I to ma sens, biorąc pod uwagę to, co mamy zgłoszone i zdefiniowane naszą funkcję 290 00:13:06,030 --> 00:13:07,320 do zrobienia. 291 00:13:07,320 --> 00:13:09,700 >> Teraz możesz również zdefiniować Funkcja w ten sposób, 292 00:13:09,700 --> 00:13:15,260 int suma równa plus B-- pominąć, że Pierwszy step-- a następnie powrócić sumę. 293 00:13:15,260 --> 00:13:17,760 Teraz możesz mieć także realizowany jest w ten sposób, 294 00:13:17,760 --> 00:13:19,180 co bardzo nie polecam. 295 00:13:19,180 --> 00:13:22,540 To jest zły styl dla jednego sprawa i naprawdę zły projekt, 296 00:13:22,540 --> 00:13:24,420 ale to robi, w rzeczywistości, w pracy. 297 00:13:24,420 --> 00:13:30,199 Jeśli wziąć ten kod, który jest int dodaj złe żmija dot c, i używać go. 298 00:13:30,199 --> 00:13:31,990 To rzeczywiście nie dodaje dwie liczby całkowite razem. 299 00:13:31,990 --> 00:13:37,632 Jest to bardzo słaba realizacja w tym szczególnym zachowaniem. 300 00:13:37,632 --> 00:13:38,340 Ale to nie działa. 301 00:13:38,340 --> 00:13:41,200 To właśnie tutaj, w celu zilustrowania punkt, że tak naprawdę nie 302 00:13:41,200 --> 00:13:44,530 obchodzi, co dzieje się wewnątrz czarna skrzynka, tak długo, 303 00:13:44,530 --> 00:13:46,510 jak to ma wyjście, które spodziewamy. 304 00:13:46,510 --> 00:13:48,870 To jest źle zaprojektowana czarna skrzynka. 305 00:13:48,870 --> 00:13:53,801 Ale pod koniec dnia, to robi Wyjście jeszcze suma a plus b. 306 00:13:53,801 --> 00:13:54,300 W porządku. 307 00:13:54,300 --> 00:13:56,320 Więc mamy zadeklarowane funkcje. 308 00:13:56,320 --> 00:13:57,490 I mamy funkcję zdefiniowane. 309 00:13:57,490 --> 00:13:58,540 Więc to jest naprawdę dobry. 310 00:13:58,540 --> 00:14:03,020 Teraz zacznijmy używać funkcji że mamy zadeklarowane i mamy zdefiniowane. 311 00:14:03,020 --> 00:14:05,960 Aby połączyć się z function-- to faktycznie dość easy-- wszystko, co musisz zrobić, 312 00:14:05,960 --> 00:14:09,070 jest przekazać ją odpowiednie argumenty, Argumenty typu danych 313 00:14:09,070 --> 00:14:11,600 że oczekuje, i a następnie przypisać do zwrotu 314 00:14:11,600 --> 00:14:15,190 Wartość tej funkcji i this-- usprawiedliwienia me-- 315 00:14:15,190 --> 00:14:19,390 przypisanie wartości zwracanej tej funkcji aby coś odpowiedniego typu. 316 00:14:19,390 --> 00:14:22,410 >> Warto więc spojrzeć na to w praktyce, w pliku 317 00:14:22,410 --> 00:14:27,730 zwany dodatek 1 kropka c, które Mam w moim CS50 IDE. 318 00:14:27,730 --> 00:14:31,042 Więc tutaj jest żmija 1 punkt c. 319 00:14:31,042 --> 00:14:33,500 Na początku widzisz mam moje obejmuje, funt to, 320 00:14:33,500 --> 00:14:35,460 Standard IO i CS50 dot h. 321 00:14:35,460 --> 00:14:37,700 A potem mam deklarację funkcji. 322 00:14:37,700 --> 00:14:39,570 To jest, gdzie jestem mówi kompilator jestem 323 00:14:39,570 --> 00:14:42,850 będzie pisanie Funkcja o nazwie dodać dwa ints. 324 00:14:42,850 --> 00:14:45,780 To będzie wydawać typ całkowity zmienny. 325 00:14:45,780 --> 00:14:47,360 To właśnie ta część jest tutaj. 326 00:14:47,360 --> 00:14:51,950 A potem mam dwa wejścia do niej i b, z których każdy jest liczbą całkowitą. 327 00:14:51,950 --> 00:14:58,250 Wewnątrz głównej, pytam użytkownika o Wejście mówiąc, dał mi całkowitą. 328 00:14:58,250 --> 00:15:01,040 A oni się monit, aby zapomnieć int, która jest funkcją 329 00:15:01,040 --> 00:15:03,240 znajduje się w bibliotece CS50. 330 00:15:03,240 --> 00:15:07,660 I że zostanie zapisane w x, zmienna całkowita. 331 00:15:07,660 --> 00:15:09,886 >> Następnie skłonić ich do innej liczby całkowitej. 332 00:15:09,886 --> 00:15:13,070 Otrzymujemy kolejną liczbę całkowitą i zapisać, że w r. 333 00:15:13,070 --> 00:15:17,990 A potem, tu, na linii 28, jest gdzie robimy nasz wywołanie funkcji. 334 00:15:17,990 --> 00:15:23,770 Mówimy, int Z równych dodać 2 ints x przecinek y. 335 00:15:23,770 --> 00:15:25,980 Czy widzisz, dlaczego to ma sens? 336 00:15:25,980 --> 00:15:29,710 x jest zmienną typu całkowitego, y jest zmienną typu liczba całkowita. 337 00:15:29,710 --> 00:15:31,220 Więc to jest dobre. 338 00:15:31,220 --> 00:15:34,570 To ma sens z co nasi funkcji Deklaracja na linii 17 wygląda. 339 00:15:34,570 --> 00:15:38,300 Lista wejście oddzielone przecinkami spodziewa się dwie liczby całkowite, a i b. 340 00:15:38,300 --> 00:15:40,300 W tym przypadku, możemy wywołać im, co chcemy. 341 00:15:40,300 --> 00:15:42,300 To właśnie spodziewa się dwie liczby całkowite. 342 00:15:42,300 --> 00:15:44,930 A x oznacza liczbę całkowitą, a y jest liczbą całkowitą. 343 00:15:44,930 --> 00:15:45,640 To działa. 344 00:15:45,640 --> 00:15:48,680 >> I wiemy, że funkcja będzie do wyjścia an liczbami całkowitymi, jak również. 345 00:15:48,680 --> 00:15:51,290 I tak jesteśmy przechowywania Wyjście funkcji 346 00:15:51,290 --> 00:15:56,050 dodać dwa ints, w typu całkowitego Zmienna, której dzwonisz z. 347 00:15:56,050 --> 00:16:01,980 I wtedy możemy powiedzieć, suma procent i oraz procent i jest procent i. 348 00:16:01,980 --> 00:16:06,210 x, y i z, odpowiednio, wypełnienie tych procent i jest. 349 00:16:06,210 --> 00:16:08,334 Co stanowi definicję dodać dwa int wygląda? 350 00:16:08,334 --> 00:16:09,125 To bardzo proste. 351 00:16:09,125 --> 00:16:11,270 To jeden z tych, które mamy Właśnie widziałem przed chwilą, 352 00:16:11,270 --> 00:16:14,390 int suma równa sumę oraz b powrotną. 353 00:16:14,390 --> 00:16:15,420 czy to działa? 354 00:16:15,420 --> 00:16:17,270 Miejmy zapisać plik. 355 00:16:17,270 --> 00:16:22,080 A potem tutaj na moim terminalu Mam zamiar zrobić sumator 1, 356 00:16:22,080 --> 00:16:23,000 i wyczyścić ekran. 357 00:16:23,000 --> 00:16:25,791 Mam zamiar powiększyć, bo wiem, jest to trochę trudne do zauważenia. 358 00:16:25,791 --> 00:16:31,520 359 00:16:31,520 --> 00:16:33,770 >> Więc musimy skompilować ten program jako żmija 1. 360 00:16:33,770 --> 00:16:37,910 Tak więc możemy zrobić dot slash żmija 1. 361 00:16:37,910 --> 00:16:40,060 Daj mi liczbę całkowitą, 10. 362 00:16:40,060 --> 00:16:42,380 Daj mi jeszcze jedną liczbę całkowitą, 20. 363 00:16:42,380 --> 00:16:45,200 Suma 10 i 20 30. 364 00:16:45,200 --> 00:16:47,615 Tak zrobiliśmy pomyślnego wywołania funkcji. 365 00:16:47,615 --> 00:16:55,820 Można ponownie uruchomić funkcję, negatywne 10, 17 suma ujemnego 10 i 17 wynosi 7. 366 00:16:55,820 --> 00:16:57,120 Ta funkcja działa. 367 00:16:57,120 --> 00:16:59,240 Ma zachowanie że oczekujemy go. 368 00:16:59,240 --> 00:17:03,610 I tak zrobiliśmy sukces Funkcja, definicja, deklaracja, 369 00:17:03,610 --> 00:17:07,288 i skuteczne wywołanie funkcji. 370 00:17:07,288 --> 00:17:09,079 Para różne punkty o funkcjach 371 00:17:09,079 --> 00:17:10,611 zanim zakończyć ten rozdział. 372 00:17:10,611 --> 00:17:12,319 Przypomnijmy, od naszego omówienie typów danych, 373 00:17:12,319 --> 00:17:16,109 Wcześniej, który funkcjonuje czasami może podjąć żadnych nakładów. 374 00:17:16,109 --> 00:17:17,930 Jeśli tak jest, to zadeklarować funkcję 375 00:17:17,930 --> 00:17:19,788 jako posiadające listę nieważne argumentów. 376 00:17:19,788 --> 00:17:21,579 Pamiętasz, co się Najczęstszą funkcją 377 00:17:21,579 --> 00:17:25,036 widzieliśmy do tej pory, że trwa lista argumentów nieważne jest? 378 00:17:25,036 --> 00:17:27,300 Jego głównym. 379 00:17:27,300 --> 00:17:30,850 Przypomnijmy także, że funkcję czasem w rzeczywistości nie mają wyjścia. 380 00:17:30,850 --> 00:17:34,210 W tym przypadku, deklarujemy funkcję jako posiadające typ void powrotną. 381 00:17:34,210 --> 00:17:37,880 Miejmy zakończyć ten rozdział przez rozwiązywanie problemu praktyk. 382 00:17:37,880 --> 00:17:39,900 >> Więc tutaj jest problem rozplanowane. 383 00:17:39,900 --> 00:17:43,630 Chcę, aby napisać funkcję nazywa ważna trójkąt. 384 00:17:43,630 --> 00:17:47,410 Co powinien zrobić tej funkcji jest wykonanie trzech liczb rzeczywistych 385 00:17:47,410 --> 00:17:51,930 które reprezentują długości trzech boki trójkąta jako jego parametrów, 386 00:17:51,930 --> 00:17:54,550 lub jego argumenty, lub jej inputs-- inny zestaw synonimów 387 00:17:54,550 --> 00:17:57,340 które mogą wystąpić. 388 00:17:57,340 --> 00:18:01,120 Funkcja ta powinna albo wyjście prawda lub fałsz 389 00:18:01,120 --> 00:18:04,960 w zależności od tego, czy te trzy długościach są zdolne do tworzenia trójkąta. 390 00:18:04,960 --> 00:18:09,930 Czy pamiętasz, typ danych, które kiedyś wskazują, prawda czy fałsz? 391 00:18:09,930 --> 00:18:11,436 Teraz jak można zaimplementować to? 392 00:18:11,436 --> 00:18:13,810 Dobrze wiedzieć, że są parą zasad dotyczących trójkąty 393 00:18:13,810 --> 00:18:15,480 które są rzeczywiście przydatne wiedzieć. 394 00:18:15,480 --> 00:18:18,292 Trójkąt może mieć tylko Boki z dodatnim długości. 395 00:18:18,292 --> 00:18:19,000 To ma sens. 396 00:18:19,000 --> 00:18:21,432 Prawdopodobnie mówiąc, duh. 397 00:18:21,432 --> 00:18:23,390 Inną rzeczą, aby pamiętać, jednak to, że suma 398 00:18:23,390 --> 00:18:25,484 od długości dowolnego dwa boki trójkąta 399 00:18:25,484 --> 00:18:27,650 musi być większa niż Długość trzeciej strony. 400 00:18:27,650 --> 00:18:28,690 To rzeczywiście prawda. 401 00:18:28,690 --> 00:18:34,150 Nie można mieć trójkąt stronach 1, 2 i 4, na przykład dlatego, że 1 plus 2 402 00:18:34,150 --> 00:18:36,270 nie jest większa niż 4. 403 00:18:36,270 --> 00:18:38,870 To są zasady, które ustalenie, czy trzy 404 00:18:38,870 --> 00:18:42,740 Wejścia mogą niewykluczone tworzą trójkąt. 405 00:18:42,740 --> 00:18:46,360 Więc potrwać kilka minut i oświadczam, a następnie zdefiniować 406 00:18:46,360 --> 00:18:49,810 funkcja ta nazywa się ważne trójkąt, tak, że rzeczywiście 407 00:18:49,810 --> 00:18:51,650 ma zachowanie określonego tutaj. 408 00:18:51,650 --> 00:18:57,030 >> Będzie wyjście prawdziwe, jeśli tych trzech stron mogą zawierającej trójkąt 409 00:18:57,030 --> 00:19:01,950 false w przeciwnym wypadku Gotowy, aby zobaczyć, jak to zrobiłeś? 410 00:19:01,950 --> 00:19:04,650 Oto jedna z implementacji od ważne trójkąt. 411 00:19:04,650 --> 00:19:05,770 To nie jest jedyny. 412 00:19:05,770 --> 00:19:07,770 Pozdrawiam może się nieznacznie różnić. 413 00:19:07,770 --> 00:19:11,040 Ale ten ma w rzeczywistości mieć zachowanie, które spodziewamy. 414 00:19:11,040 --> 00:19:14,450 Deklarujemy naszą funkcję u bardzo góry, bool ważny trójkąt 415 00:19:14,450 --> 00:19:16,630 unosić x pływaka r pływaka z. 416 00:19:16,630 --> 00:19:18,930 Więc jeszcze raz, ta funkcja trwa trzy liczby rzeczywiste 417 00:19:18,930 --> 00:19:22,280 jako jego argumenty, pływające Zmienne wartości punktowej, 418 00:19:22,280 --> 00:19:26,510 i wyprowadza prawda lub fałsz Wartość, która jest logiczna, przypomnieć. 419 00:19:26,510 --> 00:19:28,660 Więc dlatego typ zwracany jest bool. 420 00:19:28,660 --> 00:19:30,016 Następnie definiujemy funkcję. 421 00:19:30,016 --> 00:19:33,140 Pierwszą rzeczą, jaką możemy zrobić, to upewnij się, że wszystkie boki są dodatnie. 422 00:19:33,140 --> 00:19:37,010 Jeśli x jest mniejsza niż lub równa 0, lub y jest równy 0, 423 00:19:37,010 --> 00:19:41,050 lub jeśli Z jest mniejsze niż lub równe 0 ° C, które nie mogą być ewentualnie trójkąta. 424 00:19:41,050 --> 00:19:42,380 Oni nie mają pozytywne strony. 425 00:19:42,380 --> 00:19:45,790 I tak możemy wrócić fałszywe w tej sytuacji. 426 00:19:45,790 --> 00:19:49,010 Następnie, upewnij się, że każda para wejść 427 00:19:49,010 --> 00:19:51,830 jest większe niż trzeci. 428 00:19:51,830 --> 00:19:54,530 >> Więc jeśli x oraz y jest mniejsza niż lub równy z, 429 00:19:54,530 --> 00:19:57,060 lub jeśli x oraz z mniej lub równa y, 430 00:19:57,060 --> 00:20:01,730 lub y oraz z wynosi mniej niż lub równa x, która również nie może być ważny trójkąt. 431 00:20:01,730 --> 00:20:03,800 Więc wracamy znów fałszywe. 432 00:20:03,800 --> 00:20:06,900 Zakładając, że minęliśmy obu kontroli choć, to możemy wrócić prawda. 433 00:20:06,900 --> 00:20:09,440 Bo tych trzech stron mogą returning-- 434 00:20:09,440 --> 00:20:11,647 tworzyć prawidłową trójkąta. 435 00:20:11,647 --> 00:20:12,230 I to wszystko. 436 00:20:12,230 --> 00:20:13,830 Masz już zgłoszone i zdefiniowane. 437 00:20:13,830 --> 00:20:17,330 A być może uda się teraz obsłudze i wywołać tę funkcję. 438 00:20:17,330 --> 00:20:19,470 Dobra robota. 439 00:20:19,470 --> 00:20:20,650 Jestem Doug Lloyd. 440 00:20:20,650 --> 00:20:22,820 To CS50. 441 00:20:22,820 --> 00:20:24,340