1 00:00:08,119 --> 00:00:11,630 [Powered by Google Translate] DAVID J. Malan: Todo ben, iso é CS50, e este é o 2 00:00:11,630 --> 00:00:14,790 inicio de dúas semanas. 3 00:00:14,790 --> 00:00:16,300 Grazas. 4 00:00:16,300 --> 00:00:19,000 Imos comezar con unha chamada. 5 00:00:19,000 --> 00:00:30,005 Estou a piques de marcar 617-erro-CS50. 6 00:00:30,005 --> 00:00:31,230 CS50: Este é CS50. 7 00:00:31,230 --> 00:00:33,930 Para Neno Shuttle, prema 1. 8 00:00:33,930 --> 00:00:36,660 Para comezar de novo, prema 9. 9 00:00:36,660 --> 00:00:38,180 DAVID J. Malan: Entón el dixo para o neno Shuttle, prema 1. 10 00:00:38,180 --> 00:00:41,560 Entón, nós estamos indo para presionar 1. 11 00:00:41,560 --> 00:00:43,230 CS50: Cal é a súa orixe? 12 00:00:43,230 --> 00:00:45,340 Para quad, prema 1. 13 00:00:45,340 --> 00:00:47,080 Mather, prema 2. 14 00:00:47,080 --> 00:00:49,240 Boylston, prema 3. 15 00:00:49,240 --> 00:00:51,280 Lamont, prema 4. 16 00:00:51,280 --> 00:00:53,210 Memoria Hall, prema 5. 17 00:00:53,210 --> 00:00:55,660 Para comezar de novo, prema 0. 18 00:00:55,660 --> 00:00:59,590 DAVID J. Malan: Imos presionar 1 para o quad. 19 00:00:59,590 --> 00:01:03,610 CS50: próximo autobús deixa iso moi minuto a 1:10 PM, e 20 00:01:03,610 --> 00:01:09,820 a continuación, ás 1:20 PM, 1:30, 1:40 PM. 21 00:01:09,820 --> 00:01:12,030 Este é CS50. 22 00:01:12,030 --> 00:01:15,570 >> DAVID J. Malan: Entón esta é a voz do CS50. 23 00:01:15,570 --> 00:01:18,030 E é un exemplo dos tipos de proxectos finais, para 24 00:01:18,030 --> 00:01:19,500 exemplo, pode morder a 25 00:01:19,500 --> 00:01:20,600 o fin do semestre. 26 00:01:20,600 --> 00:01:23,840 Por exemplo, que hai shuttleboy.cs50.net - 27 00:01:23,840 --> 00:01:28,200 en realidade, un proxecto que escribín por primeira vez despois de tomar CS51 28 00:01:28,200 --> 00:01:29,740 cando eu era estudante de graduación. 29 00:01:29,740 --> 00:01:32,250 E a inspiración aquí era naquela época, todo o que tiñan era 30 00:01:32,250 --> 00:01:34,320 os horarios de autobuses impresos de autobuses, e non había 31 00:01:34,320 --> 00:01:35,970 noción de ollar as cousas en liña. 32 00:01:35,970 --> 00:01:38,730 E así eu especie de pomba en un fin de semana, filtrado a través da 33 00:01:38,730 --> 00:01:41,460 impreso, cronograma e portouse para un programa de ordenador. 34 00:01:41,460 --> 00:01:43,790 Na altura, o programa de ordenador ocorreu ser escrito 35 00:01:43,790 --> 00:01:47,110 en C. E, de feito, el foi por Boy Shuttle escribindo nun 36 00:01:47,110 --> 00:01:48,600 piscando ventá como temos benvida a facer ata agora. 37 00:01:48,600 --> 00:01:50,450 Pero ao longo dos anos, ten evolucionado nun instante 38 00:01:50,450 --> 00:01:51,390 mensaxes bot. 39 00:01:51,390 --> 00:01:53,970 El evolucionou máis recentemente a este sitio web, nun 40 00:01:53,970 --> 00:01:57,720 SMS ferramenta baseada, así como para esta ferramenta baseada en voz. 41 00:01:57,720 --> 00:02:00,170 E esta é a información para os tipos de cousas que podes 42 00:02:00,170 --> 00:02:02,380 facer por si mesmo ata o final do semestre. 43 00:02:02,380 --> 00:02:05,490 >> Por exemplo, alí, a versión de texto do Neno Shuttle acontece 44 00:02:05,490 --> 00:02:06,510 para operar como segue. 45 00:02:06,510 --> 00:02:10,880 , No seu teléfono móbil, enviar unha mensaxe de texto 41411 e 46 00:02:10,880 --> 00:02:14,300 a continuación, enviar o sboy símbolo especial, para o neno de Transporte 47 00:02:14,300 --> 00:02:18,350 seguido de A e B, onde A é unha orixe e B é un 48 00:02:18,350 --> 00:02:19,070 destino - 49 00:02:19,070 --> 00:02:21,030 por exemplo, Boylston Espazo Quad - 50 00:02:21,030 --> 00:02:23,330 o que ten que volver dentro duns segundos é un texto 51 00:02:23,330 --> 00:02:25,820 mensaxe do Neno Shuttle dicir exactamente cando o 52 00:02:25,820 --> 00:02:28,990 próximos autobuses son poucos, que o punto A, que vai 53 00:02:28,990 --> 00:02:29,640 punto B. 54 00:02:29,640 --> 00:02:32,510 E este é un exemplo máis xeral do que se coñece como 55 00:02:32,510 --> 00:02:33,920 utilizando unha API. 56 00:02:33,920 --> 00:02:36,930 >> Así, por exemplo, este aquí é só shuttleboy.cs50.net, o 57 00:02:36,930 --> 00:02:39,300 Encarnación web-based real deste. 58 00:02:39,300 --> 00:02:42,480 Pero os datos que subliña este e outros programas que CS50 59 00:02:42,480 --> 00:02:45,560 desenvolveu son todos expostos a todos aquí na forma 60 00:02:45,560 --> 00:02:49,340 de APIs, interfaces de programación de aplicacións. 61 00:02:49,340 --> 00:02:52,220 E iso é só un xeito elegante de dicir que a xente quere en nós 62 00:02:52,220 --> 00:02:56,010 Internet e outros de pasar algún tempo a crear 63 00:02:56,010 --> 00:02:59,970 software que pode usar para pegar os datos de nós e 64 00:02:59,970 --> 00:03:02,510 a continuación, construír os seus propios aplicativos enriba 65 00:03:02,510 --> 00:03:03,840 de que o conxunto de datos. 66 00:03:03,840 --> 00:03:06,610 Así, por exemplo, este Shuttle páxina da API do neno aquí, que 67 00:03:06,610 --> 00:03:09,390 pasa a ser o manual CS50, esencialmente documentos 68 00:03:09,390 --> 00:03:13,080 como pode ir en pedir CS50 servidores de datos. 69 00:03:13,080 --> 00:03:16,240 Por exemplo, se vostede está familiarizado con arquivos CSV, coma 70 00:03:16,240 --> 00:03:18,940 valores separados, estes son só unha especie de rápido e sucia 71 00:03:18,940 --> 00:03:20,310 Excel-como arquivos. 72 00:03:20,310 --> 00:03:23,110 Entón pode preguntar Boy Shuttle para todos os datos en toda a 73 00:03:23,110 --> 00:03:25,090 casas e coordina seus GPS, e vai ter 74 00:03:25,090 --> 00:03:27,300 volta, esencialmente, unha folla para que 75 00:03:27,300 --> 00:03:30,820 entón podes ler nun programa da súa preferencia e, a continuación 76 00:03:30,820 --> 00:03:33,250 xerar resultados, como Neno Shuttle si 77 00:03:33,250 --> 00:03:34,160 pasa a ser facer. 78 00:03:34,160 --> 00:03:37,030 Para os máis familiares, representacións máis modernas de datos 79 00:03:37,030 --> 00:03:39,420 inclúen JSON, JavaScript Object Notation. 80 00:03:39,420 --> 00:03:40,620 Algo vai voltar a vostede dirección 81 00:03:40,620 --> 00:03:41,720 o fin do semestre. 82 00:03:41,720 --> 00:03:45,440 >> Pero, de novo, esta é só unha das varias APIs do propio CS50. 83 00:03:45,440 --> 00:03:48,320 E a cousa excitante agora, nestes días, Facebook e 84 00:03:48,320 --> 00:03:51,110 Twitter e Google e practicamente todos os web popular para fóra 85 00:03:51,110 --> 00:03:54,130 alí ten algún tipo de API, o que significa que se ler o 86 00:03:54,130 --> 00:03:56,620 documentación no seu sitio web, que rexistrarte para unha 87 00:03:56,620 --> 00:03:59,980 conta, pode entón comezar a escribir software encima 88 00:03:59,980 --> 00:04:03,680 calquera ferramentas ou datos da empresa que ofrece. 89 00:04:03,680 --> 00:04:06,210 E así un dos nosos compañeiros de ensino propios un par de anos atrás 90 00:04:06,210 --> 00:04:07,620 escribiu unha versión para Mac deste. 91 00:04:07,620 --> 00:04:10,990 Entón, o enlace titulado Mac aquí na esquina superior esquerda, pode realmente 92 00:04:10,990 --> 00:04:13,940 descargar dun Mac OS Widget que executa no seu propio Mac para facer o 93 00:04:13,940 --> 00:04:15,040 mesmos tipos de cousas. 94 00:04:15,040 --> 00:04:17,970 Entón, é todo sobre a construción encima de conxuntos de datos como estes. 95 00:04:17,970 --> 00:04:21,839 Pero máis sobre iso ao final do semestre. 96 00:04:21,839 --> 00:04:25,780 >> Entón, imos mergullar en rápido real a un erro, só para obter o tipo de 97 00:04:25,780 --> 00:04:27,990 cousas Calefacción hoxe, e pensar no pasado algúns dos 98 00:04:27,990 --> 00:04:29,660 cousas que mirou a semana pasada. 99 00:04:29,660 --> 00:04:32,840 En particular, deixe-me ir adiante e puxe-se, por exemplo, 100 00:04:32,840 --> 00:04:34,080 Neste exemplo aquí. 101 00:04:34,080 --> 00:04:37,500 Buggy1.c, este está dispoñible na páxina web do curso se 102 00:04:37,500 --> 00:04:40,250 quere baixa-lo e picar en torno a si. 103 00:04:40,250 --> 00:04:43,520 Pero imos zoom aquí neste programa moi curta, e só 104 00:04:43,520 --> 00:04:46,550 unha recapitulación super-rápido dalgúns dos bloques básicos de construción que 105 00:04:46,550 --> 00:04:48,880 realmente estamos indo só para comezar a tomar para concedida. 106 00:04:48,880 --> 00:04:51,860 >> Entón, as cousas azuis, nas liñas 1 ao 9, son só 107 00:04:51,860 --> 00:04:53,670 preguntas softball. 108 00:04:53,670 --> 00:04:54,590 Entón, estas son só comentarios. 109 00:04:54,590 --> 00:04:56,230 Eles non teñen ningún significado funcional. 110 00:04:56,230 --> 00:04:58,460 Pero son comentarios no sentido de que son notas que 111 00:04:58,460 --> 00:05:02,010 Eu, o ser humano, feito para min para que na clase e despois 112 00:05:02,010 --> 00:05:04,340 charla, eu lembro que este programa 113 00:05:04,340 --> 00:05:07,120 fai sen ter que lelo liña por liña e 114 00:05:07,120 --> 00:05:08,990 recriando a historia na miña mente. 115 00:05:08,990 --> 00:05:11,000 Ademais, se eu entregar este programa a outra persoa como 116 00:05:11,000 --> 00:05:14,420 ti, é moito máis clara para ti, por mor de comentarios como este, 117 00:05:14,420 --> 00:05:16,680 o que o programa está realmente facendo, ou polo menos o que o 118 00:05:16,680 --> 00:05:18,210 programa debería estar facendo. 119 00:05:18,210 --> 00:05:20,760 Se é ou non é correcto é outra cuestión. 120 00:05:20,760 --> 00:05:25,040 Agora, en C, con comentarios de varias liñas, recordar que na liña 121 00:05:25,040 --> 00:05:27,880 aquí é o símbolo máxico, / *. 122 00:05:27,880 --> 00:05:30,380 Isto significa que aquí vén o inicio dun comentario. 123 00:05:30,380 --> 00:05:34,560 E nada máis importa, ata chegar ao final de terminación, 124 00:05:34,560 --> 00:05:36,700 que é * /, o oposto. 125 00:05:36,700 --> 00:05:39,120 Entón o feito de que eu teño 80-algunhas estrelas estrañas aquí 126 00:05:39,120 --> 00:05:41,550 esquerda a dereita é realmente só un detalle estético. 127 00:05:41,550 --> 00:05:43,370 Non ten ningún significado funcional. 128 00:05:43,370 --> 00:05:44,490 >> Agora, que tal liña 11? 129 00:05:44,490 --> 00:05:46,940 O que isto fai en termos leigos? 130 00:05:51,560 --> 00:05:52,540 ¿Que é iso? 131 00:05:52,540 --> 00:05:54,280 Audiencia: Inclúe o estándar. 132 00:05:54,280 --> 00:05:54,740 DAVID J. Malan: OK, xenial. 133 00:05:54,740 --> 00:05:57,500 Por iso inclúe a biblioteca stdio.h. 134 00:05:57,500 --> 00:05:58,230 Entón, o que significa isto? 135 00:05:58,230 --> 00:06:01,570 Ben, dentro dese arquivo, stdio.h, son unha morea de 136 00:06:01,570 --> 00:06:03,320 declaracións de función - 137 00:06:03,320 --> 00:06:05,290 é dicir, o código que alguén escribiu. 138 00:06:05,290 --> 00:06:08,160 É un exemplo perfecto dunha función que é declarada no 139 00:06:08,160 --> 00:06:10,250 stdio.h é - 140 00:06:10,250 --> 00:06:11,980 que favorito ata agora? 141 00:06:11,980 --> 00:06:14,300 Así printf, unha das máis comúns de usar, seguramente 142 00:06:14,300 --> 00:06:15,840 En principio, a partir desa biblioteca e alí. 143 00:06:15,840 --> 00:06:19,290 Se eu eliminar esta liña de código, Clang vai berrar 144 00:06:19,290 --> 00:06:22,550 para min algo sobre o uso dun símbolo non declarado. 145 00:06:22,550 --> 00:06:24,930 Algo non declarado é, probablemente, a palabra clave, pois 146 00:06:24,930 --> 00:06:27,770 non informado ao compilador o printf parece 147 00:06:27,770 --> 00:06:29,230 como se non incluír esta liña. 148 00:06:29,230 --> 00:06:31,830 E máis para a Terra, realmente, o que esta liña está dicindo é 149 00:06:31,830 --> 00:06:34,890 abrir este ficheiro, stdio.h, onde queira que sexa sobre a do servidor 150 00:06:34,890 --> 00:06:38,200 disco duro, ou disco duro do aparello, e copiar-pegar-lo 151 00:06:38,200 --> 00:06:40,240 alí no meu arquivo, sen a miña 152 00:06:40,240 --> 00:06:41,730 ter que facelo manualmente. 153 00:06:41,730 --> 00:06:44,420 >> Agora, unha vez que temos aquí abaixo a principal, en pouco tempo imos comezar 154 00:06:44,420 --> 00:06:46,900 provocando separar o que int e que o baleiro é. 155 00:06:46,900 --> 00:06:48,430 Pero, por agora, imos ollar para as tres liñas 156 00:06:48,430 --> 00:06:50,350 no prazo de 15 a 17. 157 00:06:50,350 --> 00:06:52,250 Este aquí eu reivindico como buggy. 158 00:06:52,250 --> 00:06:54,900 Liña 7 meus comentarios di "Se imprimir 10 159 00:06:54,900 --> 00:06:59,410 asteriscos, pero non. "Por que iso non imprimir, de feito, 160 00:06:59,410 --> 00:07:01,097 10 desas estrelas? 161 00:07:01,097 --> 00:07:02,347 Audiencia: [inaudível]. 162 00:07:05,210 --> 00:07:05,800 DAVID J. Malan: Exactamente. 163 00:07:05,800 --> 00:07:08,720 Entón, observe que estamos empezando a contar a partir de 0. 164 00:07:08,720 --> 00:07:10,780 E iso é realmente unha convención na programación e 165 00:07:10,780 --> 00:07:13,230 ciencia da computación en xeral, comezando a contar 166 00:07:13,230 --> 00:07:14,610 a partir de 0 en vez de 1. 167 00:07:14,610 --> 00:07:16,690 E este realmente só deriva do feito de que, para 168 00:07:16,690 --> 00:07:18,940 exemplo, cando tivemos oito persoas no escenario, cando 169 00:07:18,940 --> 00:07:20,680 ninguén estaba levantando a man, eles foron 170 00:07:20,680 --> 00:07:22,340 todos os ceros de forma eficaz. 171 00:07:22,340 --> 00:07:24,260 E por iso é só unha especie de convención ordenador así, 172 00:07:24,260 --> 00:07:26,030 polo tanto, para iniciar a conta de 0. 173 00:07:26,030 --> 00:07:29,130 Se ese é o menor número que pode representar en binario. 174 00:07:29,130 --> 00:07:32,270 >> Entón aquí comezan arrincar i a 0. 175 00:07:32,270 --> 00:07:34,230 Creamos i igual a 0. 176 00:07:34,230 --> 00:07:37,780 Pero entón eu cometín este erro aquí, dicindo que eu é menor ou 177 00:07:37,780 --> 00:07:38,820 igual a 10. 178 00:07:38,820 --> 00:07:41,700 Pero se pensas que, por medio, se eu comezar en 0 e entón eu vou 179 00:07:41,700 --> 00:07:46,410 ata 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, eu estou indo realmente para 180 00:07:46,410 --> 00:07:49,980 imprimir 11 estrelas para a pantalla, porque eu teño ido ata 181 00:07:49,980 --> 00:07:52,410 a é igual a 10. 182 00:07:52,410 --> 00:07:55,090 Así, a corrección doado aquí, entón é o que? 183 00:07:55,090 --> 00:07:56,070 Audiencia: [inaudível]. 184 00:07:56,070 --> 00:07:57,350 DAVID J. Malan: Só cambia-lo para menos. 185 00:07:57,350 --> 00:07:59,700 Se realmente quere, pode facelo. 186 00:07:59,700 --> 00:08:01,370 Pero, en xeral, que é desaprovada. 187 00:08:01,370 --> 00:08:04,020 E así comeza a contar a partir de 0 é só algo que ten que 188 00:08:04,020 --> 00:08:05,510 normalmente se acostumar. 189 00:08:05,510 --> 00:08:07,810 Agora, o que dicir de toda esa construción en si? 190 00:08:07,810 --> 00:08:10,640 Esta liña 15 demarks un loop. 191 00:08:10,640 --> 00:08:12,510 Así, para non é unha función. 192 00:08:12,510 --> 00:08:13,640 É só unha declaración. 193 00:08:13,640 --> 00:08:16,180 É unha construción de loop, como vimos no scratch. 194 00:08:16,180 --> 00:08:17,600 E ten tres partes. 195 00:08:17,600 --> 00:08:19,740 Nótese que hai a primeira parte a 196 00:08:19,740 --> 00:08:21,350 á esquerda do punto e coma. 197 00:08:21,350 --> 00:08:24,200 Hai a parte do medio, entre as dúas comas. 198 00:08:24,200 --> 00:08:26,250 E despois hai a parte da man dereita cara á dereita 199 00:08:26,250 --> 00:08:27,640 do punto e coma segundo. 200 00:08:27,640 --> 00:08:31,822 Agora, o primeiro deles fai o que? 201 00:08:31,822 --> 00:08:33,679 Audiencia: [inaudível]. 202 00:08:33,679 --> 00:08:34,270 DAVID J. Malan: Volve alí? 203 00:08:34,270 --> 00:08:34,816 Si? 204 00:08:34,816 --> 00:08:35,980 Audiencia: Inicio. 205 00:08:35,980 --> 00:08:36,850 >> DAVID J. Malan: Inicio. 206 00:08:36,850 --> 00:08:37,840 Entón, o que significa isto? 207 00:08:37,840 --> 00:08:40,690 Declaramos unha variable chamada i. 208 00:08:40,690 --> 00:08:43,840 El é de tipo int, porque eu especifiquei int i. 209 00:08:43,840 --> 00:08:46,470 E estou inicializando i como o valor 0. 210 00:08:46,470 --> 00:08:47,730 Entón, o que iso realmente dicindo? 211 00:08:47,730 --> 00:08:50,680 É efectivamente dicindo ao ordenador hey, dáme o suficiente 212 00:08:50,680 --> 00:08:53,660 memoria RAM, o suficiente para atender un número, e despois poñer o 213 00:08:53,660 --> 00:08:56,130 número 0, en que pedazo de memoria RAM. 214 00:08:56,130 --> 00:08:59,100 E como un aparte, quão grande é un int normalmente, polo menos dentro 215 00:08:59,100 --> 00:09:00,280 do aparello? 216 00:09:00,280 --> 00:09:01,000 Audiencia: 32 bits. 217 00:09:01,000 --> 00:09:01,670 DAVID J. Malan: 32 bits. 218 00:09:01,670 --> 00:09:04,890 Entón isto significa que me dar 32 bits, tamén coñecido como 4 bytes, 219 00:09:04,890 --> 00:09:07,250 e poñer o valor 0 na mesma, o que é moi doado, porque 220 00:09:07,250 --> 00:09:09,110 Significa só que definir todos os bits a 0. 221 00:09:09,110 --> 00:09:11,690 >> Entón, agora, a segunda parte aquí é a condición. 222 00:09:11,690 --> 00:09:14,590 E a condición de que, como o seu nome suxire, é o que se verificar 223 00:09:14,590 --> 00:09:18,100 de novo e de novo e de novo para saber se é certo ou falso. 224 00:09:18,100 --> 00:09:21,410 Polo tanto, este é só dicir facer as seguintes liñas de código - 225 00:09:21,410 --> 00:09:23,950 ou sexa, liña 16, porque esa é a única recuado 226 00:09:23,950 --> 00:09:24,820 baixo - 227 00:09:24,820 --> 00:09:26,980 sempre que i sexa inferior a 10. 228 00:09:26,980 --> 00:09:30,520 E despois de cada iteração través deste circuíto, faga o 229 00:09:30,520 --> 00:09:33,840 incrementação, o que neste caso é a i + +. 230 00:09:33,840 --> 00:09:35,580 Agora, isto non ten que ser i + +. 231 00:09:35,580 --> 00:09:37,610 Pode ser i -. 232 00:09:37,610 --> 00:09:39,860 Pero se eu fixese iso, o que está a suceder o comportamento 233 00:09:39,860 --> 00:09:41,370 ser deste programa? 234 00:09:41,370 --> 00:09:42,290 Audiencia: Vai ser un loop infinito. 235 00:09:42,290 --> 00:09:44,060 DAVID J. Malan: Vai ser unha especie de loop infinito, 236 00:09:44,060 --> 00:09:47,720 a non ser que teña sorte despois de 2 millóns negativo ou así. 237 00:09:47,720 --> 00:09:51,320 Quizais as cousas van involucrar, só pola natureza do finito 238 00:09:51,320 --> 00:09:53,930 número de bits que foron afectados por un int. 239 00:09:53,930 --> 00:09:56,270 Pero é, certamente, vai repetir moito máis do que 10 e 240 00:09:56,270 --> 00:09:58,630 seguramente máis de 11 veces aquí. 241 00:09:58,630 --> 00:10:02,240 >> E agora, como un aparte, entender que i + + e i - 242 00:10:02,240 --> 00:10:04,420 son realmente só azucre sintático. 243 00:10:04,420 --> 00:10:07,210 É só notación abreviada para o que é un pouco máis 244 00:10:07,210 --> 00:10:08,720 explicitamente escrito do seguinte xeito: 245 00:10:08,720 --> 00:10:11,200 i = i + 1. 246 00:10:11,200 --> 00:10:13,460 Isto é o mesmo que o i + +. 247 00:10:13,460 --> 00:10:15,860 É só unha especie de aparencia máis bonita para dicir i + +. 248 00:10:15,860 --> 00:10:17,490 É máis sucinta, máis lexible. 249 00:10:17,490 --> 00:10:19,030 E así a maioría das persoas que, en vez. 250 00:10:19,030 --> 00:10:21,840 Pero esta é idéntica funcionalmente 251 00:10:21,840 --> 00:10:22,900 o que acabamos de ver. 252 00:10:22,900 --> 00:10:27,770 Así, en breve, a solución rápida aquí é só para dicir iteração i 253 00:10:27,770 --> 00:10:30,690 desde 0 por todo o camiño ata menos que 10. 254 00:10:30,690 --> 00:10:32,700 E entón nós imos realmente obter 10 estrelas. 255 00:10:32,700 --> 00:10:33,430 >> Entón, imos tentar iso. 256 00:10:33,430 --> 00:10:35,310 Deixe-me abrir o terminal na parte inferior. 257 00:10:35,310 --> 00:10:37,420 Deixe-me ir ao directorio que esta está dentro 258 00:10:37,420 --> 00:10:40,030 E eu vou recompila-lo manualmente con Clang por agora. 259 00:10:40,030 --> 00:10:44,880 E eu estou indo a compilar isto como buggy1.c, Intro. 260 00:10:44,880 --> 00:10:50,280 E agora buggy1, por que non hai tal ficheiro ou directorio 261 00:10:50,280 --> 00:10:52,026 buggy1 chamado? 262 00:10:52,026 --> 00:10:53,850 Audiencia: [inaudível]. 263 00:10:53,850 --> 00:10:54,240 DAVID J. Malan: Yeah. 264 00:10:54,240 --> 00:10:55,420 Polo tanto, é en realidade chamado a.out. 265 00:10:55,420 --> 00:10:57,480 Entón, se só recordar executar Clang, onde é o Clang 266 00:10:57,480 --> 00:11:00,420 compilador, e non especifica o nome que quere 267 00:11:00,420 --> 00:11:03,550 dar ao seu programa, que vai para o estándar para a.out. 268 00:11:03,550 --> 00:11:05,030 Entón, en realidade, se eu fago ls - 269 00:11:05,030 --> 00:11:05,510 oops. 270 00:11:05,510 --> 00:11:07,680 E eu didn't - a cuestión en branco e negro algúns dos 271 00:11:07,680 --> 00:11:08,840 vostede afrontou foi corrixido. 272 00:11:08,840 --> 00:11:10,670 Pero deixe-me facelo. 273 00:11:10,670 --> 00:11:14,570 Hai que ter a.out no lado da man esquerda alí. 274 00:11:14,570 --> 00:11:17,360 Entón temos que correr a.out en vez de buggy1. 275 00:11:17,360 --> 00:11:19,140 >> Entón deixe-me ir adiante e facelo. 276 00:11:19,140 --> 00:11:22,840 . A.out /, Intro. 277 00:11:22,840 --> 00:11:26,160 E eu, ao parecer, non facer o que? 278 00:11:26,160 --> 00:11:26,620 Audiencia: Gardar. 279 00:11:26,620 --> 00:11:27,390 DAVID J. Malan: Gardar o meu arquivo. 280 00:11:27,390 --> 00:11:31,520 De xeito que é facilmente resolto por bater S de control, ou vai 281 00:11:31,520 --> 00:11:33,450 Arquivo, Gardar, como na maioría dos programas. 282 00:11:33,450 --> 00:11:36,360 Deixe-me ir aquí abaixo, limpar a pantalla, executa-o de novo. 283 00:11:36,360 --> 00:11:37,960 E aínda hai un erro. 284 00:11:37,960 --> 00:11:41,618 Entón o que está a suceder - 285 00:11:41,618 --> 00:11:42,980 Audiencia: Non compilar. 286 00:11:42,980 --> 00:11:44,040 DAVID J. Malan: Ah, bo. 287 00:11:44,040 --> 00:11:45,010 Non recompila-lo. 288 00:11:45,010 --> 00:11:47,250 Como un idiota, eu estou ollando para o código para ver o que está mal. 289 00:11:47,250 --> 00:11:51,275 Entón buggy1.c bumbum, agora a.out. 290 00:11:51,275 --> 00:11:52,640 E Ufa, salva. 291 00:11:52,640 --> 00:11:55,090 >> Polo tanto, parece un pouco feo, porque non hai ningunha nova liña 292 00:11:55,090 --> 00:11:55,970 en calquera punto do programa. 293 00:11:55,970 --> 00:11:57,390 Pero, de novo, iso é só un detalle estético. 294 00:11:57,390 --> 00:11:59,430 E polo menos contamos aqueles fóra, debemos 295 00:11:59,430 --> 00:12:01,160 ver agora 10 desas estrelas. 296 00:12:01,160 --> 00:12:03,260 Ben, que tal este exemplo de calefacción segundo? 297 00:12:03,260 --> 00:12:07,750 Así, en buggy2, eu afirmo que esta versión, tamén, imprimir 298 00:12:07,750 --> 00:12:10,110 10 estrelas, unha por liña. 299 00:12:10,110 --> 00:12:12,340 Entón, esta vez, eu teño un carácter de nova liña, só para facer 300 00:12:12,340 --> 00:12:13,520 as cousas un pouco máis bonitas. 301 00:12:13,520 --> 00:12:15,410 Pero en vez diso o que eu recibín é ese. 302 00:12:15,410 --> 00:12:19,590 Entón deixe-me facer buggy2.c bumbum, Intro. 303 00:12:19,590 --> 00:12:21,790 Agora é novo chamado a.out. 304 00:12:21,790 --> 00:12:23,130 Intro. 305 00:12:23,130 --> 00:12:26,900 Eu só vexo unha nova liña, só a liña de moi novo que pasou 306 00:12:26,900 --> 00:12:29,370 move o meu aviso para a próxima liña. 307 00:12:29,370 --> 00:12:32,660 E aínda claramente eu teño a impresión *, a continuación, unha nova liña, 308 00:12:32,660 --> 00:12:33,990 *, A continuación, unha nova liña. 309 00:12:33,990 --> 00:12:35,490 Pero o que é o erro aquí? 310 00:12:35,490 --> 00:12:35,974 Si? 311 00:12:35,974 --> 00:12:37,224 Audiencia: [inaudível]. 312 00:12:39,850 --> 00:12:40,470 >> DAVID J. Malan: Exactamente. 313 00:12:40,470 --> 00:12:44,110 Así, a diferenza de moitas linguaxes, como Python, onde o descenso 314 00:12:44,110 --> 00:12:46,030 En realidade, ten un significado funcional, unha 315 00:12:46,030 --> 00:12:47,150 linguaxe como C - 316 00:12:47,150 --> 00:12:49,140 como veremos, PHP, Javascript - 317 00:12:49,140 --> 00:12:51,940 o retroceso é realmente só para beneficio dos seres humanos. 318 00:12:51,940 --> 00:12:55,690 Entón o feito de que eu teño recuado liña 16 e 17 parece gran, 319 00:12:55,690 --> 00:12:57,530 pero non ten significado funcional aquí. 320 00:12:57,530 --> 00:13:00,700 Se eu queira ambas as liñas para realizar como parte do para 321 00:13:00,700 --> 00:13:05,140 loop, entón eu teño que poñer-los en chaves, facendo iso. 322 00:13:05,140 --> 00:13:08,540 Só podes cortar aquel canto e omitir as claves se 323 00:13:08,540 --> 00:13:10,036 cal é o caso? 324 00:13:10,036 --> 00:13:10,410 Audiencia: só unha liña. 325 00:13:10,410 --> 00:13:11,130 DAVID J. Malan: só unha liña. 326 00:13:11,130 --> 00:13:15,280 Entón, iso é só unha especie de unha especie agradable de detalle de sintaxe, de xeito que 327 00:13:15,280 --> 00:13:17,900 non perda tempo escribindo tres liñas, dúas das cales son 328 00:13:17,900 --> 00:13:20,040 chaves, só para escribir unha soa liña de código. 329 00:13:20,040 --> 00:13:21,650 Pero se ten dous ou máis liñas, 330 00:13:21,650 --> 00:13:22,860 realmente precisa facelo. 331 00:13:22,860 --> 00:13:24,210 >> Entón, agora déixeme gardar este. 332 00:13:24,210 --> 00:13:27,140 Deixe-me ir adiante e re-executar Clang. 333 00:13:27,140 --> 00:13:31,375 Entón deixe-me reprise a.out, e agora eu pegá-los un por liña. 334 00:13:31,375 --> 00:13:33,670 Agora, a.out novo é unha especie de un nome estúpido para un programa. 335 00:13:33,670 --> 00:13:37,500 Como podo saber Clang para realmente me dar un nome de ficheiro 336 00:13:37,500 --> 00:13:39,820 que é máis user-friendly, como buggy2 si? 337 00:13:43,200 --> 00:13:44,466 Un pouco máis claramente? 338 00:13:44,466 --> 00:13:45,220 Audiencia: [inaudível]. 339 00:13:45,220 --> 00:13:47,810 DAVID J. Malan: OK, para que eu poida realmente ter moi 340 00:13:47,810 --> 00:13:51,000 amigable de acceso e escribir só facer buggy2. 341 00:13:51,000 --> 00:13:53,840 Eu non especificar. C neste caso, e prema Intro. 342 00:13:53,840 --> 00:13:58,530 E o que fan fai que compila buggy2.c por min 343 00:13:58,530 --> 00:14:00,260 Clang pedindo para facelo. 344 00:14:00,260 --> 00:14:05,100 Especificamente, el chama Clang, corre Clang usando xeito máis 345 00:14:05,100 --> 00:14:08,540 liña de comandos argumentos ou switches que realmente precisa. 346 00:14:08,540 --> 00:14:11,270 Co tempo, imos volver ao que todos eses diferentes 347 00:14:11,270 --> 00:14:13,810 enigmáticas expresións hifenizadas significa. 348 00:14:13,810 --> 00:14:16,910 Pero, por agora, iso é só Aforre-me o traballo de 349 00:14:16,910 --> 00:14:19,600 ter que lembrar e ter que escribir todos aqueles 350 00:14:19,600 --> 00:14:21,150 varias expresións hifenizadas. 351 00:14:21,150 --> 00:14:23,240 E a vantaxe de que, en última análise é 352 00:14:23,240 --> 00:14:25,900 que agora eu teño buggy2. 353 00:14:25,900 --> 00:14:27,480 Se eu queira facer iso manualmente, pero eu 354 00:14:27,480 --> 00:14:28,775 pode, en vez facelo - 355 00:14:28,775 --> 00:14:34,110 clang-o e, a continuación buggy2 buggy2.c. 356 00:14:34,110 --> 00:14:37,980 E que tamén pode dar-me un arquivo chamado buggy2. 357 00:14:37,980 --> 00:14:39,710 >> Entón, en suma, é o compilador Clang. 358 00:14:39,710 --> 00:14:43,080 Facer é só unha ferramenta de fácil utilización que imos usar máis 359 00:14:43,080 --> 00:14:44,420 e máis, porque só comeza a 360 00:14:44,420 --> 00:14:47,330 simplificar as cousas para nós. 361 00:14:47,330 --> 00:14:49,430 E voltar 0 finalmente. 362 00:14:49,430 --> 00:14:51,890 De momento, só porque, pero imos comezar a provoca que parte 363 00:14:51,890 --> 00:14:52,930 hoxe e mércores. 364 00:14:52,930 --> 00:14:55,560 Calquera dúbida sobre isto? 365 00:14:55,560 --> 00:14:56,450 Si? 366 00:14:56,450 --> 00:14:58,234 Audiencia: [inaudível] 367 00:14:58,234 --> 00:15:00,020 ls entre comiñas alí? 368 00:15:00,020 --> 00:15:01,710 DAVID J. Malan: Aceptar. 369 00:15:01,710 --> 00:15:05,880 Cando ls ingresaran entre comiñas, que se me facendo un pouco de maxia 370 00:15:05,880 --> 00:15:07,160 nos bastidores para corrixir un erro. 371 00:15:07,160 --> 00:15:09,370 Esquecín o meu, como temos benvida a dicir que moitos de vostedes no 372 00:15:09,370 --> 00:15:11,600 foros de discusión, que facer - 373 00:15:11,600 --> 00:15:17,220 imos facelo agora - sudo yum-y update appliance50. 374 00:15:17,220 --> 00:15:19,790 Uups, que iso está escrito correcto. 375 00:15:19,790 --> 00:15:23,240 Así, o aparello é como un sistema operativo. 376 00:15:23,240 --> 00:15:25,650 Está funcionando neste sistema operativo chamado Fedora. 377 00:15:25,650 --> 00:15:27,450 E agora por mor da miña conexión de internet lenta, eu teño 378 00:15:27,450 --> 00:15:28,260 realmente hosed iso. 379 00:15:28,260 --> 00:15:31,620 Entón, correndo yum update sudo, como din para facer na 380 00:15:31,620 --> 00:15:34,080 conxunto de problemas, é, esencialmente, gusto de executar as actualizacións automáticas 381 00:15:34,080 --> 00:15:35,420 Mac OS ou Windows. 382 00:15:35,420 --> 00:15:37,280 E a razón para usar esta moito no comezo do 383 00:15:37,280 --> 00:15:39,640 conxunto de problemas é porque cando creamos o aparello, eu 384 00:15:39,640 --> 00:15:42,480 desarrumada, e eu accidentalmente fixo todos os seus programas ollar 385 00:15:42,480 --> 00:15:45,210 negro nunha pantalla negra, que é por iso que non está a ver-os 386 00:15:45,210 --> 00:15:45,860 por defecto. 387 00:15:45,860 --> 00:15:48,020 Pero a versión máis recente do aparello resolve isto. 388 00:15:48,020 --> 00:15:50,500 E eu vou fixar iso durante as vacacións unha vez que teño internet 389 00:15:50,500 --> 00:15:51,280 conectividade. 390 00:15:51,280 --> 00:15:54,630 >> Así, as comiñas só agocha o meu erro, moi discretamente, 391 00:15:54,630 --> 00:15:55,730 aparentemente. 392 00:15:55,730 --> 00:15:56,980 Outras preguntas? 393 00:15:59,750 --> 00:16:00,668 Si? 394 00:16:00,668 --> 00:16:02,012 Audiencia: onde fai ven? 395 00:16:02,012 --> 00:16:03,810 [Inaudível] 396 00:16:03,810 --> 00:16:04,280 DAVID J. Malan: Boa pregunta. 397 00:16:04,280 --> 00:16:05,460 Onde fai ven? 398 00:16:05,460 --> 00:16:09,390 É un programa de Linux que xa existe hai moitos anos, moito tempo 399 00:16:09,390 --> 00:16:10,570 antes CS50. 400 00:16:10,570 --> 00:16:12,930 E ven con un sistema operativo como o Fedora. 401 00:16:12,930 --> 00:16:14,830 El non vén da biblioteca CS50. 402 00:16:14,830 --> 00:16:17,560 En realidade, as únicas cousas que veñen da biblioteca CS50 403 00:16:17,560 --> 00:16:20,470 ata agora, que temos visto, son GetString, GetInt, todos 404 00:16:20,470 --> 00:16:25,550 Obter as funcións e, a secuencia de palabras e, en certa 405 00:16:25,550 --> 00:16:26,575 extensión, a palabra bool. 406 00:16:26,575 --> 00:16:29,180 Pero imos xogar que ademais cando mergullo no CS50 407 00:16:29,180 --> 00:16:30,580 propio aparello. 408 00:16:30,580 --> 00:16:32,820 >> Entón, si, unha pregunta aquí. 409 00:16:32,820 --> 00:16:36,636 Audiencia: Cando dixo facer e, a continuación, buggy, como é que o 410 00:16:36,636 --> 00:16:39,980 ordenador sabe [inaudível]? 411 00:16:39,980 --> 00:16:40,520 DAVID J. Malan: Boa pregunta. 412 00:16:40,520 --> 00:16:43,830 Entón, cando acabou de realizar o make buggy1 ou facer buggy2, como 413 00:16:43,830 --> 00:16:45,220 fai saber? 414 00:16:45,220 --> 00:16:49,900 Entón, por defecto, se escribir buggy1 facer, facer looks para un 415 00:16:49,900 --> 00:16:52,330 arquivo chamado buggy1.c. 416 00:16:52,330 --> 00:16:55,570 E entón el executa os comandos axeitados Clang, 417 00:16:55,570 --> 00:17:00,380 así, substituíndo o ficheiro de saída estándar chamado a.out. 418 00:17:00,380 --> 00:17:03,670 En realidade, se olharmos para o que fan, o que - 419 00:17:03,670 --> 00:17:04,839 imos saír desta. 420 00:17:04,839 --> 00:17:09,530 Se olharmos para o que fan realmente estaba facendo, facer buggy2, 421 00:17:09,530 --> 00:17:10,470 xa está actualizado. 422 00:17:10,470 --> 00:17:13,020 Entón deixe-me aproveitar o comando rm, o 423 00:17:13,020 --> 00:17:14,319 programa que eu escribín antes. 424 00:17:14,319 --> 00:17:17,319 Escribindo Y-E-S para confirmar que quero eliminar-lo. 425 00:17:17,319 --> 00:17:20,480 Se eu agora fan, teña en conta que nesta liña de moito tempo, 426 00:17:20,480 --> 00:17:22,980 hai esa última cousa aquí, o buggy2. 427 00:17:22,980 --> 00:17:26,959 Todos marca está a facer é pasar ese argumento, por así dicir, a 428 00:17:26,959 --> 00:17:29,665 Clang, de modo que eu non teño que escribir-lo eu mesmo. 429 00:17:29,665 --> 00:17:32,660 >> Todo ben, entón un par rápido administrativa 430 00:17:32,660 --> 00:17:33,470 anuncios. 431 00:17:33,470 --> 00:17:36,940 Así, por seccións, que comezou oficialmente o próximo 432 00:17:36,940 --> 00:17:38,970 Domingo, sempre quere traer, se 433 00:17:38,970 --> 00:17:40,120 ten un, un portátil. 434 00:17:40,120 --> 00:17:42,570 Se non ten un portátil, chegan a min por 435 00:17:42,570 --> 00:17:43,580 deixar-me un e-mail. 436 00:17:43,580 --> 00:17:44,810 E nós imos descubrir un fluxo de traballo. 437 00:17:44,810 --> 00:17:47,100 O que xeralmente vai atopar na sección é que son parte 438 00:17:47,100 --> 00:17:48,770 parte conceptual, hands-on. 439 00:17:48,770 --> 00:17:52,190 Nós imos empregar especificamente a sección de preguntas, parte 440 00:17:52,190 --> 00:17:54,110 conxunto da semana problema, para percorrer algunhas das 441 00:17:54,110 --> 00:17:55,820 material conceptual da charla. 442 00:17:55,820 --> 00:17:57,480 E iso é todo o conxunto de problemas actuais. 443 00:17:57,480 --> 00:18:00,010 E nós tamén imos mergullar en algunhas actividades hands-on, ás veces 444 00:18:00,010 --> 00:18:02,190 que será necesario para ser presentado, ás veces de 445 00:18:02,190 --> 00:18:02,830 que non. 446 00:18:02,830 --> 00:18:04,630 Por exemplo, esta primeira semana, eles foron feitos só como un 447 00:18:04,630 --> 00:18:05,780 exercicio de calefacción. 448 00:18:05,780 --> 00:18:07,800 E podes ver que estes problemas son realmente só iso. 449 00:18:07,800 --> 00:18:10,220 Eles foron feitos para ser relativamente pequeno, pero non necesariamente 450 00:18:10,220 --> 00:18:13,100 programas sinxelo de escribir, que non son necesariamente 451 00:18:13,100 --> 00:18:16,230 emocionantes en si mesmos, pero son boas oportunidades para 452 00:18:16,230 --> 00:18:19,620 practicar a sintaxe, con novas funcións, no confort dun 453 00:18:19,620 --> 00:18:21,900 onde ten algúns dos seus compañeiros se presentar como 454 00:18:21,900 --> 00:18:22,870 así como o seu TF. 455 00:18:22,870 --> 00:18:26,210 >> E o que imos facer ao longo do tempo é utilizar unha ferramenta chamada CS50 Spaces, 456 00:18:26,210 --> 00:18:28,940 en que en vez de só usar o dispositivo CS50, vai 457 00:18:28,940 --> 00:18:32,450 en vez de ir a unha páxina web en un navegador, onde pode 458 00:18:32,450 --> 00:18:35,610 escribir código nunha fiestra do navegador durante a sección. 459 00:18:35,610 --> 00:18:38,240 E entón, se optar, o seu compañeiro de ensino pode, entón, amosar 460 00:18:38,240 --> 00:18:40,980 todo o que está escribindo na súa pantalla no seu navegador 461 00:18:40,980 --> 00:18:43,930 fiestra-se na fronte da clase, xa sexa de forma anónima ou 462 00:18:43,930 --> 00:18:47,250 público, para que el ou ela pode, entón, percorrer con 463 00:18:47,250 --> 00:18:50,080 seus compañeiros o que fixo ben, o que non fai ben. 464 00:18:50,080 --> 00:18:52,750 E unha vez máis, a certeza de todo isto pode ser ben anónimos. 465 00:18:52,750 --> 00:18:54,410 Pero vai ser unha boa oportunidade para moito máis 466 00:18:54,410 --> 00:18:56,810 interactividade que algo charla permite. 467 00:18:56,810 --> 00:18:58,910 >> Mentres tanto, nós imos ter esas cousas, chamado de super 468 00:18:58,910 --> 00:19:01,610 seccións, que son opcionais, pero están abertos a todos en 469 00:19:01,610 --> 00:19:04,030 a clase, para que poida facer isto máis colectivamente para 470 00:19:04,030 --> 00:19:05,190 problema definido. 471 00:19:05,190 --> 00:19:06,010 Aquí está o calendario. 472 00:19:06,010 --> 00:19:08,870 Isto tamén é publicado na páxina inicial cs50.net. 473 00:19:08,870 --> 00:19:10,850 Teña en conta que haberá un hacker específica- 474 00:19:10,850 --> 00:19:12,430 unha tarde de mañá. 475 00:19:12,430 --> 00:19:15,460 E imos filmar un hoxe e un mañá e publicar os 476 00:19:15,460 --> 00:19:16,720 online en 24 horas. 477 00:19:16,720 --> 00:19:19,370 Polo tanto, non se non pode facer calquera destas veces, a se preocupar. 478 00:19:19,370 --> 00:19:22,720 E, de novo, o programa está en liña agora cs50.net. 479 00:19:22,720 --> 00:19:25,350 >> En termos de corte en si, debería ter obtido unha 480 00:19:25,350 --> 00:19:28,520 Enviar correo-e coas instrucións para ir á páxina de inicio do curso para atopar 481 00:19:28,520 --> 00:19:29,610 a súa sección. 482 00:19:29,610 --> 00:19:32,890 A vida cambiou e precisa cambiar a súa sección, 483 00:19:32,890 --> 00:19:33,560 non un problema. 484 00:19:33,560 --> 00:19:37,900 Voltar para o mesmo URL, cs50.net/section, singular, 485 00:19:37,900 --> 00:19:40,090 e vai encher o formulario similar, de modo que pode 486 00:19:40,090 --> 00:19:41,260 a continuación, dar-nos as súas preferencias. 487 00:19:41,260 --> 00:19:43,360 E nós imos seguir ata o final da semana, como o que pudermos 488 00:19:43,360 --> 00:19:44,240 acomodar. 489 00:19:44,240 --> 00:19:49,530 A semana pasada, lembre que propuxo utilizar CS50 discutir, 490 00:19:49,530 --> 00:19:51,370 ferramenta do curso, discusión na aula. 491 00:19:51,370 --> 00:19:53,680 Entón, tivemos 40 preguntas que se fixeron e 492 00:19:53,680 --> 00:19:54,720 respostar durante a charla. 493 00:19:54,720 --> 00:19:56,280 Polo tanto, parece funcionar ben, por iso imos continuar 494 00:19:56,280 --> 00:19:57,180 intentando facelo. 495 00:19:57,180 --> 00:19:59,600 Se, durante a charla, non me sinto cómodo levantamento 496 00:19:59,600 --> 00:20:00,780 súa man, non un problema. 497 00:20:00,780 --> 00:20:04,640 Cambiar a cs50.net/discuss, publicar alí, e un do noso ensino 498 00:20:04,640 --> 00:20:07,270 compañeiros van quere respostas la electronicamente ou aumentar a súa 499 00:20:07,270 --> 00:20:10,620 man no seu nome de forma anónima para pedir, dependendo 500 00:20:10,620 --> 00:20:12,470 sobre a natureza da pregunta. 501 00:20:12,470 --> 00:20:15,000 E en termos de producto, en xeral serie de exercicios será 502 00:20:15,000 --> 00:20:16,760 devoltos no prazo dunha semana. 503 00:20:16,760 --> 00:20:19,080 Porque é preciso un pouco de tempo para seccións de acadar 504 00:20:19,080 --> 00:20:22,430 de equilibrio, o primeiro pset, 0 e 1, será un pouco 505 00:20:22,430 --> 00:20:24,130 atrasadas como as cousas se calmaren. 506 00:20:24,130 --> 00:20:27,130 Pero sexa en conta para que nas próximas semanas. 507 00:20:27,130 --> 00:20:29,750 >> Todo ben, entón deixe-me poñer no meu grave 508 00:20:29,750 --> 00:20:31,040 voz por un momento. 509 00:20:31,040 --> 00:20:32,690 Polo tanto, este é realmente un clima interesante para ser 510 00:20:32,690 --> 00:20:35,210 tendo esa discusión, o que con todas as outras cousas 511 00:20:35,210 --> 00:20:37,310 suceder na mesma campus relacionado. 512 00:20:37,310 --> 00:20:40,220 Pero CS50 ten certamente tivo a súa historia deste especial 513 00:20:40,220 --> 00:20:43,360 tema, na medida en que cada ano, este curso, para moitos 514 00:20:43,360 --> 00:20:46,910 anos, Ad-Foros preto de 3% da clase. 515 00:20:46,910 --> 00:20:51,620 Este ano, máis recente, de 2011, CS50 Ad-embarcado de 35 alumnos. 516 00:20:51,620 --> 00:20:54,120 Este non é, penso eu, debido á falta de claridade. 517 00:20:54,120 --> 00:20:56,760 Comprender que, no transcurso do programa, existe unha páxina de 518 00:20:56,760 --> 00:20:59,020 Declaración explicando onde as liñas son. 519 00:20:59,020 --> 00:21:01,350 Esta afirmación repítese en cada un dos 520 00:21:01,350 --> 00:21:03,070 problema define na primeira páxina. 521 00:21:03,070 --> 00:21:05,760 >> Entón eu falar iso hoxe realmente só para facer 522 00:21:05,760 --> 00:21:07,030 persoas conscientes deste. 523 00:21:07,030 --> 00:21:08,080 E nós tratamos cousas distintas. 524 00:21:08,080 --> 00:21:10,630 E o que eu penso que ía facer hoxe é só ter un momento para 525 00:21:10,630 --> 00:21:13,830 realmente ollar para algúns dos casos do pasado que xurdiron. 526 00:21:13,830 --> 00:21:16,160 En vez de manter estes segredos tan sucios, en realidade 527 00:21:16,160 --> 00:21:19,170 apuntar que os alumnos fixeron e como temos detectado 528 00:21:19,170 --> 00:21:21,630 e realmente o que a motivación principal é a 529 00:21:21,630 --> 00:21:23,950 mesmo tendo esa conversa. 530 00:21:23,950 --> 00:21:27,060 Entón, o que dixo, a liña é esencialmente iso - 531 00:21:27,060 --> 00:21:29,200 por programa, é benvido, que son animou, para 532 00:21:29,200 --> 00:21:30,210 falar con compañeiros de clase. 533 00:21:30,210 --> 00:21:31,910 Ese é o propósito de ter estes colaborativo 534 00:21:31,910 --> 00:21:34,470 o horario de expediente en Annenberg e incentivar a xente a 535 00:21:34,470 --> 00:21:35,755 final do proxecto para traballar xuntos. 536 00:21:35,755 --> 00:21:38,590 Pero a liña é deseñada cando chega a hora de realmente escribir 537 00:21:38,590 --> 00:21:39,790 súa solución final. 538 00:21:39,790 --> 00:21:42,590 Falando en inglés, totalmente ben, falando en código pseudo 539 00:21:42,590 --> 00:21:43,400 totalmente ben. 540 00:21:43,400 --> 00:21:46,340 Correo-e a un compañeiro seu pset, deixando os mirada 541 00:21:46,340 --> 00:21:48,610 a pantalla como as mans segue escribindo, 542 00:21:48,610 --> 00:21:50,110 ao longo da liña tamén. 543 00:21:50,110 --> 00:21:52,250 Non ollar para o currículo para as liñas específicas. 544 00:21:52,250 --> 00:21:55,850 >> Pero só para pintar un retrato de como este é, por desgraza, unha 545 00:21:55,850 --> 00:21:58,370 realidade, entender que hai sitios por aí que 546 00:21:58,370 --> 00:22:01,490 ter solucións dende esta clase e moitas outras clases. 547 00:22:01,490 --> 00:22:04,940 O feito de que vostede ou preto de 3% de vostedes saben que iso existe 548 00:22:04,940 --> 00:22:07,240 significa que sabemos que iso existe. 549 00:22:07,240 --> 00:22:09,340 O feito de que hai sitios como este onde 550 00:22:09,340 --> 00:22:11,540 Pode pagar alguén para realmente facer os seus xogos de problemas - que foi 551 00:22:11,540 --> 00:22:13,450 un caso real que xurdiu o ano pasado. 552 00:22:13,450 --> 00:22:15,790 Este é un sitio chamado odesk.com. 553 00:22:15,790 --> 00:22:20,090 E Tim era o nome da persoa aquí que estaba postea en 554 00:22:20,090 --> 00:22:24,580 esta web e pediu a alguén para facer o seu pset 7 en 555 00:22:24,580 --> 00:22:25,570 Neste caso en particular. 556 00:22:25,570 --> 00:22:28,350 Ben, é moi odesk.com Google capaz, e nós tamén somos 557 00:22:28,350 --> 00:22:30,310 moi bo buscando. 558 00:22:30,310 --> 00:22:32,360 Aquí, tamén, hai sitios - e este é bastante 559 00:22:32,360 --> 00:22:34,234 atroz, francamente. 560 00:22:34,234 --> 00:22:38,050 [Risas] 561 00:22:38,050 --> 00:22:39,610 DAVID J. Malan: O divertido sobre esta web é se 562 00:22:39,610 --> 00:22:41,970 ler a páxina sobre eles falan sobre a súa empresa 563 00:22:41,970 --> 00:22:44,390 cultura e como o servizo ao cliente é o seu número un 564 00:22:44,390 --> 00:22:46,190 prioridade, para asegurarse de que as súas atribucións chegar 565 00:22:46,190 --> 00:22:47,890 virou á hora. 566 00:22:47,890 --> 00:22:50,580 >> Pero, falando serio, de novo, o feito de que estes sitios 567 00:22:50,580 --> 00:22:52,910 existir, entendemos que tamén son conscientes de 568 00:22:52,910 --> 00:22:53,730 Estes tipos de sitios. 569 00:22:53,730 --> 00:22:55,890 E para dar unha sensación de que xeito iso xeralmente 570 00:22:55,890 --> 00:22:58,570 leva, xeralmente non ten grandes escándalos, onde as persoas 571 00:22:58,570 --> 00:23:01,080 están a colaborar en calquera tipo de escala, senón 572 00:23:01,080 --> 00:23:04,540 É nestes momentos de fin de noite de debilidade, que ten así 573 00:23:04,540 --> 00:23:07,550 moito por facer, é 04:00, está exhausto, e 574 00:23:07,550 --> 00:23:09,770 pensar a si mesmo, así, deixe-me dar un ollo no meu 575 00:23:09,770 --> 00:23:11,770 compañeiro de cuarto ou o código do meu amigo ou similar. 576 00:23:11,770 --> 00:23:14,800 E as manifestacións desta desgraza participa Estudante 577 00:23:14,800 --> 00:23:17,640 Un algo a presentación como esta e presentación de B Estudante 578 00:23:17,640 --> 00:23:20,370 algo así, que seguramente nun computador 579 00:23:20,370 --> 00:23:23,830 ciencia de clase, é moi doado para os científicos da computación 580 00:23:23,830 --> 00:23:25,690 para detectar con software. 581 00:23:25,690 --> 00:23:28,410 Este é outro paradigma común, onde teño a sorte de 582 00:23:28,410 --> 00:23:31,010 está a traballar ao lado de alguén, quizais falando en 583 00:23:31,010 --> 00:23:32,360 Inglés, así pseudocódigo. 584 00:23:32,360 --> 00:23:35,080 Pero entón chega a hora de realmente presentar, e os serie de exercicios 585 00:23:35,080 --> 00:23:37,910 só se trocadas por correo electrónico ou Dropbox ou similar. 586 00:23:37,910 --> 00:23:41,120 Pero, nunha tentativa de facer menos evidente que esta é 587 00:23:41,120 --> 00:23:44,830 o que pasou, entón é iso que está sometido. 588 00:23:44,830 --> 00:23:47,880 Isto, tamén, non fai viaxe ata ben escritos pezas de 589 00:23:47,880 --> 00:23:50,360 software como o que temos que realmente detectar 590 00:23:50,360 --> 00:23:51,280 Estes tipos de cousas. 591 00:23:51,280 --> 00:23:53,760 E de feito o que facemos é un programa de execución que compara todos 592 00:23:53,760 --> 00:23:55,540 submissões deste ano contra todo o pasado ano 593 00:23:55,540 --> 00:23:57,380 submissões, contra todo o que atopamos na 594 00:23:57,380 --> 00:24:00,060 Internet, contra calquera sitio de emprego alí fora. 595 00:24:00,060 --> 00:24:01,710 É todo moi automatizado. 596 00:24:01,710 --> 00:24:05,665 E, así, facelo moi xustiza gran os 97% que 597 00:24:05,665 --> 00:24:07,760 están realmente traballando súas Bundas neste e noutros 598 00:24:07,760 --> 00:24:11,530 clases e poñendo en todos os que o esforzo para que o traballo 599 00:24:11,530 --> 00:24:13,030 eles finalmente presentar é a súa propia. 600 00:24:13,030 --> 00:24:14,220 E podo ir as idades. 601 00:24:14,220 --> 00:24:16,030 >> Estes son só un puñado de casos do ano pasado. 602 00:24:16,030 --> 00:24:19,350 Algúns alumnos sometidos estes arquivos da mesma forma para pset 2, 603 00:24:19,350 --> 00:24:22,460 pset 3, pset 4, pset 5, pset 6, pset 9. 604 00:24:22,460 --> 00:24:26,360 Neste caso, esta foi cuestionario 0 e no último ano, onde dous 605 00:24:26,360 --> 00:24:29,570 estudantes presentado esta frase idéntica entre moitos 606 00:24:29,570 --> 00:24:32,210 outros, "A petición do tipo -" punto, punto, punto. 607 00:24:32,210 --> 00:24:34,530 Así, mesmo nunha clase de 600 que detectar esta 608 00:24:34,530 --> 00:24:36,310 en cuestionarios presentados. 609 00:24:36,310 --> 00:24:39,080 Así, en breve, este -, francamente, eu odio ter este tipo de 610 00:24:39,080 --> 00:24:41,300 conversa - pero este é realmente un esforzo deliberado 611 00:24:41,300 --> 00:24:43,540 este ano para intentar reducir este número. 612 00:24:43,540 --> 00:24:45,650 Porque mesmo que dicir que estes tipos de cousas cada 613 00:24:45,650 --> 00:24:48,100 anos, eu creo que a realidade de ter morado nela para poucos 614 00:24:48,100 --> 00:24:50,800 máis segundos que o habitual e, en realidade, só apuntando 615 00:24:50,800 --> 00:24:53,600 que o que pode parecer, non é, non un negocio tan grande, polo menos 616 00:24:53,600 --> 00:24:56,390 creo que volve a este momento especial, tanto na xustiza para 617 00:24:56,390 --> 00:25:00,100 si mesmo e para os seus compañeiros aquí. 618 00:25:00,100 --> 00:25:02,480 Entón, se ten algunha dúbida respecto de onde a liña 619 00:25:02,480 --> 00:25:04,290 é, por favor, chegar a min persoalmente. 620 00:25:04,290 --> 00:25:07,190 Pero a resposta é sempre, completamente estrés no 621 00:25:07,190 --> 00:25:09,090 último minuto, diñeiro en un día de atraso. 622 00:25:09,090 --> 00:25:11,080 Ou se é unha cuestión de non ter ningún día de atraso, 623 00:25:11,080 --> 00:25:12,900 honestamente, me e-mail persoal. 624 00:25:12,900 --> 00:25:14,110 Nós imos descubrir algo. 625 00:25:14,110 --> 00:25:17,480 Por favor, non poña o tempo aquí en Harvard en perigo. 626 00:25:17,480 --> 00:25:18,570 >> Agora, eu penso que debería aliviar o clima, entón eu 627 00:25:18,570 --> 00:25:20,264 incluído este como o seguinte diapositiva. 628 00:25:20,264 --> 00:25:22,770 [Risas] 629 00:25:22,770 --> 00:25:23,630 DAVID J. Malan: Este sitio web foi excelente. 630 00:25:23,630 --> 00:25:24,820 Eu realmente teño un pouco distraído. 631 00:25:24,820 --> 00:25:26,330 Hai un regalo. 632 00:25:26,330 --> 00:25:29,590 E entón este foi incrible. 633 00:25:29,590 --> 00:25:35,190 Ok, entón pense que gatinho tarde da noite ao facer 634 00:25:35,190 --> 00:25:36,040 destas decisións. 635 00:25:36,040 --> 00:25:40,110 Todas as cousas, dalgún xeito de volta para máis diversión e menos grave, como 636 00:25:40,110 --> 00:25:40,780 condicións. 637 00:25:40,780 --> 00:25:43,900 >> Todo ben, entón nós falamos un pouco sobre iso. 638 00:25:43,900 --> 00:25:46,080 Iso é algo que probablemente é bastante familiar a partir de 639 00:25:46,080 --> 00:25:47,260 o mundo do scratch. 640 00:25:47,260 --> 00:25:49,860 E no mundo do scratch, temos esa necesidade, por veces, a 641 00:25:49,860 --> 00:25:51,110 ir facer garfos na estrada. 642 00:25:51,110 --> 00:25:54,840 Ou iso ou aquilo ou esta outra cousa aquí. 643 00:25:54,840 --> 00:25:58,990 E cando a xente quere facelo, podemos utilizar, en C agora, iso 644 00:25:58,990 --> 00:26:00,860 outra construción. 645 00:26:00,860 --> 00:26:06,420 E entón aquí temos expresións booleanas. 646 00:26:06,420 --> 00:26:09,260 Por exemplo, expresións booleanas aquí, podemos OU 647 00:26:09,260 --> 00:26:12,260 los en conxunto, no sentido de que teñen esta condición OR 648 00:26:12,260 --> 00:26:13,200 esa condición. 649 00:26:13,200 --> 00:26:15,100 Podemos e xuntos, no sentido de que queremos 650 00:26:15,100 --> 00:26:17,710 comprobar esa condición e esa condición. 651 00:26:17,710 --> 00:26:22,440 E aquí temos un switch agora, que non é tan 652 00:26:22,440 --> 00:26:26,040 sintaticamente semellante a eses tipos de condicións, pero 653 00:26:26,040 --> 00:26:30,160 nos permite facer o equivalente a if, else if, else if, else 654 00:26:30,160 --> 00:26:34,990 , e semellantes, bastando enumerando-los, caso a caso 655 00:26:34,990 --> 00:26:36,670 a caso a caso. 656 00:26:36,670 --> 00:26:38,370 Entón vimos os da última vez. 657 00:26:38,370 --> 00:26:40,430 E entón comezamos a tocar cousas como loops. 658 00:26:40,430 --> 00:26:42,070 Vimos un destes só un momento atrás. 659 00:26:42,070 --> 00:26:44,180 Pero hai esas outras construcións de looping. 660 00:26:44,180 --> 00:26:46,370 >> Por exemplo, este aquí. 661 00:26:46,370 --> 00:26:50,140 Así, mentres (condición), facer esta cousa de novo e de novo. 662 00:26:50,140 --> 00:26:53,070 Entón, fundamentalmente, o que parece ser diferente entre esta 663 00:26:53,070 --> 00:26:55,760 loop e este loop mentres aquí? 664 00:27:00,810 --> 00:27:05,045 Este loop e este loop while. 665 00:27:05,045 --> 00:27:07,840 Si? 666 00:27:07,840 --> 00:27:08,800 ¿Que é iso? 667 00:27:08,800 --> 00:27:10,050 Audiencia: [inaudível]. 668 00:27:14,632 --> 00:27:15,120 DAVID J. Malan: Gran. 669 00:27:15,120 --> 00:27:17,130 Así, mentres na súa condición de loop, hai claramente 670 00:27:17,130 --> 00:27:17,940 sintaxe máis. 671 00:27:17,940 --> 00:27:20,560 Hai esa inicio, hai esta actualización. 672 00:27:20,560 --> 00:27:23,820 En un loop mentres, só hai esa condición. 673 00:27:23,820 --> 00:27:26,630 Polo tanto, parece que é un pouco preparados para abaixo en relación ao 674 00:27:26,630 --> 00:27:28,770 loop, o que significa que, se quere ter variables e queremos 675 00:27:28,770 --> 00:27:30,800 ter incremento, nós realmente temos que 676 00:27:30,800 --> 00:27:32,500 facelo nós mesmos. 677 00:27:32,500 --> 00:27:34,420 >> Entón deixe-me ir adiante e abrir gedit. 678 00:27:34,420 --> 00:27:36,320 Deixe-me pasar o aparello. 679 00:27:36,320 --> 00:27:38,110 E imos facer un rápido exemplo de que 680 00:27:38,110 --> 00:27:40,550 distingue un destes a partir do outro. 681 00:27:40,550 --> 00:27:42,490 E no fondo da miña mente aquí, debo dicir unha cousa. 682 00:27:42,490 --> 00:27:44,120 Eu especificamente mencionado o nome de Tim 683 00:27:44,120 --> 00:27:47,740 Tim era, en realidade, alguén que un estudante intentou atopar para facer 684 00:27:47,740 --> 00:27:48,680 seu deber de casa para eles. 685 00:27:48,680 --> 00:27:51,280 Nós non tivemos ningunha Tim que en determinado punto. 686 00:27:51,280 --> 00:27:53,690 Entón entender, para que eu non difundido un estudante, que non era un alumno. 687 00:27:53,690 --> 00:27:55,720 Era unha persoa aleatoria en internet facendo cousas 688 00:27:55,720 --> 00:27:57,180 o ano pasado proxy. 689 00:27:57,180 --> 00:27:58,670 Entón nós cremos que, tamén. 690 00:27:58,670 --> 00:28:00,630 Polo tanto, neste caso aquí, deixe-me ir adiante e 691 00:28:00,630 --> 00:28:02,810 abrir un novo arquivo. 692 00:28:02,810 --> 00:28:04,800 Arquivo, Novo. 693 00:28:04,800 --> 00:28:06,050 Tanto me dá unha guía aquí. 694 00:28:06,050 --> 00:28:09,940 Deixe-me ir adiante e salva-o como loop.c. 695 00:28:09,940 --> 00:28:11,810 Deixe-me ir e prema en Gardar. 696 00:28:11,810 --> 00:28:15,340 E entón, aquí, imos adiante e comezar a escribir 697 00:28:15,340 --> 00:28:16,605 # Incluír. 698 00:28:19,116 --> 00:28:20,520 Deixe-me facer zoom in 699 00:28:20,520 --> 00:28:23,410 Agora imos facer int main (void). 700 00:28:23,410 --> 00:28:30,020 Agora déixeme ir adiante e facer a (int i = 0; i < 701 00:28:30,020 --> 00:28:33,480 oh, 10; i + +). 702 00:28:33,480 --> 00:28:36,620 E agora eu estou indo para adiante e non imprimir a estrela que 703 00:28:36,620 --> 00:28:37,890 fixo anteriormente. 704 00:28:37,890 --> 00:28:39,390 E entón, ao final deste programa, nós só estamos indo a 705 00:28:39,390 --> 00:28:41,130 imprimir unha nova liña, só para que o meu poder 706 00:28:41,130 --> 00:28:42,470 non mirar todo desorde. 707 00:28:42,470 --> 00:28:45,170 voltar 0. 708 00:28:45,170 --> 00:28:47,610 Parece sintaticamente correcta? 709 00:28:47,610 --> 00:28:48,040 Ata agora. 710 00:28:48,040 --> 00:28:48,560 Entón, imos ver. 711 00:28:48,560 --> 00:28:51,290 >> Entón deixe-me afastar, ir para a miña xanela de terminal. 712 00:28:51,290 --> 00:28:54,570 E deixe-me ir adiante e executar loop, porque eu chamei esta 713 00:28:54,570 --> 00:28:55,690 loop.c. cousa 714 00:28:55,690 --> 00:28:56,780 Entón faga loop. 715 00:28:56,780 --> 00:28:57,840 Parece compilar Aceptar. 716 00:28:57,840 --> 00:29:00,210 Déixame correr loop, e agora Intro. 717 00:29:00,210 --> 00:29:01,820 E parece impreso 10 estrelas. 718 00:29:01,820 --> 00:29:03,780 Entón imos converter isto en un loop while para ver o que 719 00:29:03,780 --> 00:29:05,220 tipo de cuestións que tropezar. 720 00:29:05,220 --> 00:29:11,290 Entón, en vez diso, deixe-me entrar aquí e dicir mentres i é 721 00:29:11,290 --> 00:29:12,760 inferior a 10 - 722 00:29:12,760 --> 00:29:14,910 deixe-me librar do lazo é. 723 00:29:14,910 --> 00:29:17,170 OK, entón temos algúns problemas xa. 724 00:29:17,170 --> 00:29:21,110 Así, a condición é a mesma, pero eu estou, obviamente, falta a 725 00:29:21,110 --> 00:29:21,680 inicio. 726 00:29:21,680 --> 00:29:23,840 Estou perdendo a incrementação. 727 00:29:23,840 --> 00:29:28,020 Entón, o que o compilador probablemente dicirme cando intento 728 00:29:28,020 --> 00:29:29,170 compilar este programa? 729 00:29:29,170 --> 00:29:29,666 Si? 730 00:29:29,666 --> 00:29:31,154 Audiencia: [inaudível]. 731 00:29:31,154 --> 00:29:31,650 >> DAVID J. Malan: Gran. 732 00:29:31,650 --> 00:29:34,180 Por iso, vai dicir algo así como non declarado - neste 733 00:29:34,180 --> 00:29:35,280 caso, a variable i. 734 00:29:35,280 --> 00:29:37,980 E, de feito, o uso do identificador non declarado i. 735 00:29:37,980 --> 00:29:40,960 E así, en contraste con linguaxes como PHP e 736 00:29:40,960 --> 00:29:43,120 Python e Ruby, coa que algúns de vostedes poden estar familiarizado, 737 00:29:43,120 --> 00:29:44,820 onde podes só unha especie de inicio utilizando variables 738 00:29:44,820 --> 00:29:47,420 Queres ou non, e non se preocupe cos declarar 739 00:29:47,420 --> 00:29:48,560 explicitamente sempre. 740 00:29:48,560 --> 00:29:51,770 C e en linguaxes como Java e C + +, ten que ser 741 00:29:51,770 --> 00:29:53,020 Super explícito. 742 00:29:53,020 --> 00:29:55,760 E se queres unha variable chamada i, ten que me dicir 743 00:29:55,760 --> 00:29:57,360 o tipo de variable que é. 744 00:29:57,360 --> 00:29:59,360 Entón nós imos ter que resolver iso do seguinte xeito. 745 00:29:59,360 --> 00:30:05,510 Vou ter que ir ata aquí e escriba int i, polo tanto, 746 00:30:05,510 --> 00:30:07,860 Teño declarado dunha variable chamada i. 747 00:30:07,860 --> 00:30:09,180 Agora, eu teño pulado un paso. 748 00:30:09,180 --> 00:30:11,340 Eu, obviamente, non inicializar, pero imos ver que en 749 00:30:11,340 --> 00:30:13,650 parada polo Clang marcas reclamando. 750 00:30:13,650 --> 00:30:15,770 Entón deixe-me refacer este programa. 751 00:30:15,770 --> 00:30:16,770 >> Todo ben, agora é só solicitar 752 00:30:16,770 --> 00:30:17,870 por unha razón diferente. 753 00:30:17,870 --> 00:30:21,130 "Variable" i "non é inicializar cando se emprega aquí." Todo ben, entón 754 00:30:21,130 --> 00:30:22,340 iso é moi explícito. 755 00:30:22,340 --> 00:30:25,510 Inicializada só significa define-lo igual a un valor. 756 00:30:25,510 --> 00:30:30,820 E nós non fixemos iso, entón deixe-me tentar igual a 0. 757 00:30:30,820 --> 00:30:35,030 Agora imos tentar iso de novo e volver a executar Clang. 758 00:30:35,030 --> 00:30:36,140 Compilados neste momento. 759 00:30:36,140 --> 00:30:37,210 E eu estou a piques de executalo. 760 00:30:37,210 --> 00:30:43,120 Pero lazo vello gran infinito, porque eu fixen o 761 00:30:43,120 --> 00:30:45,530 inicio, eu fixen a condición, pero eu nunca fixen 762 00:30:45,530 --> 00:30:47,030 calquera tipo de incremento. 763 00:30:47,030 --> 00:30:48,780 Entón, como podo facer a incrementação? 764 00:30:48,780 --> 00:30:51,170 Ben, en un loop while, parece que eu vou ter 765 00:30:51,170 --> 00:30:54,180 para facelo dentro do loop, porque así como o primeiro 766 00:30:54,180 --> 00:30:56,570 exemplos semana de facer construcións de iteração, como con 767 00:30:56,570 --> 00:30:59,040 as medias e coa auto-conta, tivemos que facer 768 00:30:59,040 --> 00:31:01,550 algo ao final, como ir de volta para a liña seguinte. 769 00:31:01,550 --> 00:31:05,040 E se eu ir adiante e facelo i + + aquí? 770 00:31:05,040 --> 00:31:06,030 Non imos nin compilar este. 771 00:31:06,030 --> 00:31:06,890 Colle-me xa. 772 00:31:06,890 --> 00:31:09,704 O que está mal aquí? 773 00:31:09,704 --> 00:31:10,690 Audiencia: [inaudível]. 774 00:31:10,690 --> 00:31:11,770 >> DAVID J. Malan: Entón, en definitiva non é int. 775 00:31:11,770 --> 00:31:13,080 É i. 776 00:31:13,080 --> 00:31:15,110 E as claves, como antes, 777 00:31:15,110 --> 00:31:16,800 retirada non é suficiente. 778 00:31:16,800 --> 00:31:18,410 Entón agora eu teño esa construción. 779 00:31:18,410 --> 00:31:21,780 Entón, mentres eu sexa menor que 10, imprima unha estrela, 780 00:31:21,780 --> 00:31:23,220 entón incrementar i. 781 00:31:23,220 --> 00:31:25,680 E a forma dun tempo obras de lazo é que, logo que usar o 782 00:31:25,680 --> 00:31:29,630 inferior da alza, o que neste caso parece a liña 10, 783 00:31:29,630 --> 00:31:32,880 vai volver para a liña 6, altura en que o 784 00:31:32,880 --> 00:31:34,400 condición verificarase de novo. 785 00:31:34,400 --> 00:31:37,500 E se eu aínda é menor que 10, imos facer liñas 8 e 786 00:31:37,500 --> 00:31:41,250 a continuación, 9, despois imos acertar 10, e volver a 6, de novo e de 787 00:31:41,250 --> 00:31:45,580 de novo e de novo e de novo, sempre que i é menor que 10. 788 00:31:45,580 --> 00:31:47,860 Entón imos voltar a executar facer aquí. 789 00:31:47,860 --> 00:31:48,940 >> Ok, nós compilamos ben. 790 00:31:48,940 --> 00:31:50,300 Deixe-me volver correr loop. 791 00:31:50,300 --> 00:31:52,620 E agora, en realidade, parece funcionar. 792 00:31:52,620 --> 00:31:55,100 Entón pros e contras aquí? 793 00:31:55,100 --> 00:31:58,910 Ben, ata agora non hai, en realidade, un conxunto de Plo - 794 00:31:58,910 --> 00:31:59,420 tan bonito. 795 00:31:59,420 --> 00:32:01,870 Todo ben, que era un - Ah, iso foi un accidente. 796 00:32:01,870 --> 00:32:05,200 Todo ben, entón imos volver para o loop. 797 00:32:05,200 --> 00:32:07,530 Así, para os loops son bos porque son super explícito. 798 00:32:07,530 --> 00:32:09,720 E aínda que eles están un pouco desajeitado para escribir, é 799 00:32:09,720 --> 00:32:11,500 moi poderosa e permite que faga 800 00:32:11,500 --> 00:32:12,980 varias cousas ao mesmo tempo. 801 00:32:12,980 --> 00:32:16,240 Mentres lazos non parecen ter unha enorme cantidade de valor só 802 00:32:16,240 --> 00:32:18,500 aínda, porque parece que só temos que facer máis traballo. 803 00:32:18,500 --> 00:32:20,670 Temos que poñer o arranque ata aquí, o 804 00:32:20,670 --> 00:32:23,480 actualizar aquí, e temos que lembrar de facer todo isto. 805 00:32:23,480 --> 00:32:26,260 Entón, imos ver co tempo que lazos, mentres en realidade prestar 806 00:32:26,260 --> 00:32:29,380 si a só distintos contextos, datos diferentes 807 00:32:29,380 --> 00:32:33,900 estruturas como listas e táboas de hash, cousas que nós imos chegar a 808 00:32:33,900 --> 00:32:34,970 mediados semestre. 809 00:32:34,970 --> 00:32:37,900 Pero, por agora, sei que hai este terceiro tipo coñecido como un do- 810 00:32:37,900 --> 00:32:38,480 while. 811 00:32:38,480 --> 00:32:39,540 E vimos que brevemente. 812 00:32:39,540 --> 00:32:41,830 E iso pode ser super atenciosa con pset 1. 813 00:32:41,830 --> 00:32:45,570 Cada vez que quere facer algo e despois comprobar se 814 00:32:45,570 --> 00:32:48,940 o usuario colaborou, e non o fixo, fai-o de novo, un do- 815 00:32:48,940 --> 00:32:51,460 while se presta a este tipo de lóxica. 816 00:32:51,460 --> 00:32:55,640 Porque, como a ordenación de arriba para abaixo aquí suxire, 817 00:32:55,640 --> 00:32:57,750 que significa, literalmente, facer iso. 818 00:32:57,750 --> 00:32:59,830 E facelo de novo e de novo, o que pode ser iso? 819 00:32:59,830 --> 00:33:03,000 Quizais iso signifique GetInt chamada ou GetString e despois 820 00:33:03,000 --> 00:33:05,830 comprobar o valor de GetInt ou GetString e gritando 821 00:33:05,830 --> 00:33:08,260 ao usuario no caso de que non teñen cooperar, pedíndolles 822 00:33:08,260 --> 00:33:10,100 de novo e de novo e de novo. 823 00:33:10,100 --> 00:33:11,730 Onde quere facer algo novo, 824 00:33:11,730 --> 00:33:13,210 a continuación, comprobar algunha condición. 825 00:33:13,210 --> 00:33:14,110 >> Entón, imos tentar iso. 826 00:33:14,110 --> 00:33:17,130 Deixe-me realmente cambiar isto agora para un loop do-while. 827 00:33:17,130 --> 00:33:18,830 E eu estou indo a ir adiante e facer o seguinte. 828 00:33:18,830 --> 00:33:21,830 Entón faga o seguinte. 829 00:33:21,830 --> 00:33:26,870 Imos facer int i = GetInt (), pero imos primeiro dicir que o usuario 830 00:33:26,870 --> 00:33:27,410 o que facer. 831 00:33:27,410 --> 00:33:29,050 Entón, un pouco diferente desta vez. 832 00:33:29,050 --> 00:33:31,270 "Deixa-me un int". 833 00:33:31,270 --> 00:33:32,910 Entón, eu vou usar printf para iso. 834 00:33:32,910 --> 00:33:35,740 E agora eu vou baixar aquí, e eu vou facer iso 835 00:33:35,740 --> 00:33:41,520 mentres i é, digamos, máis que - 836 00:33:41,520 --> 00:33:47,540 imos ver, i é, digamos, menos que 0, ou i é 837 00:33:47,540 --> 00:33:48,730 superior a 10. 838 00:33:48,730 --> 00:33:51,810 Noutras palabras, é un número do 1 ao 9, só 839 00:33:51,810 --> 00:33:52,720 arbitrariamente. 840 00:33:52,720 --> 00:33:55,290 Entón, eu estou usando unha expresión combinada Boolean aquí para 841 00:33:55,290 --> 00:33:59,930 asegurarse de que i sexa inferior a 0 ou superior a 10, en que 842 00:33:59,930 --> 00:34:02,530 caso, vou facer este loop aquí de novo. 843 00:34:02,530 --> 00:34:04,400 Entón, de novo, facer iso - 844 00:34:04,400 --> 00:34:08,480 mentres i é menor que 0 ou i é maior que 10. 845 00:34:08,480 --> 00:34:11,440 >> Entón agora imos seguir adiante e facelo unha vez que fixemos iso. 846 00:34:11,440 --> 00:34:13,270 Imos facer unha proba de sanidade rápido. 847 00:34:13,270 --> 00:34:18,929 printf ("Grazas, i é% d", i). 848 00:34:18,929 --> 00:34:21,350 Polo tanto, este programa simple pide ao usuario a un int, 849 00:34:21,350 --> 00:34:24,000 asegúrese de que está dentro dalgún intervalo de 1 a 9, inclusive, 850 00:34:24,000 --> 00:34:26,280 e despois agradece ao usuario, lembrando-lles o que eles só 851 00:34:26,280 --> 00:34:27,940 escritas, así como unha proba de sanidade pouco. 852 00:34:27,940 --> 00:34:30,659 Pero imos ver se isto funciona como desexado. 853 00:34:30,659 --> 00:34:34,533 Deixe-me ir de cabeza para baixo aquí e volver a correr facer loop. 854 00:34:34,533 --> 00:34:35,350 Hmm 855 00:34:35,350 --> 00:34:38,600 "O uso de identificador non declarado 'i'". Isto é raro. 856 00:34:38,600 --> 00:34:41,509 Eu penso que nós resolvemos isto. 857 00:34:45,489 --> 00:34:47,560 Mesmo síntoma, pero de código diferente. 858 00:34:47,560 --> 00:34:47,899 Si? 859 00:34:47,899 --> 00:34:50,191 Audiencia: [inaudível] dentro de dous, temos que 860 00:34:50,191 --> 00:34:52,639 [Inaudível]. 861 00:34:52,639 --> 00:34:53,260 >> DAVID J. Malan: Exactamente. 862 00:34:53,260 --> 00:34:55,989 Entón, iso realmente nos leva a un tema coñecido como ámbito. 863 00:34:55,989 --> 00:34:59,350 Acontece que C, de novo, realmente leva literalmente. 864 00:34:59,350 --> 00:35:02,970 E se fai algo así como este onde declarar un int 865 00:35:02,970 --> 00:35:06,120 e despois asignar-lle un valor, pero fai iso dentro dunha 866 00:35:06,120 --> 00:35:09,840 par de chaves, o que C fai é el asume que 867 00:35:09,840 --> 00:35:14,800 só quero os bits 32, coñecidos como i para existir dentro do 868 00:35:14,800 --> 00:35:18,200 contexto destas chaves, dentro do contexto de liñas 869 00:35:18,200 --> 00:35:22,420 6 a 9. Entón eu é declarada, e é asignado un 870 00:35:22,420 --> 00:35:26,530 valor na liña 8, pero logo que comeza fóra de 871 00:35:26,530 --> 00:35:30,270 liña 9 debaixo da chaveta, eu xa non está en 872 00:35:30,270 --> 00:35:31,910 ámbito, por así dicir. 873 00:35:31,910 --> 00:35:35,030 S-C-O-P-E. Non é máis no contexto correcto. 874 00:35:35,030 --> 00:35:37,940 Polo tanto, agora non hai i, por iso é coma se non tivese mesmo 875 00:35:37,940 --> 00:35:38,770 declarou el en todo. 876 00:35:38,770 --> 00:35:41,520 >> Entón, o que é unha corrección a continuación, para algo como isto, o 877 00:35:41,520 --> 00:35:44,300 razón é que eu sexa declarada dentro das chaves, que 878 00:35:44,300 --> 00:35:45,120 aparentemente é malo? 879 00:35:45,120 --> 00:35:45,410 Aquí? 880 00:35:45,410 --> 00:35:46,820 Audiencia: [inaudível]. 881 00:35:46,820 --> 00:35:47,150 DAVID J. Malan: Yeah. 882 00:35:47,150 --> 00:35:48,710 Así, podemos arrincar-lo fóra. 883 00:35:48,710 --> 00:35:53,530 Entón deixe-me ir adiante e eliminar as partes declaración na que 884 00:35:53,530 --> 00:35:55,820 Eu especificar o tipo, e deixe-me facelo aquí. 885 00:35:55,820 --> 00:36:00,220 Así, na liña 5, que agora di "Deixa-me un int." Chama-o i. 886 00:36:00,220 --> 00:36:03,400 Obsérvese na liña 9, eu non quero facer iso, porque eu 887 00:36:03,400 --> 00:36:04,830 xa ten os bits 32. 888 00:36:04,830 --> 00:36:06,140 Eu non quero pedir ao ordenador por un 889 00:36:06,140 --> 00:36:07,630 diferentes de 32 bits. 890 00:36:07,630 --> 00:36:09,850 Eu quero usar eses mesmos 32 bits. 891 00:36:09,850 --> 00:36:13,190 E agora, porque eu é declarado en liña 5, aínda é lexítimo 892 00:36:13,190 --> 00:36:16,550 usalo na liña 11 e liña 12. 893 00:36:16,550 --> 00:36:19,310 >> Entón deixe-me tentar recompilar iso e ver 894 00:36:19,310 --> 00:36:20,490 se Clang deixa de berrar. 895 00:36:20,490 --> 00:36:22,380 facer loop. 896 00:36:22,380 --> 00:36:25,470 Polo tanto, agora é "declaración implícita da función 897 00:36:25,470 --> 00:36:29,880 'GetInt' non é válida na C99. "¿Que é iso? 898 00:36:29,880 --> 00:36:30,400 Si? 899 00:36:30,400 --> 00:36:32,330 Audiencia: [inaudível]. 900 00:36:32,330 --> 00:36:32,690 DAVID J. Malan: Yeah. 901 00:36:32,690 --> 00:36:35,520 Polo tanto, agora que eu estou realmente usando GetInt, iso non é algo 902 00:36:35,520 --> 00:36:38,190 que só vén con C. Isto vén de CS50. 903 00:36:38,190 --> 00:36:39,890 Entón necesitamos diso aquí. 904 00:36:39,890 --> 00:36:41,450 E deixe-me volver a ventá de abaixo 905 00:36:41,450 --> 00:36:43,500 aquí e re-executar o make. 906 00:36:43,500 --> 00:36:44,160 Ok, finalmente. 907 00:36:44,160 --> 00:36:46,270 Agora temos que resolver e que o erro dos outros. 908 00:36:46,270 --> 00:36:48,930 Déixame correr loop e ver o que acontece. 909 00:36:48,930 --> 00:36:51,740 "Deixa-me un int." Vou dar-lle 11. 910 00:36:51,740 --> 00:36:53,100 Eu vou dar -1. 911 00:36:53,100 --> 00:36:54,470 Eu vou dar foo. 912 00:36:54,470 --> 00:36:56,080 Eu vou dar 5. 913 00:36:56,080 --> 00:36:57,450 E agora realmente funciona. 914 00:36:57,450 --> 00:36:59,410 Pero o poder cambiou para unha razón aquí. 915 00:36:59,410 --> 00:37:02,800 ¿Por que din que repetir unha desas veces, pero me dea un 916 00:37:02,800 --> 00:37:03,920 int outras tres veces? 917 00:37:03,920 --> 00:37:05,500 Por que o comportamento distinto? 918 00:37:05,500 --> 00:37:06,980 Audiencia: deulle unha corda. 919 00:37:06,980 --> 00:37:07,830 DAVID J. Malan: Sentímolo? 920 00:37:07,830 --> 00:37:08,570 Audiencia: Vostede deu unha corda. 921 00:37:08,570 --> 00:37:08,990 DAVID J. Malan: Yeah. 922 00:37:08,990 --> 00:37:11,450 Polo tanto, deron unha cadea neste terceiro intento, 923 00:37:11,450 --> 00:37:12,490 cando eu escriba foo. 924 00:37:12,490 --> 00:37:13,200 Foo é unha cadea. 925 00:37:13,200 --> 00:37:14,340 Obviamente non é un int. 926 00:37:14,340 --> 00:37:17,500 E de maneira que CS50 aplicou GetInt que 927 00:37:17,500 --> 00:37:20,330 non comprobar se algo é menor que 0 ou maior que 10 928 00:37:20,330 --> 00:37:22,260 para ti, porque como sabemos de antemán o tipo de 929 00:37:22,260 --> 00:37:23,130 int que quere? 930 00:37:23,130 --> 00:37:25,880 Pero podemos minimamente comprobar a vostede, o usuario polo menos 931 00:37:25,880 --> 00:37:26,730 Escriba un número enteiro? 932 00:37:26,730 --> 00:37:30,500 E se non o fixo, nós berrar co usuario escribindo "repetir" na 933 00:37:30,500 --> 00:37:31,440 pantalla. 934 00:37:31,440 --> 00:37:34,210 >> Polo tanto, agora temos un programa que é looping. Okay. 935 00:37:34,210 --> 00:37:37,070 Agora, cal destes é o mellor tipo de construción? 936 00:37:37,070 --> 00:37:39,060 Entón é aquí que as cousas comezan a estar un pouco confuso, o 937 00:37:39,060 --> 00:37:42,360 feito de que ten que se lembrar de declarar unha variable-aquí 938 00:37:42,360 --> 00:37:44,630 Se queres usalo dentro duns 939 00:37:44,630 --> 00:37:46,460 claves e fóra. 940 00:37:46,460 --> 00:37:48,490 Pero aínda que isto parece un pouco enigmática en primeiro 941 00:37:48,490 --> 00:37:50,750 vista, só unha vez, lembre-se a lóxica simple. 942 00:37:50,750 --> 00:37:54,630 A fin de utilizar calquera cousa en C, se é unha función ou 943 00:37:54,630 --> 00:37:57,680 é unha variable, ten que inclui-lo se é unha función 944 00:37:57,680 --> 00:37:59,770 nalgunha biblioteca, ou precisa declarar. 945 00:37:59,770 --> 00:38:02,405 Pero agora precisa ser consciente extra do feito de que 946 00:38:02,405 --> 00:38:04,940 está declarando que no ámbito dereita. 947 00:38:04,940 --> 00:38:08,150 Non está poñendo moita forza dentro parénteses. 948 00:38:08,150 --> 00:38:09,410 >> Entón deixe-me realmente reverter. 949 00:38:09,410 --> 00:38:12,660 Se volvemos ao noso, por exemplo, de máis cedo, e eu vou 950 00:38:12,660 --> 00:38:19,245 de volta para a int, int i = 0; i <10, i + +, e eu 951 00:38:19,245 --> 00:38:26,370 printf facer estrelas, coma este, a continuación, paren preto, e agora 952 00:38:26,370 --> 00:38:30,410 printf i agora - 953 00:38:30,410 --> 00:38:33,500 de acordo coa mesma lóxica, o que vai ocorrer cando intento 954 00:38:33,500 --> 00:38:35,500 compilar este programa? 955 00:38:35,500 --> 00:38:36,790 Audiencia: identificador válido. 956 00:38:36,790 --> 00:38:38,560 DAVID J. Malan: Entón é outro identificador válido, 957 00:38:38,560 --> 00:38:39,470 identificador non declarado. 958 00:38:39,470 --> 00:38:41,810 Agora, a razón é un pouco diferente. 959 00:38:41,810 --> 00:38:44,370 Hai, obviamente, non hai chaves aquí, pero o mesmo 960 00:38:44,370 --> 00:38:46,790 idea, a mesma historia de alcance aplicable. 961 00:38:46,790 --> 00:38:50,340 Se declarou unha variable como i dentro dunha 962 00:38:50,340 --> 00:38:53,960 loop for, mesmo se non ten explicitamente escrito o crespo 963 00:38:53,960 --> 00:38:56,980 chaves, pensar-los mental como aínda estar alí, en que 964 00:38:56,980 --> 00:39:00,310 caso eu só é válido dentro do loop. 965 00:39:00,310 --> 00:39:03,080 Non é válido cando chegar para a próxima liña, que en 966 00:39:03,080 --> 00:39:05,090 neste caso, é agora 10. 967 00:39:05,090 --> 00:39:09,060 Así, só algunhas cuestións de ámbito e similares. 968 00:39:09,060 --> 00:39:12,620 Todo ben, algunha dúbida? 969 00:39:12,620 --> 00:39:15,310 >> Todo ben, entón ese é un tipo de programa trivial pouco, 970 00:39:15,310 --> 00:39:17,450 imprimir só pequenas estrelas. 971 00:39:17,450 --> 00:39:20,400 Pero imos ver se se lembra desta música aquí. 972 00:39:20,400 --> 00:39:22,530 Esta é unha música moi irritante os nenos cantaban en 973 00:39:22,530 --> 00:39:23,550 o autobús escolar e afíns. 974 00:39:23,550 --> 00:39:25,990 Pero o que é bo niso é que ten esa ciclicidade, 975 00:39:25,990 --> 00:39:27,910 cal é "99 botellas de cervexa na parede, 976 00:39:27,910 --> 00:39:28,520 99 botellas de cervexa. 977 00:39:28,520 --> 00:39:31,030 Tomé un para abaixo, pase adiante, 98 botellas de cervexa na 978 00:39:31,030 --> 00:39:34,330 parede. "E entón a canción repite a 97, despois 96, despois 979 00:39:34,330 --> 00:39:38,040 95, 94, todo o camiño para 0 se realmente ten que 980 00:39:38,040 --> 00:39:38,920 agora no autobús. 981 00:39:38,920 --> 00:39:41,960 Polo tanto, este é un bo programa para clasificar de aplico, porque a miña 982 00:39:41,960 --> 00:39:43,650 Deus, se podería só implementar isto con algúns 983 00:39:43,650 --> 00:39:46,660 liñas de código, pode cuspir as letras enteiras para este 984 00:39:46,660 --> 00:39:48,240 canción moi rapidamente. 985 00:39:48,240 --> 00:39:50,420 Pero ao longo do camiño, podemos comezar agora desmembrar algúns 986 00:39:50,420 --> 00:39:52,460 desas construcións básicas looping e agora tamén 987 00:39:52,460 --> 00:39:55,830 introducir funcións que escribir nós mesmos, volver valores 988 00:39:55,830 --> 00:39:57,020 que pasar ao redor. 989 00:39:57,020 --> 00:39:58,910 Pero, primeiro, por que non ir adiante e ter a nosa cinco minutos 990 00:39:58,910 --> 00:39:59,320 romper aquí? 991 00:39:59,320 --> 00:40:01,480 E cando volvemos, imos cantar esa música. 992 00:40:05,680 --> 00:40:08,760 >> Todo ben, entón estamos de volta. 993 00:40:08,760 --> 00:40:11,850 E cando digo agora imos cantar esa música, quero dicir 994 00:40:11,850 --> 00:40:13,250 programaticamente, non verbalmente. 995 00:40:13,250 --> 00:40:19,370 Polo tanto, temos aquí beer1.c, que é unha implementación deste 996 00:40:19,370 --> 00:40:20,580 música en particular. 997 00:40:20,580 --> 00:40:23,110 E só para quedar claro, para aqueles que non familiarizados co que 998 00:40:23,110 --> 00:40:24,460 esta cousa parece, deixe-me ir adiante 999 00:40:24,460 --> 00:40:27,070 e facer beer1, Intro. 1000 00:40:27,070 --> 00:40:30,400 Agora déixeme correr beer1, eo que imos ver - cantas botellas 1001 00:40:30,400 --> 00:40:31,140 de cervexa haberá? 1002 00:40:31,140 --> 00:40:33,240 Vou escribir en 99, como di a canción. 1003 00:40:33,240 --> 00:40:34,040 Intro. 1004 00:40:34,040 --> 00:40:35,650 E agora percorrer - 1005 00:40:35,650 --> 00:40:38,280 oops - percorrer todo isto, nós imos ver que 1006 00:40:38,280 --> 00:40:41,350 este, de feito, cantar a canción enteira. 1007 00:40:44,050 --> 00:40:44,540 Espere un minuto. 1008 00:40:44,540 --> 00:40:46,240 A miña barra de rolagem é un pouco confuso. 1009 00:40:46,240 --> 00:40:47,940 Imos usar a xanela máis grande. 1010 00:40:47,940 --> 00:40:53,500 Entón beer1, 99, alí imos nós. 1011 00:40:53,500 --> 00:40:56,420 Polo tanto, temos aquí toda a música, cantada moito máis rápido 1012 00:40:56,420 --> 00:40:58,450 ordenador que podería ter sido por nós. 1013 00:40:58,450 --> 00:41:00,340 Entón, observe, porén, a natureza cíclica aquí. 1014 00:41:00,340 --> 00:41:03,380 El di que 99, entón 99, a continuación, "tomar un baixo, pasalo 1015 00:41:03,380 --> 00:41:04,740 volta ", entón 98. 1016 00:41:04,740 --> 00:41:06,640 E agora repite unha e outra vez. 1017 00:41:06,640 --> 00:41:08,840 >> Polo tanto, esta é realmente unha oportunidade perfecta para calquera tipo de 1018 00:41:08,840 --> 00:41:10,400 looping construír. 1019 00:41:10,400 --> 00:41:12,950 Repare que eu son o tipo de corte de un canto aquí. 1020 00:41:12,950 --> 00:41:15,960 Repare que eu estou dicindo "98 botellas de cervexa na parede, 1021 00:41:15,960 --> 00:41:19,010 97 botellas de cervexa na parede ", e que era tan 1022 00:41:19,010 --> 00:41:21,640 que cando chegamos a un botellas de cervexa, eu non teño 1023 00:41:21,640 --> 00:41:23,300 se preocupar coa gramática do inglés. 1024 00:41:23,300 --> 00:41:25,790 Pero tamén podemos solucionar isto con un pouco máis de un se 1025 00:41:25,790 --> 00:41:26,910 condición, quizais. 1026 00:41:26,910 --> 00:41:30,110 Se ese número é singular, vai adiante e dicir "botella", 1027 00:41:30,110 --> 00:41:31,840 en caso contrario, se é plural, dicir "botellas". 1028 00:41:31,840 --> 00:41:34,150 Pero, por agora, estou completamente corte que canto. 1029 00:41:34,150 --> 00:41:35,520 Entón imos ver o que temos aquí. 1030 00:41:35,520 --> 00:41:37,150 Entón, nós temos algúns comentarios na parte superior. 1031 00:41:37,150 --> 00:41:39,450 Estou incluíndo estas dúas bibliotecas, como 1032 00:41:39,450 --> 00:41:41,140 Temos sido comunmente. 1033 00:41:41,140 --> 00:41:43,610 E agora déixeme rolar para a primeira 1034 00:41:43,610 --> 00:41:44,990 liñas de código. 1035 00:41:44,990 --> 00:41:47,020 Liña 17 comeza principal. 1036 00:41:47,020 --> 00:41:50,610 Liña 21 e 20 ten o número de botellas de cervexa haberá? 1037 00:41:50,610 --> 00:41:52,060 E entón eu chamo GetInt. 1038 00:41:52,060 --> 00:41:53,800 E agora eu teño un pouco de unha proba de sanidade. 1039 00:41:53,800 --> 00:41:57,030 >> Polo tanto, esta é unha convención que imos agora comezar a adoptar para 1040 00:41:57,030 --> 00:41:59,620 máis rigor comprobar a entrada do usuario. 1041 00:41:59,620 --> 00:42:01,710 Ás veces só non quere leva-los de novo 1042 00:42:01,710 --> 00:42:02,630 e de novo e de novo. 1043 00:42:02,630 --> 00:42:05,620 Se o usuario se parafusos e non cooperar, todo ben. 1044 00:42:05,620 --> 00:42:07,430 Saia e simplemente non tratar con eles. 1045 00:42:07,430 --> 00:42:08,990 E iso é o que eu estou facendo aquí. 1046 00:42:08,990 --> 00:42:12,520 Se n é menor que 1, eu estou indo só para berrar co usuario, 1047 00:42:12,520 --> 00:42:14,330 "Sentímolo, iso non ten sentido." E entón eu vou 1048 00:42:14,330 --> 00:42:16,650 arbitrariamente volver 1. 1049 00:42:16,650 --> 00:42:18,550 Entón, de novo, esta é só unha convención para se acostumar. 1050 00:42:18,550 --> 00:42:19,850 Por agora, leva-lo na fe. 1051 00:42:19,850 --> 00:42:22,700 Pero, ata agora, temos sido sempre retornando 0, porque 1052 00:42:22,700 --> 00:42:25,204 dixemos retornando 0 denota o que? 1053 00:42:25,204 --> 00:42:26,000 Audiencia: Éxito. 1054 00:42:26,000 --> 00:42:27,320 DAVID J. Malan: Éxito, iso é todo. 1055 00:42:27,320 --> 00:42:29,740 Polo tanto, agora que finalmente estamos empezando a pensar en 1056 00:42:29,740 --> 00:42:31,330 non logro - 1057 00:42:31,330 --> 00:42:33,760 noutras palabras, os casos de canto, as condicións de erro - 1058 00:42:33,760 --> 00:42:37,520 agora eu teño unha fonte infinita, ou polo menos catro billón 1059 00:42:37,520 --> 00:42:39,790 posibles cousas que poden dar mal nos meus programas. 1060 00:42:39,790 --> 00:42:42,300 E podo comezar a asignar-lles números individuais. 1061 00:42:42,300 --> 00:42:44,340 Agora, xeralmente basta só volver 1062 00:42:44,340 --> 00:42:45,730 algo diferente de 0. 1063 00:42:45,730 --> 00:42:48,040 Entón, nós imos simplemente voltar un por agora. 1064 00:42:48,040 --> 00:42:51,440 Pero a razón para voltar 1 é que, logo que volver 1065 00:42:51,440 --> 00:42:55,110 1, creo que o que ocorre co resto do programa? 1066 00:42:55,110 --> 00:42:55,720 Que pare. 1067 00:42:55,720 --> 00:42:56,560 É iso aí. 1068 00:42:56,560 --> 00:42:59,150 Así, o feito de que estou retornando 1 é efectivamente 1069 00:42:59,150 --> 00:43:02,950 curtocircuíto a execución deste programa, de xeito que 1070 00:43:02,950 --> 00:43:06,780 nada por baixo da liña de 27 continuará a execución. 1071 00:43:06,780 --> 00:43:09,210 Así que retorna principais, que é el. 1072 00:43:09,210 --> 00:43:13,160 >> Todo ben, por iso, se o usuario fai cooperar e chegar á liña 30 1073 00:43:13,160 --> 00:43:15,680 porque digitaram un número lexítimo, aquí é o meu 1074 00:43:15,680 --> 00:43:16,990 implantación desta canción. 1075 00:43:16,990 --> 00:43:19,050 Entón eu primeiro imprimir un carácter de nova liña, só para 1076 00:43:19,050 --> 00:43:19,880 estética. 1077 00:43:19,880 --> 00:43:21,500 Agora teño un loop. 1078 00:43:21,500 --> 00:43:22,930 E repare que eu estou facendo as cousas con un pouco 1079 00:43:22,930 --> 00:43:23,880 dunha dirección distinta. 1080 00:43:23,880 --> 00:43:26,210 Eu non teño que facer menos do que, eu non teño que facer + +. 1081 00:43:26,210 --> 00:43:30,660 Eu podo dicir que en vez arrincar dunha variable i, configure-lo igual a 1082 00:43:30,660 --> 00:43:35,080 n, o número que o usuario introduciu, entón faga o seguinte, de xeito 1083 00:43:35,080 --> 00:43:39,590 mentres i é maior que 0, entón i - 1084 00:43:39,590 --> 00:43:42,070 unha vez que termine un iteração deste loop. 1085 00:43:42,070 --> 00:43:44,310 Así, podemos contar para abaixo, usando un loop tamén. 1086 00:43:44,310 --> 00:43:47,520 Agora, esta é unha semana moi cousas agora, con printf. 1087 00:43:47,520 --> 00:43:51,770 Así impresión "% botellas d de cervexa na parede." Imprimir "% d 1088 00:43:51,770 --> 00:43:54,990 botellas de cervexa. "" Teña unha para abaixo, pase adiante. "Imprimir 1089 00:43:54,990 --> 00:43:58,880 "% D botellas de cervexa na parede." Entón aínda é d%, pero 1090 00:43:58,880 --> 00:44:02,770 conta que o argumento de printf está cambiando. 1091 00:44:02,770 --> 00:44:05,840 Tras a vírgula, teño eu, porque eu quero dicir 99. 1092 00:44:05,840 --> 00:44:08,590 Tras esta coma, teño eu, porque eu quero dicir 99. 1093 00:44:08,590 --> 00:44:14,030 Tras esta coma, teño i - 1, porque quero dicir 98 en 1094 00:44:14,030 --> 00:44:16,260 Esta primeira iteração, e así por diante. 1095 00:44:16,260 --> 00:44:18,520 E agora aquí, eu só teño unha observación estúpida. 1096 00:44:18,520 --> 00:44:22,270 E despois a liña 42, eu voltar 0, por convención, o que significa que 1097 00:44:22,270 --> 00:44:23,650 está todo ok. 1098 00:44:23,650 --> 00:44:24,490 >> Entón, o que se eu goofed? 1099 00:44:24,490 --> 00:44:26,350 O que pode un erro común aquí estar? 1100 00:44:26,350 --> 00:44:29,200 Ben, e eu accidentalmente dixo ben, quero contar 1101 00:44:29,200 --> 00:44:31,640 a 0, quero 0 botellas de cervexa na parede? 1102 00:44:31,640 --> 00:44:34,620 Entón, digo, i é superior ou igual a 0. 1103 00:44:34,620 --> 00:44:38,920 O que vai ser o síntoma que agora podo ver si recompilar 1104 00:44:38,920 --> 00:44:41,173 beer1 e executa-lo? 1105 00:44:41,173 --> 00:44:42,120 Audiencia: Negativo. 1106 00:44:42,120 --> 00:44:43,590 DAVID J. Malan: Si, que vai ir negativo. 1107 00:44:43,590 --> 00:44:45,950 Este é un erro off-by-one, incrible 1108 00:44:45,950 --> 00:44:47,270 erro común de facer. 1109 00:44:47,270 --> 00:44:48,960 Imos realmente voltar á xanela da terminal e facelo 1110 00:44:48,960 --> 00:44:50,620 aquí, para que poidamos ver máis dunha vez. 1111 00:44:50,620 --> 00:44:53,280 Intro, 99 botellas de cervexa. 1112 00:44:53,280 --> 00:44:56,580 Preto, pero fomos sempre tan pouco lonxe demais. 1113 00:44:56,580 --> 00:45:00,500 Nós cantamos a música moi baixo, de modo que agora alcanzou o 1114 00:45:00,500 --> 00:45:01,510 número negativo. 1115 00:45:01,510 --> 00:45:03,680 Por iso, non funciona moi ben. 1116 00:45:03,680 --> 00:45:06,450 >> Todo ben, entón podemos facilmente corrixir isto, indo de volta para a 1117 00:45:06,450 --> 00:45:07,650 xeito que era. 1118 00:45:07,650 --> 00:45:10,360 Pero o que son algunhas oportunidades agora 1119 00:45:10,360 --> 00:45:11,190 mellora? 1120 00:45:11,190 --> 00:45:17,200 Ben, deixe-me abrir beer2.c e descenda aquí e dar unha 1121 00:45:17,200 --> 00:45:19,310 mirar para esta versión. 1122 00:45:19,310 --> 00:45:21,370 Cal é a primeira cousa que salta en ti como diferente 1123 00:45:21,370 --> 00:45:23,715 nesta versión aquí? 1124 00:45:23,715 --> 00:45:24,190 Audiencia: [inaudível]. 1125 00:45:24,190 --> 00:45:26,510 DAVID J. Malan: Si, así, non máis eu, porque se produciu a 1126 00:45:26,510 --> 00:45:29,350 min que vostede sabe o que eu estou pedindo ao usuario para n, e entón eu son 1127 00:45:29,350 --> 00:45:33,580 definindo i igual a n, e entón eu vou cambiar eu, pero eu nunca son 1128 00:45:33,580 --> 00:45:34,590 n tocando de novo. 1129 00:45:34,590 --> 00:45:37,390 Entón o que diaños era o punto de que reservar outro 32 1130 00:45:37,390 --> 00:45:45,210 bits chamado i só para que eu poida ter unha variable diferente? 1131 00:45:45,210 --> 00:45:47,960 Polo tanto, neste caso, eu medio que recoñeceu que innecesaria 1132 00:45:47,960 --> 00:45:49,190 característica de proxecto. 1133 00:45:49,190 --> 00:45:52,730 E agora vou dicir mentres n é maior que 0, ir 1134 00:45:52,730 --> 00:45:56,180 adiante e imprimir a mesma canción, pasando un n para printf como o 1135 00:45:56,180 --> 00:46:00,210 segundo argumento, e n - 1 como o segundo argumento aquí. 1136 00:46:00,210 --> 00:46:02,930 E entón, en cada iteração do loop, vai adiante e só 1137 00:46:02,930 --> 00:46:05,080 decrementar o propio n. 1138 00:46:05,080 --> 00:46:06,960 Agora, funcionalmente, este programa 1139 00:46:06,960 --> 00:46:08,010 vai ser idénticas. 1140 00:46:08,010 --> 00:46:10,730 Se eu escribir 99, n comeza en 99. 1141 00:46:10,730 --> 00:46:12,890 Eu decremento, decremento, decremento, decremento. 1142 00:46:12,890 --> 00:46:15,875 Eu estou indo a obter todo o camiño para "Unha botella de cervexa en 1143 00:46:15,875 --> 00:46:16,740 a parede, unha botella de cervexa. 1144 00:46:16,740 --> 00:46:18,020 Tomé un para abaixo, pase adiante. 1145 00:46:18,020 --> 00:46:21,480 0 botellas de cervexa na parede. "A fin, porque eu fixen 1146 00:46:21,480 --> 00:46:23,200 obter a condición correcta. 1147 00:46:23,200 --> 00:46:24,280 É maior que 0. 1148 00:46:24,280 --> 00:46:26,220 Eu non cometer este erro. 1149 00:46:26,220 --> 00:46:28,470 >> Entón, o que é mellor, unha versión ou a versión de dous? 1150 00:46:31,380 --> 00:46:33,480 Entón eu oín unha morea de murmurios para dous. 1151 00:46:33,480 --> 00:46:34,730 Por que dous? 1152 00:46:37,210 --> 00:46:38,225 ¿Que é iso? 1153 00:46:38,225 --> 00:46:39,215 Audiencia: [inaudível]. 1154 00:46:39,215 --> 00:46:40,070 DAVID J. Malan: Ah, ok. 1155 00:46:40,070 --> 00:46:42,870 Entón non vai por baixo de 0, pero lembre, nunha versión, a 1156 00:46:42,870 --> 00:46:45,870 versión orixinal correcto non ir por baixo de 0 tamén. 1157 00:46:45,870 --> 00:46:48,340 Entón lembre que esta é a versión correcta. 1158 00:46:48,340 --> 00:46:51,630 Entón, imos polo menos comparar as dúas versións correctas. 1159 00:46:51,630 --> 00:46:53,300 ¿Que é un argumento a favor da versión 1160 00:46:53,300 --> 00:46:55,146 dous sendo, mmm, mellor? 1161 00:46:55,146 --> 00:46:55,642 Si? 1162 00:46:55,642 --> 00:46:57,630 Audiencia: El usa menos espazo. 1163 00:46:57,630 --> 00:46:59,530 DAVID J. Malan: Ok, entón usa menos espazo, non? 1164 00:46:59,530 --> 00:47:02,900 Considerando unha versión de 32 bits usado para n, e despois outro 1165 00:47:02,900 --> 00:47:07,680 32 bits para i. 1166 00:47:07,680 --> 00:47:10,060 Versión dous só usa 32 bits para n, a fin de que 1167 00:47:10,060 --> 00:47:11,700 parece ser unha vantaxe. 1168 00:47:11,700 --> 00:47:12,950 Outros pensamentos? 1169 00:47:18,070 --> 00:47:21,520 Alguén quere argumentar en favor de unha? 1170 00:47:21,520 --> 00:47:22,070 Si? 1171 00:47:22,070 --> 00:47:25,240 Audiencia: Ten que usar liña extra de código para n -. 1172 00:47:25,240 --> 00:47:26,090 >> DAVID J. Malan: Ok, con certeza. 1173 00:47:26,090 --> 00:47:26,960 Entón, iso é xusto. 1174 00:47:26,960 --> 00:47:29,040 Polo tanto, este xusto, polo menos para min - 1175 00:47:29,040 --> 00:47:31,940 É dicir, que realmente se sente un pouco máis confuso, o feito de que 1176 00:47:31,940 --> 00:47:35,120 Eu non podo clasificar de encapsular toda a miña lóxica nun 1177 00:47:35,120 --> 00:47:38,030 liña fermosa, o loop, como o lazo sexa posible. 1178 00:47:38,030 --> 00:47:40,240 Aquí, eu medio que teño para alinhavar este n - 1179 00:47:40,240 --> 00:47:41,120 ao final do ciclo, porque 1180 00:47:41,120 --> 00:47:42,550 é loxicamente necesario. 1181 00:47:42,550 --> 00:47:45,190 Pero que tipo de esfrega-me o camiño mal, só porque 1182 00:47:45,190 --> 00:47:48,260 parece separada da lóxica de ata aquí, aínda que, 1183 00:47:48,260 --> 00:47:49,430 unha vez máis, que é necesario. 1184 00:47:49,430 --> 00:47:50,990 Outros pensamentos? 1185 00:47:50,990 --> 00:47:51,490 Si? 1186 00:47:51,490 --> 00:47:52,740 Audiencia: [inaudível]. 1187 00:47:57,990 --> 00:47:58,350 >> DAVID J. Malan: Yeah. 1188 00:47:58,350 --> 00:48:00,730 Así que se en vez diso, ao final da canción, quería 1189 00:48:00,730 --> 00:48:02,950 imprimir de novo o nome da música? 1190 00:48:02,950 --> 00:48:05,660 Como "Grazas por xogar 99 botellas de cervexa", ou algo así 1191 00:48:05,660 --> 00:48:06,690 bobada como esa? 1192 00:48:06,690 --> 00:48:09,750 Pero o punto é, quería ter acceso ao valor orixinal. 1193 00:48:09,750 --> 00:48:13,180 O feito de que vostede mutado ou cambiado en cada n 1194 00:48:13,180 --> 00:48:16,330 iteração e, polo tanto, destruír o seu valor orixinal 1195 00:48:16,330 --> 00:48:18,650 Significa que non pode facer iso ao final. 1196 00:48:18,650 --> 00:48:20,660 Agora, sen dúbida, nos claramente non quere facer 1197 00:48:20,660 --> 00:48:21,450 que neste programa. 1198 00:48:21,450 --> 00:48:22,350 Entón, quen se importa? 1199 00:48:22,350 --> 00:48:23,630 Pero iso é un punto moi válido. 1200 00:48:23,630 --> 00:48:25,520 E para ser honesto, realmente non hai unha 1201 00:48:25,520 --> 00:48:26,630 dereito responder aquí. 1202 00:48:26,630 --> 00:48:28,740 Ambos son igualmente correctas. 1203 00:48:28,740 --> 00:48:30,210 Eu podería ser convencido de calquera maneira. 1204 00:48:30,210 --> 00:48:33,310 Podo dicir que, en xeral, é un bo principio, se 1205 00:48:33,310 --> 00:48:36,030 preguntou o usuario para algún valor e almacenado nunha variable 1206 00:48:36,030 --> 00:48:38,730 como n, só unha especie de en principio, pode ser bo 1207 00:48:38,730 --> 00:48:40,160 para manter esta situación. 1208 00:48:40,160 --> 00:48:43,400 E todos os datos que quere converterse de novo e de novo, só 1209 00:48:43,400 --> 00:48:46,030 darche unha copia da variable, só para que 1210 00:48:46,030 --> 00:48:47,830 acceder ao orixinal. 1211 00:48:47,830 --> 00:48:51,040 Vostede está gastan máis de 32 bits, pero a realidade é esta 1212 00:48:51,040 --> 00:48:53,490 ordenador, como dous gigabytes de memoria RAM estes días, 1213 00:48:53,490 --> 00:48:55,310 e nós estamos discutindo sobre 32 bits? 1214 00:48:55,310 --> 00:48:56,320 Realmente non un negocio tan grande. 1215 00:48:56,320 --> 00:48:58,550 E mesmo neste dispositivo aquí, cunha media dun concerto ou unha 1216 00:48:58,550 --> 00:49:01,700 Gigabyte de memoria RAM, 32 bits versus 64 bits, 1217 00:49:01,700 --> 00:49:02,920 non un gran negocio. 1218 00:49:02,920 --> 00:49:05,890 Certamente, hoxe, que vai ser moi oprimido polo tamaño 1219 00:49:05,890 --> 00:49:08,400 do programa en si, que vai ser centos 1220 00:49:08,400 --> 00:49:10,890 kilobytes, se non algúns megabytes, estes días. 1221 00:49:10,890 --> 00:49:13,550 >> Entón problemas razoables, non unha resposta correcta. 1222 00:49:13,550 --> 00:49:15,490 Pero polo menos eses son os pensamentos que debe empezar a 1223 00:49:15,490 --> 00:49:16,790 pasar pola súa mente? 1224 00:49:16,790 --> 00:49:19,600 Porque en pset 0, aínda que nós realmente só esperar 1225 00:49:19,600 --> 00:49:22,340 corrección, ou polo menos a renuncia de varios erros que 1226 00:49:22,340 --> 00:49:25,440 pode ter atopado, a medida que avanzamos, o deseño é 1227 00:49:25,440 --> 00:49:27,910 vai ser outro aspecto fundamental, tanto de escribir código 1228 00:49:27,910 --> 00:49:29,770 e tamén a avaliación de código. 1229 00:49:29,770 --> 00:49:32,310 E así, polo menos, reflexionar sobre cousas como esta. 1230 00:49:32,310 --> 00:49:35,590 E só porque algo funciona non significa que é bo, 1231 00:49:35,590 --> 00:49:37,130 non quere dicir que é ben deseñado. 1232 00:49:37,130 --> 00:49:38,820 E iso é unha das cousas que os compañeiros de ensino e 1233 00:49:38,820 --> 00:49:41,990 conxuntos de problemas nos axudará a provocar peza ao longo do tempo. 1234 00:49:41,990 --> 00:49:45,020 >> Ben, o que dicir, imos dicir, esta versión aquí? 1235 00:49:45,020 --> 00:49:49,090 Deixe-me facer algo un pouco sexy aquí nun momento. 1236 00:49:49,090 --> 00:49:50,740 Primeiro deixe-me librar desta. 1237 00:49:50,740 --> 00:49:54,120 E agora imos corrixir este problema gramatical. 1238 00:49:54,120 --> 00:49:58,780 Así, nesta versión, quero corrixir a gramática de forma que, 1239 00:49:58,780 --> 00:50:02,460 en vez de só dicir s entre parénteses, como "botella" 1240 00:50:02,460 --> 00:50:03,360 ou "botellas" - 1241 00:50:03,360 --> 00:50:04,900 Eu non quero cortar ese canto - 1242 00:50:04,900 --> 00:50:08,350 Eu tamén quero imprimir dinamicamente a palabra "botellas" 1243 00:50:08,350 --> 00:50:12,820 ou "botella", así, usando espazos reservados estes% s hoxe. 1244 00:50:12,820 --> 00:50:16,550 Entón eu teño condicional comprobar cal é o valor de i. 1245 00:50:16,550 --> 00:50:19,590 E se é un, quero dicir "botella", e se é calquera cousa 1246 00:50:19,590 --> 00:50:23,115 outra cousa, quero dicir "botellas". Entón, imos tratar de facelo. 1247 00:50:23,115 --> 00:50:31,340 Entón, se eu == 1, entón deixe-me ir adiante e declarar - 1248 00:50:31,340 --> 00:50:34,080 Eu teño unha cadea, entón deixe-me facer cadea S1, porque é a 1249 00:50:34,080 --> 00:50:36,070 primeira corda que me importa agora. 1250 00:50:36,070 --> 00:50:40,980 Eu vou dicir "botella". E entón, imos ver, cadea 1251 00:50:40,980 --> 00:50:43,110 S2 - e eu vou explicar a onde estou indo nun momento - 1252 00:50:43,110 --> 00:50:47,650 "Botellas". Entón, lembrar que, nesta canción, necesitamos ser capaces 1253 00:50:47,650 --> 00:50:50,580 para imprimir cousas, dúas palabras diferentes potencialmente. 1254 00:50:50,580 --> 00:50:53,590 Entón, se miramos cara atrás, aquí, conta que cando chegamos ao 1255 00:50:53,590 --> 00:50:56,440 este exemplo aquí ", dúas botellas de cervexa na parede, 1256 00:50:56,440 --> 00:50:59,490 dúas botellas de cervexa, tomar un para abaixo, pase adiante ", quero 1257 00:50:59,490 --> 00:51:02,380 esta cuarta liña para agora dicir "unha botella de cervexa na 1258 00:51:02,380 --> 00:51:04,900 parede ". Entón eu teño decidir, quero dicir" botellas "ou 1259 00:51:04,900 --> 00:51:07,780 "Botella"? Entón eu vou dicir arbitrariamente, todo ben, 1260 00:51:07,780 --> 00:51:10,530 Vou agora declarar unha variable chamada S1 cadea, 1261 00:51:10,530 --> 00:51:13,830 un, que vai estar conectado aquí e tamén aquí, 1262 00:51:13,830 --> 00:51:16,070 porque esas palabras son sempre idénticos, só por mor da 1263 00:51:16,070 --> 00:51:17,290 natureza da música. 1264 00:51:17,290 --> 00:51:20,100 E eu vou chamar S2 calquera palabra que quero 1265 00:51:20,100 --> 00:51:21,560 eventualmente aparecen por aquí. 1266 00:51:21,560 --> 00:51:25,530 Agora, literalmente, 99 veces de 100, que vai ser o 1267 00:51:25,530 --> 00:51:28,820 mesmo en ambos os casos, porque 3 é plural, 2 e 1268 00:51:28,820 --> 00:51:30,200 plural, 4 e plural. 1269 00:51:30,200 --> 00:51:34,640 Pero, neste caso, canto, onde se obter a 2 e, a continuación, 1, ou 1270 00:51:34,640 --> 00:51:37,250 mesmo 1 e 0, eu teño esta lóxica. 1271 00:51:37,250 --> 00:51:41,020 Entón eu teño que pasar algún tempo no meu código recibindo ese dereito. 1272 00:51:41,020 --> 00:51:47,530 Entón, se eu fai iso, i == 1, entón S1 definido igual a "botella" 1273 00:51:47,530 --> 00:51:52,010 e S2 igual a "botellas", porque iso vai ser para un 1274 00:51:52,010 --> 00:51:56,340 botella, e isto será por 0 botellas. 1275 00:51:56,340 --> 00:51:58,250 E este aquí, o que iso supón? 1276 00:51:58,250 --> 00:51:59,780 Só para quedar claro. 1277 00:51:59,780 --> 00:52:00,620 Este é só un comentario. 1278 00:52:00,620 --> 00:52:03,730 Así, o feito de que pode ter comentarios dunha liña significa que 1279 00:52:03,730 --> 00:52:06,110 pode comentar o seu código coma este, pero outro común 1280 00:52:06,110 --> 00:52:09,050 paradigma, tamén, é que se ten unha frase super-curto que 1281 00:52:09,050 --> 00:52:11,410 quere poñer a si mesmo e que é só lexible para poñer 1282 00:52:11,410 --> 00:52:13,270 que á dereita ao final da liña de código, pode 1283 00:52:13,270 --> 00:52:15,230 absolutamente facer algo así. 1284 00:52:15,230 --> 00:52:20,150 >> Entón agora o que se eu fai iso? Else if i non é igual a 1. 1285 00:52:20,150 --> 00:52:21,620 Entón estrondo iguais - 1286 00:52:21,620 --> 00:52:23,150 punto de exclamación é coñecido como "bang". 1287 00:52:23,150 --> 00:52:25,080 Entón estrondo = 1. 1288 00:52:25,080 --> 00:52:28,530 Entón, se eu non fose igual a 1, o que quero facer en vez? 1289 00:52:28,530 --> 00:52:31,700 Ben, a primeira palabra que quero ser o que? 1290 00:52:34,620 --> 00:52:40,030 Entón debe ser unha cadea de "botellas" para botellas plurais, 1291 00:52:40,030 --> 00:52:42,440 e entón será plural "botellas", así como, por agora. 1292 00:52:42,440 --> 00:52:43,800 E imos ver se isto realmente nos leva a 1293 00:52:43,800 --> 00:52:44,870 onde queremos ir. 1294 00:52:44,870 --> 00:52:47,680 Polo tanto, agora eu rolar por aquí, entender que eu estou conectando 1295 00:52:47,680 --> 00:52:50,170 Non só eu, pero S1. 1296 00:52:50,170 --> 00:52:51,860 Estou ligando I e S1. 1297 00:52:51,860 --> 00:52:54,440 E, a continuación, aquí abaixo, son menos 1, o cal é o mesmo que 1298 00:52:54,440 --> 00:52:55,920 antes, pero S2. 1299 00:52:55,920 --> 00:52:58,730 Noutras palabras, quero a palabra inglés para cambiar de acordo 1300 00:52:58,730 --> 00:52:59,930 nesa lóxica. 1301 00:52:59,930 --> 00:53:03,310 Agora, xa hai algúns problemas neste código. 1302 00:53:03,310 --> 00:53:08,460 O que está roto, xa fóra da porta aquí? 1303 00:53:08,460 --> 00:53:10,796 Si? 1304 00:53:10,796 --> 00:53:13,210 Audiencia: [inaudível]. 1305 00:53:13,210 --> 00:53:13,800 >> DAVID J. Malan: Exactamente. 1306 00:53:13,800 --> 00:53:16,030 Entón eu xa violou a lección de ámbito. 1307 00:53:16,030 --> 00:53:19,610 Entón eu dixo S1 e S2, pero eu teño feito isto dentro 1308 00:53:19,610 --> 00:53:22,980 chaves, o que significa que, si, ese código pode traballar ata 1309 00:53:22,980 --> 00:53:27,430 ata a liña 42, pero así que eu bati liña 43, creo que non 1310 00:53:27,430 --> 00:53:28,900 hai máis? 1311 00:53:28,900 --> 00:53:32,600 Ben, creo que xa non é de ámbito - nin S1 ou S2. 1312 00:53:32,600 --> 00:53:33,780 Entón temos que corrixir isto. 1313 00:53:33,780 --> 00:53:36,180 Entón deixe-me borrar as declaracións. 1314 00:53:36,180 --> 00:53:39,320 E eu vou deixar os nomes das variables e elimine esta aquí 1315 00:53:39,320 --> 00:53:40,120 e eliminar iso aquí. 1316 00:53:40,120 --> 00:53:43,557 E en que liñas debo realmente declarar isto? 1317 00:53:43,557 --> 00:53:44,960 Audiencia: [inaudível]. 1318 00:53:44,960 --> 00:53:45,410 DAVID J. Malan: Si, entón, probablemente, 1319 00:53:45,410 --> 00:53:46,850 ata aquí, 33-ish. 1320 00:53:46,850 --> 00:53:50,670 Así cadea S1 e cadea S2. 1321 00:53:50,670 --> 00:53:51,950 E non é que eu podo facer iso. 1322 00:53:51,950 --> 00:53:54,260 Se está declarando dúas variables do mesmo tipo, 1323 00:53:54,260 --> 00:53:57,420 pode realmente usar só unha coma e facelo en C. Todos 1324 00:53:57,420 --> 00:53:58,970 Ben, agora eu teño dúas variables - 1325 00:53:58,970 --> 00:53:59,860 S1 e S2. 1326 00:53:59,860 --> 00:54:02,000 Estou atribuíndolle lles valores nestes 1327 00:54:02,000 --> 00:54:04,210 condicións aquí, ou aquí. 1328 00:54:04,210 --> 00:54:06,690 E entón eu estou usando as abaixo. 1329 00:54:06,690 --> 00:54:10,960 Como está iso agora vai dar certo? 1330 00:54:10,960 --> 00:54:12,740 >> Ben, é aínda un pouco de buggy, pero imos polo menos ver 1331 00:54:12,740 --> 00:54:13,730 quão lonxe chegamos. 1332 00:54:13,730 --> 00:54:16,500 Entón deixe-me ir adiante e facer beer3. 1333 00:54:16,500 --> 00:54:17,695 É este beer3? 1334 00:54:17,695 --> 00:54:19,410 Si, este é beer3. 1335 00:54:19,410 --> 00:54:21,510 E agora déixeme ir adiante e executar beer3. 1336 00:54:21,510 --> 00:54:23,820 399 99. 1337 00:54:23,820 --> 00:54:25,840 Probablemente, podemos ignorar a maioría deles. 1338 00:54:25,840 --> 00:54:29,100 E aquí abaixo, mira iso. 1339 00:54:29,100 --> 00:54:31,110 "Unha botella de cervexa na parede, unha botella de cervexa, tomar 1340 00:54:31,110 --> 00:54:34,306 un para abaixo, pase adiante, 0 botellas de cervexa na parede. " 1341 00:54:34,306 --> 00:54:37,570 Pero eu estou chamando a súa atención para só a metade da solución. 1342 00:54:37,570 --> 00:54:39,620 Tipo de asneira aquí. 1343 00:54:39,620 --> 00:54:43,030 Polo tanto, parece que os casos de canto xorden cando i é igual que 1344 00:54:43,030 --> 00:54:44,030 dous valores? 1345 00:54:44,030 --> 00:54:45,020 Audiencia: 2, 1. 1346 00:54:45,020 --> 00:54:46,190 DAVID J. Malan: 2 e 1. 1347 00:54:46,190 --> 00:54:48,180 Non é un e non 1. 1348 00:54:48,180 --> 00:54:51,890 É realmente só estas dúas últimas estrofas desta música. 1349 00:54:51,890 --> 00:54:53,890 Entón o que quero facer en vez? 1350 00:54:53,890 --> 00:54:58,890 Así, paréceme ter collido o caso en que se i é == 1, 1351 00:54:58,890 --> 00:55:02,240 a continuación, a primeira palabra é "botella", pero a segunda palabra 1352 00:55:02,240 --> 00:55:07,230 é "botellas". Pero aquí, quero cambiar isto sexa == 2. 1353 00:55:07,230 --> 00:55:08,570 E se este é o caso, o que eu quero a 1354 00:55:08,570 --> 00:55:09,620 primeira palabra a ser? 1355 00:55:09,620 --> 00:55:10,430 Audiencia: "Botellas". 1356 00:55:10,430 --> 00:55:12,890 DAVID J. Malan: "Botellas", así para dúas botellas. 1357 00:55:12,890 --> 00:55:14,690 E entón esta palabra aquí debe ser - 1358 00:55:14,690 --> 00:55:15,340 Audiencia: "Bottle". 1359 00:55:15,340 --> 00:55:17,316 DAVID J. Malan: "Bottle", no singular. 1360 00:55:20,430 --> 00:55:25,160 >> Todo ben, imos reducir, volver aquí, re-executar o make, 1361 00:55:25,160 --> 00:55:28,590 re-run beer3 tipo, 99 de novo. 1362 00:55:28,590 --> 00:55:30,710 Ok, "Fallo de segmentación (núcleo)." 1363 00:55:30,710 --> 00:55:32,780 O que eu fixen de malo? 1364 00:55:36,050 --> 00:55:38,722 Audiencia: Non ten un valor [inaudível]. 1365 00:55:38,722 --> 00:55:40,480 DAVID J. Malan: Ah punto, excelente. 1366 00:55:40,480 --> 00:55:43,310 Todo ben, entón o que está mal aquí? 1367 00:55:43,310 --> 00:55:45,450 Así fallo de segmento, e nós estamos indo realmente para ver 1368 00:55:45,450 --> 00:55:49,020 este algunhas veces no futuro, deliberadamente. 1369 00:55:49,020 --> 00:55:51,030 Pero, por agora, o que iso realmente significa? 1370 00:55:51,030 --> 00:55:53,620 Un fallo de segmento case sempre significa que ten 1371 00:55:53,620 --> 00:55:56,760 dalgunha forma, intentou acceder memoria RAM no seu ordenador, 1372 00:55:56,760 --> 00:56:00,600 que non ten, que non teña realmente pediu o 1373 00:56:00,600 --> 00:56:02,050 sistema operativo para. 1374 00:56:02,050 --> 00:56:04,440 Polo tanto, neste caso, observe o que eu fixen, que é 1375 00:56:04,440 --> 00:56:05,870 falla na miña lóxica. 1376 00:56:05,870 --> 00:56:09,500 Eu asignado S1 e S2 un valor si é igual a 1. 1377 00:56:09,500 --> 00:56:11,590 Tamén fixen que eu sexa igual a 2. 1378 00:56:11,590 --> 00:56:13,710 Pero eu non teño feito isto no número infinito de outros 1379 00:56:13,710 --> 00:56:14,690 posibilidades - 1380 00:56:14,690 --> 00:56:17,940 en particular, 3 ou 4, ou un punto, punto, punto, 99. 1381 00:56:17,940 --> 00:56:20,100 Entón, unha corrección para iso podería ser só imos 1382 00:56:20,100 --> 00:56:22,190 ter unha condición máis. 1383 00:56:22,190 --> 00:56:26,780 E deixe-me entrar aquí e dicir S1 iguais - 1384 00:56:26,780 --> 00:56:28,180 o que debería estar aquí? 1385 00:56:28,180 --> 00:56:28,750 Audiencia: [inaudível]. 1386 00:56:28,750 --> 00:56:30,460 >> DAVID J. Malan: "Botellas", porque, en casos comúns, 1387 00:56:30,460 --> 00:56:32,020 É exactamente a mesma cousa. 1388 00:56:32,020 --> 00:56:35,580 Entón é igual citas, unquote, "botellas". Entón, para o plural 1389 00:56:35,580 --> 00:56:41,010 botellas, e en seguida, ata aquí, para botellas de plural. 1390 00:56:41,010 --> 00:56:44,580 Ok, entón agora déixeme volver á miña xanela de terminal, 1391 00:56:44,580 --> 00:56:47,200 recompilar, re-executa-lo. 1392 00:56:47,200 --> 00:56:48,440 99. 1393 00:56:48,440 --> 00:56:49,150 Ufa. 1394 00:56:49,150 --> 00:56:50,610 E imos facer unha proba de sanidade rápido. 1395 00:56:50,610 --> 00:56:52,400 Tecnicamente, queremos ler todo isto para estar seguro de 1396 00:56:52,400 --> 00:56:53,370 son correctos, pero imos ollar para 1397 00:56:53,370 --> 00:56:54,640 menos os culpables coñecidos. 1398 00:56:54,640 --> 00:56:57,370 3 botellas, 2 botellas, 2 botellas, 1 1399 00:56:57,370 --> 00:57:00,380 botella, unha botella, 0 botellas. 1400 00:57:00,380 --> 00:57:03,080 Parece que temos, polo menos, fixa-lo por agora. 1401 00:57:03,080 --> 00:57:06,010 Pero a cuestión aquí é que o que unha desorde terrible deus que é 1402 00:57:06,010 --> 00:57:07,470 só para resolver un parvo 1403 00:57:07,470 --> 00:57:09,540 un personaxe-detalle gramatical. 1404 00:57:09,540 --> 00:57:11,150 Polo tanto, hai un tipo de razón que eu cortar este recuncho 1405 00:57:11,150 --> 00:57:14,090 antes, porque é só completamente aburrido ter que 1406 00:57:14,090 --> 00:57:15,020 escribir este código moito. 1407 00:57:15,020 --> 00:57:17,530 Pero acontece que hai formas lixeiramente máis elegantes de 1408 00:57:17,530 --> 00:57:20,110 expresando exactamente a mesma cousa. 1409 00:57:20,110 --> 00:57:22,040 E podemos facelo do seguinte xeito. 1410 00:57:22,040 --> 00:57:23,890 >> Permita-me deixar isto na pantalla por un momento e 1411 00:57:23,890 --> 00:57:27,320 introducir algo coñecido como un operador ternário. 1412 00:57:27,320 --> 00:57:29,600 Este é un tipo de un forro que é só a intención de facer o noso 1413 00:57:29,600 --> 00:57:31,880 vive un pouco máis sexy, como prometido. 1414 00:57:31,880 --> 00:57:33,130 E eu vou facelo do seguinte xeito. 1415 00:57:33,130 --> 00:57:35,810 Déame unha cadea chamada s1, e deixe-me 1416 00:57:35,810 --> 00:57:37,200 atribuílo lo como segue. 1417 00:57:37,200 --> 00:57:39,900 (I == 1)? 1418 00:57:39,900 --> 00:57:47,820 "Botella", en caso contrario, "botellas". Cadea S2 recibe (i == 2)? 1419 00:57:47,820 --> 00:57:52,670 "Botella", en caso contrario, "botellas". 1420 00:57:52,670 --> 00:57:57,050 Entón, o que é entón a diferenza aquí? 1421 00:57:57,050 --> 00:57:59,370 Estas dúas liñas de código, argumentan, pode 1422 00:57:59,370 --> 00:58:02,200 substituír toda esta confusión. 1423 00:58:02,200 --> 00:58:04,280 Entón, eu chamo iso de desorde, só porque é o tipo de esfrega-mo 1424 00:58:04,280 --> 00:58:05,940 xeito incorrecto de que é tantas liñas de código. 1425 00:58:05,940 --> 00:58:06,650 Non está mal. 1426 00:58:06,650 --> 00:58:07,700 Non é mala concepción. 1427 00:58:07,700 --> 00:58:10,140 Tipo, iso é perfectamente correcta e perfectamente ben. 1428 00:58:10,140 --> 00:58:12,970 Pero codificación queda molestar se ten de expresar-se de xeito 1429 00:58:12,970 --> 00:58:15,530 caramba especialmente novo e de novo e de novo con un simple 1430 00:58:15,530 --> 00:58:16,620 escenario como este. 1431 00:58:16,620 --> 00:58:19,470 Entón C ten algúns atallos, coma este. 1432 00:58:19,470 --> 00:58:24,270 Polo tanto, este é esencialmente dicindo declarar unha cadea chamada s1 1433 00:58:24,270 --> 00:58:32,610 asignar valor este ou este valor se i é == - 1434 00:58:32,610 --> 00:58:35,290 Sentímolo, eu debería dicir iso máis claramente. 1435 00:58:35,290 --> 00:58:41,680 Declare unha variable S1, asignar este valor se isto é verdade. 1436 00:58:41,680 --> 00:58:44,280 En caso contrario, asignar-lle este valor. 1437 00:58:44,280 --> 00:58:47,220 Así, noutras palabras, este é un tipo de forma de unha liña de 1438 00:58:47,220 --> 00:58:51,490 dicindo que máis, pero facendo un traballo ao longo do camiño. 1439 00:58:51,490 --> 00:58:55,540 Entón, se eu for 1, entón vai adiante e chaman iso de "botella". E 1440 00:58:55,540 --> 00:58:59,830 entón esa persoa, chamalo de "botellas". Mentres tanto, S2, o 1441 00:58:59,830 --> 00:59:04,060 segunda palabra que necesitamos establecer, se é igual a 2, imos 1442 00:59:04,060 --> 00:59:08,350 S2 definir a "botella". En caso contrario, defina-o para "botellas". E o que 1443 00:59:08,350 --> 00:59:11,460 Isto significa que agora é que podo pasar por iso e borrar todos 1444 00:59:11,460 --> 00:59:12,860 esas liñas de código. 1445 00:59:12,860 --> 00:59:17,220 E cando digo, un pouco ridículo, que este é agora 1446 00:59:17,220 --> 00:59:20,060 máis sexy, é máis sexy en un tipo de sentido de estilo. 1447 00:59:20,060 --> 00:59:22,660 O feito de que funcionalmente, este código é realmente vai 1448 00:59:22,660 --> 00:59:24,610 facer exactamente o mesmo. 1449 00:59:24,610 --> 00:59:26,890 E, aínda que poida parecer un pouco enigmática en primeiro 1450 00:59:26,890 --> 00:59:29,250 mirar, porque non vin esa construción antes, eu 1451 00:59:29,250 --> 00:59:31,850 argumentan que é, en última análise vai ser moito máis 1452 00:59:31,850 --> 00:59:34,820 lexible e moito máis fácil para nós, humanos, para clasificar de 1453 00:59:34,820 --> 00:59:36,830 comprender, porque agora pode só ler o 1454 00:59:36,830 --> 00:59:38,830 código nunha única liña. 1455 00:59:38,830 --> 00:59:41,550 Aínda é semellante en espírito a un a, sempre que se 1456 00:59:41,550 --> 00:59:44,920 condición, e iso é o que está dentro do caso e este 1457 00:59:44,920 --> 00:59:46,480 é o que está dentro da persoa. 1458 00:59:46,480 --> 00:59:49,450 Pero podemos facelo só moito máis elegante. 1459 00:59:49,450 --> 00:59:52,650 >> E se eu agora vou volver para o meu terminal, tendo eliminado todos 1460 00:59:52,650 --> 00:59:55,530 destas liñas e os substituíu con só eses dous, 1461 00:59:55,530 --> 01:00:00,150 recompilar, re-run botellas de cervexa con 99, aviso que a miña 1462 01:00:00,150 --> 01:00:03,350 código é, en realidade, aínda está correcto. 1463 01:00:03,350 --> 01:00:06,160 Entón, de novo, algo para comezar. 1464 01:00:06,160 --> 01:00:08,840 2 botellas de cervexa, unha botella de cervexa. 1465 01:00:08,840 --> 01:00:09,370 Parece certo. 1466 01:00:09,370 --> 01:00:10,100 Si 1467 01:00:10,100 --> 01:00:13,900 Polo tanto, temos unha solución moito máis sucinta. 1468 01:00:13,900 --> 01:00:16,020 Polo tanto, isto tamén, como se sentir máis cómodo con C, non 1469 01:00:16,020 --> 01:00:18,630 necesariamente co pset primeiro ou mesmo segundo, pero 1470 01:00:18,630 --> 01:00:21,170 entender que estas construcións poden permitir-nos a facer cousas que nunca 1471 01:00:21,170 --> 01:00:22,810 máis elegante. 1472 01:00:22,810 --> 01:00:25,200 Agora imos facer outra cousa aquí. 1473 01:00:25,200 --> 01:00:31,460 Deixe-me ir adiante e abrir return1.c. 1474 01:00:31,460 --> 01:00:34,340 Agora imos comezar a resolver outro problema de forma que 1475 01:00:34,340 --> 01:00:37,140 nos permite escribir código máis sofisticado. 1476 01:00:37,140 --> 01:00:39,960 >> Entón aquí está un programa sinxelo e pequeno, cuxo obxectivo na vida 1477 01:00:39,960 --> 01:00:41,870 é incrementar valores. 1478 01:00:41,870 --> 01:00:43,100 E, de feito, imos dar un paso atrás. 1479 01:00:43,100 --> 01:00:44,400 Deixe-me facelo manualmente. 1480 01:00:44,400 --> 01:00:52,200 Deixe-me facer incluír e int main (void). 1481 01:00:52,200 --> 01:00:53,450 E deixe-me chamar esta increment.c. 1482 01:00:57,150 --> 01:00:58,570 E o que quero facer? 1483 01:00:58,570 --> 01:01:02,240 Eu estou indo a ir adiante e dicir algo así como - 1484 01:01:02,240 --> 01:01:04,280 imos chamar a números o mesmo - 1485 01:01:04,280 --> 01:01:04,980 int x. 1486 01:01:04,980 --> 01:01:13,670 Entón x int recibe 2; x printf% d, a nova liña, x. 1487 01:01:13,670 --> 01:01:16,780 Entón, eu estou escribindo rápido, pero tipo de cousas familiar agora. 1488 01:01:16,780 --> 01:01:18,830 Entón eu vou facer x + +. 1489 01:01:18,830 --> 01:01:21,710 Entón eu vou para imprimir esa mesma frase de novo. 1490 01:01:21,710 --> 01:01:24,550 E entón eu vou volver 0 só para saír do programa. 1491 01:01:24,550 --> 01:01:25,960 Todo ben, entón que é un programa que 1492 01:01:25,960 --> 01:01:26,960 incrementos dun número. 1493 01:01:26,960 --> 01:01:29,830 É primeiro indo a iniciar algo a dous, e entón é 1494 01:01:29,830 --> 01:01:33,470 vai incrementa-lo e imprimir lo de novo. 1495 01:01:33,470 --> 01:01:36,930 >> Entón imos correr incremento, programa moi sinxelo. 1496 01:01:36,930 --> 01:01:40,940 Pero supoño que agora que quero cubo valor, así como 1497 01:01:40,940 --> 01:01:42,490 algo un tanto arbitraria. 1498 01:01:42,490 --> 01:01:45,140 E eu realmente quero facer x recibe o cubo da mesma. 1499 01:01:45,140 --> 01:01:47,570 Entón eu podería usar o que se chama a función pow, pero eu non 1500 01:01:47,570 --> 01:01:48,650 realmente sei onde é aínda. 1501 01:01:48,650 --> 01:01:50,580 Entón eu vou facelo do xeito old-Fashioned. 1502 01:01:50,580 --> 01:01:54,550 x veces o que equivale a x veces x veces x. 1503 01:01:54,550 --> 01:01:56,880 Entón, eu estou cubing o valor, multiplicándose por si mesmo de novo 1504 01:01:56,880 --> 01:02:00,440 e de novo e de novo, para que poidamos obter o poder 1505 01:02:00,440 --> 01:02:02,050 de 3 neste caso. 1506 01:02:02,050 --> 01:02:06,000 Polo tanto, agora os números que eu debería imprimir debe ser, como veremos 1507 01:02:06,000 --> 01:02:08,450 aquí - facer incremento, por iso é, en realidade, non é realmente incrementar 1508 01:02:08,450 --> 01:02:10,260 máis, pero imos deixar o nome só - 1509 01:02:10,260 --> 01:02:11,590 2 e, a continuación, 8. 1510 01:02:11,590 --> 01:02:17,670 Agora, temos o inicio dunha oportunidade para o refinamento 1511 01:02:17,670 --> 01:02:21,570 aquí, segundo a cal esa cousa cubagem da multiplicación dun número 1512 01:02:21,570 --> 01:02:24,680 por si só, por si só, por si só, se sente como iso pode ser só 1513 01:02:24,680 --> 01:02:27,920 útil ter como función, así como alguén decidiu 1514 01:02:27,920 --> 01:02:30,430 anos - vostede sabe, tipo de útil se un de nós se senta 1515 01:02:30,430 --> 01:02:33,120 e escribe printf para que o resto do mundo pode usalo, 1516 01:02:33,120 --> 01:02:36,160 por que non sentir e escribir unha función chamada cube 1517 01:02:36,160 --> 01:02:39,250 que fai iso cubagem para nós para que non ten que manualmente 1518 01:02:39,250 --> 01:02:41,500 aplicar a noción de cubagem valores aquí? 1519 01:02:41,500 --> 01:02:44,040 >> Así, un exemplo simple, pero imos adiante e usar isto é como un 1520 01:02:44,040 --> 01:02:46,280 oportunidade de escribir a nosa propia función. 1521 01:02:46,280 --> 01:02:49,110 Entón, ata agora, só usei principal, e usamos outro 1522 01:02:49,110 --> 01:02:51,780 funcións das persoas, pero non escribir o noso. 1523 01:02:51,780 --> 01:02:52,650 Entón, imos alí. 1524 01:02:52,650 --> 01:02:56,330 Eu estou indo a ir adiante e escribir unha función chamada cubo. 1525 01:02:56,330 --> 01:02:58,490 E eu vou ter que tomar unha entrada. 1526 01:02:58,490 --> 01:03:02,070 Polo tanto, a súa entrada vai ser un enteiro. 1527 01:03:02,070 --> 01:03:03,570 E que é o que vai facer? 1528 01:03:03,570 --> 01:03:08,500 Vai declarar saída int = Entrada de entrada veces 1529 01:03:08,500 --> 01:03:09,880 input veces. 1530 01:03:09,880 --> 01:03:12,190 E entón el vai volver esa saída. 1531 01:03:12,190 --> 01:03:14,500 E entón eu teño que ser específico agora. 1532 01:03:14,500 --> 01:03:16,820 Esta función vai voltar un int. 1533 01:03:16,820 --> 01:03:19,130 Entón, aquí, entón, é como escribir as súas propias funcións. 1534 01:03:19,130 --> 01:03:20,850 Primeiro decidir o que é o nome do seu 1535 01:03:20,850 --> 01:03:21,720 función será. 1536 01:03:21,720 --> 01:03:23,964 E, xeralmente, algo explicativo é bo, entón eu vou 1537 01:03:23,964 --> 01:03:25,060 chamalo cubo. 1538 01:03:25,060 --> 01:03:27,180 Entón tes que especificar o que vai volver, o que é 1539 01:03:27,180 --> 01:03:28,240 súa saída vai ser. 1540 01:03:28,240 --> 01:03:29,595 E non temos opcións que moitos aínda. 1541 01:03:29,595 --> 01:03:32,260 Int, char, float, bool, string. 1542 01:03:32,260 --> 01:03:34,260 Por agora, eu vou ir con un int, porque quero 1543 01:03:34,260 --> 01:03:35,880 para voltar un enteiro. 1544 01:03:35,880 --> 01:03:38,770 Entón tes que especificar o que as súas entradas, se hai, son. 1545 01:03:38,770 --> 01:03:41,570 E se cubo ten un argumento, leva algo entre 1546 01:03:41,570 --> 01:03:44,970 parénteses, ten que dar ese argumento un nome para 1547 01:03:44,970 --> 01:03:47,860 pode chamalo algo como está aplicando ou escribir 1548 01:03:47,860 --> 01:03:50,550 esta función, e ten que dar un tipo, que neste 1549 01:03:50,550 --> 01:03:51,810 caso vai ser int. 1550 01:03:51,810 --> 01:03:54,690 Así, en breve, o cubo é unha función que recibe un enteiro 1551 01:03:54,690 --> 01:03:57,560 como entrada e retorna un enteiro como saída. 1552 01:03:57,560 --> 01:03:59,240 >> Entón, o que facer con esa entrada? 1553 01:03:59,240 --> 01:04:03,710 Ben, na liña 14, eu declarar unha variable chamada de saída, e eu 1554 01:04:03,710 --> 01:04:07,410 asignar-lle o valor, a entrada de entrada de entrada veces veces. 1555 01:04:07,410 --> 01:04:11,490 E entón eu volver a saída. 1556 01:04:11,490 --> 01:04:14,890 Entón, como podo usar iso, entón? 1557 01:04:14,890 --> 01:04:19,210 O que fago para cambiar estes personaxes destacados en liña 1558 01:04:19,210 --> 01:04:21,006 7 dicir, que pensas? 1559 01:04:21,006 --> 01:04:21,800 Audiencia: [inaudível]. 1560 01:04:21,800 --> 01:04:25,570 DAVID J. Malan: Si, entón cubo de x. 1561 01:04:25,570 --> 01:04:28,290 Entón X é unha variable, o que significa que ten un valor. 1562 01:04:28,290 --> 01:04:30,190 Afortunadamente, é do tipo enteiro. 1563 01:04:30,190 --> 01:04:34,280 E porque é un int x, o que significa que podo pasalo en cubo. 1564 01:04:34,280 --> 01:04:39,500 E aínda que eu estou substituíndo o valor de x co valor 1565 01:04:39,500 --> 01:04:42,780 x de cubo, como foi o caso ata agora, calquera hora 1566 01:04:42,780 --> 01:04:46,150 ten signo igual e unha liña de código, o material sobre o dereito 1567 01:04:46,150 --> 01:04:49,090 é executado e logo se lle atribúe ao 1568 01:04:49,090 --> 01:04:50,150 valor do lado esquerdo. 1569 01:04:50,150 --> 01:04:52,950 Polo tanto, a orde de operacións e como sería de esperar. 1570 01:04:52,950 --> 01:04:56,620 Entón, isto funciona? 1571 01:04:56,620 --> 01:04:58,410 Ben, deixe-me ir para abaixo aquí. 1572 01:04:58,410 --> 01:04:59,970 Deixe-me abrir a miña xanela de terminal. 1573 01:04:59,970 --> 01:05:03,610 Deixe-me faga incremento, Intro. 1574 01:05:03,610 --> 01:05:07,140 "Declaración implícita de 'cubo' función non é válida en 1575 01:05:07,140 --> 01:05:13,700 C99. "Como un aparte, C99 refírese á linguaxe C como era 1576 01:05:13,700 --> 01:05:16,790 definido en 1999, que foi unha actualización da versión de 1577 01:05:16,790 --> 01:05:19,360 1989, que é unha actualización en relación ao orixinal. 1578 01:05:19,360 --> 01:05:21,740 Entón, iso é todo o que iso significa. 1579 01:05:21,740 --> 01:05:24,250 >> Entón, o que significa que a declaración "implícita de 1580 01:05:24,250 --> 01:05:26,790 'Cubo' función non é válido? "É aquí mesmo. 1581 01:05:26,790 --> 01:05:28,430 É alí na liña 12. 1582 01:05:28,430 --> 01:05:30,460 Audiencia: [inaudível]. 1583 01:05:30,460 --> 01:05:30,730 DAVID J. Malan: ¿Que é iso? 1584 01:05:30,730 --> 01:05:32,470 Audiencia: Non é antes. 1585 01:05:32,470 --> 01:05:33,540 DAVID J. Malan: Non é antes. 1586 01:05:33,540 --> 01:05:34,740 Polo tanto, esta é a cousa. 1587 01:05:34,740 --> 01:05:38,190 C é unha especie de idiota, ou compiladores C son unha especie de estúpida. 1588 01:05:38,190 --> 01:05:41,060 Realmente só facer o que lles din que facer. 1589 01:05:41,060 --> 01:05:44,770 E, en particular, só ler o seu código superior para a base, 1590 01:05:44,770 --> 01:05:45,620 esquerda a dereita. 1591 01:05:45,620 --> 01:05:49,140 Entón, se o compilador, Clang, está lendo o seu código, liña 1, 1592 01:05:49,140 --> 01:05:50,120 descobre como facelo. 1593 01:05:50,120 --> 01:05:50,940 Oh, aquí vén principal. 1594 01:05:50,940 --> 01:05:53,000 Ok, deixe-me ir adiante e declarar unha variable x. 1595 01:05:53,000 --> 01:05:54,160 Deixe-me imprimir algo. 1596 01:05:54,160 --> 01:05:55,890 Liña 7, o que diaños é cubo? 1597 01:05:55,890 --> 01:05:58,230 Non é declarada en stdio.h. 1598 01:05:58,230 --> 01:06:00,950 El non vén con C. Eu non teño ningunha idea do que facer. 1599 01:06:00,950 --> 01:06:03,960 E así Clang só socorrelo e pecha coa mensaxe de erro. 1600 01:06:03,960 --> 01:06:05,850 Así, podemos solucionar isto nun par de formas. 1601 01:06:05,850 --> 01:06:10,530 Podemos ensinar Clang o cubo é só movendo onde o 1602 01:06:10,530 --> 01:06:11,820 declaración é. 1603 01:06:11,820 --> 01:06:14,640 Entón eu corte e colei na parte superior principal. 1604 01:06:14,640 --> 01:06:17,770 Agora entendo que só porque principal xa non é primeiro, é 1605 01:06:17,770 --> 01:06:19,150 aínda executado por defecto. 1606 01:06:19,150 --> 01:06:20,060 Principal é principal. 1607 01:06:20,060 --> 01:06:21,022 É o nome da función estándar. 1608 01:06:21,022 --> 01:06:22,930 Non importa onde está nun arquivo. 1609 01:06:22,930 --> 01:06:26,910 Pero polo menos agora Clang viu cubo antes de usalo. 1610 01:06:26,910 --> 01:06:28,500 Entón, imos ver se Clang é máis feliz agora. 1611 01:06:28,500 --> 01:06:31,410 Fai incremento, fixo compilar este tempo. 1612 01:06:31,410 --> 01:06:33,060 >> Déixame correr incremento. 1613 01:06:33,060 --> 01:06:34,810 E, de feito, parece estar funcionando. 1614 01:06:34,810 --> 01:06:36,810 Agora podes crear escenarios onde finalmente 1615 01:06:36,810 --> 01:06:38,650 non é posible poñer todas as funcións 1616 01:06:38,650 --> 01:06:39,740 por riba de calquera outra función. 1617 01:06:39,740 --> 01:06:42,140 Vai estar preso neste loop infinito, na realidade, 1618 01:06:42,140 --> 01:06:43,480 onde este cara quere estar aquí, pero iso 1619 01:06:43,480 --> 01:06:44,390 cara que estar alí. 1620 01:06:44,390 --> 01:06:45,830 De modo que non sempre funciona. 1621 01:06:45,830 --> 01:06:49,020 Entón, por sorte, C ten unha solución máis elegante. 1622 01:06:49,020 --> 01:06:50,790 Vou poñer isto de volta onde estaba, só porque eu 1623 01:06:50,790 --> 01:06:53,390 prefire, como unha cuestión de principio, que de inicio sempre 1624 01:06:53,390 --> 01:06:55,550 na parte superior, porque é só bo para ver o que este programa 1625 01:06:55,550 --> 01:06:56,920 fai por defecto. 1626 01:06:56,920 --> 01:06:58,950 E o que eu vou facer aquí é declarar o que se denomina 1627 01:06:58,950 --> 01:07:00,250 un prototipo. 1628 01:07:00,250 --> 01:07:05,730 Eu vou volver a declarar miña función cubo literalmente 1629 01:07:05,730 --> 01:07:07,180 copiando e colando. 1630 01:07:07,180 --> 01:07:08,290 En realidade, iso non é literalmente. 1631 01:07:08,290 --> 01:07:13,060 Entón, literalmente copiando e colando liña 15 1632 01:07:13,060 --> 01:07:15,160 Por enriba da liña 6. 1633 01:07:15,160 --> 01:07:17,010 Non importa o que esta liña acaba en. 1634 01:07:17,010 --> 01:07:18,380 El pasa a ser na liña 4. 1635 01:07:18,380 --> 01:07:19,950 Pero ten que ser antes de inicio. 1636 01:07:19,950 --> 01:07:21,150 Pero teña en conta a diferenza. 1637 01:07:21,150 --> 01:07:24,100 Liña 4 remata cun punto e coma, o que significa hey, 1638 01:07:24,100 --> 01:07:27,510 Clang, tome a miña palabra de que existe unha función 1639 01:07:27,510 --> 01:07:31,350 chamado cubo que recibe un int e retorna un int. 1640 01:07:31,350 --> 01:07:33,020 Pero eu non vou dicir o que é aínda. 1641 01:07:33,020 --> 01:07:35,180 Só sei que eu prometer contar eventualmente. 1642 01:07:35,180 --> 01:07:38,490 E, de feito, agora está todo ben que este é baixo. 1643 01:07:38,490 --> 01:07:41,275 >> Polo tanto, este é, xeralmente, mellor, porque entón na parte superior do 1644 01:07:41,275 --> 01:07:44,240 seu ficheiro, pode simplemente recitar, rápido do fogo, unha liña 1645 01:07:44,240 --> 01:07:46,470 cada un, o que os nomes das súas funcións, que o seu 1646 01:07:46,470 --> 01:07:49,120 entradas, o que os seus resultados son. 1647 01:07:49,120 --> 01:07:52,210 E, para ser máis claro, a entrada xeralmente significa argumento ou 1648 01:07:52,210 --> 01:07:54,110 parámetro, sinónimos. 1649 01:07:54,110 --> 01:07:56,890 Saída significa valor de retorno, o que fai 1650 01:07:56,890 --> 01:07:58,700 man de volta para min. 1651 01:07:58,700 --> 01:08:03,420 Polo tanto, neste caso aquí, o cubo foi declarado no inicio, pero 1652 01:08:03,420 --> 01:08:06,940 definido, tamén coñecido como aplicado, na parte inferior. 1653 01:08:06,940 --> 01:08:09,620 Entón agora imos volver aquí e re-executar esta. 1654 01:08:09,620 --> 01:08:13,430 Entón, agora deixe-me ir adiante e re-executar o make, re-executar incremento. 1655 01:08:13,430 --> 01:08:16,500 E agora parece estar funcionando moi ben. 1656 01:08:16,500 --> 01:08:19,450 Entón agora podemos ir adiante e fatorar algo así como o 1657 01:08:19,450 --> 01:08:23,720 cervexa exemplo para esta cuarta versión. 1658 01:08:23,720 --> 01:08:25,590 Entón deixe-me rolar aquí. 1659 01:08:25,590 --> 01:08:28,149 E noten que eu medio que levou esa lección para o corazón agora. 1660 01:08:28,149 --> 01:08:31,140 O feito de que eu estaba cantando mesma estrofa novo e 1661 01:08:31,140 --> 01:08:34,130 unha e outra vez, a liña mesmo coro na música, sentiu 1662 01:08:34,130 --> 01:08:36,439 gusto Por qué non factor que unha función? 1663 01:08:36,439 --> 01:08:38,470 E, de feito, esta debe ser unha das motivacións. 1664 01:08:38,470 --> 01:08:40,960 Ademais do feito de que alguén no mundo podería querer 1665 01:08:40,960 --> 01:08:42,390 usar unha función cubo - 1666 01:08:42,390 --> 01:08:44,560 esta é unha boa razón para o factor algo e escribir o seu 1667 01:08:44,560 --> 01:08:45,720 función personalizada propia - 1668 01:08:45,720 --> 01:08:48,720 se hai un anaco de código no seu programa que só fai 1669 01:08:48,720 --> 01:08:51,370 sentido conceptual, que tipo de querer darlle un 1670 01:08:51,370 --> 01:08:53,740 nome - como neste caso, coro, - 1671 01:08:53,740 --> 01:08:57,380 entón podes tamén escribir que, como unha función separada. 1672 01:08:57,380 --> 01:08:59,560 Non ten que escribir todo de inicio, se só 1673 01:08:59,560 --> 01:09:02,609 parece máis limpo para separa-lo e dar-lle un nome. 1674 01:09:02,609 --> 01:09:05,529 >> Polo tanto, neste caso aquí, entender que eu teño un comentario sobre 1675 01:09:05,529 --> 01:09:06,859 esta función que só canta sobre a 1676 01:09:06,859 --> 01:09:08,630 números especificados de botellas. 1677 01:09:08,630 --> 01:09:10,609 Teña en conta aquí que eu non teño chamar estes 1678 01:09:10,609 --> 01:09:12,520 cousas de entrada e saída. 1679 01:09:12,520 --> 01:09:16,090 En realidade, esta vez eu chamei o meu b entrada botella. 1680 01:09:16,090 --> 01:09:19,960 E notar aquí nula suxire o que? 1681 01:09:19,960 --> 01:09:21,309 Este refrán - 1682 01:09:21,309 --> 01:09:22,660 Audiencia: Non devolve-lo. 1683 01:09:22,660 --> 01:09:23,870 DAVID J. Malan: non retorna un valor. 1684 01:09:23,870 --> 01:09:26,800 E, de feito, non ten funcións para voltar valores. 1685 01:09:26,800 --> 01:09:28,060 Eles só poden facer algo. 1686 01:09:28,060 --> 01:09:30,270 Eles poden ter o que se denomina de efectos secundarios, que neste 1687 01:09:30,270 --> 01:09:33,109 caso é só unha morea de imprimir na pantalla. 1688 01:09:33,109 --> 01:09:36,580 Entón, observe que este código aquí, eu literalmente roubo 1689 01:09:36,580 --> 01:09:37,680 no exemplo anterior. 1690 01:09:37,680 --> 01:09:39,930 A única diferenza é, en vez de utilizar como i meu 1691 01:09:39,930 --> 01:09:42,890 variable, agora estou usando b como a miña variable. 1692 01:09:42,890 --> 01:09:45,880 Entón, eu teño b aquí, teño b aquí, teño b 1693 01:09:45,880 --> 01:09:47,109 menos 1 aquí. 1694 01:09:47,109 --> 01:09:49,279 Pero o código é exactamente o mesmo. 1695 01:09:49,279 --> 01:09:52,529 Pero só para te amosar agora como podemos usar isto, deixe-me ir 1696 01:09:52,529 --> 01:09:56,780 adiante e realmente cambiar este é un loop for. 1697 01:09:56,780 --> 01:10:03,850 é (i = n; i> n; i -). 1698 01:10:03,850 --> 01:10:06,230 >> Entón eu roubei isto do noso exemplo anterior. 1699 01:10:06,230 --> 01:10:08,970 Anteriormente, e na liña 37 que eu tería comezado 1700 01:10:08,970 --> 01:10:10,640 cantando esa música irritante. 1701 01:10:10,640 --> 01:10:15,810 Pero en vez diso, eu só vou agora chamar coro de i. 1702 01:10:15,810 --> 01:10:16,870 Feito. 1703 01:10:16,870 --> 01:10:20,260 Entón, agora en cada iteração deste lazo, eu chamo este outro 1704 01:10:20,260 --> 01:10:22,220 coro, función, que pasou de eu escribir. 1705 01:10:22,220 --> 01:10:24,110 Non foi escrito por outra persoa de anos. 1706 01:10:24,110 --> 01:10:27,930 Pero coro, á súa vez, usa printf para imprimir 1707 01:10:27,930 --> 01:10:29,840 esas catro liñas. 1708 01:10:29,840 --> 01:10:32,720 Pero o feito de que eu estou chamando refrán novo e de novo nun 1709 01:10:32,720 --> 01:10:35,900 lazo significa que eu estou indo a obter, ao final, o 1710 01:10:35,900 --> 01:10:39,310 mesma música exactamente como eu teño ata agora. 1711 01:10:39,310 --> 01:10:42,130 Así, en breve, agora eu ollar cara atrás, o meu código, a pesar de 1712 01:10:42,130 --> 01:10:44,240 funcionalmente é equivalente, entender que é 1713 01:10:44,240 --> 01:10:46,020 comezando a estar aínda máis lexible. 1714 01:10:46,020 --> 01:10:48,410 Eu non sei exactamente como GetInt 1715 01:10:48,410 --> 01:10:49,250 é aplicado. 1716 01:10:49,250 --> 01:10:52,050 Francamente, eu non sei como refrán é aplicado. 1717 01:10:52,050 --> 01:10:52,970 Pero iso non importa para min. 1718 01:10:52,970 --> 01:10:55,620 Eu non me importa, porque agora podo clasificar de, como un ser humano, lea 1719 01:10:55,620 --> 01:10:57,050 este, de arriba para abaixo. 1720 01:10:57,050 --> 01:10:59,950 E porque as funcións son nomeados de acordo co que 1721 01:10:59,950 --> 01:11:02,910 facer, o meu código é cada vez máis lexible. 1722 01:11:02,910 --> 01:11:05,190 E como os nosos programas de estar moito máis complexo - 1723 01:11:05,190 --> 01:11:07,220 ata o final do semestre, vai escribir centos de liñas 1724 01:11:07,220 --> 01:11:10,970 de código en linguaxes como PHP e JavaScript e outros - 1725 01:11:10,970 --> 01:11:13,550 podes ver que é moito máis fácil do que manter o control de 1726 01:11:13,550 --> 01:11:14,080 o que fixo. 1727 01:11:14,080 --> 01:11:15,810 E cando comezar a colaborar cos amigos ou 1728 01:11:15,810 --> 01:11:19,010 socios ou compañeiros, vai ser capaz de escribir moito máis 1729 01:11:19,010 --> 01:11:22,910 programas masivos de comezar a se exercitar estes básica 1730 01:11:22,910 --> 01:11:23,990 bloques de construción. 1731 01:11:23,990 --> 01:11:25,550 >> Así, co que dixo, por que non chamalo un día? 1732 01:11:25,550 --> 01:11:27,190 E nós imos velo o mércores. 1733 01:11:27,190 --> 01:11:33,611 [Aplausos]