1 00:00:00,000 --> 00:00:04,664 2 00:00:04,664 --> 00:00:05,580 Doug LLOYD: Todo ben. 3 00:00:05,580 --> 00:00:08,877 Entón agora imos afrontar unha tema realmente grande, as funcións. 4 00:00:08,877 --> 00:00:11,460 Ata agora, no curso, todo o programas que teño escrito 5 00:00:11,460 --> 00:00:12,969 ser escrito no inicio. 6 00:00:12,969 --> 00:00:14,260 Son programas moi sinxelo. 7 00:00:14,260 --> 00:00:16,940 Non é preciso ter todos estes ramas e cousas a suceder. 8 00:00:16,940 --> 00:00:18,773 Podemos só caber todo dentro principal e 9 00:00:18,773 --> 00:00:20,407 non queda terriblemente esmagadora. 10 00:00:20,407 --> 00:00:22,990 Pero, como o curso vai sobre e cando comeza a desenvolver programas 11 00:00:22,990 --> 00:00:26,260 de forma independente, eles probablemente van comezando a estar moito máis que 10 12 00:00:26,260 --> 00:00:27,200 ou 15 liñas. 13 00:00:27,200 --> 00:00:31,400 Pode que centos ou miles ou decenas de miles de liñas de código. 14 00:00:31,400 --> 00:00:34,690 E iso realmente non é que un pensamento tolo. 15 00:00:34,690 --> 00:00:39,720 Polo tanto, probablemente non é unha boa idea para manter todo dentro do principal. 16 00:00:39,720 --> 00:00:43,240 Pode ser un pouco difícil de atopar o que está a buscar se fai iso. 17 00:00:43,240 --> 00:00:47,040 >> Felizmente, non obstante C, e practicamente cada outra linguaxe de programación que 18 00:00:47,040 --> 00:00:50,386 pode traballar, permite nós escribir funcións. 19 00:00:50,386 --> 00:00:52,260 E eu estou indo só para tomar un rápido separadamente aquí 20 00:00:52,260 --> 00:00:54,971 mencionar que é funcións unha área da ciencia da computación. 21 00:00:54,971 --> 00:00:57,970 E vai ver moitos máis deles en varios puntos ao longo do curso 22 00:00:57,970 --> 00:00:59,290 e se continúa. 23 00:00:59,290 --> 00:01:02,280 Onde hai unha morea de sinónimos para a mesma palabra. 24 00:01:02,280 --> 00:01:03,390 Entón, nós chamamos as funcións. 25 00:01:03,390 --> 00:01:05,980 Pero tamén pode oín-los chamada procedementos, 26 00:01:05,980 --> 00:01:09,570 ou métodos, en particular, se xa feito calquera programación orientada a obxecto 27 00:01:09,570 --> 00:01:11,950 antes-- e non se preocupe se non ten, non 28 00:01:11,950 --> 00:01:14,280 unha gran pero en deal-- linguaxes orientadas auditoría 29 00:01:14,280 --> 00:01:16,129 son frecuentemente chamados métodos. 30 00:01:16,129 --> 00:01:17,670 Ás veces, son chamados de subrutinas. 31 00:01:17,670 --> 00:01:20,690 Pero realmente se refiren para a mesma idea de base. 32 00:01:20,690 --> 00:01:22,480 >> Imos ver o que é idea. 33 00:01:22,480 --> 00:01:23,310 ¿Que é unha función? 34 00:01:23,310 --> 00:01:26,470 Ben é realmente unha función nada máis que unha caixa negra. 35 00:01:26,470 --> 00:01:31,430 A caixa negra que ten un conxunto de cero, ou máis entradas e un única saída. 36 00:01:31,430 --> 00:01:33,420 Así, por exemplo, esta pode ser unha función. 37 00:01:33,420 --> 00:01:35,510 Esta é unha función chamada func. 38 00:01:35,510 --> 00:01:39,330 E leva tres entradas a, b e c. 39 00:01:39,330 --> 00:01:42,580 E dentro desa caixa negra, que Non sei exactamente o que fai, 40 00:01:42,580 --> 00:01:45,100 pero procesa as entradas dalgún xeito e entón 41 00:01:45,100 --> 00:01:48,680 dá unha única saída, neste caso, Z. 42 00:01:48,680 --> 00:01:50,504 Agora, para facelo un pouco menos abstracta, nós 43 00:01:50,504 --> 00:01:52,420 Podería dicir que quizais nós teñen unha función chamada 44 00:01:52,420 --> 00:01:58,750 engadir que leva tres entradas a, b, e C e procesa a saída dalgún xeito 45 00:01:58,750 --> 00:02:01,010 dentro da caixa negra para producir unha única saída. 46 00:02:01,010 --> 00:02:05,190 Polo tanto, neste caso, se engadir leva de 3, 6, e 7. 47 00:02:05,190 --> 00:02:07,020 Nalgún lugar no engadir a función, fariamos 48 00:02:07,020 --> 00:02:09,750 esperar que sexan engadidos en conxunto para producir a saída, que 49 00:02:09,750 --> 00:02:13,220 é 3 máis 6 máis 7 ou 16. 50 00:02:13,220 --> 00:02:17,940 >> Así mesmo, ten unha función chamada multi que leva dúas entradas, a e b, 51 00:02:17,940 --> 00:02:21,070 procesa-los de algunha maneira, tales que a saída da función 52 00:02:21,070 --> 00:02:22,920 é o produto das dúas entradas. 53 00:02:22,920 --> 00:02:25,080 As dúas entradas multiplicados xuntos. 54 00:02:25,080 --> 00:02:29,150 4 e 5 sendo pasado para multi, algo pasa, a saída esperamos 55 00:02:29,150 --> 00:02:31,090 é 20. 56 00:02:31,090 --> 00:02:32,507 Por que chamalo dunha caixa negra? 57 00:02:32,507 --> 00:02:34,840 Ben, se non estamos escribindo o Funciona nós mesmos, o que 58 00:02:34,840 --> 00:02:36,869 fixemos un pouco ata agora CS50. 59 00:02:36,869 --> 00:02:39,910 Vimos de impresión f, por exemplo, que é unha función que non escribimos 60 00:02:39,910 --> 00:02:42,305 nós mesmos, pero usar o tempo. 61 00:02:42,305 --> 00:02:44,180 Se non estamos escribindo as funcións de nós mesmos, 62 00:02:44,180 --> 00:02:48,450 nós realmente non precisa saber como é realmente aplicada baixo o capó. 63 00:02:48,450 --> 00:02:51,710 >> Así, por exemplo a caixa negra I acabo de mostrar á multiplicación, 64 00:02:51,710 --> 00:02:53,740 multi a, b poderían ser defined-- e este é só 65 00:02:53,740 --> 00:02:57,902 podería ser algún pseudocode-- definida como unha saída veces b. 66 00:02:57,902 --> 00:02:58,860 Isto ten sentido, certo. 67 00:02:58,860 --> 00:03:01,370 Se temos unha función chamada multi que leva dúas entradas. 68 00:03:01,370 --> 00:03:04,750 Era de esperar que a saída sería ser as dúas entradas multiplicados xuntos, 69 00:03:04,750 --> 00:03:06,240 un veces b. 70 00:03:06,240 --> 00:03:09,170 Pero tamén podía ser multi aplicado como este, 71 00:03:09,170 --> 00:03:13,150 temos unha variable de contador para prepare-se para dentro gráfica a 0. 72 00:03:13,150 --> 00:03:18,000 E, despois, repetir este proceso b veces engadir ao contador. 73 00:03:18,000 --> 00:03:24,270 Por exemplo, se multiplicarmos por 3a 5B, poderiamos dicir definir contador a 0, 74 00:03:24,270 --> 00:03:27,700 Repita cinco veces, engadir 3 a barra. 75 00:03:27,700 --> 00:03:34,490 Entón, imos comezar a 0 e entón nós facemos iso cinco veces 3, 6, 9, 12, 15. 76 00:03:34,490 --> 00:03:37,500 É o mesmo resultado. Nós aínda obter 3 veces só 5 77 00:03:37,500 --> 00:03:39,500 a aplicación é diferente. 78 00:03:39,500 --> 00:03:41,490 >> Iso é o que queremos dicir cando dicimos que unha caixa negra. 79 00:03:41,490 --> 00:03:44,406 Significa só que realmente non me importa como é aplicado baixo o capó 80 00:03:44,406 --> 00:03:46,170 sempre que a saída é o que se espera. 81 00:03:46,170 --> 00:03:49,045 En realidade, iso é parte do contrato do uso de funcións, especialmente 82 00:03:49,045 --> 00:03:50,630 funcións que os outros escriben. 83 00:03:50,630 --> 00:03:53,980 O comportamento é sempre vai ser típico, imprevisible 84 00:03:53,980 --> 00:03:55,420 a base do nome da función. 85 00:03:55,420 --> 00:03:57,500 E é por iso que é realmente importante cando escribir funcións 86 00:03:57,500 --> 00:04:00,020 ou cando outras persoas escribir funcións que pode usar, 87 00:04:00,020 --> 00:04:03,590 os que teñen funcións nomes claros e relativamente obvias, 88 00:04:03,590 --> 00:04:04,990 e están ben documentados. 89 00:04:04,990 --> 00:04:08,560 Que é certamente o caso para a función de impresión como f. 90 00:04:08,560 --> 00:04:09,860 >> Entón, por que usar funcións? 91 00:04:09,860 --> 00:04:14,220 Ben, como dixen anteriormente, se escribirmos todo o noso código dentro das cousas principais 92 00:04:14,220 --> 00:04:17,120 pode ser moi pesado e realmente complicado. 93 00:04:17,120 --> 00:04:19,980 Funcións connosco permitir que a capacidade para organizar as cousas e acabar con 94 00:04:19,980 --> 00:04:24,540 un problema moi complicado en unha morea sub partes máis gerenciáveis. 95 00:04:24,540 --> 00:04:28,130 Funcións tamén nos permiten simplificar o proceso de codificación. 96 00:04:28,130 --> 00:04:33,080 É moito máis fácil de depurar a 10 función de liña versus unha liña 100 97 00:04:33,080 --> 00:04:35,890 función ou unha función 1000 liña. 98 00:04:35,890 --> 00:04:38,400 Se só temos de depuración pequenos anacos de cada vez, 99 00:04:38,400 --> 00:04:42,110 ou escribir pequenos anacos no momento, fai que a experiencia de programación 100 00:04:42,110 --> 00:04:43,070 moito mellor. 101 00:04:43,070 --> 00:04:44,910 Confío en min sobre iso. 102 00:04:44,910 --> 00:04:48,400 >> Para rematar, se escribirmos funcións que pode reutilizar estas varias partes. 103 00:04:48,400 --> 00:04:49,880 As funcións poden ser reciclados. 104 00:04:49,880 --> 00:04:51,880 Poden ser utilizados en un ou outro programa. 105 00:04:51,880 --> 00:04:53,713 Xa escribiu a función, o único que 106 00:04:53,713 --> 00:04:56,530 cómpre facer é dicir que o programa onde atopar esa función. 107 00:04:56,530 --> 00:04:59,680 Temos benvida a reciclaxe e utilización de imprimir f hai máis de 40 anos. 108 00:04:59,680 --> 00:05:02,150 Pero ela só foi escrita unha vez. 109 00:05:02,150 --> 00:05:04,270 Moi útil, non. 110 00:05:04,270 --> 00:05:04,830 Todo ben. 111 00:05:04,830 --> 00:05:06,040 Así, as funcións son grandes. 112 00:05:06,040 --> 00:05:06,860 Sabemos diso. 113 00:05:06,860 --> 00:05:08,700 Agora imos comezar a escribilos. 114 00:05:08,700 --> 00:05:10,830 Imos comezar a recibir Los nos nosos programas. 115 00:05:10,830 --> 00:05:13,869 Co fin de facer iso, o primeiro cousa que facemos é declarar a función. 116 00:05:13,869 --> 00:05:16,160 Cando declarar unha función o que está facendo, basicamente, 117 00:05:16,160 --> 00:05:18,900 está dicindo o compilador, hey, só para ti saber, 118 00:05:18,900 --> 00:05:20,850 Estou indo a ser escrito unha función máis tarde 119 00:05:20,850 --> 00:05:22,987 e aquí está o que vai ollar como. 120 00:05:22,987 --> 00:05:24,820 A razón para isto é porque compiladores poida 121 00:05:24,820 --> 00:05:27,900 facer algunhas cousas estrañas, se ven un conxunto de símbolos 122 00:05:27,900 --> 00:05:29,560 que non está familiarizado. 123 00:05:29,560 --> 00:05:33,000 Entón, nós só dar o compilador un heads-up, eu estou creando unha función 124 00:05:33,000 --> 00:05:35,492 e só pode facer iso. 125 00:05:35,492 --> 00:05:38,450 Declaracións de función xeralmente se está organizando o seu código dun xeito 126 00:05:38,450 --> 00:05:41,872 que os outros poderá comprender e facer uso, 127 00:05:41,872 --> 00:05:44,330 normalmente quere poñer todo das súas declaracións de función 128 00:05:44,330 --> 00:05:48,220 na parte superior do seu código, dereita antes de comezar a escribir principal mesmo. 129 00:05:48,220 --> 00:05:50,770 E convenientemente, hai unha forma moi normal 130 00:05:50,770 --> 00:05:53,500 que cada declaración de función segue. 131 00:05:53,500 --> 00:05:56,090 Todos eles moi ben coma este. 132 00:05:56,090 --> 00:06:01,440 Hai tres partes a unha función declaración, tipo de retorno, nome, 133 00:06:01,440 --> 00:06:03,420 e lista de argumentos. 134 00:06:03,420 --> 00:06:07,180 >> Agora, o tipo de retorno é o tipo de variable a saída da función vontade. 135 00:06:07,180 --> 00:06:10,710 Así, por exemplo, se pensamos de volta un minuto para a multiplicación de dous 136 00:06:10,710 --> 00:06:15,690 números de función, o que esperamos se multiplicarmos un enteiro por un número enteiro 137 00:06:15,690 --> 00:06:18,502 a saída será probablemente un enteiro, non. 138 00:06:18,502 --> 00:06:20,710 Multiplicado dous enteiros xuntos, obtén un número enteiro. 139 00:06:20,710 --> 00:06:24,167 Así, o tipo de retorno que función sería int. 140 00:06:24,167 --> 00:06:26,000 Nome é o que quere para chamar a súa función. 141 00:06:26,000 --> 00:06:29,330 Este é probablemente o menos importante parte da declaración de función, 142 00:06:29,330 --> 00:06:30,827 en termos de funcionalidade. 143 00:06:30,827 --> 00:06:33,160 Pero é, en realidade, probablemente, un das partes máis importantes 144 00:06:33,160 --> 00:06:36,243 da declaración da función en termos saber o que a función realmente 145 00:06:36,243 --> 00:06:37,120 fai. 146 00:06:37,120 --> 00:06:40,474 Se nomear súa función f g ou h ou misterio ou algo parecido, 147 00:06:40,474 --> 00:06:42,765 probablemente vai conseguir un pouco tropezou tentando 148 00:06:42,765 --> 00:06:44,650 para lembrar o que facer estas funcións. 149 00:06:44,650 --> 00:06:47,880 Por iso, é importante dar o seu nomes significativos da función. 150 00:06:47,880 --> 00:06:51,030 >> Para rematar, lista de argumentos está a lista separada por comas 151 00:06:51,030 --> 00:06:55,260 de todas as entradas para a función, cada un dos cales ten un tipo e un nome. 152 00:06:55,260 --> 00:06:57,840 Polo tanto, non só ten que especificar o tipo de variable 153 00:06:57,840 --> 00:07:00,760 a saída da función vontade, tamén quere especificar 154 00:07:00,760 --> 00:07:07,694 que tipo e tipos de variables as función será aceptar como entradas. 155 00:07:07,694 --> 00:07:08,860 Entón imos facer un exemplo aquí. 156 00:07:08,860 --> 00:07:10,220 Nós só dar un ollo nunha forma máis concreta. 157 00:07:10,220 --> 00:07:13,130 Entón aquí está un exemplo dunha función declaración de que unha función 158 00:07:13,130 --> 00:07:14,925 quere engadir dous enteiros xuntos. 159 00:07:14,925 --> 00:07:17,800 A suma dos dous números enteiros vai ser un enteiro tamén, como acabamos 160 00:07:17,800 --> 00:07:18,450 discutidos. 161 00:07:18,450 --> 00:07:21,610 E así o tipo de retorno, aquí en verde, sería int. 162 00:07:21,610 --> 00:07:25,190 Isto só nos que engadir dous ints di vai, ao final do día, 163 00:07:25,190 --> 00:07:28,799 de saída, ou cuspir de volta para nós, un número enteiro. 164 00:07:28,799 --> 00:07:31,590 Dado que esta función fai nós quero darlle un nome significativo. 165 00:07:31,590 --> 00:07:33,630 Fai dous ints parece axeitada, tendo en conta 166 00:07:33,630 --> 00:07:37,574 estamos levando dous enteiros como insumos e espero que xuntalas. 167 00:07:37,574 --> 00:07:40,240 Pode ser un pouco de un incómodo nome e, a verdade, esta función 168 00:07:40,240 --> 00:07:42,430 Probablemente non é necesario xa que temos a adición 169 00:07:42,430 --> 00:07:46,310 operador, se se lembra da nosa discusión dos operadores, anteriormente. 170 00:07:46,310 --> 00:07:49,650 Pero imos só dicir que por mor de argumento de que esta función é útil 171 00:07:49,650 --> 00:07:52,860 e por iso imos chamalo de engadir dous ints. 172 00:07:52,860 --> 00:07:55,230 Para rematar, esta función ten dúas entradas. 173 00:07:55,230 --> 00:07:56,960 Cada un dos cales é un número enteiro. 174 00:07:56,960 --> 00:07:59,900 Entón temos esa coma lista separada de entradas. 175 00:07:59,900 --> 00:08:02,830 Agora nós xeralmente queren dar un nome de cada unha delas 176 00:08:02,830 --> 00:08:05,070 de xeito que xa se poden usar dentro da función. 177 00:08:05,070 --> 00:08:07,180 Os nomes non son terriblemente importante. 178 00:08:07,180 --> 00:08:11,400 >> Neste caso, non necesariamente ten algún significado a elas asociadas. 179 00:08:11,400 --> 00:08:13,140 Así, podemos só chamar-lles a e b. 180 00:08:13,140 --> 00:08:14,257 Isto é totalmente bo. 181 00:08:14,257 --> 00:08:16,090 Se, con todo, atopa se nunha situación 182 00:08:16,090 --> 00:08:19,497 onde os nomes das variables pode ser realmente importante, 183 00:08:19,497 --> 00:08:21,830 pode querer chamalos algo que non sexa a eb 184 00:08:21,830 --> 00:08:24,701 para darlles algo máis simbolicamente significativa. 185 00:08:24,701 --> 00:08:27,700 Pero, neste caso, nós realmente non saber algo sobre a función. 186 00:08:27,700 --> 00:08:29,320 Nós só queremos engadir dous enteiros. 187 00:08:29,320 --> 00:08:32,429 Entón imos chamar os números enteiros a e b. 188 00:08:32,429 --> 00:08:33,990 Isto é un exemplo. 189 00:08:33,990 --> 00:08:36,287 >> Por que non tomar unha segunda para pensar sobre este, 190 00:08:36,287 --> 00:08:38,870 como escribir unha función declaración de que unha función 191 00:08:38,870 --> 00:08:42,940 Multiplica dous números de punto flotante? 192 00:08:42,940 --> 00:08:45,910 Vostede recorda o que un número de punto flotante é? 193 00:08:45,910 --> 00:08:48,120 O que sería esa función declaración parece? 194 00:08:48,120 --> 00:08:53,330 En realidade, eu recomendo que deter o vídeo aquí e levar canto tempo precisa. 195 00:08:53,330 --> 00:08:55,521 Pense sobre o que esta declaración de función sería? 196 00:08:55,521 --> 00:08:56,770 Cal sería o tipo de retorno que? 197 00:08:56,770 --> 00:08:58,103 O que sería un nome significativo ser? 198 00:08:58,103 --> 00:08:59,580 Cales serían as entradas de ser? 199 00:08:59,580 --> 00:09:03,190 Entón, por que non deixar o vídeo aquí e escribirlle unha declaración de función 200 00:09:03,190 --> 00:09:07,640 para unha función que multiplicaría dous números de punto flotante en conxunto. 201 00:09:07,640 --> 00:09:09,330 Esperamos que deixou o vídeo. 202 00:09:09,330 --> 00:09:12,950 >> Entón imos dar un ollo a un exemplo dunha declaración posible. 203 00:09:12,950 --> 00:09:17,340 Float gráfica dous reais flotan x, y flotador. 204 00:09:17,340 --> 00:09:19,090 O produto de dous números de punto flotante, 205 00:09:19,090 --> 00:09:21,710 recordar que son coma nós representan números reais 206 00:09:21,710 --> 00:09:26,770 ou números con valores decimais en c, vai ser un número de punto flotante. 207 00:09:26,770 --> 00:09:28,570 Cando multiplica un decimal por un decimal, 208 00:09:28,570 --> 00:09:30,460 probablemente está indo a obter un decimal. 209 00:09:30,460 --> 00:09:31,960 Quere darlle un nome relevante. 210 00:09:31,960 --> 00:09:33,810 Multiplique dous reais parece ben. 211 00:09:33,810 --> 00:09:36,620 Pero podería realmente chamalo multi dous coches alegóricos, ou flotadores gráfica. 212 00:09:36,620 --> 00:09:39,540 Algo así, sempre que deu algún significado real ao que 213 00:09:39,540 --> 00:09:41,469 esa caixa negra ía facer. 214 00:09:41,469 --> 00:09:44,260 E unha vez máis, neste caso, non parece ter calquera significado conectado 215 00:09:44,260 --> 00:09:46,390 para os nomes dos variables que estamos pasando en, 216 00:09:46,390 --> 00:09:48,645 por iso, só chamalos x e y. 217 00:09:48,645 --> 00:09:51,020 Agora, se chamalos de algo outra cousa, iso é totalmente bo. 218 00:09:51,020 --> 00:09:53,310 En realidade, se fixo esta declaración en vez 219 00:09:53,310 --> 00:09:55,450 usando no canto de dúos de Carrozas, se recorda 220 00:09:55,450 --> 00:09:59,100 dobres que son unha diferente xeito a máis precisamente 221 00:09:59,100 --> 00:10:02,330 especificar números reais ou flotante variables de punto. 222 00:10:02,330 --> 00:10:03,620 Isto é totalmente ben tamén. 223 00:10:03,620 --> 00:10:04,670 Ou un deses sería óptimo. 224 00:10:04,670 --> 00:10:06,711 En realidade, hai varios combinacións diferentes 225 00:10:06,711 --> 00:10:08,410 de formas de declarar esta función. 226 00:10:08,410 --> 00:10:10,884 Pero estes son dous moi bos. 227 00:10:10,884 --> 00:10:12,550 Temos declarada unha función, iso é gran. 228 00:10:12,550 --> 00:10:15,700 Dixemos que o compilador é, o que imos facer. 229 00:10:15,700 --> 00:10:17,630 Agora imos realmente escribir esa función. 230 00:10:17,630 --> 00:10:20,750 Imos darlle unha definición, de xeito que dentro da caixa negra 231 00:10:20,750 --> 00:10:22,840 comportamento previsible está pasando. 232 00:10:22,840 --> 00:10:26,270 En realidade, estamos multiplicando dous reais números, ou engadindo números 233 00:10:26,270 --> 00:10:29,760 xuntos, ou facendo o que quere que sexa que pedimos a nosa función facer. 234 00:10:29,760 --> 00:10:32,780 >> Entón, en realidade, imos tentar definir multiplicar dous reais que acabamos 235 00:10:32,780 --> 00:10:35,350 falou sobre un segundo atrás. 236 00:10:35,350 --> 00:10:38,560 Agora, o inicio a definición de función 237 00:10:38,560 --> 00:10:41,720 parece case exactamente o mesmo como unha declaración de función. 238 00:10:41,720 --> 00:10:43,170 Eu teño os dous aquí. 239 00:10:43,170 --> 00:10:47,770 Na parte superior está a declaración de función, tipo, nome, argumento separados por comas 240 00:10:47,770 --> 00:10:49,410 lista, punto e coma. 241 00:10:49,410 --> 00:10:53,800 A coma indica que que é unha declaración de función. 242 00:10:53,800 --> 00:10:57,060 O inicio da función definición parece case exactamente 243 00:10:57,060 --> 00:11:03,790 o mesmo, tipo, nome, separados por comas lista de argumentos, sen punto e coma, 244 00:11:03,790 --> 00:11:05,206 abrir chaveta. 245 00:11:05,206 --> 00:11:07,580 A clave de apertura, así como temos está a facer co principal, 246 00:11:07,580 --> 00:11:09,540 significa que estamos agora empezando a definir 247 00:11:09,540 --> 00:11:14,567 o que ocorre no interior da caixa negra que decidimos chamar gráfica dous reais. 248 00:11:14,567 --> 00:11:15,900 Aquí está un xeito de implementar lo. 249 00:11:15,900 --> 00:11:20,370 Poderiamos dicir, poderiamos declarar unha nova variable do tipo float chamado produto 250 00:11:20,370 --> 00:11:24,020 e asignar esa variable ao valor x veces y. 251 00:11:24,020 --> 00:11:27,306 E, a continuación, devolver o produto. 252 00:11:27,306 --> 00:11:28,430 Que significa retorno aquí. 253 00:11:28,430 --> 00:11:31,090 Ben retorno é o camiño que indican que é así 254 00:11:31,090 --> 00:11:33,400 estamos pasando a saída de volta para fóra. 255 00:11:33,400 --> 00:11:38,160 Así retornar algo, é o mesmo que, esta é a saída da caixa negra. 256 00:11:38,160 --> 00:11:40,732 Entón, iso é como facelo. 257 00:11:40,732 --> 00:11:42,190 Aquí está outra forma de implementar lo. 258 00:11:42,190 --> 00:11:45,050 Poderíamos só retornar x veces y. 259 00:11:45,050 --> 00:11:45,870 x é un float. 260 00:11:45,870 --> 00:11:46,660 y é un float. 261 00:11:46,660 --> 00:11:48,490 Entón x veces y tamén é un float. 262 00:11:48,490 --> 00:11:50,750 Nós nin sequera precisa crear outra variable. 263 00:11:50,750 --> 00:11:56,750 Entón esta é unha forma diferente de aplicar a mesma caixa negra exacta. 264 00:11:56,750 --> 00:11:58,570 >> Agora tome un momento, deter o vídeo de novo, 265 00:11:58,570 --> 00:12:01,680 e tentar definir engadir dous ints, que é a outra función que 266 00:12:01,680 --> 00:12:03,090 falou un momento atrás. 267 00:12:03,090 --> 00:12:06,440 Unha vez aquí, engada a función declaración, e así o punto e coma, 268 00:12:06,440 --> 00:12:08,420 e unha chaveta aberta e un rizado pechado 269 00:12:08,420 --> 00:12:12,080 cinta para indicar onde imos encher no contido de engadir dous ints, 270 00:12:12,080 --> 00:12:15,530 de xeito que se define o particular comportamento dentro da caixa negra. 271 00:12:15,530 --> 00:12:16,380 Entón, deter o vídeo. 272 00:12:16,380 --> 00:12:18,790 E aproveitar o máximo de tempo precisa probar e axustar 273 00:12:18,790 --> 00:12:25,040 unha implementación de engadir dous ints, tales que cando da función xera un valor, 274 00:12:25,040 --> 00:12:29,209 isto ocorre, en realidade, de retorno a suma das dúas entradas. 275 00:12:29,209 --> 00:12:32,000 Así como no exemplo anterior, hai moitas maneiras diferentes 276 00:12:32,000 --> 00:12:34,210 que podería aplicar engadir dous ints. 277 00:12:34,210 --> 00:12:35,130 Aquí está un. 278 00:12:35,130 --> 00:12:37,172 En aquí en laranxa teño só tiña uns comments-- 279 00:12:37,172 --> 00:12:38,880 Eu só engade algúns Comentarios para indicar 280 00:12:38,880 --> 00:12:41,400 o que está a suceder en cada liña de código. 281 00:12:41,400 --> 00:12:45,430 Entón eu declarar unha variable chamada suma do tipo int. 282 00:12:45,430 --> 00:12:47,279 Digo suma é igual a máis b. 283 00:12:47,279 --> 00:12:50,070 É alí onde está realmente facendo a adición dun traballo e B en conxunto. 284 00:12:50,070 --> 00:12:51,850 E eu volver suma. 285 00:12:51,850 --> 00:12:56,460 E iso ten sentido, porque suma é unha variable de tipo int. 286 00:12:56,460 --> 00:13:00,180 E cal é o tipo de datos que este función dime que vai para a saída? 287 00:13:00,180 --> 00:13:00,680 Int. 288 00:13:00,680 --> 00:13:03,072 Entón, eu estou volvendo suma, que é unha variable enteira. 289 00:13:03,072 --> 00:13:06,030 E iso ten sentido, xa que temos declarada e definida a nosa función 290 00:13:06,030 --> 00:13:07,320 facer. 291 00:13:07,320 --> 00:13:09,700 >> Agora tamén podes configurar a función deste xeito, 292 00:13:09,700 --> 00:13:15,260 int suma é igual a un plus B-- saltar esa step-- primeiro e, a continuación, voltar suma. 293 00:13:15,260 --> 00:13:17,760 Agora pode que tamén aplicou-lo deste xeito, 294 00:13:17,760 --> 00:13:19,180 que moi non recomendo. 295 00:13:19,180 --> 00:13:22,540 Isto é malo para un estilo cousa moi mala e deseño, 296 00:13:22,540 --> 00:13:24,420 pero fai, de feito, o traballo. 297 00:13:24,420 --> 00:13:30,199 Se tomar este código, que é int engadir malo víbora punto c, e usalo. 298 00:13:30,199 --> 00:13:31,990 Realmente non engadir dous enteiros xuntos. 299 00:13:31,990 --> 00:13:37,632 É unha aplicación moi pobre deste comportamento particular. 300 00:13:37,632 --> 00:13:38,340 Pero non funciona. 301 00:13:38,340 --> 00:13:41,200 É só para ilustrar o punto que realmente non 302 00:13:41,200 --> 00:13:44,530 importa o que pasa dentro a caixa negra, sempre 303 00:13:44,530 --> 00:13:46,510 xa que ten a saída que esperamos. 304 00:13:46,510 --> 00:13:48,870 Esta é unha caixa negra mal deseñado. 305 00:13:48,870 --> 00:13:53,801 Pero ao final do día, fai saída aínda a suma de máis b. 306 00:13:53,801 --> 00:13:54,300 Todo ben. 307 00:13:54,300 --> 00:13:56,320 Entón, nós temos funcións declarou. 308 00:13:56,320 --> 00:13:57,490 E nós función definida. 309 00:13:57,490 --> 00:13:58,540 Entón, iso é moi bo. 310 00:13:58,540 --> 00:14:03,020 Agora imos comezar a usar as funcións que xa declarou e definimos. 311 00:14:03,020 --> 00:14:05,960 Para chamar a un function-- é realmente moi easy-- todo o que tes que facer 312 00:14:05,960 --> 00:14:09,070 é pasalo argumentos adecuados, argumentos do tipo de datos 313 00:14:09,070 --> 00:14:11,600 que espera, e a continuación, asignar o retorno 314 00:14:11,600 --> 00:14:15,190 valor desa función e isto-- escusa me-- 315 00:14:15,190 --> 00:14:19,390 asignar o valor de retorno desa función a algo do tipo correcto. 316 00:14:19,390 --> 00:14:22,410 >> Entón imos dar un ollo iso na práctica nun ficheiro 317 00:14:22,410 --> 00:14:27,730 chamado víbora 1 punto c, que Eu teño no meu CS50 IDE. 318 00:14:27,730 --> 00:14:31,042 Entón aquí está víbora 1 punto c. 319 00:14:31,042 --> 00:14:33,500 A principios vedes que eu teño miña inclúe, libra inclúen, 320 00:14:33,500 --> 00:14:35,460 IO estándar, e CS50 dot h. 321 00:14:35,460 --> 00:14:37,700 E entón eu teño a miña declaración de función. 322 00:14:37,700 --> 00:14:39,570 Este é o lugar onde eu estou dicindo que eu son o compilador 323 00:14:39,570 --> 00:14:42,850 vai estar escribindo un función chamada engadir dous ints. 324 00:14:42,850 --> 00:14:45,780 Vai unha saída variable do tipo integer. 325 00:14:45,780 --> 00:14:47,360 Iso é o que esta parte é aquí mesmo. 326 00:14:47,360 --> 00:14:51,950 E entón eu teño dúas entradas para que unha e b, cada un dos cales é un número enteiro. 327 00:14:51,950 --> 00:14:58,250 Dentro do principal, eu preguntar ao usuario entrada dicindo, me dar un enteiro. 328 00:14:58,250 --> 00:15:01,040 E son solicitados para esquecer int, que é unha función que 329 00:15:01,040 --> 00:15:03,240 está incluído na biblioteca CS50. 330 00:15:03,240 --> 00:15:07,660 E iso está almacenado x, unha variable enteira. 331 00:15:07,660 --> 00:15:09,886 >> A continuación, leva-los a outro número enteiro. 332 00:15:09,886 --> 00:15:13,070 Estivemos con outro enteiro e almacenar que en y. 333 00:15:13,070 --> 00:15:17,990 E entón, aquí na liña 28, é onde facemos a nosa chamada de función. 334 00:15:17,990 --> 00:15:23,770 Estamos dicindo, iguais int z engadir 2 ints x coma y. 335 00:15:23,770 --> 00:15:25,980 Entender por que isto ten sentido? 336 00:15:25,980 --> 00:15:29,710 x é unha variable de tipo enteiro e y é unha variable de tipo enteiro. 337 00:15:29,710 --> 00:15:31,220 Entón, iso é bo. 338 00:15:31,220 --> 00:15:34,570 Isto ten sentido co que a nosa función declaración na liña 17 parece. 339 00:15:34,570 --> 00:15:38,300 A lista de entrada separadas por comas espera dous números enteiros, a e b. 340 00:15:38,300 --> 00:15:40,300 Nese caso, podemos chamá- eles o que queremos. 341 00:15:40,300 --> 00:15:42,300 El só espera dous números enteiros. 342 00:15:42,300 --> 00:15:44,930 E X é un número enteiro e y é un número enteiro. 343 00:15:44,930 --> 00:15:45,640 Isto funciona. 344 00:15:45,640 --> 00:15:48,680 >> E sabemos que a función está pasando para producir un enteiros ben. 345 00:15:48,680 --> 00:15:51,290 E así estamos almacenando o saída da función, 346 00:15:51,290 --> 00:15:56,050 engadir dous ints, nun tipo enteiro variable, que estamos chamando z. 347 00:15:56,050 --> 00:16:01,980 E entón podemos dicir, a suma de i por cento por cento e é por cento i i. 348 00:16:01,980 --> 00:16:06,210 x, y e z, respectivamente, enche os i de por cento. 349 00:16:06,210 --> 00:16:08,334 Cal é a definición de engadir dous ints parece? 350 00:16:08,334 --> 00:16:09,125 É moi sinxelo. 351 00:16:09,125 --> 00:16:11,270 É un dos nós só vin un segundo atrás, 352 00:16:11,270 --> 00:16:14,390 int suma é igual a un importe incrementado b retorno. 353 00:16:14,390 --> 00:16:15,420 Será que este traballo? 354 00:16:15,420 --> 00:16:17,270 Imos gardar o ficheiro. 355 00:16:17,270 --> 00:16:22,080 E, a continuación, para abaixo aquí no meu terminal Vou facer unha víbora, 356 00:16:22,080 --> 00:16:23,000 e eu limpar miña pantalla. 357 00:16:23,000 --> 00:16:25,791 Eu estou indo a aumentar o zoom, porque sei é un pouco difícil de ver. 358 00:16:25,791 --> 00:16:31,520 359 00:16:31,520 --> 00:16:33,770 >> Entón, nós compilar este programa como unha víbora. 360 00:16:33,770 --> 00:16:37,910 Entón o que podemos facer dot barra víbora 1. 361 00:16:37,910 --> 00:16:40,060 Dáme un número enteiro, 10. 362 00:16:40,060 --> 00:16:42,380 Déame outro enteiro, 20. 363 00:16:42,380 --> 00:16:45,200 A suma de 10 e 20 é de 30. 364 00:16:45,200 --> 00:16:47,615 Por iso, fixemos unha chamada de función exitosa. 365 00:16:47,615 --> 00:16:55,820 Pode realizar a función de novo, negativo 10, 17 suma negativa de 10 e 17 é de 7. 366 00:16:55,820 --> 00:16:57,120 Esta función funciona. 367 00:16:57,120 --> 00:16:59,240 Ten o comportamento que esperamos que el. 368 00:16:59,240 --> 00:17:03,610 E así fixemos unha exitosa función, definición, declaración, 369 00:17:03,610 --> 00:17:07,288 e unha chamada de función exitosa. 370 00:17:07,288 --> 00:17:09,079 Parella variado puntos sobre funcións 371 00:17:09,079 --> 00:17:10,611 antes de completar esta sección. 372 00:17:10,611 --> 00:17:12,319 Recordar da nosa discusión de tipos de datos, 373 00:17:12,319 --> 00:17:16,109 anteriormente, que funciona ás veces pode levar hai entradas. 374 00:17:16,109 --> 00:17:17,930 En tal caso, declarar a función 375 00:17:17,930 --> 00:17:19,788 como tendo unha lista de argumentos baleiro. 376 00:17:19,788 --> 00:17:21,579 Vostede recorda o que o máis función común 377 00:17:21,579 --> 00:17:25,036 vimos ata agora que leva unha lista de argumentos é nulo? 378 00:17:25,036 --> 00:17:27,300 É principal. 379 00:17:27,300 --> 00:17:30,850 Lembre tamén que a función ás veces realmente non ten unha saída. 380 00:17:30,850 --> 00:17:34,210 Nese caso, declaramos a función como tendo un tipo de retorno void. 381 00:17:34,210 --> 00:17:37,880 Imos completar esta sección afrontar un problema práctica. 382 00:17:37,880 --> 00:17:39,900 >> Entón aquí está o problema colocado para fóra. 383 00:17:39,900 --> 00:17:43,630 Quero que escribir unha función chamado triángulo válido. 384 00:17:43,630 --> 00:17:47,410 Que esta función debe facer é tomar tres números reais 385 00:17:47,410 --> 00:17:51,930 que representan as lonxitudes dos tres lados dun triángulo como os seus parámetros, 386 00:17:51,930 --> 00:17:54,550 ou os seus argumentos, ou a súa Insumos outro conxunto de sinónimos 387 00:17:54,550 --> 00:17:57,340 que se pode atopar. 388 00:17:57,340 --> 00:18:01,120 Esta función debe quere saída de verdadeiro ou falso 389 00:18:01,120 --> 00:18:04,960 dependendo se estes tres lonxitudes son capaces de facer un triángulo. 390 00:18:04,960 --> 00:18:09,930 Vostede recorda do tipo de datos que nós usado para indicar verdadeiro ou falso? 391 00:18:09,930 --> 00:18:11,436 Agora, como aplicar iso? 392 00:18:11,436 --> 00:18:13,810 Ben sei que hai unha parella de normas relativas triángulos 393 00:18:13,810 --> 00:18:15,480 que son realmente útiles para saber. 394 00:18:15,480 --> 00:18:18,292 Un triángulo só pode ter lados con lonxitude positivo. 395 00:18:18,292 --> 00:18:19,000 Isto ten sentido. 396 00:18:19,000 --> 00:18:21,432 Probablemente está dicindo, duh. 397 00:18:21,432 --> 00:18:23,390 A outra cousa a notar con todo, é que a suma 398 00:18:23,390 --> 00:18:25,484 das lonxitudes de calquera dous lados do triángulo 399 00:18:25,484 --> 00:18:27,650 ten que ser maior que o lonxitude do terceiro lado. 400 00:18:27,650 --> 00:18:28,690 Isto é realmente verdade. 401 00:18:28,690 --> 00:18:34,150 Non podes ter un triángulo de lados 1, 2 e 4, por exemplo, por 1 máis 2 402 00:18:34,150 --> 00:18:36,270 non é maior que 4. 403 00:18:36,270 --> 00:18:38,870 Polo tanto, estas son as regras que determinar se ou non a tres 404 00:18:38,870 --> 00:18:42,740 entradas poden concebivelmente formar un triángulo. 405 00:18:42,740 --> 00:18:46,360 Entón, tome un par de minutos e declarar e, a continuación, definir 406 00:18:46,360 --> 00:18:49,810 esta función chamada válido triángulo, de tal xeito que se realmente 407 00:18:49,810 --> 00:18:51,650 ten o comportamento especificado aquí. 408 00:18:51,650 --> 00:18:57,030 >> Ha imprimir verdadeira se eses tres lados son capaces de que entende un triángulo, 409 00:18:57,030 --> 00:19:01,950 e falso se non Listo para ver como fixo? 410 00:19:01,950 --> 00:19:04,650 Aquí está unha implementación triángulo de válido. 411 00:19:04,650 --> 00:19:05,770 Non é o único. 412 00:19:05,770 --> 00:19:07,770 O seu pode variar un pouco. 413 00:19:07,770 --> 00:19:11,040 Pero iso se fai, de feito, teñen o comportamento que esperamos. 414 00:19:11,040 --> 00:19:14,450 Declaramos a nosa función no arriba, bool triángulo válido 415 00:19:14,450 --> 00:19:16,630 flotar x flotador flotador y z. 416 00:19:16,630 --> 00:19:18,930 Entón, de novo, esta función leva tres números reais 417 00:19:18,930 --> 00:19:22,280 como os seus argumentos, flotante variables de valor punto, 418 00:19:22,280 --> 00:19:26,510 e emite un verdadeiro ou falso valor, que é un valor booleano, recall. 419 00:19:26,510 --> 00:19:28,660 É por iso que o tipo de retorno é bool. 420 00:19:28,660 --> 00:19:30,016 A continuación, definir a función. 421 00:19:30,016 --> 00:19:33,140 O primeiro que facemos é verificar para asegurarse que todas as partes son positivos. 422 00:19:33,140 --> 00:19:37,010 Se X é superior a 0, ou, se y é igual a 0, 423 00:19:37,010 --> 00:19:41,050 ou, se Z é inferior ou igual a 0, que non pode posiblemente ser un triángulo. 424 00:19:41,050 --> 00:19:42,380 Eles non teñen lados positivos. 425 00:19:42,380 --> 00:19:45,790 E así podemos volver false nesa situación. 426 00:19:45,790 --> 00:19:49,010 A continuación, imos comprobar para asegurarse que cada par de entradas 427 00:19:49,010 --> 00:19:51,830 é maior que a terceira. 428 00:19:51,830 --> 00:19:54,530 >> Así, se x máis y é menos que ou igual a Z, 429 00:19:54,530 --> 00:19:57,060 ou, se x máis z é menos que ou igual a Y, 430 00:19:57,060 --> 00:20:01,730 ou, se y máis z é menor que ou igual a X, que tampouco pode ser un triángulo válido. 431 00:20:01,730 --> 00:20:03,800 Entón, nós return false novo. 432 00:20:03,800 --> 00:20:06,900 Supoñendo que nós pasamos tanto dos controis aínda que, entón podemos volver true. 433 00:20:06,900 --> 00:20:09,440 Porque estes tres lados son capaces de returning-- 434 00:20:09,440 --> 00:20:11,647 de crear un triángulo válido. 435 00:20:11,647 --> 00:20:12,230 E é iso. 436 00:20:12,230 --> 00:20:13,830 Xa declarada e definida. 437 00:20:13,830 --> 00:20:17,330 E pode ser capaz de agora utilizar e chamar esa función. 438 00:20:17,330 --> 00:20:19,470 Excelente traballo. 439 00:20:19,470 --> 00:20:20,650 Eu son Doug Lloyd. 440 00:20:20,650 --> 00:20:22,820 Este é CS50. 441 00:20:22,820 --> 00:20:24,340