1 00:00:00,000 --> 00:00:02,880 >> [Música tocando] 2 00:00:02,880 --> 00:00:10,580 3 00:00:10,580 --> 00:00:13,500 >> COLUMNA 1: Este é CS50 e este é o inicio da semana dous. 4 00:00:13,500 --> 00:00:18,400 Entón, imos mergullar dereita en algo que é buggy, por así dicir. 5 00:00:18,400 --> 00:00:24,015 Entón, aquí é CS50 IDE e non teño levado cara arriba con antelación este screen-- maldita 6 00:00:24,015 --> 00:00:25,070 lo. 7 00:00:25,070 --> 00:00:25,760 Alerta de spoiler. 8 00:00:25,760 --> 00:00:26,260 Todo ben. 9 00:00:26,260 --> 00:00:29,060 Eu tirado ata esta pantalla aquí, que ten un programa moi sinxelo. 10 00:00:29,060 --> 00:00:32,659 Se rolar para abaixo, a maioría iso é só comenta, 11 00:00:32,659 --> 00:00:36,730 pero aquí en liñas 13 a través 17 temos un programa. 12 00:00:36,730 --> 00:00:40,580 >> É sintaticamente válido, o que significa que Eu recompila-lo, el ha compilar e executar, 13 00:00:40,580 --> 00:00:41,920 pero é buggy. 14 00:00:41,920 --> 00:00:47,330 Este programa asegura nos comentarios enriba que debe imprimir 10 estrelas, 15 00:00:47,330 --> 00:00:48,870 pero iso non acontece. 16 00:00:48,870 --> 00:00:53,290 E en base a súa experiencia, ou logo para ser experiencia con C, 17 00:00:53,290 --> 00:00:56,820 pode discernir loxicamente por que isto é, de feito, con erros? 18 00:00:56,820 --> 00:00:57,804 Si? 19 00:00:57,804 --> 00:00:59,220 Audiencia: El vai de cero a 10. 20 00:00:59,220 --> 00:01:01,884 Isto é 11 iteracións. 21 00:01:01,884 --> 00:01:02,550 COLUMNA 1: Yeah. 22 00:01:02,550 --> 00:01:06,030 Entón, que vai de cero Se a través de e igual a 10, 23 00:01:06,030 --> 00:01:08,140 que, por suposto, é de 11 iteracións. 24 00:01:08,140 --> 00:01:10,020 Entón, que vai de impresión, de feito, 11 estrelas. 25 00:01:10,020 --> 00:01:13,040 Así, a convención de ciencia da computación na maioría das linguaxes de programación 26 00:01:13,040 --> 00:01:15,270 é, de feito, só para comezar a contar en cero, 27 00:01:15,270 --> 00:01:18,800 pero contar ata, pero non a través do valor que realmente se preocupan. 28 00:01:18,800 --> 00:01:21,216 >> Agora, iso é unha cousa que Leva un pouco para acostumar 29 00:01:21,216 --> 00:01:25,350 e mesmo risco, concibido como é para os non programadores ou non ordenador 30 00:01:25,350 --> 00:01:28,070 científicos e para nenos en gran parte, é proxectado para ter 31 00:01:28,070 --> 00:01:29,570 comezar a contar xeralmente nun. 32 00:01:29,570 --> 00:01:30,277 E iso é bo. 33 00:01:30,277 --> 00:01:33,110 Pode absolutamente comezar a contar nun caso que é máis cómodo. 34 00:01:33,110 --> 00:01:37,210 E contar ata ea través de 10, pero notarás particularmente esta semana 35 00:01:37,210 --> 00:01:39,950 e ademais de que só así moitas cousas na programación 36 00:01:39,950 --> 00:01:42,465 0 supoñer que é o primeiro díxitos con que conta, 37 00:01:42,465 --> 00:01:45,590 que vai atopalo máis fácil só para chegar a este costume de partida 38 00:01:45,590 --> 00:01:49,490 e conta de cero ata o valor se preocupa agora 39 00:01:49,490 --> 00:01:49,990 ir buscar. 40 00:01:49,990 --> 00:01:50,990 >> Entón, iso ten que. 41 00:01:50,990 --> 00:01:53,670 Cambiamos o menor ou equivale a pouco menos de. 42 00:01:53,670 --> 00:01:56,050 Imos dar un ollo un segundo exemplo aquí. 43 00:01:56,050 --> 00:01:59,585 >> Así, este programa tamén afirma na súa comenta a superior que debe imprimir 44 00:01:59,585 --> 00:02:02,260 dez estrelas, pero iso non acontece. 45 00:02:02,260 --> 00:02:05,540 Cal é o erro aquí? 46 00:02:05,540 --> 00:02:07,930 >> Entón, what-- e moito, imos ser claros. 47 00:02:07,930 --> 00:02:08,610 10 estrelas. 48 00:02:08,610 --> 00:02:11,644 Un por liña, pero iso non acontece. 49 00:02:11,644 --> 00:02:14,810 Entón, en realidade, deixe-me ir adiante e compilar un regalo, porque é un pouco menos 50 00:02:14,810 --> 00:02:16,900 limpar con base nesa descrición. 51 00:02:16,900 --> 00:02:18,720 Déixeme ir ao noso directorio de orixe. 52 00:02:18,720 --> 00:02:25,110 Fai buggy dunha barra de punto, un buggy. 53 00:02:25,110 --> 00:02:28,680 OK, eu vexo 11 estrelas, que aínda é problemático, 54 00:02:28,680 --> 00:02:30,090 pero tamén todo está nunha liña. 55 00:02:30,090 --> 00:02:31,500 Cal é o problema aquí? 56 00:02:31,500 --> 00:02:32,339 Si. 57 00:02:32,339 --> 00:02:33,255 Audiencia: [inaudível]. 58 00:02:33,255 --> 00:02:36,194 59 00:02:36,194 --> 00:02:36,860 COLUMNA 1: Yeah. 60 00:02:36,860 --> 00:02:40,210 Polo tanto, esta é unha sutileza que podes lembro-me facer unha breve referencia. 61 00:02:40,210 --> 00:02:42,793 Aínda que todo parece considerablemente, e é ben recuado, 62 00:02:42,793 --> 00:02:45,850 e que tipo de miradas como Risco- en que a liña 16 e 17 son, 63 00:02:45,850 --> 00:02:47,600 de feito, recuada baixo que para loop. 64 00:02:47,600 --> 00:02:48,400 Iso é irrelevante. 65 00:02:48,400 --> 00:02:50,460 O ordenador non fai coñecer ou ver o espazo en branco. 66 00:02:50,460 --> 00:02:52,910 O espazo en branco é só para nós seres humanos, estilisticamente. 67 00:02:52,910 --> 00:02:57,010 O ordenador non sabe cando ten claves, o que sería, de feito, 68 00:02:57,010 --> 00:02:58,280 corrixir este problema. 69 00:02:58,280 --> 00:03:02,350 >> Entón, se nós realmente fomos en e explicitamente poñer neses claves 70 00:03:02,350 --> 00:03:05,220 que ía corrixir este problema deixando claro o compilador 71 00:03:05,220 --> 00:03:07,930 que realmente quere facer dúas liñas de código novo, 72 00:03:07,930 --> 00:03:09,220 e unha vez máis, e de novo. 73 00:03:09,220 --> 00:03:11,680 Pero cal é a explicación fundamental? 74 00:03:11,680 --> 00:03:12,180 Non? 75 00:03:12,180 --> 00:03:15,260 Non estrictamente preciso rizado claves o tempo, 76 00:03:15,260 --> 00:03:18,210 aínda que probablemente é mellor práctica para entrar ese costume de calquera maneira 77 00:03:18,210 --> 00:03:20,878 aínda que engadir dous caracteres no seu código. por que? 78 00:03:20,878 --> 00:03:22,380 >> Audiencia: [inaudível]? 79 00:03:22,380 --> 00:03:24,630 COLUMNA 1: Si xeito que é outra solución completamente. 80 00:03:24,630 --> 00:03:25,130 Non? 81 00:03:25,130 --> 00:03:28,250 Especialmente se, a primeira vista non o fas realmente aprecio o que está pasando. 82 00:03:28,250 --> 00:03:31,070 Ben, certamente poderiamos só facer dúas cousas á vez 83 00:03:31,070 --> 00:03:32,710 e só evitar o problema completamente. 84 00:03:32,710 --> 00:03:36,080 E iso é bo, pero agora, para fins de hoxe, o que 85 00:03:36,080 --> 00:03:38,200 é a explicación para o erro? 86 00:03:38,200 --> 00:03:39,810 Por que todas estas estrelas nunha liña? 87 00:03:39,810 --> 00:03:40,806 Si? 88 00:03:40,806 --> 00:03:43,296 >> Audiencia: Parece que se ten unha liña de código, 89 00:03:43,296 --> 00:03:46,649 pode facelo sen os. 90 00:03:46,649 --> 00:03:47,440 COLUMNA 1: Exactamente. 91 00:03:47,440 --> 00:03:48,750 Esta é só unha convención humana. 92 00:03:48,750 --> 00:03:50,750 As persoas perciben que é un pouco aburrido ou tedioso 93 00:03:50,750 --> 00:03:53,470 ter que poñer claves todo do tempo, se todo o que quere facer 94 00:03:53,470 --> 00:03:55,090 é realizar unha liña de código. 95 00:03:55,090 --> 00:03:57,660 Así, decidiu algúns seres humanos tempo que iso é bo. 96 00:03:57,660 --> 00:04:01,180 Se queres poñer todo o seu ciclo en só que nunha liña como esta, 97 00:04:01,180 --> 00:04:04,030 que está moi ben co single punto e coma ao final. 98 00:04:04,030 --> 00:04:07,210 Pero só se pode facer unha tal liña sen as chaves. 99 00:04:07,210 --> 00:04:09,900 >> Así, cando guía de estilo CS50 como pode apuntar para, 100 00:04:09,900 --> 00:04:11,980 podes ver que xeralmente é bo hábito 101 00:04:11,980 --> 00:04:14,920 para chegar a este ata que estea extraviada bastante cómodo 102 00:04:14,920 --> 00:04:17,404 a partir destes tipos de convencións e facer a súa propia cousa. 103 00:04:17,404 --> 00:04:18,820 Mentres é auto-consistente. 104 00:04:18,820 --> 00:04:21,540 E imos falar máis sobre estilo un pouco máis tarde hoxe. 105 00:04:21,540 --> 00:04:23,200 >> Entón, deixe-me abrir outro programa. 106 00:04:23,200 --> 00:04:24,930 Por suposto, hai que 10 fixar iso tamén. 107 00:04:24,930 --> 00:04:32,470 Deixe-me ir adiante e escribir verdadeira programa rápido que chamase, 108 00:04:32,470 --> 00:04:38,140 imos dicir, lazo dot C. Entón, lazo punto C. E en malla punto C vou ter, 109 00:04:38,140 --> 00:04:41,970 incluír E / S estándar punto H int void main. 110 00:04:41,970 --> 00:04:44,020 E agora imos facer, de feito, un loop. 111 00:04:44,020 --> 00:04:46,020 Entón, 4 int i recibe cero. 112 00:04:46,020 --> 00:04:48,660 I é menor que, digamos, 50. 113 00:04:48,660 --> 00:04:49,950 I plus, plus. 114 00:04:49,950 --> 00:04:53,350 E entón aquí imos dalle non imprimir F. 115 00:04:53,350 --> 00:04:56,400 E entón eu quero imprimir I e unha nova liña, punto e coma. 116 00:04:56,400 --> 00:05:00,015 >> E iso debe imprimir toda a números de cero ata 50? 117 00:05:00,015 --> 00:05:02,900 118 00:05:02,900 --> 00:05:03,680 Algúns cabeza aceno coa cabeza. 119 00:05:03,680 --> 00:05:04,270 Algunhas Nos. 120 00:05:04,270 --> 00:05:05,339 Cal é o erro xa? 121 00:05:05,339 --> 00:05:06,630 Cal é o erro fácil que fixen? 122 00:05:06,630 --> 00:05:07,170 Si. 123 00:05:07,170 --> 00:05:08,544 >> Audiencia: [inaudível]. 124 00:05:08,544 --> 00:05:09,210 COLUMNA 1: Yeah. 125 00:05:09,210 --> 00:05:11,520 Así, aínda que parece como este é o que eu pretendo, 126 00:05:11,520 --> 00:05:13,920 Lembro que tamén é só un carácter ASCII. 127 00:05:13,920 --> 00:05:14,955 >> Entón, se eu digo, print "I." 128 00:05:14,955 --> 00:05:16,670 Vai literalmente imprimir I. Entón, se eu 129 00:05:16,670 --> 00:05:20,030 quere plugin un espazo reservado valor realmente teño que facer iso 130 00:05:20,030 --> 00:05:22,630 e, a continuación, o plugin valor de I dinamicamente. 131 00:05:22,630 --> 00:05:25,200 Se non, eu estou indo só para Gañou 50 I está na pantalla. 132 00:05:25,200 --> 00:05:28,140 >> Entón, deixe-me ir adiante e facer este loop, executalo, 133 00:05:28,140 --> 00:05:30,650 e, de feito, temos todo o camiño ata a 49. 134 00:05:30,650 --> 00:05:34,140 E se eu rolar para atrás no tempo que eu vexo o número cero no inicio. 135 00:05:34,140 --> 00:05:36,050 >> Ben, e se eu medio que romper todo? 136 00:05:36,050 --> 00:05:37,800 E se fago iso? 137 00:05:37,800 --> 00:05:40,120 Só porque eu non estou a pensar. 138 00:05:40,120 --> 00:05:40,970 ¿Que é este programa. 139 00:05:40,970 --> 00:05:43,970 Xa que está feita e executado, vai facer loxicamente? 140 00:05:43,970 --> 00:05:44,870 >> Audiencia: Nada. 141 00:05:44,870 --> 00:05:45,661 >> COLUMNA 1: Nada. 142 00:05:45,661 --> 00:05:47,156 Por que é iso? 143 00:05:47,156 --> 00:05:49,124 >> Audiencia: Eu está deseñado para cero. 144 00:05:49,124 --> 00:05:51,899 Así, a condición é falsa. 145 00:05:51,899 --> 00:05:52,940 COLUMNA 1: Si, exactamente. 146 00:05:52,940 --> 00:05:55,110 Todo o código está correcto, sintaticamente. 147 00:05:55,110 --> 00:05:57,310 Isto vai compilar, este código levará a cabo, pero non é 148 00:05:57,310 --> 00:06:00,110 vai facer nada de útil porque eu arrincar I a cero. 149 00:06:00,110 --> 00:06:02,240 A continuación, comprobar, é que máis de 50? 150 00:06:02,240 --> 00:06:03,810 Obviamente, non, non é. 151 00:06:03,810 --> 00:06:05,760 Así, o lazo nunca executa en todo. 152 00:06:05,760 --> 00:06:09,580 >> Que se facemos algo un pouco máis imprudente? 153 00:06:09,580 --> 00:06:12,890 Entón, o que se facemos como int I recibe cero. 154 00:06:12,890 --> 00:06:15,640 E agora déixeme usar o tempo loop, que foi outra condición. 155 00:06:15,640 --> 00:06:21,810 E mentres eu digo, mentres eu sexa maior que ou igual a cero, e, a continuación, aquí I 156 00:06:21,810 --> 00:06:26,070 dalle gardar o ficheiro, facer loop. 157 00:06:26,070 --> 00:06:27,070 E eu estou a piques de executalo. 158 00:06:27,070 --> 00:06:30,230 Que eu vou ver iso tempo cun loop while? 159 00:06:30,230 --> 00:06:30,852 Si. 160 00:06:30,852 --> 00:06:32,120 >> Audiencia: un loop infinito? 161 00:06:32,120 --> 00:06:35,360 >> COLUMNA 1: Un loop infinito? 162 00:06:35,360 --> 00:06:36,662 Si, e por que? 163 00:06:36,662 --> 00:06:38,120 Audiencia: Por sempre cero. 164 00:06:38,120 --> 00:06:38,786 COLUMNA 1: Yeah. 165 00:06:38,786 --> 00:06:40,100 Entón, eu é inicializar como cero. 166 00:06:40,100 --> 00:06:44,470 Por suposto, é sempre maior que é igual a 0, como resultado. 167 00:06:44,470 --> 00:06:46,460 Entón, eu estou indo só para ver iso infinitamente. 168 00:06:46,460 --> 00:06:49,850 E agora, este xurdiu xa ou dúas veces a cabeza do curso. 169 00:06:49,850 --> 00:06:52,417 Que pasa cando ten un loop infinito? 170 00:06:52,417 --> 00:06:53,314 >> Audiencia: Control C. 171 00:06:53,314 --> 00:06:53,980 COLUMNA 1: Yeah. 172 00:06:53,980 --> 00:06:56,250 Así Control C finalmente respostar. 173 00:06:56,250 --> 00:06:59,520 Desafortunadamente, temos impresa millóns e millóns de ceros xa 174 00:06:59,520 --> 00:07:01,520 e para que o ordenador teña medio que teño diante miña. 175 00:07:01,520 --> 00:07:03,394 Entón, que vai ignorar me para un pouco. 176 00:07:03,394 --> 00:07:06,560 Pero se simplemente prema Control C algúns veces no seu teclado Mac ou PC, 177 00:07:06,560 --> 00:07:08,790 finalmente, debe, de feito, rematar. 178 00:07:08,790 --> 00:07:11,770 E se non, imos amosar-lle algunhas técnicas antes de tempo onde 179 00:07:11,770 --> 00:07:14,850 realmente á forza matar programas, así como en Windows e Mac Os, 180 00:07:14,850 --> 00:07:15,562 se é necesario. 181 00:07:15,562 --> 00:07:16,770 Pero imos tratar outra cousa. 182 00:07:16,770 --> 00:07:19,895 Imos realmente incrementar I. É iso aínda vai ser infinito? 183 00:07:19,895 --> 00:07:22,870 184 00:07:22,870 --> 00:07:25,140 Déixeme realizar este. 185 00:07:25,140 --> 00:07:27,090 E agora pode tipo de mira o que está a suceder. 186 00:07:27,090 --> 00:07:30,140 Isto, tamén, é un loop infinito. 187 00:07:30,140 --> 00:07:33,080 Pero iso é un pouco de unha pregunta capciosa. 188 00:07:33,080 --> 00:07:35,460 Será que isto vai imprimir números de sempre? 189 00:07:35,460 --> 00:07:36,647 >> Audiencia: Non. 190 00:07:36,647 --> 00:07:37,230 COLUMNA 1: Non. 191 00:07:37,230 --> 00:07:37,620 Por que? 192 00:07:37,620 --> 00:07:38,820 Escoitei algunhas NSA aquí. 193 00:07:38,820 --> 00:07:41,859 Someone-- Si. 194 00:07:41,859 --> 00:07:44,275 Audiencia: Non ten suficiente bits para realmente continuar. 195 00:07:44,275 --> 00:07:44,730 COLUMNA 1: Todo ben. 196 00:07:44,730 --> 00:07:46,000 Entón, eu non teño o suficiente bits para continuar. 197 00:07:46,000 --> 00:07:47,124 Entón, o que vai pasar? 198 00:07:47,124 --> 00:07:49,320 El só vai parar? 199 00:07:49,320 --> 00:07:52,542 >> Audiencia: Nalgún momento vai pechar as-- 200 00:07:52,542 --> 00:07:54,500 COLUMNA 1: El pecharase o baixo loop, pero por que? 201 00:07:54,500 --> 00:07:57,950 O que vai ocorrer no final das súas fronteiras? 202 00:07:57,950 --> 00:07:58,479 Si? 203 00:07:58,479 --> 00:08:00,520 Audiencia: A Ronda ao números negativos. 204 00:08:00,520 --> 00:08:02,900 COLUMNA 1: Para números negativos, ou se estivésemos só tratar positivo, 205 00:08:02,900 --> 00:08:03,570 cero, polo menos. 206 00:08:03,570 --> 00:08:04,550 Entón, si, absolutamente. 207 00:08:04,550 --> 00:08:08,059 Lembre que vimos a última vez que se incrementar os seus anacos un moitas veces, 208 00:08:08,059 --> 00:08:10,225 e Alí diante estourido a capacidade do seu int 209 00:08:10,225 --> 00:08:13,058 ou calquera que sexa o tipo de datos é, é vai implicar en torno a, probablemente, 210 00:08:13,058 --> 00:08:14,020 dous números negativos. 211 00:08:14,020 --> 00:08:16,644 Ou se se especifica que o seu intervalo só debe ser positivo, 212 00:08:16,644 --> 00:08:18,560 que se pode facer, pero nós non vimos iso aínda, 213 00:08:18,560 --> 00:08:21,420 pode acabar, polo menos, de volta ao cero. 214 00:08:21,420 --> 00:08:22,410 Aínda que, en realidade, si. 215 00:08:22,410 --> 00:08:24,320 Neste caso, negativo números, en cuxo caso 216 00:08:24,320 --> 00:08:26,870 o ciclo pecharase porque non é, de feito, 217 00:08:26,870 --> 00:08:29,220 maior que ou igual a cero se é negativo. 218 00:08:29,220 --> 00:08:31,780 >> Así, por desgraza, como longo teriamos que esperar? 219 00:08:31,780 --> 00:08:35,490 Agora estamos ata o que, 2000000-ish? 220 00:08:35,490 --> 00:08:37,705 Somos como 2 millóns, nós imos ter que esperar 221 00:08:37,705 --> 00:08:39,330 ata que poidamos realmente ver este síntoma. 222 00:08:39,330 --> 00:08:46,200 Pero podemos velo un pouco máis rápido, maybe-- veremos se podemos deter. 223 00:08:46,200 --> 00:08:46,700 Imos alí. 224 00:08:46,700 --> 00:08:49,500 225 00:08:49,500 --> 00:08:51,331 Mesmo os menús están aparecendo aos poucos. 226 00:08:51,331 --> 00:08:51,830 Todo ben. 227 00:08:51,830 --> 00:08:54,270 Entón, imos voltar a que en pouco tempo. 228 00:08:54,270 --> 00:08:56,320 É un bo tempo-- droga, crías de can. 229 00:08:56,320 --> 00:08:58,280 >> É un bo momento para algúns anuncios. 230 00:08:58,280 --> 00:09:01,225 Entón, se pode gustar involucrarse YHack, 231 00:09:01,225 --> 00:09:03,600 que é un evento sendo patrocinado polos nosos amigos en Yale. 232 00:09:03,600 --> 00:09:05,990 E, de feito, algúns do curso de TFS en Yale están implicados con iso. 233 00:09:05,990 --> 00:09:08,610 YHack é unha organización internacional hack a Thon aloxado e mantido por 234 00:09:08,610 --> 00:09:12,395 en Yale, que reúne 1.500 como hackers ocupados e creativos todos 235 00:09:12,395 --> 00:09:13,120 o mundo. 236 00:09:13,120 --> 00:09:14,610 Se este é de interese, bótalle un ollo aquí. 237 00:09:14,610 --> 00:09:17,401 Se é moi brevemente no pantalla, bótalle un ollo nas láminas de hoxe 238 00:09:17,401 --> 00:09:19,622 para a URL para yhack.org. 239 00:09:19,622 --> 00:09:21,080 Así, tamén algúns anuncios rápidos. 240 00:09:21,080 --> 00:09:24,410 Entón, oficialmente seccións comezará semana aquí e New Haven. 241 00:09:24,410 --> 00:09:27,660 Ten en conta que está a recibir un correo electrónico despois este fin de semana máis probable. 242 00:09:27,660 --> 00:09:29,390 É preciso un longo tempo CS50 á sección, 243 00:09:29,390 --> 00:09:32,080 Dadas todas as persoas na clase e todo se movendo. 244 00:09:32,080 --> 00:09:34,871 E todo Fellows Ensino ' horarios tamén están solidificando aínda, 245 00:09:34,871 --> 00:09:38,110 pero sexa en conta para unha mensaxe e, no seu caso ser, pode volver a sección de alí despois. 246 00:09:38,110 --> 00:09:39,580 >> Study.cs50.net. 247 00:09:39,580 --> 00:09:43,280 Así, mesmo se vostede é un participante constante en seccións, entender que case todos 248 00:09:43,280 --> 00:09:46,786 dos recursos que utilizamos en seccións están dispoñibles ao público en CS50 249 00:09:46,786 --> 00:09:48,460 Estudar neste URL aquí. 250 00:09:48,460 --> 00:09:51,630 Entón, se xamais quere re avaliación material da sección, ou ler máis adiante, 251 00:09:51,630 --> 00:09:54,170 ou non pode facer-lle un semana, entender que os porta-mostras, 252 00:09:54,170 --> 00:09:58,210 e problemas, e definicións, e máis están todos alí tamén. 253 00:09:58,210 --> 00:10:00,645 >> Horario de atención retomar hoxe, e mañá, e mércores, 254 00:10:00,645 --> 00:10:03,020 e xoves comproba o curso de sitio para o axenda. 255 00:10:03,020 --> 00:10:05,690 >> E tamén, lanzando agora hoxe é CS50 Discutir. 256 00:10:05,690 --> 00:10:09,230 Entón, se e cando ten preguntas para o outro ou para o persoal do curso, 257 00:10:09,230 --> 00:10:12,099 e están a traballar en xeral nalgún conxunto de problemas, 258 00:10:12,099 --> 00:10:15,015 entender que non necesariamente ten que volver para o ser humano próxima de ti. 259 00:10:15,015 --> 00:10:17,810 Se non hai ninguén alí, pode chegar ata nós e compañeiros 260 00:10:17,810 --> 00:10:19,890 Discutir liña vía CS50. 261 00:10:19,890 --> 00:10:22,600 Así, esta é unha discusión tarxeta do curso, 262 00:10:22,600 --> 00:10:24,550 e entender que esta é quizais o mellor 263 00:10:24,550 --> 00:10:28,480 lugar para comezar cando ten preguntas cando fóra do horario de oficina 264 00:10:28,480 --> 00:10:29,470 en particular. 265 00:10:29,470 --> 00:10:31,070 >> Comidas pre-arrinca esta semana tamén. 266 00:10:31,070 --> 00:10:33,170 No Fire and Ice [Inaudível] en New Haven. 267 00:10:33,170 --> 00:10:35,379 Bótalle un ollo ao campo de sitio para RSVP. 268 00:10:35,379 --> 00:10:36,753 Primeiro en chegar, primeiro en servir para iso. 269 00:10:36,753 --> 00:10:39,380 Se non recibir esta semana imos facer estes máis toda venres 270 00:10:39,380 --> 00:10:40,400 durante o período. 271 00:10:40,400 --> 00:10:41,830 >> OK, e agora unha palabra sobre clasificación. 272 00:10:41,830 --> 00:10:44,690 Particularmente a medida que entramos problema definir un, que está fóra esta semana, 273 00:10:44,690 --> 00:10:46,670 e conxunto de problemas e, posteriormente, de dous. 274 00:10:46,670 --> 00:10:51,680 Como é que imos avaliar conxuntos P e avaliar a calidade dos mesmos? 275 00:10:51,680 --> 00:10:55,560 Entón, é de catro eixes que usan en CS50, e son estes catro aquí. 276 00:10:55,560 --> 00:10:59,200 >> Scope, que captura nun numérico base só como do conxunto P 277 00:10:59,200 --> 00:10:59,860 que afrontar. 278 00:10:59,860 --> 00:11:02,890 É corresponde aproximadamente co esforzo, e é a nosa forma de capturar 279 00:11:02,890 --> 00:11:05,190 se tentar metade do P definir, de todo o conxunto P. 280 00:11:05,190 --> 00:11:08,860 Este é un paso fácil de obter perfecto puntuacións en se fai, de feito, 281 00:11:08,860 --> 00:11:11,020 tente todos os aspectos do conxunto P. 282 00:11:11,020 --> 00:11:12,010 Polo tanto, manter isto presente. 283 00:11:12,010 --> 00:11:13,420 >> A exactitude é exactamente iso. 284 00:11:13,420 --> 00:11:17,760 Será que o seu traballo de código como a especificación e como solución de mostra dos funcionarios 285 00:11:17,760 --> 00:11:19,730 suxiren que o seu código debe, de feito, traballar. 286 00:11:19,730 --> 00:11:23,260 Consulte 50, se aínda non coñeceu lo con todo, está P definir unha especificación 287 00:11:23,260 --> 00:11:25,060 e xeralmente darlle respostas si / non 288 00:11:25,060 --> 00:11:26,518 canto a saber se o seu código é correcto. 289 00:11:26,518 --> 00:11:30,680 Polo menos ata agora como imos para valora-lo a partir dos tests 290 00:11:30,680 --> 00:11:32,430 que corremos dentro dese programa. 291 00:11:32,430 --> 00:11:33,850 >> O deseño é moito máis subxectiva. 292 00:11:33,850 --> 00:11:35,994 Este é o quão ben escrito é o código. 293 00:11:35,994 --> 00:11:38,410 E iso é algo que vai estar mellor no tempo, 294 00:11:38,410 --> 00:11:41,201 e iso é algo que imos proporcionar feedback máis cualitativa sobre. 295 00:11:41,201 --> 00:11:43,350 E polo deseño podería significa antes de tempo 296 00:11:43,350 --> 00:11:47,650 pode ser tentado nalgún P definido para facer algo loopingly, 297 00:11:47,650 --> 00:11:51,590 pero para ter quizais tres, ou catro, ou cinco voltas dianteiras noutras citas ou mentres aninhado 298 00:11:51,590 --> 00:11:52,090 lazos. 299 00:11:52,090 --> 00:11:54,130 Que, xeralmente, debe facer comezar a encoller 300 00:11:54,130 --> 00:11:56,070 e xeralmente sería considerada mala concepción. 301 00:11:56,070 --> 00:11:59,490 E vai comezar a ver na clase e fóra da clase boas maneiras de facer as cousas, 302 00:11:59,490 --> 00:12:02,920 malas formas de facer as cousas que todo pode ser correcta, pero non 303 00:12:02,920 --> 00:12:04,304 necesariamente ben deseñado. 304 00:12:04,304 --> 00:12:05,220 Como escribir un ensaio. 305 00:12:05,220 --> 00:12:08,100 Pode ser capaz de poñer palabras nun páxina que son gramaticalmente correcta, 306 00:12:08,100 --> 00:12:10,016 pero o ensaio ou a tese de que están en só 307 00:12:10,016 --> 00:12:11,810 completamente incoherente ou pouco convincente. 308 00:12:11,810 --> 00:12:15,930 E, polo que pode ser o análogo no mundo escrito do deseño malo ou bo. 309 00:12:15,930 --> 00:12:18,490 >> E estilo, tamén, é moi subxectiva. 310 00:12:18,490 --> 00:12:20,060 Pero polo menos esperamos consistencia. 311 00:12:20,060 --> 00:12:21,480 Este é o quão bonito é o código. 312 00:12:21,480 --> 00:12:22,840 As cousas están ben recuado? 313 00:12:22,840 --> 00:12:26,600 Son as variables de ben nomeado / son todos dos seus parénteses e corchetes 314 00:12:26,600 --> 00:12:27,920 aliñadas como deberían ser? 315 00:12:27,920 --> 00:12:31,490 Temos unha guía de estilo como CS50 o conxunto de problema pode apuntar no. 316 00:12:31,490 --> 00:12:33,730 Aqueles son máis cómodo Benvido ao desviar-se de que 317 00:12:33,730 --> 00:12:35,771 sempre que auto-consistente. 318 00:12:35,771 --> 00:12:38,020 E isto, tamén, é unha lección imos reforzar na sección. 319 00:12:38,020 --> 00:12:40,990 Entón, se todo isto era algo rápido, entender o conxunto P e seccións 320 00:12:40,990 --> 00:12:42,900 vou entrar en máis profundidade antes de tempo. 321 00:12:42,900 --> 00:12:45,490 >> Pero xeralmente, temos moi poucos baldes para CS50. 322 00:12:45,490 --> 00:12:48,170 Puntuacións son xeralmente nunha escala de un a tres, ou un a cinco. 323 00:12:48,170 --> 00:12:50,836 Estamos literally-- e eu non podo dicir esta suficiente a primeira semana. 324 00:12:50,836 --> 00:12:51,582 Tres é bo. 325 00:12:51,582 --> 00:12:54,290 Así, aínda que, iso si, tres de cinco normalmente, matematicamente, 326 00:12:54,290 --> 00:12:57,240 pode ser un 60 por cento ou menos como un D. 327 00:12:57,240 --> 00:12:58,840 Tres é, en realidade, bo. 328 00:12:58,840 --> 00:13:01,050 E, de feito, esperamos a maioría dos alumnos da clase 329 00:13:01,050 --> 00:13:04,280 para comezar o prazo en torno dous, ou tres, e catro. 330 00:13:04,280 --> 00:13:05,510 Probablemente non tantos fives. 331 00:13:05,510 --> 00:13:06,661 Non son moitas queridos. 332 00:13:06,661 --> 00:13:08,910 Pero en xeral para iniciar en ese punto doce na curva 333 00:13:08,910 --> 00:13:11,694 de xeito que a medida que o tempo avanza, hai realmente espazo para, 334 00:13:11,694 --> 00:13:13,360 e oportunidades para progresión superior. 335 00:13:13,360 --> 00:13:15,810 Entón, por favor non igualan tres con 60%. 336 00:13:15,810 --> 00:13:17,410 É moito máis abstracto que iso. 337 00:13:17,410 --> 00:13:20,160 A fórmula coa que calculamos clases é a seguinte ponderación. 338 00:13:20,160 --> 00:13:21,610 A exactitude vale máis. 339 00:13:21,610 --> 00:13:23,010 Proxecto vale un pouco menos. 340 00:13:23,010 --> 00:13:24,490 Estilo vale un pouco menos. 341 00:13:24,490 --> 00:13:26,950 E esta xeralmente capta a cantidade de tempo 342 00:13:26,950 --> 00:13:29,800 que se ve en cada destes eixes só dereito. 343 00:13:29,800 --> 00:13:31,810 Estilo é super doado, debe ser super rápido, 344 00:13:31,810 --> 00:13:33,657 pero é un hábito fácil para ir con preguiza sobre. 345 00:13:33,657 --> 00:13:35,490 Corrección pode levar -lle a maior parte do tempo. 346 00:13:35,490 --> 00:13:38,990 Perseguindo algún poder erro tomar esa hora extra ou máis, 347 00:13:38,990 --> 00:13:41,737 e así, a puntuación en definitiva, que capta. 348 00:13:41,737 --> 00:13:43,070 E así, agora, un máis grave. 349 00:13:43,070 --> 00:13:45,240 Xa que ten o CS50 distinción, para mellor 350 00:13:45,240 --> 00:13:47,440 ou para peor, de ser quizais mellor familiarizado 351 00:13:47,440 --> 00:13:50,065 coas cuestións de académico honestidade que a maioría calquera outro curso. 352 00:13:50,065 --> 00:13:53,720 E, de feito, é do meu coñecemento que nós enviar máis estudantes, por desgraza, 353 00:13:53,720 --> 00:13:56,690 por razóns disciplinarias cada ano como resultado. Así, 354 00:13:56,690 --> 00:13:59,040 en interese da plena divulgación, imos falar brevemente 355 00:13:59,040 --> 00:14:02,820 sobre o que pasa na CS50, eo que pode facer, eo que pode estar atentos. 356 00:14:02,820 --> 00:14:05,530 >> Entón, aquí desde 2007, cando Eu herdei o curso, 357 00:14:05,530 --> 00:14:07,870 é o número de casos tarxeta do anuncio. 358 00:14:07,870 --> 00:14:10,690 Consello Ad é disciplinar da Harvard corpo, ou agora o honor Counsel, 359 00:14:10,690 --> 00:14:13,790 á que os casos son referidos cando alumnos facer algo que o curso de 360 00:14:13,790 --> 00:14:15,470 Syllabus considera razoable. 361 00:14:15,470 --> 00:14:17,220 Non hai ningún patrón real, aquí, eu diría. 362 00:14:17,220 --> 00:14:19,530 El flota ao longo do anos, pero normalmente 363 00:14:19,530 --> 00:14:22,262 este é o número de casos que se refire. 364 00:14:22,262 --> 00:14:23,970 O número de alumnos que están implicados? 365 00:14:23,970 --> 00:14:25,290 É tamén varía. 366 00:14:25,290 --> 00:14:27,930 Normalmente, último ano para o exemplo, 29 alumnos en Harvard 367 00:14:27,930 --> 00:14:29,740 Ad foron Embarcado, por así dicir. 368 00:14:29,740 --> 00:14:32,670 29 deles estudantes actuais, Dous deles estudantes anteriores, 369 00:14:32,670 --> 00:14:35,610 que estaban colaborando dalgún xeito perversa. 370 00:14:35,610 --> 00:14:38,400 E, a continuación, en termos de porcentaxe, normalmente é de case 3% 371 00:14:38,400 --> 00:14:41,360 da clase que, por desgraza, fai este tipo de decisións. 372 00:14:41,360 --> 00:14:44,470 >> Entón, o ano pasado foi do 3,5% do corpo estudantil da CS50 373 00:14:44,470 --> 00:14:46,820 que foi Ad Embarcado, por así dicir. 374 00:14:46,820 --> 00:14:48,490 >> Entón, o que todo isto significa? 375 00:14:48,490 --> 00:14:49,660 E que é o que imos realmente facer? 376 00:14:49,660 --> 00:14:52,930 >> Así, para a divulgación completa, nós absolutamente, como científicos da computación, 377 00:14:52,930 --> 00:14:57,620 ten ferramentas de software á nosa disposición e é moi fácil para nós, para ser xusto, 378 00:14:57,620 --> 00:15:00,980 que doutros compañeiros que non son cruzar estas liñas para atravesar comparar 379 00:15:00,980 --> 00:15:04,570 cada presentación deste ano contra cada presentación durante os últimos oito anos. 380 00:15:04,570 --> 00:15:05,445 Software fai iso. 381 00:15:05,445 --> 00:15:07,440 E, finalmente, é ollos humanos que deciden 382 00:15:07,440 --> 00:15:11,410 ou non para referirse algúns importa para posterior adxudicación, 383 00:15:11,410 --> 00:15:12,737 pero o software certamente axuda. 384 00:15:12,737 --> 00:15:15,820 E iso, a verdade, é por iso que eu creo que temos un número tan grande en CS50. 385 00:15:15,820 --> 00:15:18,540 Non é porque CS50 estudantes ou estudantes CS máis 386 00:15:18,540 --> 00:15:20,840 xeralmente son menos honestos que outros estudantes, 387 00:15:20,840 --> 00:15:22,340 é só temos a ferramentas e as técnicas 388 00:15:22,340 --> 00:15:24,095 co cal a tomar esta primeira pasaxe. 389 00:15:24,095 --> 00:15:25,960 >> Pero manter un ollo en todas estas cousas 390 00:15:25,960 --> 00:15:30,340 así, unha vez máis, en interese da recoñecendo o traballo que está a ser colocado 391 00:15:30,340 --> 00:15:32,397 na por un super maioría da clase. 392 00:15:32,397 --> 00:15:34,230 E a política do curso na honestidade académica, 393 00:15:34,230 --> 00:15:37,021 aínda que sexa un grupo de parágrafos por moito tempo con unha morea de balas 394 00:15:37,021 --> 00:15:40,490 que son esperanza moi lexible, el realmente non se resumen a ser razoable. 395 00:15:40,490 --> 00:15:44,000 E a mellor regra de ouro que ofrecemos no marco do programa 396 00:15:44,000 --> 00:15:46,020 é iso, a esencia de todo o traballo que 397 00:15:46,020 --> 00:15:47,850 someterse a este curso debe ser o seu propio. 398 00:15:47,850 --> 00:15:51,510 E, de feito, en case todos os casos encamiñados a medidas disciplinarias 399 00:15:51,510 --> 00:15:55,640 foi a causa dalgún alumno unha tarde noite tipicamente virou o código 400 00:15:55,640 --> 00:15:58,130 sobre outright para un compañeiro de clase, que, entón, adotou- 401 00:15:58,130 --> 00:16:00,840 na súa totalidade ou significativamente dos mesmos. 402 00:16:00,840 --> 00:16:02,680 >> Pero realmente, iso é OK. 403 00:16:02,680 --> 00:16:04,684 E, de feito, na oficina horas, os anacos de papel 404 00:16:04,684 --> 00:16:07,850 te foi dado se veu de oficina horas a semana pasada anima tanto. 405 00:16:07,850 --> 00:16:09,710 Está absolutamente ben benvida e fomenta 406 00:16:09,710 --> 00:16:12,340 para discutir conxuntos de problemas cos compañeiros. 407 00:16:12,340 --> 00:16:14,461 Para axudarnos uns a outros cando tropezo. 408 00:16:14,461 --> 00:16:17,710 Pero xeralmente a regra de ouro debe ser este ", cando está pedindo por axuda, 409 00:16:17,710 --> 00:16:20,412 pode amosar o seu código para outros, pero non pode ver o seu. " 410 00:16:20,412 --> 00:16:22,620 Entón, noutras palabras, se eu son loitando con algún conxunto P 411 00:16:22,620 --> 00:16:25,290 e eu estou sentado alí no Cea salón, ou na biblioteca, 412 00:16:25,290 --> 00:16:28,470 ou na clase intentando atopar algunha falla, 413 00:16:28,470 --> 00:16:30,340 Eu certamente podo amosar meu código na miña pantalla 414 00:16:30,340 --> 00:16:32,590 para a persoa sentada ao lado para min, certamente o equipo, 415 00:16:32,590 --> 00:16:33,600 pero tamén un compañeiro de clase. 416 00:16:33,600 --> 00:16:36,580 Pero se a solución que meu compañeiro ofrece é, oh, 417 00:16:36,580 --> 00:16:39,200 aquí pode dar un ollo ao que Eu fixen, que cruza a liña. 418 00:16:39,200 --> 00:16:43,120 >> E eu ousaría dicir que é xeralmente unha cousa razoable para a maioría da xente 419 00:16:43,120 --> 00:16:45,030 de detectar moi facilmente a liña de. 420 00:16:45,030 --> 00:16:47,195 E así, ver o plan de estudos para máis detalles. 421 00:16:47,195 --> 00:16:49,070 E agora un dos máis aspectos controvertidos 422 00:16:49,070 --> 00:16:52,529 CS50 de programa que eu penso que eu falaría na conclusión aquí 423 00:16:52,529 --> 00:16:53,820 é a chamada cláusula de arrepentimento. 424 00:16:53,820 --> 00:16:55,340 Entón, aquí está toda a copia fina. 425 00:16:55,340 --> 00:16:58,090 Pero en xeral, vimos nos últimos máis de 8 anos 426 00:16:58,090 --> 00:17:01,510 que, de feito, case todas de CS50 casos de deshonestidade académica 427 00:17:01,510 --> 00:17:04,390 ser o resultado só pobres facendo tarde de noite de decisións. 428 00:17:04,390 --> 00:17:07,144 O resultado do estrés, o resultado de falta de alimentación, falta de sono, 429 00:17:07,144 --> 00:17:09,560 moitas series P, moitos prazos, moitos compromisos. 430 00:17:09,560 --> 00:17:13,520 Estrés construíndo nun 2:00, 03:00 AM, 4:00, cun prazo inminente. 431 00:17:13,520 --> 00:17:17,020 A maioría dos estudantes nestes casos que acaba de facer malas decisións 432 00:17:17,020 --> 00:17:20,619 que podería moi ben se arrepentir do mañá seguinte, se non minutos máis tarde, 433 00:17:20,619 --> 00:17:25,490 pero ata o ano pasado non houbo chave de liberación que estes alumnos poderían 434 00:17:25,490 --> 00:17:29,140 realmente abrir para realmente resolver o problema de fronte, sen medo a ser 435 00:17:29,140 --> 00:17:30,850 inicie dende a facultade completamente. 436 00:17:30,850 --> 00:17:33,260 >> E, de feito, nós introducimos esta cláusula arrepentimento o ano pasado, 437 00:17:33,260 --> 00:17:35,970 que di que, se no prazo 72 horas, tres días, 438 00:17:35,970 --> 00:17:37,970 de atravesar algunha liña prescrito no currículo 439 00:17:37,970 --> 00:17:41,178 vén para a fronte a un do curso de cabezas e nós imos ter unha conversa sobre iso. 440 00:17:41,178 --> 00:17:43,720 Hai aínda haber algún resultado, a diferenza do que é 441 00:17:43,720 --> 00:17:44,990 Foi informar que o contrario. 442 00:17:44,990 --> 00:17:49,190 Hai aínda un resultado que é acionável polo curso, 443 00:17:49,190 --> 00:17:51,611 xeralmente Restablecer un conxunto P ou tomar algunha outra acción, 444 00:17:51,611 --> 00:17:53,610 pero imos, de feito, seguro-lo nós mesmos e non 445 00:17:53,610 --> 00:17:58,460 refírense a que eran máis altos resultado pode ser moito máis graves. 446 00:17:58,460 --> 00:18:01,810 E, de feito, para compartir o que pasou o ano pasado, en oito anos, e agora 447 00:18:01,810 --> 00:18:04,950 nove anos, de ensinar este curso e despois de xogar con varios botóns, 448 00:18:04,950 --> 00:18:07,866 transformando varios mostradores sobre o pasado varios anos sobre a honestidade académica, 449 00:18:07,866 --> 00:18:11,920 e vendo por datos ningunha aparentes impacto, mesmo de discursos como este, 450 00:18:11,920 --> 00:18:15,490 este foi mans o mellor nós introducimos pedagoxicamente 451 00:18:15,490 --> 00:18:18,090 en oito anos, xunto estas liñas en CS50. 452 00:18:18,090 --> 00:18:21,010 >> 19 estudantes viñeron á fronte nos termos desta cláusula o ano pasado. 453 00:18:21,010 --> 00:18:23,389 Non tomou ningunha acción para sete deses alumnos, 454 00:18:23,389 --> 00:18:25,430 a determinación de que eran innecesariamente preocupado. 455 00:18:25,430 --> 00:18:27,304 Eles non tiñan, de feito, atravesada unha liña, pero 456 00:18:27,304 --> 00:18:28,960 foi un bo chat ter, con todo. 457 00:18:28,960 --> 00:18:31,190 Nós zerado 11 dos correas que foron sometidos. 458 00:18:31,190 --> 00:18:33,840 E nun caso pedimos unha estudante para facer un conxunto de problemas. 459 00:18:33,840 --> 00:18:36,370 Pero máis convincente, Sinceramente, con estas 19 chats, 460 00:18:36,370 --> 00:18:39,020 que era moito máis que eu Espérase que teñen, cada un deles 461 00:18:39,020 --> 00:18:41,370 10 minutos para quizais unha hora de duración, tamén trouxo 462 00:18:41,370 --> 00:18:44,920 á luz unha serie de cuestións sobre cuestións familiares, cuestións amigo, 463 00:18:44,920 --> 00:18:46,940 problemas de saúde mental que, a continuación, contratado, 464 00:18:46,940 --> 00:18:50,200 coa bendición, residente do estudante rector, ou amigos, ou calquera outro número 465 00:18:50,200 --> 00:18:51,450 de recursos de soporte. 466 00:18:51,450 --> 00:18:54,454 Así que este foi de lonxe un dos mellores usos do noso tempo 467 00:18:54,454 --> 00:18:55,870 e un dos mellores intervencións. 468 00:18:55,870 --> 00:18:58,870 >> Con iso dito, non entrada a taxa de detección 469 00:18:58,870 --> 00:19:00,909 de deshonestidade académica en xeral. 470 00:19:00,909 --> 00:19:02,950 E atrévome a dicir, este subconxunto de estudantes o ano pasado 471 00:19:02,950 --> 00:19:06,350 era que un grupo demográfico anteriormente nunca está identificado antes 472 00:19:06,350 --> 00:19:08,140 e nunca conectado antes. 473 00:19:08,140 --> 00:19:10,020 E así, estes foron marabillosas historias de éxito 474 00:19:10,020 --> 00:19:13,390 aínda que eles foron traídos á luz en menos de circunstancias ideais. 475 00:19:13,390 --> 00:19:15,640 Polo tanto, manter isto presente como fai quizais 476 00:19:15,640 --> 00:19:17,390 algún pobre decisión mesmo tarde de noite, 477 00:19:17,390 --> 00:19:20,151 que hai tanto tempo recurso como o estudante nesta situación 478 00:19:20,151 --> 00:19:23,400 posúe-se e chegar á fronte para que poidamos ter este tipo de chat e tratar con el 479 00:19:23,400 --> 00:19:27,310 dun xeito que é educativo, e, a continuación podemos poñelas detrás de nós o día seguinte. 480 00:19:27,310 --> 00:19:30,335 >> Así, sen máis delongas, asumir a borda fóra desta conversa, 481 00:19:30,335 --> 00:19:35,080 a razón que os fillos están é só para romper o xeo por un momento. 482 00:19:35,080 --> 00:19:39,560 E, por desgraza, son todos durmiremos, pero o que debería ocorrer aquí 483 00:19:39,560 --> 00:19:41,760 era todo o mundo debería para impresionar e tipo de relaxarse 484 00:19:41,760 --> 00:19:43,910 despois desa conversa moi pesado. 485 00:19:43,910 --> 00:19:46,930 Pero, ao parecer, eu coloque os fillos de can para durmir. 486 00:19:46,930 --> 00:19:50,070 Pero se vai a CS50 de crías web Slash, 487 00:19:50,070 --> 00:19:51,610 pode ve-los durante todo o día. 488 00:19:51,610 --> 00:19:55,280 Particularmente quizais 2:00, ou 03:00 ou 04:00 á noite 489 00:19:55,280 --> 00:19:57,480 para ver un pouco de alivio de tensión alí. 490 00:19:57,480 --> 00:19:58,805 Así que é cortar crías. 491 00:19:58,805 --> 00:20:01,700 492 00:20:01,700 --> 00:20:02,200 Todo ben. 493 00:20:02,200 --> 00:20:03,020 Non se divertido? 494 00:20:03,020 --> 00:20:04,200 Aceptar. 495 00:20:04,200 --> 00:20:07,140 Entón, de volta a algún ordenador ciencia, se poida. 496 00:20:07,140 --> 00:20:10,600 >> Entón, lembre que a última vez que comezou mirando non só a principal, que 497 00:20:10,600 --> 00:20:13,930 era a función estándar, o cando bandeira verde premendo equivalente, 498 00:20:13,930 --> 00:20:16,999 pero nós tamén comezou brevemente escribindo algunhas das nosas propias funcións. 499 00:20:16,999 --> 00:20:20,040 E ata agora, ningunha destas funcións foron particularmente grande ou carne. 500 00:20:20,040 --> 00:20:24,570 Vai entrar os máis funcións, probablemente, definir P 2, P axuste 3, 501 00:20:24,570 --> 00:20:26,410 definitivamente P axustou 4 en diante. 502 00:20:26,410 --> 00:20:29,340 Agora a maioría dos seus programas, Se non todos, por suposto, para P 503 00:20:29,340 --> 00:20:31,550 conxunto 1 pode ser feito enteiramente en principal. 504 00:20:31,550 --> 00:20:33,810 Se o programa só é cinco liñas, 10 liñas, 505 00:20:33,810 --> 00:20:37,070 mesmo 20 liñas de longo, perfectamente razoable para gravala-lo 506 00:20:37,070 --> 00:20:40,930 todo en principal e non para complicar máis seu código, pero o que estamos facendo hoxe 507 00:20:40,930 --> 00:20:44,360 e de aí en diante está intentando tamén introducir algunhas boas técnicas de deseño 508 00:20:44,360 --> 00:20:48,660 para que, como o seu código está máis complicada e como os problemas 509 00:20:48,660 --> 00:20:51,690 quere resolver está máis difícil e máis interesante que ten, máis ou menos, 510 00:20:51,690 --> 00:20:55,850 as ferramentas na súa caixa de ferramentas coas que para proxectar boas solucións para aqueles. 511 00:20:55,850 --> 00:21:01,210 >> Entón, imos dar unha rápida ollo cara atrás, este programa da miña última semana, o que 512 00:21:01,210 --> 00:21:06,550 foi funcións de cero punto C. E Lembre que moi simplemente, 513 00:21:06,550 --> 00:21:10,310 parece que este con dous funcións, principal e nome de impresión. 514 00:21:10,310 --> 00:21:13,160 E o pensamento de volta ou que enxeñería inversa de hoxe, 515 00:21:13,160 --> 00:21:16,880 cal foi a motivación para a introdución de unha función na liña 28 chamados, 516 00:21:16,880 --> 00:21:18,180 nome de impresión? 517 00:21:18,180 --> 00:21:21,745 Ou o que era este un exemplo de en termos dun principio ou takeaway, 518 00:21:21,745 --> 00:21:22,605 se o faría. 519 00:21:22,605 --> 00:21:26,560 520 00:21:26,560 --> 00:21:27,300 Algúns murmurios. 521 00:21:27,300 --> 00:21:28,830 Que? 522 00:21:28,830 --> 00:21:32,210 >> Si descomposición para funcional é unha especie de forma elegante de dicir, 523 00:21:32,210 --> 00:21:34,690 descompoñer o seu programa nas súas partes constituíntes 524 00:21:34,690 --> 00:21:37,530 e entón usar esas pezas para montar un todo. 525 00:21:37,530 --> 00:21:39,620 Entón, iso tamén é só un tipo dun bocado xa, 526 00:21:39,620 --> 00:21:42,050 pero esta é quizais ata un mellor exemplo de algo 527 00:21:42,050 --> 00:21:43,081 chamado só de abstracción. 528 00:21:43,081 --> 00:21:43,580 Non? 529 00:21:43,580 --> 00:21:46,950 Abstracción será un dos temas recorrentes en CS50 530 00:21:46,950 --> 00:21:49,085 e tamén de ciencia da computación unha vez que é xeralmente 531 00:21:49,085 --> 00:21:53,060 unha técnica coa que pode resolver problemas de forma máis eficaz, porque 532 00:21:53,060 --> 00:21:56,807 pode escribir solucións máis intuitivamente e de forma que muda o tamaño 533 00:21:56,807 --> 00:21:58,390 e é comprensible por outras persoas. 534 00:21:58,390 --> 00:21:59,860 O que quero dicir con iso? 535 00:21:59,860 --> 00:22:04,340 >> Entón, sen dúbida, é moito máis lexible a ollar para un programa coma este, 536 00:22:04,340 --> 00:22:05,990 Super curta que sexa. 537 00:22:05,990 --> 00:22:10,050 Cando ve na liña 22 que non hai unha función chamada, nome de impresión. 538 00:22:10,050 --> 00:22:12,620 Ese nome só di o que fai. 539 00:22:12,620 --> 00:22:15,780 Esa función aparentemente leva entrada entre os parénteses, 540 00:22:15,780 --> 00:22:18,600 e ao parecer fai algo, presuntamente imprime o nome. 541 00:22:18,600 --> 00:22:20,880 E así, aínda que podería absolutamente 542 00:22:20,880 --> 00:22:25,280 feito o que fixemos hai unha semana, o que foi só tomar esta liña de código real, 543 00:22:25,280 --> 00:22:28,710 librar-se deste, e obter librar de todo iso xunto, 544 00:22:28,710 --> 00:22:31,436 que tipo de abstraída a noción de impresión dun nome. 545 00:22:31,436 --> 00:22:33,060 Eu non me importa se está a usar print def. 546 00:22:33,060 --> 00:22:35,601 Eu non me importa se ten un S cento e unha barra invertida N. Estes 547 00:22:35,601 --> 00:22:37,270 son detalles incrible arcanos. 548 00:22:37,270 --> 00:22:40,090 O que eu me importa como programador está a imprimir un nome. 549 00:22:40,090 --> 00:22:43,414 E así, que a mellor forma de facelo que por chamar unha función, o nome de impresión? 550 00:22:43,414 --> 00:22:46,330 E así, esa foi unha das motivacións para facer algo así. 551 00:22:46,330 --> 00:22:50,370 Facendo o código máis lexible, máis reutilizable, e tamén auto descritiva. 552 00:22:50,370 --> 00:22:52,120 Agora, imos dar un ollo noutro exemplo, 553 00:22:52,120 --> 00:22:56,220 que foi unha funcións, que tivemos aquí. 554 00:22:56,220 --> 00:23:00,367 >> Entón, este é quizais aínda máis atractivo porque, neste caso, 555 00:23:00,367 --> 00:23:01,700 Non quero comezar só un int. 556 00:23:01,700 --> 00:23:03,320 Eu quero comezar un int positivo. 557 00:23:03,320 --> 00:23:06,470 E verifícase se para obter un positivo int ten que facer unha chea de traballo braçal. 558 00:23:06,470 --> 00:23:06,969 Non? 559 00:23:06,969 --> 00:23:09,600 Non é unha simple liña chamar como nome de impresión foi, 560 00:23:09,600 --> 00:23:11,480 que é recoñecidamente menos convincente. 561 00:23:11,480 --> 00:23:16,000 >> Para obter un int positivo, logically-- déixeme rolar cara atrás para abaixo para ocultar iso. 562 00:23:16,000 --> 00:23:18,887 O que ten que facer? 563 00:23:18,887 --> 00:23:20,720 Como todas as ferramentas que temos no momento son 564 00:23:20,720 --> 00:23:24,440 cousas como print def da Standard Biblioteca e tamén da biblioteca CS50 565 00:23:24,440 --> 00:23:26,990 temos Obter Int, e Get Float, Obter Longo Longo, Get cadea, 566 00:23:26,990 --> 00:23:29,260 pero o único, Germano, agora é Obter Int. 567 00:23:29,260 --> 00:23:32,970 Así, a única ferramenta que ten na súa caixa de ferramentas é Obter Int, 568 00:23:32,970 --> 00:23:35,505 como nós imos sobre a aplicación de Lo para int positivo? 569 00:23:35,505 --> 00:23:35,929 >> Audiencia: Crear un rexistro e comprobe en que a entrada se deron 570 00:23:35,929 --> 00:23:36,762 era positivo ou non. 571 00:23:36,762 --> 00:23:39,390 572 00:23:39,390 --> 00:23:40,640 >> COLUMNA 1: Perfect. 573 00:23:40,640 --> 00:23:41,200 Exactamente. 574 00:23:41,200 --> 00:23:43,950 Outra ferramenta que temos no noso caixa de ferramentas a partir dunha ou dúas semanas 575 00:23:43,950 --> 00:23:45,419 é só a construción de loop. 576 00:23:45,419 --> 00:23:48,210 E entón, si, se usamos un tempo loop, ou un loop Do While ou un fore 577 00:23:48,210 --> 00:23:50,850 loop de nós podería ser comezar afastado con calquera dos de algunha maneira. 578 00:23:50,850 --> 00:23:55,140 Podemos aplicar a noción de get int positivo só usando Obter Int, 579 00:23:55,140 --> 00:23:57,830 e despois é só manter chamando- novo e manter importunando o usuario 580 00:23:57,830 --> 00:24:00,320 ata que el ou ela realmente nos dá o que queremos. 581 00:24:00,320 --> 00:24:03,260 >> E agora, esta abstracción do proceso 582 00:24:03,260 --> 00:24:05,680 de conseguir un int positivo nunha función chamada 583 00:24:05,680 --> 00:24:08,930 Obter positiva Int é un pouco máis convincente porque mira para isto. 584 00:24:08,930 --> 00:24:10,990 Estes son como 10 máis liñas de código que 585 00:24:10,990 --> 00:24:15,090 están implicados na obtención dun int positivo, e eu realmente non me importa como fai iso. 586 00:24:15,090 --> 00:24:17,850 Todo o que me importa é que pode facelo, e entón eu teño 587 00:24:17,850 --> 00:24:21,660 escondidas todos estes detalles detrás dun función chamada Get positiva int que, 588 00:24:21,660 --> 00:24:23,430 de feito, ten ese bucle Do While. 589 00:24:23,430 --> 00:24:27,660 >> E ver a semana pasada para a sintaxe alí, pero el só declara N, 590 00:24:27,660 --> 00:24:29,800 e ela mostra o instrucións para o usuario. 591 00:24:29,800 --> 00:24:33,330 El chama Obter Int e, a continuación, el verifica esta condición de novo, e de novo, 592 00:24:33,330 --> 00:24:35,230 e de novo ata que o usuario coopera. 593 00:24:35,230 --> 00:24:38,000 >> Entón, agora, algunhas verificacións de sanidade. 594 00:24:38,000 --> 00:24:40,370 Para os familiarizados quizais con algunha programación, 595 00:24:40,370 --> 00:24:46,410 por que é N declarou, por que eu creo N fóra do loop Do While? 596 00:24:46,410 --> 00:24:50,370 Por que é na liña 29 e non en como 33, por exemplo. 597 00:24:50,370 --> 00:24:53,529 >> Audiencia: Porque cando declaralo la fóra, tipo 598 00:24:53,529 --> 00:24:56,688 do máis, a maior scope-- 599 00:24:56,688 --> 00:24:58,146 >> COLUMNA 1: Boa. 600 00:24:58,146 --> 00:24:59,604 >> Audiencia: -e se declarar Lo dentro do loop, [inaudível] 601 00:24:59,604 --> 00:25:00,979 porque non sabe sobre el. 602 00:25:00,979 --> 00:25:02,819 603 00:25:02,819 --> 00:25:03,610 COLUMNA 1: Exactamente. 604 00:25:03,610 --> 00:25:06,330 Se eu puidera simplify-- é unha cuestión de ámbito de aplicación. 605 00:25:06,330 --> 00:25:11,530 Eo alcance refírese ao contexto en que unha variable existe ou é utilizable. 606 00:25:11,530 --> 00:25:15,050 E a regra agradable de ouro aquí é que xeralmente cando declarar ou crear 607 00:25:15,050 --> 00:25:21,642 unha variable que só se pode usalo dentro dos máis próximos abrazando chaves. 608 00:25:21,642 --> 00:25:22,600 Entón, o que significa isto? 609 00:25:22,600 --> 00:25:26,551 Se eu, pola contra, desfacer iso e ir con algo que se sente un pouco máis simple. 610 00:25:26,551 --> 00:25:27,050 Non? 611 00:25:27,050 --> 00:25:29,360 >> Liña 32 só parece máis limpo para min agora. 612 00:25:29,360 --> 00:25:31,500 Eu estou facendo as dúas cousas á unha vez e logo atribuíndo 613 00:25:31,500 --> 00:25:33,070 a man dereita á man esquerda. 614 00:25:33,070 --> 00:25:35,180 O problema agora en base a que a definición de ámbito 615 00:25:35,180 --> 00:25:41,130 N que se pode empregar en liñas 31 e 32 dentro deste loop, 616 00:25:41,130 --> 00:25:45,100 pero onde por esa definición Pode non ser usado? 617 00:25:45,100 --> 00:25:45,660 En liña que? 618 00:25:45,660 --> 00:25:46,160 Si. 619 00:25:46,160 --> 00:25:47,490 >> Audiencia: 35. 620 00:25:47,490 --> 00:25:49,180 >> COLUMNA 1: 35. 621 00:25:49,180 --> 00:25:50,480 Definitivamente non 35. 622 00:25:50,480 --> 00:25:52,349 E tamén onde máis? 623 00:25:52,349 --> 00:25:52,890 Audiencia: 34. 624 00:25:52,890 --> 00:25:55,040 COLUMNA 1: Mesmo 34 é problemático porque é 625 00:25:55,040 --> 00:25:56,450 fóra das chaves. 626 00:25:56,450 --> 00:25:58,200 E así, de feito, imos ver o que acontece. 627 00:25:58,200 --> 00:25:58,700 Non? 628 00:25:58,700 --> 00:26:00,722 Isto pode parecer un pouco intuitiva ou talvez non, 629 00:26:00,722 --> 00:26:02,680 pero imos ver o que o compilador ten que dicir cando 630 00:26:02,680 --> 00:26:04,730 nós entramos directorio de orixe de hoxe. 631 00:26:04,730 --> 00:26:08,950 Fai unha función. 632 00:26:08,950 --> 00:26:11,231 Meu Deus. 633 00:26:11,231 --> 00:26:12,980 Ben, finalmente rematei que, por certo. 634 00:26:12,980 --> 00:26:14,030 Todo ben. 635 00:26:14,030 --> 00:26:15,510 E cal é o problema aquí? 636 00:26:15,510 --> 00:26:17,430 Moi arcano para ollar. 637 00:26:17,430 --> 00:26:19,570 Pero aquí está o que eu typed-- facer a función de un. 638 00:26:19,570 --> 00:26:21,640 Aquí está o que facer inducido, que é realmente 639 00:26:21,640 --> 00:26:23,705 usando o compilador clang con algunhas destas bandeiras 640 00:26:23,705 --> 00:26:25,080 que veremos de novo en breve. 641 00:26:25,080 --> 00:26:26,829 E, de novo, sempre mirar no primeiro erro, 642 00:26:26,829 --> 00:26:30,540 porque só podería ter unha fervenza efecto sen significado noutras liñas. 643 00:26:30,540 --> 00:26:34,410 >> Entón, o que isto significa que o problema é en función 1.c. 644 00:26:34,410 --> 00:26:36,890 É na liña 32. 645 00:26:36,890 --> 00:26:39,712 E é na columna, ou carácter, 13. 646 00:26:39,712 --> 00:26:42,670 Entón, cando o seu editor de texto que pode axudar a identificar onde o problema está. 647 00:26:42,670 --> 00:26:47,079 Entón, se eu vaia para arriba, o que é liña 32? 648 00:26:47,079 --> 00:26:49,120 Isto é de feito un agasallo que xa está en destaque 649 00:26:49,120 --> 00:26:50,607 n variable dereito aqui-- non utilizado. 650 00:26:50,607 --> 00:26:51,440 Pero non é non utilizado. 651 00:26:51,440 --> 00:26:52,320 Eu estou usando-o. 652 00:26:52,320 --> 00:26:56,110 Pero o compilador de confuso, porque ela só existe dentro deste ámbito. 653 00:26:56,110 --> 00:26:57,727 E por iso non podo usalo aquí. 654 00:26:57,727 --> 00:26:58,560 Non podo usalo aquí. 655 00:26:58,560 --> 00:27:01,320 E o compilador, polo tanto, non importa que eu estou tentando. 656 00:27:01,320 --> 00:27:03,940 Semella non utilizado no seu ámbito actual. 657 00:27:03,940 --> 00:27:08,854 >> Así, podemos ampliar o alcance facendo o que nós comezamos com-- int n. 658 00:27:08,854 --> 00:27:11,020 E aínda que iso non acontece ollar tan elegante, quizais, 659 00:27:11,020 --> 00:27:15,110 e estamos tomando unha liña extra aquí, agora é o ámbito en todas as partes. 660 00:27:15,110 --> 00:27:15,970 Entón, imos tentar de novo. 661 00:27:15,970 --> 00:27:19,040 Entón, faga unha función. 662 00:27:19,040 --> 00:27:19,610 Niza. 663 00:27:19,610 --> 00:27:23,370 E agora, se eu si executar a función un, imos darlle negativa de 10, 664 00:27:23,370 --> 00:27:27,170 1 negativo, 0, 1, e de feito funciona. 665 00:27:27,170 --> 00:27:28,610 >> Polo tanto, non hai outra solución aquí. 666 00:27:28,610 --> 00:27:29,280 Sabes que? 667 00:27:29,280 --> 00:27:31,230 E se realmente estou loitando con iso? 668 00:27:31,230 --> 00:27:33,140 Non sei onde a n se quere ir. 669 00:27:33,140 --> 00:27:33,723 Sabes que? 670 00:27:33,723 --> 00:27:39,220 Eu só vou poñer todo o forma na parte superior do meu arquivo aquí. 671 00:27:39,220 --> 00:27:42,835 O que isto fai, pensas? 672 00:27:42,835 --> 00:27:43,335 Si? 673 00:27:43,335 --> 00:27:44,251 >> Audiencia: [inaudível]. 674 00:27:44,251 --> 00:27:47,964 675 00:27:47,964 --> 00:27:48,630 COLUMNA 1: Yeah. 676 00:27:48,630 --> 00:27:50,560 Entón eu fixen iso global, por así dicir. 677 00:27:50,560 --> 00:27:54,430 Se vostede ten unha variable que está fóra todas as súas funcións que se permite, 678 00:27:54,430 --> 00:27:58,780 eo código debe compilar, e n agora vai ser accesible non só en get 679 00:27:58,780 --> 00:28:02,490 int positivo, pero tamén no que main-- é un pouco preocupante porque non hai 680 00:28:02,490 --> 00:28:04,864 xa un n no principal, de xeito máis en que en só un moment-- 681 00:28:04,864 --> 00:28:06,530 pero iso sería considerado un mal deseño. 682 00:28:06,530 --> 00:28:06,910 Todo ben. 683 00:28:06,910 --> 00:28:08,570 Se ten que recorrer a algo así como, oh, eu vou 684 00:28:08,570 --> 00:28:10,125 só engada o aquí porque o código parece compilar 685 00:28:10,125 --> 00:28:12,180 xeralmente non é a mellor práctica. 686 00:28:12,180 --> 00:28:14,590 Pola contra quere escoller o máis estreito posible alcance 687 00:28:14,590 --> 00:28:18,720 para as súas variables, o que significaría indo co noso proxecto inicial, que 688 00:28:18,720 --> 00:28:19,920 está ben aquí. 689 00:28:19,920 --> 00:28:24,400 >> Agora, como un aparte, se tiña unha forma idéntica nomeado variable aquí, 690 00:28:24,400 --> 00:28:27,750 o camiño c ía xestionar isto-- aínda que iso non pode acontecer tamén often-- 691 00:28:27,750 --> 00:28:30,150 é que este aínda é perfectamente ben aquí. 692 00:28:30,150 --> 00:28:35,000 Pero esta definición de n na liña de 22 vai borrar a unha global. 693 00:28:35,000 --> 00:28:38,190 Polo tanto, este será un traballo dentro principal, eo global 694 00:28:38,190 --> 00:28:41,670 vai realmente se aplican cando está obter int positiva Pero máis sobre iso 695 00:28:41,670 --> 00:28:43,890 outra vez, pero só Para os curiosos. 696 00:28:43,890 --> 00:28:45,970 >> Así, en breve, imos solucionar isto aquí. 697 00:28:45,970 --> 00:28:49,220 Agora imos desmembrar dúas outras pezas antes de olharmos para unha última liña de código 698 00:28:49,220 --> 00:28:50,170 neste programa. 699 00:28:50,170 --> 00:28:52,170 Obter int positivo. 700 00:28:52,170 --> 00:28:54,450 No lado da man esquerda de súa palabra é a palabra int. 701 00:28:54,450 --> 00:28:56,860 O que significa isto que pensas? 702 00:28:56,860 --> 00:28:58,900 Ata agora vimos principalmente baleiro. 703 00:28:58,900 --> 00:28:59,400 Si? 704 00:28:59,400 --> 00:29:01,810 >> Audiencia: É o tipo de variable que está preguntando sobre. 705 00:29:01,810 --> 00:29:04,550 >> COLUMNA 1: Si, é o tipo de, déixeme non dicir variable, pero o tipo de valor 706 00:29:04,550 --> 00:29:05,990 que eu estou pedindo para volver. 707 00:29:05,990 --> 00:29:08,070 E, de feito, iso é intuitivo aquí, eu espero. 708 00:29:08,070 --> 00:29:08,200 Non? 709 00:29:08,200 --> 00:29:10,250 Se desexa obter un int positivo, o que é vostede 710 00:29:10,250 --> 00:29:12,920 quere o function-- como o noso voluntarios da semana pasada 711 00:29:12,920 --> 00:29:15,720 para entregarlle un anaco de volta de papel cun int sobre el? 712 00:29:15,720 --> 00:29:19,190 E así temos indicado que o chamado tipo de retorno desa función 713 00:29:19,190 --> 00:29:20,450 é obter int positivo. 714 00:29:20,450 --> 00:29:22,990 Se non queres que voltar nada, di baleiro. 715 00:29:22,990 --> 00:29:25,270 Se queres que volte unha corda, di cadea. 716 00:29:25,270 --> 00:29:27,310 Se queres que volte unha boia, di float. 717 00:29:27,310 --> 00:29:30,440 Pero o único que se aplica aquí loxicamente, porque eu estou usando get int, 718 00:29:30,440 --> 00:29:34,130 aínda que eu estou restrinxíndose a a valores positivos, é voltar un int. 719 00:29:34,130 --> 00:29:38,380 >> Así, ao contrario, o que significa que hai un baleiro entre parénteses? 720 00:29:38,380 --> 00:29:40,130 O que fan os parénteses xeralmente definen? 721 00:29:40,130 --> 00:29:40,588 Si? 722 00:29:40,588 --> 00:29:42,880 >> Audiencia: Significa que a función de en realidade non conseguilo. 723 00:29:42,880 --> 00:29:44,650 >> COLUMNA 1: significa que a función de non realmente recibir o que? 724 00:29:44,650 --> 00:29:45,430 >> Audiencia: Unha entrada. 725 00:29:45,430 --> 00:29:46,763 >> COLUMNA 1: Unha entrada, que sexa. 726 00:29:46,763 --> 00:29:49,870 Entón, en realidade, se paréntese aquí se especifica baleiro, 727 00:29:49,870 --> 00:29:51,650 iso só quere dicir que eu non quero ningún entrada. 728 00:29:51,650 --> 00:29:53,269 Vou tratar co problema só. 729 00:29:53,269 --> 00:29:55,810 E, de feito, non ten que obter int dicir nada de positivo. 730 00:29:55,810 --> 00:29:59,630 Acaba de dicir, conseguir int positivo, e que función pode saír e facer a súa cousa. 731 00:29:59,630 --> 00:30:02,970 >> Pero houbo un pequeno truco que eu teño foi xogar aquí ese tempo 732 00:30:02,970 --> 00:30:04,970 para garantir que este código compila. 733 00:30:04,970 --> 00:30:09,620 Teña en conta que int-- obter positivo int void-- é na liña 27. 734 00:30:09,620 --> 00:30:14,530 Pero por algún motivo aparentemente estraño é tamén aquí enriba na liña 16. 735 00:30:14,530 --> 00:30:18,530 E só para unha boa medida Vou repetir este polo que é perfectamente idénticos. 736 00:30:18,530 --> 00:30:21,640 E eu dixen prototipo con un pequeno comentario dunha liña. 737 00:30:21,640 --> 00:30:28,850 Qué acontece se eu eliminar que, E Agora executa novo facer a función 1, escriba. 738 00:30:28,850 --> 00:30:29,350 Whoops. 739 00:30:29,350 --> 00:30:32,527 740 00:30:32,527 --> 00:30:33,110 Espera un minuto. 741 00:30:33,110 --> 00:30:34,764 Onde está o meu guía? 742 00:30:34,764 --> 00:30:35,263 Hein? 743 00:30:35,263 --> 00:30:37,969 744 00:30:37,969 --> 00:30:39,620 Espera. 745 00:30:39,620 --> 00:30:41,570 Fai unha función. 746 00:30:41,570 --> 00:30:42,150 Alí imos nós. 747 00:30:42,150 --> 00:30:42,310 Aceptar. 748 00:30:42,310 --> 00:30:43,400 Non había salva-lo correctamente. 749 00:30:43,400 --> 00:30:45,220 Entón, eu creo que hai un pouco erro aquí onde eu non son 750 00:30:45,220 --> 00:30:46,636 vendo o nome da guía no momento. 751 00:30:46,636 --> 00:30:47,940 Entón, o que está pasando aquí? 752 00:30:47,940 --> 00:30:52,210 Declaración implícita de función obter int positivo non é válida no C99. 753 00:30:52,210 --> 00:30:53,940 Entón, confundindo novo. 754 00:30:53,940 --> 00:30:55,200 Entón, cal é este indicativo? 755 00:30:55,200 --> 00:30:57,287 Ben, resulta que C é moi estúpido. 756 00:30:57,287 --> 00:30:59,912 Ben, é a programación linguaxe, ou mellor, o compilador é. 757 00:30:59,912 --> 00:31:02,940 El só sabe o que ten ensinou-lo, e iso só é 758 00:31:02,940 --> 00:31:05,640 saberá algo se ensinou iso antes. 759 00:31:05,640 --> 00:31:07,960 Noutras palabras, en principal no momento, eu son 760 00:31:07,960 --> 00:31:10,900 intentando chamar a unha función chamado obter int positivo. 761 00:31:10,900 --> 00:31:14,120 Pero o compilador non vai a notar que obter int positivo 762 00:31:14,120 --> 00:31:16,500 existe ata a liña 26. 763 00:31:16,500 --> 00:31:21,360 E así que o compilador fai é só erros, logo que queda para a liña 17, 764 00:31:21,360 --> 00:31:23,700 dicindo declaración implícita de obter int positivo, o que 765 00:31:23,700 --> 00:31:27,740 é só un xeito elegante de dicir, eu non sei sabe o que é estar int positivo aínda. 766 00:31:27,740 --> 00:31:31,240 >> Outras linguaxes como Java e Python e Ruby pode mirar para adiante. 767 00:31:31,240 --> 00:31:32,240 C non. 768 00:31:32,240 --> 00:31:35,110 E así a nosa forma de resolver esta é unha de dous xeitos. 769 00:31:35,110 --> 00:31:40,160 Calquera dos dous, o problema é que comeza int positivo non foi visto antes, 770 00:31:40,160 --> 00:31:42,150 Ben, deixe-me só movelo ata o cumio. 771 00:31:42,150 --> 00:31:43,650 Iso sería corrixir este problema. 772 00:31:43,650 --> 00:31:46,790 Pero, xeralmente, é considerado mellor técnica 773 00:31:46,790 --> 00:31:50,220 para poñer a súa principal función no moi superior, de xeito que un ser humano de ler o seu código 774 00:31:50,220 --> 00:31:52,710 sabe o que o programa fai, porque principal non está enterrado todo 775 00:31:52,710 --> 00:31:53,960 o xeito no fondo ou no medio. 776 00:31:53,960 --> 00:31:55,130 É na parte superior. 777 00:31:55,130 --> 00:31:56,410 De xeito que non se sente ideal. 778 00:31:56,410 --> 00:31:58,326 E realmente pode comezar en situacións onde 779 00:31:58,326 --> 00:32:00,820 as chamadas funcións outro, o que chama outro, 780 00:32:00,820 --> 00:32:04,630 pode poñerse en un problema onde non pode ir sobre o outro, de forma lóxica. 781 00:32:04,630 --> 00:32:05,920 Non é só posible. 782 00:32:05,920 --> 00:32:09,290 >> E así o camiño para o traballo de evitar isto é só tomar 783 00:32:09,290 --> 00:32:13,200 sinatura da función, por así speak-- a primeira liña onde é declared-- 784 00:32:13,200 --> 00:32:16,850 e só copiar, pegalo no arriba, pero non con braces-- rizado 785 00:32:16,850 --> 00:32:17,980 só cun punto e coma. 786 00:32:17,980 --> 00:32:20,840 É como unha pequena Consello do que está por vir. 787 00:32:20,840 --> 00:32:26,630 E, de feito, todo este tempo cando vin cousas como io.h estándar 788 00:32:26,630 --> 00:32:33,040 e cs50.h, semellantemente, nos dot h arquivos están alí outros prototipos. 789 00:32:33,040 --> 00:32:35,250 E veremos que en pouco tempo. 790 00:32:35,250 --> 00:32:39,340 >> Así, en breve, cando ten un programa nun ficheiro con varias funcións 791 00:32:39,340 --> 00:32:42,300 ademais de principal, case sempre quere declaralo los 792 00:32:42,300 --> 00:32:45,360 só a través do seu primeiro liña, seguido por un punto e coma, 793 00:32:45,360 --> 00:32:48,410 na parte superior do ficheiro. 794 00:32:48,410 --> 00:32:50,460 Iso foi unha morea de unha vez. 795 00:32:50,460 --> 00:32:53,130 Algunha pregunta? 796 00:32:53,130 --> 00:32:53,920 Algunha pregunta? 797 00:32:53,920 --> 00:32:54,530 Todo ben. 798 00:32:54,530 --> 00:32:59,760 >> Entón, imos seguir adiante, a continuación, para algo así como tose. 799 00:32:59,760 --> 00:33:00,260 Oh. 800 00:33:00,260 --> 00:33:00,570 Que apropiado. 801 00:33:00,570 --> 00:33:01,220 Todo ben. 802 00:33:01,220 --> 00:33:02,260 Tose. 803 00:33:02,260 --> 00:33:05,080 Entón aquí é un c implantación dun programa 804 00:33:05,080 --> 00:33:07,560 que fixemos o outro día en Arranhão que moi simplemente só 805 00:33:07,560 --> 00:33:08,691 di tose, tose, tose. 806 00:33:08,691 --> 00:33:09,190 Todo ben. 807 00:33:09,190 --> 00:33:11,136 E alguén dixo hai uns días que hai 808 00:33:11,136 --> 00:33:12,760 unha forma de limpar este código xa. 809 00:33:12,760 --> 00:33:12,880 Todo ben? 810 00:33:12,880 --> 00:33:15,440 Así que está copiando e colando probablemente mal deseño. 811 00:33:15,440 --> 00:33:18,725 Polo menos unha vez chegamos a catro ou cinco ou 20 toses, se sente mal práctica. 812 00:33:18,725 --> 00:33:19,850 Nós só manter copia, colando. 813 00:33:19,850 --> 00:33:22,213 Cal é a solución obvia a limpeza deste programa anterior? 814 00:33:22,213 --> 00:33:23,120 >> Audiencia: Lazo. 815 00:33:23,120 --> 00:33:23,350 >> COLUMNA 1: Yeah. 816 00:33:23,350 --> 00:33:24,070 Polo tanto, usa un loop. 817 00:33:24,070 --> 00:33:27,697 E podemos utilizar un lazo para un tempo ciclo, calquera número de enfoques. 818 00:33:27,697 --> 00:33:29,780 E, de feito, é o que o que facemos na versión un aquí. 819 00:33:29,780 --> 00:33:32,250 Xa en canto reescrito na versión dun cough.c 820 00:33:32,250 --> 00:33:35,170 ser só tos no prazo dun ciclo-a. 821 00:33:35,170 --> 00:33:38,240 Todo ben, pero hai unha oportunidade agora de tipo de inicio 822 00:33:38,240 --> 00:33:41,630 para proxectar este un pouco máis como a lección que ensinou un momento atrás, 823 00:33:41,630 --> 00:33:46,190 que é isto-- supoñer que eu quería para crear unha función chamada tose, 824 00:33:46,190 --> 00:33:49,730 imos considerar por un momento o que vai mirar como. 825 00:33:49,730 --> 00:33:51,900 Entón, se eu queira algo a tossir, eu só teño 826 00:33:51,900 --> 00:33:53,800 usar impresión f dentro da función. 827 00:33:53,800 --> 00:33:55,030 E, de feito eu son. 828 00:33:55,030 --> 00:33:56,990 E, de feito, todo isto hora, en calquera tempo que está 829 00:33:56,990 --> 00:33:59,000 imprimindo a algo a pantalla, un programador 830 00:33:59,000 --> 00:34:00,610 chamaría tanto un efecto colateral. 831 00:34:00,610 --> 00:34:02,990 Non é entregándose me volta a alguén un valor. 832 00:34:02,990 --> 00:34:06,170 Me está tomando algunha acción que se pode visualmente obvia. 833 00:34:06,170 --> 00:34:10,672 Pero esa tose función, el volver calquera cousa con base na súa primeira liña? 834 00:34:10,672 --> 00:34:12,880 Non, porque o seu tipo de retorno é nula, o que significa só 835 00:34:12,880 --> 00:34:14,250 non está me dando nada a cambio. 836 00:34:14,250 --> 00:34:16,791 Podería estar facendo algo visualmente, pero non me entregando 837 00:34:16,791 --> 00:34:18,639 copia de un anaco de papel como a semana pasada. 838 00:34:18,639 --> 00:34:21,310 >> Será que ela ten de calquera entrada? 839 00:34:21,310 --> 00:34:21,810 Non. 840 00:34:21,810 --> 00:34:23,134 E por iso é baleiro aquí tamén. 841 00:34:23,134 --> 00:34:25,600 Polo tanto, esta tamén é unha especie de over-enxeñaría este problema. 842 00:34:25,600 --> 00:34:26,099 Non? 843 00:34:26,099 --> 00:34:28,820 Eu fixen o programa máis complexas, máis liñas de código, 844 00:34:28,820 --> 00:34:31,889 Eu non fixen iso calquera esta máis funcional, pero 845 00:34:31,889 --> 00:34:34,210 sería un trampolín, quizais, a unha máis ampla 846 00:34:34,210 --> 00:34:36,830 contexto co código de máis complicado. 847 00:34:36,830 --> 00:34:38,150 Pero o que sobre iso? 848 00:34:38,150 --> 00:34:42,050 O que eu done-- só mirando para este sen ollar para o comentario 849 00:34:42,050 --> 00:34:46,076 na parte superior da file-- o que ten Eu fundamentalmente feito aquí coa miña tose 850 00:34:46,076 --> 00:34:47,409 implantación que é diferente? 851 00:34:47,409 --> 00:34:48,327 Si, na parte de atrás? 852 00:34:48,327 --> 00:34:51,384 >> Audiencia: Facelo para que poida teñen un carácter desactivar. 853 00:34:51,384 --> 00:34:52,050 COLUMNA 1: Yeah. 854 00:34:52,050 --> 00:34:53,270 Entón, este se sente tipo de Niza. 855 00:34:53,270 --> 00:34:53,389 Non? 856 00:34:53,389 --> 00:34:56,600 É como a adición de un recurso para a súa ou a súa función de programa, neste caso. 857 00:34:56,600 --> 00:34:57,830 Aínda non retorna nada. 858 00:34:57,830 --> 00:35:00,538 Pode ter un efecto colateral visual, porque está chamando de impresión f. 859 00:35:00,538 --> 00:35:02,800 Pero agora eu teño parametrizada a función, a cal 860 00:35:02,800 --> 00:35:06,470 significa que teña indicado tomadas entrada de tipo int e chamalo n, 861 00:35:06,470 --> 00:35:08,510 pero eu podería chamalo de calquera cousa que quero. 862 00:35:08,510 --> 00:35:11,550 De feito, podería ser só veces para ser aínda máis explícito. 863 00:35:11,550 --> 00:35:13,310 E entón eu só podería cambiar isto aquí. 864 00:35:13,310 --> 00:35:16,450 Pero o punto é que esta é a forma na que eu crear unha función que recibe de entrada. 865 00:35:16,450 --> 00:35:19,530 E se se lembra lanzando quizais por medio en liña nun 866 00:35:19,530 --> 00:35:23,000 dos walk-throughs, o cuarto e último exemplo tose, 867 00:35:23,000 --> 00:35:27,150 vai notar aquí que eu xeneralizada meu código tipo further-- de abstraída 868 00:35:27,150 --> 00:35:27,690 la aínda máis. 869 00:35:27,690 --> 00:35:31,390 Como tose e espirro, ambos son sobre como dicir algo ou facer 870 00:35:31,390 --> 00:35:32,330 algún tipo de son. 871 00:35:32,330 --> 00:35:34,725 Gardar o sería correspondente bloque de borrador. 872 00:35:34,725 --> 00:35:37,350 E así que eu fixen nesta versión, que podemos só ollar para, 873 00:35:37,350 --> 00:35:43,170 é a tose é só como dicir, [cough] tos, e, con todo, é espirros 874 00:35:43,170 --> 00:35:44,570 como dicir, [Achoo]. 875 00:35:44,570 --> 00:35:46,900 E entón eu xeneralizada a posta en marcha dos 876 00:35:46,900 --> 00:35:48,970 por agora a aplicar esta función xenérica, 877 00:35:48,970 --> 00:35:51,490 dicir, o que é interesante para fins de hoxe 878 00:35:51,490 --> 00:35:54,300 só porque aínda non ten un tipo de retorno. 879 00:35:54,300 --> 00:35:56,398 Pero cantas entradas é que ten? 880 00:35:56,398 --> 00:35:56,981 Audiencia: Dous. 881 00:35:56,981 --> 00:35:57,430 COLUMNA 1: Two. 882 00:35:57,430 --> 00:35:59,263 E por iso, se quere tomar en dous argumentos, 883 00:35:59,263 --> 00:36:00,710 só sepáreos cunha coma. 884 00:36:00,710 --> 00:36:03,110 E se queres, a continuación, chamar esa función, 885 00:36:03,110 --> 00:36:05,800 entender que só chamar digamos, multimedia, pecha comiñas, 886 00:36:05,800 --> 00:36:09,090 para o primeiro argumento, común n, para o segundo argumento. 887 00:36:09,090 --> 00:36:12,130 Entón, de novo, só temos agora o bloques de construción para que poidamos realmente 888 00:36:12,130 --> 00:36:15,686 aplicar algunhas das nosas propias funcións. 889 00:36:15,686 --> 00:36:16,570 Todo ben. 890 00:36:16,570 --> 00:36:19,690 Calquera preguntas sobre estes? 891 00:36:19,690 --> 00:36:22,400 >> Entón agora imos pelar unha capa en caso afirmativo. 892 00:36:22,400 --> 00:36:24,840 E o obxectivo, en definitiva, é conxunto de problemas da semana 893 00:36:24,840 --> 00:36:27,710 será en cryptogrophy-- técnica de codificación da información. 894 00:36:27,710 --> 00:36:30,640 E especialmente, a información terá que cifrar ou descifrar 895 00:36:30,640 --> 00:36:31,605 será texto. 896 00:36:31,605 --> 00:36:33,980 E así por este tipo de invitacións a cuestión hoxe, como ben, 897 00:36:33,980 --> 00:36:38,480 o que está a suceder debaixo do capó con texto ASCII ademais da semana cero, 898 00:36:38,480 --> 00:36:40,730 E como podemos realmente comezar a manipulala lo? 899 00:36:40,730 --> 00:36:43,070 Entón aquí é o nome do Zamyla. 900 00:36:43,070 --> 00:36:47,380 E en texto, que pode ser introducido en como a función secuencia de get. 901 00:36:47,380 --> 00:36:52,540 E a partir de agora, cando ve un cadea como isto-- Z-A-M-Y-L-A-- 902 00:36:52,540 --> 00:36:56,550 comezar a pensar niso como cada destes personaxes está nunha caixa de súa 903 00:36:56,550 --> 00:36:57,050 propia. 904 00:36:57,050 --> 00:36:59,460 E, de feito, unha semana ou así é tempo, cada unha destas caixas 905 00:36:59,460 --> 00:37:04,280 vai representar moi especialmente un bloque de memory-- unha mordida de memoria. 906 00:37:04,280 --> 00:37:07,050 Así, cada unha desas cartas, en definitiva, representará 8 bits. 907 00:37:07,050 --> 00:37:10,560 E nós imos realmente ver o que está pasando por baixo do capó no meu ordenador. 908 00:37:10,560 --> 00:37:13,440 >> Pero para non basta só de ollar para Zamyla 909 00:37:13,440 --> 00:37:17,520 a través desta lente, en que cada un de esas cartas é na súa propia caixa. 910 00:37:17,520 --> 00:37:22,697 E ben o suficiente en C que pudermos acceso a cada unha destas caixas directamente. 911 00:37:22,697 --> 00:37:25,530 Entón, se quere obter a primeira letra do seu nome, super doado no C. 912 00:37:25,530 --> 00:37:28,410 Se desexa obter a última carta, super sinxelo, así 913 00:37:28,410 --> 00:37:30,240 cun novo anaco de sintaxe. 914 00:37:30,240 --> 00:37:36,250 >> Entón, eu estou indo a ir adiante para CS50 IDE e abrir a secuencia de cero punto C. 915 00:37:36,250 --> 00:37:40,270 E aquí neste exemplo, existen un par de cousas novas a suceder. 916 00:37:40,270 --> 00:37:44,360 Entón, primeiro na liña 19, temos visto esa secuencia get antes--. 917 00:37:44,360 --> 00:37:49,840 Entón, así como unha comprobación de sanidade rápida, se alguén podería ofrecer-se verbalmente 918 00:37:49,840 --> 00:37:52,662 explicación dun leigo de o que está a suceder na liña 19. 919 00:37:52,662 --> 00:37:55,370 Como só traducir iso en Inglés que un compañeiro de cuarto en non CS50 920 00:37:55,370 --> 00:37:56,416 pode entender. 921 00:37:56,416 --> 00:37:56,916 Si. 922 00:37:56,916 --> 00:37:59,749 >> Audiencia: Teña a entrada do usuario un corda e almacena-lo nunha variable s. 923 00:37:59,749 --> 00:38:01,934 924 00:38:01,934 --> 00:38:02,600 COLUMNA 1: Boa. 925 00:38:02,600 --> 00:38:05,579 Ter a entrada do usuario unha cadea e almacena-lo nunha variable s. 926 00:38:05,579 --> 00:38:06,120 Isto é óptimo. 927 00:38:06,120 --> 00:38:08,090 Así, na parte dereita banda, que chamamos cadea get. 928 00:38:08,090 --> 00:38:10,340 Que retorna un valor que non se atribuíu 929 00:38:10,340 --> 00:38:14,230 da dereita á esquerda man- lado nunha variable chamada s que é 930 00:38:14,230 --> 00:38:15,950 deseñado para almacenar unha cadea. 931 00:38:15,950 --> 00:38:16,800 Exactamente. 932 00:38:16,800 --> 00:38:20,000 >> Entón, agora a liña de 22, por o comentario na liña 21, 933 00:38:20,000 --> 00:38:22,780 obviamente que imprime cadea un carácter por liña. 934 00:38:22,780 --> 00:38:23,740 Pero como? 935 00:38:23,740 --> 00:38:27,040 Entón, primeiro de todo, eu arrincar a 0. 936 00:38:27,040 --> 00:38:31,061 E entón como é que imos chegar a a fin do nome de Zamyla? 937 00:38:31,061 --> 00:38:32,810 Ben, a finais de O nome de Zamyla, eu podería 938 00:38:32,810 --> 00:38:38,151 escriba manualmente a última carácter o seu nome dalgún modo, é o número do mesmo. 939 00:38:38,151 --> 00:38:38,650 Non? 940 00:38:38,650 --> 00:38:43,500 Se volvemos aqui-- Z-A-M-L-- Y-L-A-- para que eu puidese escribir. 941 00:38:43,500 --> 00:38:47,340 Cal é o índice de A última carta de Zamyla? 942 00:38:47,340 --> 00:38:52,517 Se esta é a 0-- falando como un programmer-- 0, 1, 2, 3, 4, 5, 943 00:38:52,517 --> 00:38:56,570 Eu heard-- así, de feito, a última letra en nome de Zamyla é o sexto, 944 00:38:56,570 --> 00:38:58,890 pero se contamos desde 0, que será o número 5. 945 00:38:58,890 --> 00:39:01,320 Polo tanto, manter isto presente aquí. 946 00:39:01,320 --> 00:39:04,929 >> Acontece aí é unha función en C chamada strlen, e volta o día 947 00:39:04,929 --> 00:39:06,720 e até hoxe aínda, unha morea de programadores 948 00:39:06,720 --> 00:39:09,524 decide sincronizar nomes para a súa funcións que soan como as palabras 949 00:39:09,524 --> 00:39:10,440 eles están tentando dicir. 950 00:39:10,440 --> 00:39:12,590 Entón strlen é lonxitude da corda. 951 00:39:12,590 --> 00:39:18,168 E entón o que faría lonxitude da corda de S volver cando Zamyla é a entrada? 952 00:39:18,168 --> 00:39:19,569 >> Audiencia: Five. 953 00:39:19,569 --> 00:39:22,090 >> COLUMNA 1: Z-A-H-Y-G. Six. 954 00:39:22,090 --> 00:39:22,590 Non? 955 00:39:22,590 --> 00:39:23,940 Cal é a lonxitude do nome de Zamyla? 956 00:39:23,940 --> 00:39:24,440 Non? 957 00:39:24,440 --> 00:39:26,240 E, así, en realidade, seis letras. 958 00:39:26,240 --> 00:39:26,740 Non? 959 00:39:26,740 --> 00:39:28,940 E entón o que é que isto supón para o noso loop? 960 00:39:28,940 --> 00:39:32,130 Estamos indo para ir de 0 ata seis, que 961 00:39:32,130 --> 00:39:33,650 vai dar cinco iteracións. 962 00:39:33,650 --> 00:39:34,890 Que facemos en cada iteración? 963 00:39:34,890 --> 00:39:36,870 Ben, por cento C, alguén adiviñou o outro día, 964 00:39:36,870 --> 00:39:38,710 significa un espazo reservado para o que? 965 00:39:38,710 --> 00:39:39,335 >> Audiencia: Char. 966 00:39:39,335 --> 00:39:40,293 COLUMNA 1: Só un char. 967 00:39:40,293 --> 00:39:42,877 Así, un único character-- non varios personaxes, como unha cadea. 968 00:39:42,877 --> 00:39:45,251 E entón aquí está a nova liña que temos que imprimir. 969 00:39:45,251 --> 00:39:46,580 E entón aquí está a nova sintaxe. 970 00:39:46,580 --> 00:39:51,130 Se quere imprimir o i-th carácter na secuencia S, por así dicir, 971 00:39:51,130 --> 00:39:54,060 pode simplemente dicir o nome da cadea de S, 972 00:39:54,060 --> 00:39:58,230 e, a continuación, abrir paréntese, e despois pechou paréntese, cun i 973 00:39:58,230 --> 00:39:58,780 o medio. 974 00:39:58,780 --> 00:40:01,430 E é tipo de Niza, en que que tipo de parece un cadrado 975 00:40:01,430 --> 00:40:06,210 así como as prazas en que Zamyla de caracteres existir en que imaxe alí. 976 00:40:06,210 --> 00:40:09,970 >> Entón, se eu realmente realizar este Agora, imos ver o que acontece. 977 00:40:09,970 --> 00:40:15,190 Fai corda 0 dot barra secuencia 0, e entón eu son 978 00:40:15,190 --> 00:40:16,720 vai escribir o nome de Zamyla. 979 00:40:16,720 --> 00:40:19,428 Non hai ningunha liña, porque eu non fixen utilizar impresión f, pero iso é bo. 980 00:40:19,428 --> 00:40:20,660 Só sei que facer. 981 00:40:20,660 --> 00:40:23,240 E, de feito, el imprime O nome de Zamyla, un por liña. 982 00:40:23,240 --> 00:40:25,760 >> Agora imos ser un pouco imprudente. 983 00:40:25,760 --> 00:40:28,461 Supoña que eu non sabía sobre strlen e eu penso, 984 00:40:28,461 --> 00:40:31,460 todo ben, ninguén vai ter un nomear como maior que 50 caracteres. 985 00:40:31,460 --> 00:40:36,360 Imos adiante e recompilar este e executa-lo de novo, e logo escriba Zamyla 986 00:40:36,360 --> 00:40:37,160 de novo. 987 00:40:37,160 --> 00:40:40,850 Loxicamente, o que é a programa vai imprimir? 988 00:40:40,850 --> 00:40:49,545 Z-A-H-Y-L-A, a continuación, como 45 descoñecidos bytes de memoria. 989 00:40:49,545 --> 00:40:51,670 E, de feito, imos volver a esta idea de memoria. 990 00:40:51,670 --> 00:40:54,180 Pero loxicamente, se O nome de Zamyla é este longo, 991 00:40:54,180 --> 00:40:56,450 segundo a imaxe aquí, o que estamos dicindo 992 00:40:56,450 --> 00:40:59,810 é manter a impresión, continuar a imprimir, manteña impresión, continuar a imprimir, manteña a impresión, 993 00:40:59,810 --> 00:41:03,781 todo o camiño para o carácter 50, que quen sabe o que vai ocorrer. 994 00:41:03,781 --> 00:41:05,030 Entón imos realmente dar un ollo. 995 00:41:05,030 --> 00:41:06,720 Imos escribir Zamyla. 996 00:41:06,720 --> 00:41:07,250 Interesante. 997 00:41:07,250 --> 00:41:08,190 Tivemos moita sorte. 998 00:41:08,190 --> 00:41:09,700 Só unha morea de espazo en branco. 999 00:41:09,700 --> 00:41:09,930 Oh. 1000 00:41:09,930 --> 00:41:11,120 Hai un carácter descolados. 1001 00:41:11,120 --> 00:41:14,577 Parece como unha especie de pregunta estraña marcar alí, pero non é o nome do Zamyla. 1002 00:41:14,577 --> 00:41:15,660 Imos estar moi boa idea. 1003 00:41:15,660 --> 00:41:20,000 Como sobre nós imprimir 500 bloques para o descoñecido? 1004 00:41:20,000 --> 00:41:24,380 Imos adiante e facelo ben e, a continuación, re-run. 1005 00:41:24,380 --> 00:41:27,980 E a pantalla completa, porque imos necesitamos ver máis espazo. 1006 00:41:27,980 --> 00:41:30,460 Zamyla. 1007 00:41:30,460 --> 00:41:31,830 Tivo sorte de novo. 1008 00:41:31,830 --> 00:41:33,070 >> Ousamos máis imprudente? 1009 00:41:33,070 --> 00:41:36,070 Imos máis imprudente. 1010 00:41:36,070 --> 00:41:39,350 50.000 caracteres. 1011 00:41:39,350 --> 00:41:41,390 Este non é o máis certamente unha boa idea. 1012 00:41:41,390 --> 00:41:41,890 Todo ben. 1013 00:41:41,890 --> 00:41:42,990 Fai corda 0. 1014 00:41:42,990 --> 00:41:44,720 Esta será a nosa última demostración. 1015 00:41:44,720 --> 00:41:47,261 Zamyla. 1016 00:41:47,261 --> 00:41:48,632 Ugh. 1017 00:41:48,632 --> 00:41:50,010 Ugh. 1018 00:41:50,010 --> 00:41:50,680 Aceptar. 1019 00:41:50,680 --> 00:41:54,407 Así, a miña memoria é realmente baleiro agora, que en realidade é tipo de cómodo. 1020 00:41:54,407 --> 00:41:55,990 O que eu estou tratando de obter a-- todo ben. 1021 00:41:55,990 --> 00:41:57,614 E agora eu estou indo só para obter boa idea. 1022 00:41:57,614 --> 00:41:58,570 500.000. 1023 00:41:58,570 --> 00:42:03,860 Make-- de pantalla completa de deixalo. 1024 00:42:03,860 --> 00:42:04,990 Intro. 1025 00:42:04,990 --> 00:42:05,490 Zamyla. 1026 00:42:05,490 --> 00:42:12,050 1027 00:42:12,050 --> 00:42:13,390 Alí imos nós. 1028 00:42:13,390 --> 00:42:15,610 Eu non teño ningunha idea do que iso é, pero soa mal. 1029 00:42:15,610 --> 00:42:16,110 Todo ben. 1030 00:42:16,110 --> 00:42:20,322 E, de feito, en breve, se está entre os poucos afortunados en horario de oficina 1031 00:42:20,322 --> 00:42:22,780 e no conxunto de problemas un, pode moi ben atopar ese. 1032 00:42:22,780 --> 00:42:25,490 Fallo de segmentación realmente fai ten un significado ben definido. 1033 00:42:25,490 --> 00:42:28,450 Isto significa algún tipo de erro relativa a un segmento de memoria. 1034 00:42:28,450 --> 00:42:30,490 E, en termos leigos, isto significa que nós tocamos 1035 00:42:30,490 --> 00:42:34,780 memory-- usan RAM no meu ordenador que eu non debería ter acceso a. 1036 00:42:34,780 --> 00:42:37,050 E iso é o que é á vez poderoso e tamén perigoso 1037 00:42:37,050 --> 00:42:39,910 sobre C é que realmente teñen acceso sen restricións 1038 00:42:39,910 --> 00:42:45,910 para o conxunto da memoria do seu programa ou bytes de memoria RAM ou, máis especificamente. 1039 00:42:45,910 --> 00:42:49,510 >> Así, aínda que o nome de Zamyla é de só seis caracteres, 1040 00:42:49,510 --> 00:42:51,450 Eu aínda podo ir a calquera lugar na memoria que quero. 1041 00:42:51,450 --> 00:42:53,491 E como un aparte, se ten Xa leu algún artigo 1042 00:42:53,491 --> 00:42:55,610 ao longo dos anos sobre algúns servidor ou algún programa 1043 00:42:55,610 --> 00:42:58,654 estar rachado ou hackeado que é aproveitado algo 1044 00:42:58,654 --> 00:43:00,820 chamado un estourido de buffer exploit que nós imos realmente 1045 00:43:00,820 --> 00:43:04,970 falar en poucas semanas, que é xeralmente referíndose a algunha maneira enganar 1046 00:43:04,970 --> 00:43:09,090 un ordenador para ir ben alén das fronteiras da memoria 1047 00:43:09,090 --> 00:43:11,410 que debe ter, e atopar algo suculento 1048 00:43:11,410 --> 00:43:13,530 en que un memory-- contrasinal, se cadra, un xeito 1049 00:43:13,530 --> 00:43:16,990 de evitar algúns número de serie comprobar, ou só xeralmente capaz 1050 00:43:16,990 --> 00:43:20,360 para enganar o ordenador está executando código que non foi desexado. 1051 00:43:20,360 --> 00:43:22,360 Pero imos volver realidade para só un momento 1052 00:43:22,360 --> 00:43:24,550 onde este programa foi aplicado con strlen, 1053 00:43:24,550 --> 00:43:26,110 e introducir unha cousa aquí enriba. 1054 00:43:26,110 --> 00:43:30,030 O que hai de novo entre estas tres liñas principais? 1055 00:43:30,030 --> 00:43:30,910 >> Entón cadea dot h. 1056 00:43:30,910 --> 00:43:35,490 Acontece aí é esa biblioteca chamada Cadea Dot H, ou a Biblioteca cadea, 1057 00:43:35,490 --> 00:43:38,490 cuxo arquivo de cabeceira, por así dicir, é cadea dot h que me dá 1058 00:43:38,490 --> 00:43:40,860 acceso a esta función strlen. 1059 00:43:40,860 --> 00:43:43,841 Se eu omitir que o compilador é vai berrar comigo de algunha maneira. 1060 00:43:43,841 --> 00:43:44,590 Pero vostede sabe o que? 1061 00:43:44,590 --> 00:43:46,090 Agora imos realmente diferenciada. 1062 00:43:46,090 --> 00:43:50,820 Na liña 22, hai algo tipo de inefficient-- mal deseñado, 1063 00:43:50,820 --> 00:43:53,990 arguably-- sobre esta liña de código. 1064 00:43:53,990 --> 00:43:56,280 Pense de novo como for-loop son aplicadas 1065 00:43:56,280 --> 00:44:00,140 e cales son os pasos ocorrer de novo e e de novo novamente-- o arranque, 1066 00:44:00,140 --> 00:44:04,110 a condición de que o código é executada, entón o incremento 1067 00:44:04,110 --> 00:44:07,880 ou a modificación, a continuación, a condición, a continuación, o código, a continuación, o cambio, entón 1068 00:44:07,880 --> 00:44:11,280 a condición, a continuación, o código, a continuación, a cambio, e así por diante. 1069 00:44:11,280 --> 00:44:15,320 Entón, o que pode ser un pouco preocupante ou mal feito aquí? 1070 00:44:15,320 --> 00:44:16,387 Si, no azul. 1071 00:44:16,387 --> 00:44:18,220 Audiencia: strlen é chamado moitas, moitas veces. 1072 00:44:18,220 --> 00:44:20,654 1073 00:44:20,654 --> 00:44:21,320 COLUMNA 1: Yeah. 1074 00:44:21,320 --> 00:44:23,700 Así, chámase strlen moitas veces, pero o que é 1075 00:44:23,700 --> 00:44:27,113 a lonxitude do nome de Zamyla o primeira vez que o bucle é executado? 1076 00:44:27,113 --> 00:44:27,860 >> Audiencia: Six. 1077 00:44:27,860 --> 00:44:28,110 >> COLUMNA 1: Six. 1078 00:44:28,110 --> 00:44:30,976 Ben, cal é a lonxitude do seu nome a segunda vez que se executa o código? 1079 00:44:30,976 --> 00:44:31,432 >> Audiencia: Six. 1080 00:44:31,432 --> 00:44:31,890 >> COLUMNA 1: Todo ben. 1081 00:44:31,890 --> 00:44:32,720 Aínda é seis. 1082 00:44:32,720 --> 00:44:33,220 Non? 1083 00:44:33,220 --> 00:44:35,260 O nome de Zarla non ten cambiado, aínda que eu estou buscando 1084 00:44:35,260 --> 00:44:38,240 en só parte das letras no seu nome. 1085 00:44:38,240 --> 00:44:41,349 E así o feito de que eu son efectivamente facendo esta pregunta, o que é 1086 00:44:41,349 --> 00:44:44,640 a lonxitude de Zamyla, cal é a lonxitude de Zamyla, cal é a lonxitude de Zamyla, 1087 00:44:44,640 --> 00:44:47,990 seis veces separadas, ou sete, aínda, é simplemente estúpido, 1088 00:44:47,990 --> 00:44:50,390 porque iso é inmutable esa resposta. 1089 00:44:50,390 --> 00:44:53,550 E entón o que eu podería realmente facer é isto-- en secuencia dun 1090 00:44:53,550 --> 00:44:55,680 Eu teño unha versión un pouco mellor aquí. 1091 00:44:55,680 --> 00:45:00,110 Há-- secuencia whoops-- dous que teño unha versión lixeiramente mellor en que 1092 00:45:00,110 --> 00:45:05,010 Fago isto-- no canto de só i iniciar a 0, tamén cunha coma 1093 00:45:05,010 --> 00:45:07,990 declarar unha segunda variable chamada n-- Non teño que dicir int novo. 1094 00:45:07,990 --> 00:45:09,220 Non debería, en realidade. 1095 00:45:09,220 --> 00:45:10,380 Pero eu digo n. 1096 00:45:10,380 --> 00:45:13,610 E entón eu inicializar n o strlen n, de xeito que agora 1097 00:45:13,610 --> 00:45:17,110 cantas veces é que strlen son executados en total? 1098 00:45:17,110 --> 00:45:17,610 Só unha vez. 1099 00:45:17,610 --> 00:45:20,257 E entón é iso que queremos dicir anteriormente sobre mellor deseño. 1100 00:45:20,257 --> 00:45:23,090 De feito, unha vez que o seu código está correcto, indo cara atrás e pensar a través, 1101 00:45:23,090 --> 00:45:26,820 está a usar tan pouco memoria ou como uns segundos 1102 00:45:26,820 --> 00:45:30,409 ou milisegundos de tempo de ordenador como posible aplicar algún problema? 1103 00:45:30,409 --> 00:45:32,200 E eu estou indo a rodar se e só mencionar 1104 00:45:32,200 --> 00:45:34,283 que hai esa mención de null nesta versión, 1105 00:45:34,283 --> 00:45:36,390 pero imos volver a iso en pouco tempo. 1106 00:45:36,390 --> 00:45:41,010 Porque, de momento, imos dar un ollo onde iso vai levar. 1107 00:45:41,010 --> 00:45:44,110 Entón, un, verifícase que agora que temos a capacidade 1108 00:45:44,110 --> 00:45:46,860 mirar para caracteres individuais, podemos aproveitar algo 1109 00:45:46,860 --> 00:45:50,807 desde a semana 0 que era moi misterioso e tipo de desinteressante no momento. 1110 00:45:50,807 --> 00:45:53,390 Pero agora, e especialmente cando chegar á criptografía nunha semana, 1111 00:45:53,390 --> 00:45:54,820 que vai ser moi poderosa. 1112 00:45:54,820 --> 00:45:57,450 Acontece que con algún ints e carrozas de datos types-- 1113 00:45:57,450 --> 00:46:00,300 e caracteres e cadeas e outra coisas- algúns deles 1114 00:46:00,300 --> 00:46:02,800 pode ser facilmente converter a outro. 1115 00:46:02,800 --> 00:46:05,840 >> Por exemplo, cando falamos sobre ASCII algún tempo aquí está ago-- 1116 00:46:05,840 --> 00:46:07,796 a maiúsculas A través M, punto, punto, 1117 00:46:07,796 --> 00:46:12,530 dot-- dixemos que hai un mapeamento entre estas letras e números. 1118 00:46:12,530 --> 00:46:14,970 E, de feito, é válido para minúsculas así. 1119 00:46:14,970 --> 00:46:17,470 Minúsculas un é 97, o capital é de 65 un. 1120 00:46:17,470 --> 00:46:20,860 E hai un número en ASCII, que é só ese mapeamento 1121 00:46:20,860 --> 00:46:23,240 sistema para todas esas outras letras. 1122 00:46:23,240 --> 00:46:25,030 Entón, o que significa isto? 1123 00:46:25,030 --> 00:46:28,390 Ben, eu estou indo a ir adiante e aberto se verdadeira rapidamente algo chamado 1124 00:46:28,390 --> 00:46:31,240 ASCII 0, a maioría dos cales é comentarios. 1125 00:46:31,240 --> 00:46:33,860 E de novo en liña poderá ollar a través dos comentarios. 1126 00:46:33,860 --> 00:46:36,180 >> E vexan o que iso vai facer. 1127 00:46:36,180 --> 00:46:38,410 Entón, ten unha función principal. 1128 00:46:38,410 --> 00:46:41,490 Teño-codificado os números só para agora, porque sei o que estou facendo. 1129 00:46:41,490 --> 00:46:42,950 Sei o que quero ver aquí. 1130 00:46:42,950 --> 00:46:45,220 E eu teño inicializar I a 65. 1131 00:46:45,220 --> 00:46:48,490 E eu estou contando a a través de 26 cartas total. 1132 00:46:48,490 --> 00:46:52,990 E que é o que eu vou imprimir unha liña de cada vez 1133 00:46:52,990 --> 00:46:54,930 se pode interpretar esta liña destacada? 1134 00:46:54,930 --> 00:46:55,970 O que será impreso? 1135 00:46:55,970 --> 00:46:56,797 Si. 1136 00:46:56,797 --> 00:46:57,264 >> Audiencia: Vai para imprimir a carta que 1137 00:46:57,264 --> 00:46:59,805 corresponde ao mapa da valor letra e valor enteiro? 1138 00:46:59,805 --> 00:47:01,199 1139 00:47:01,199 --> 00:47:01,990 COLUMNA 1: Exactamente. 1140 00:47:01,990 --> 00:47:04,740 Vou imprimir letra correspondente ao valor enteiro, 1141 00:47:04,740 --> 00:47:06,131 e viceversa, deste xeito. 1142 00:47:06,131 --> 00:47:08,880 Ben, este, alguén dixo anteriormente, é só un espazo reservado para un char. 1143 00:47:08,880 --> 00:47:09,490 Aínda é. 1144 00:47:09,490 --> 00:47:12,280 Isto, por suposto, é un marcador de posición para un non int-- unha nova liña. 1145 00:47:12,280 --> 00:47:18,140 E agora observe, o meu primeiro valor que Estou chamando este espazo reservado 1146 00:47:18,140 --> 00:47:22,320 non é só I. digo, en parénteses, char I, 1147 00:47:22,320 --> 00:47:26,700 que o carácter é parenthetical dicindo o compilador, tratar I 1148 00:47:26,700 --> 00:47:28,490 non como o que é, o que é un número. 1149 00:47:28,490 --> 00:47:30,490 Trata-lo como un personaxe real. 1150 00:47:30,490 --> 00:47:34,490 Tendo en conta que o segundo valor que estou conectando em-- I-- debe ser só un número. 1151 00:47:34,490 --> 00:47:38,140 >> Entón, se eu compilar este program-- polo que este é facer ASCII 0, 1152 00:47:38,140 --> 00:47:41,720 dot ASCII barra 0-- acaba de recibir esta pequena carta accesible que 1153 00:47:41,720 --> 00:47:44,950 apréndeme todo o posible mapeamento sen ter que pensar que 1154 00:47:44,950 --> 00:47:46,450 ou a través de descubrir iso por conta propia. 1155 00:47:46,450 --> 00:47:48,783 E eu tamén estou imprimindo, observe as letras minúsculas, 1156 00:47:48,783 --> 00:47:51,410 porque algunhas liñas despois, eu tamén imprimir este mapa 1157 00:47:51,410 --> 00:47:53,737 ben, que é só para dicir que unha vez que entender 1158 00:47:53,737 --> 00:47:55,570 o que está pasando por baixo o capó, pode 1159 00:47:55,570 --> 00:47:57,111 converter automaticamente e cara atrás. 1160 00:47:57,111 --> 00:48:00,160 E, de feito, se algún de vós nunca fixo iso na escola primaria 1161 00:48:00,160 --> 00:48:03,490 ou escoitou falar de alguén miticamente tomar unha nota 1162 00:48:03,490 --> 00:48:05,620 e pasala ao seu ou a amiga na clase, 1163 00:48:05,620 --> 00:48:08,300 pero revoltos o letras de A como B tórnase, 1164 00:48:08,300 --> 00:48:11,240 B e C convértese, ou algo así máis complicado do que iso, ben, 1165 00:48:11,240 --> 00:48:13,410 como é que vai facer sobre implantación que como un neno? 1166 00:48:13,410 --> 00:48:16,340 Ben, só tipo de saber A convértese en B, B pasa a ser C, 1167 00:48:16,340 --> 00:48:19,700 pero matematicamente, o que foi que o mozo está facendo? 1168 00:48:19,700 --> 00:48:22,050 O que estaba engadindo cada letra? 1169 00:48:22,050 --> 00:48:23,340 Efectivamente, 1. 1170 00:48:23,340 --> 00:48:27,740 >> Entón, cando cambiar de A para B, que é tipo de como o cambio de 65-66, 1171 00:48:27,740 --> 00:48:29,590 que matematicamente significa só engadir 1. 1172 00:48:29,590 --> 00:48:33,300 E por iso, se fose para aplicar que pouca técnica fraudulenta 1173 00:48:33,300 --> 00:48:36,380 para o seu profesor no código, pode facer exactamente isto só 1174 00:48:36,380 --> 00:48:38,552 por adición dunha única letra xuntos. 1175 00:48:38,552 --> 00:48:40,260 Así, en pouco tempo, estamos vai ver como nós 1176 00:48:40,260 --> 00:48:43,300 pode sacar proveito diso para realmente disputa xenuína e desembaralhar 1177 00:48:43,300 --> 00:48:43,991 información. 1178 00:48:43,991 --> 00:48:47,240 Non obstante, sabemos que comezan a introdución de un par de outras bibliotecas 1179 00:48:47,240 --> 00:48:48,990 aqui-- a secuencia dun hoxe. 1180 00:48:48,990 --> 00:48:51,180 E un sitio moi útil Esperamos que vai atopar 1181 00:48:51,180 --> 00:48:55,010 chámase reference.cs50.net, que o corpo docente teñen xuntos, 1182 00:48:55,010 --> 00:48:57,510 de xeito que se quere mirar para arriba traballos como strlen, 1183 00:48:57,510 --> 00:48:59,300 pode comezar a escribir o nome da función, 1184 00:48:59,300 --> 00:49:02,890 prema strlen alí, e, a continuación, unha explicación menos cómodo 1185 00:49:02,890 --> 00:49:03,700 vai aparecer. 1186 00:49:03,700 --> 00:49:06,880 Ou se quere que o oficial Explicación baseada en Linux, 1187 00:49:06,880 --> 00:49:08,945 pode facer clic máis cómodo na parte superior dereita, e 1188 00:49:08,945 --> 00:49:12,070 presentará a mesma información, pero en termos máis complexos. 1189 00:49:12,070 --> 00:49:15,070 Isto é un recurso útil para realmente saber todo o que fai. 1190 00:49:15,070 --> 00:49:17,320 >> A próxima vez que imos Bótalle un ollo Ovomaltine 1191 00:49:17,320 --> 00:49:20,070 e máis, e introduzir- ao mundo da criptografía. 1192 00:49:20,070 --> 00:49:21,930 Antes diso, veremos aínda esta semana. 1193 00:49:21,930 --> 00:49:23,390 E agora, Colton Ogden. 1194 00:49:23,390 --> 00:49:26,730 Vexo vostedes o mércores. 1195 00:49:26,730 --> 00:49:30,216 >> [Música tocando] 1196 00:49:30,216 --> 00:49:33,702 >> [Música tocando] 1197 00:49:33,702 --> 00:49:38,682 1198 00:49:38,682 --> 00:49:42,200 >> COLUMNA 1: Que o [BLEEP] está facendo? 1199 00:49:42,200 --> 00:49:45,720 >> COLUMNA 1: Estou comendo a miña sobremesa? 1200 00:49:45,720 --> 00:49:47,160 Como come-lo? 1201 00:49:47,160 --> 00:49:47,860 Coas súas mans? 1202 00:49:47,860 --> 00:49:54,050 1203 00:49:54,050 --> 00:49:57,940 >> [Música tocando] 1204 00:49:57,940 --> 00:50:03,453