1 00:00:07,590 --> 00:00:09,920 [Powered by Google Translate] DAVID J. Malan: Todo ben, iso é CS50 e este é o 2 00:00:09,920 --> 00:00:15,250 final da semana 1, tarxetas etc estudo está eo número total de 3 00:00:15,250 --> 00:00:18,640 compañeiros que ten para este ano é 745. 4 00:00:18,640 --> 00:00:20,920 E estamos tan entusiasmados de ter tantos de vós no curso 5 00:00:20,920 --> 00:00:23,680 este semestre, pero que este curso é tan grande, 6 00:00:23,680 --> 00:00:26,090 entender que é isto como xantar venres, como 7 00:00:26,090 --> 00:00:29,020 as horas de oficina, 15 persoa seccións e así por diante que 8 00:00:29,020 --> 00:00:30,590 son realmente significaba para crear esta máis íntima 9 00:00:30,590 --> 00:00:31,140 ambiente. 10 00:00:31,140 --> 00:00:34,070 Así, aínda que podemos reunir unha vez ou dúas veces por semana, aquí 11 00:00:34,070 --> 00:00:36,420 Sanders, sei que moito da súa experiencia neste curso 12 00:00:36,420 --> 00:00:39,330 vai ser moi hands-on en a carón dos seus compañeiros 13 00:00:39,330 --> 00:00:40,730 e do corpo docente. 14 00:00:40,730 --> 00:00:43,960 >> Entón, imos alí, Fall 2012. 15 00:00:43,960 --> 00:00:47,530 Entón, lembro que a última vez que rematou cunha nota de 16 00:00:47,530 --> 00:00:50,460 imprecisión, falando sobre a representación de números. 17 00:00:50,460 --> 00:00:52,950 E nós miramos unha das fallos que se produciron, no 18 00:00:52,950 --> 00:00:54,920 mundo real, cando se trata de malentendido 19 00:00:54,920 --> 00:00:55,890 como os ordenadores funcionan. 20 00:00:55,890 --> 00:00:58,590 Ben, hoxe nós imos revisitar unha desas ideas como 21 00:00:58,590 --> 00:01:01,410 así como continuar a discusión do cliente CS50 22 00:01:01,410 --> 00:01:04,090 e C eo que significa realmente o programa. 23 00:01:04,090 --> 00:01:06,430 Pero, primeiro, só un par de anuncios de remuíño. 24 00:01:06,430 --> 00:01:08,930 >> Seccións comezan este domingo, e na primeira semana é sempre unha 25 00:01:08,930 --> 00:01:11,030 pouco de inicio rápido, porque só teño en 26 00:01:11,030 --> 00:01:12,620 formas súa sección. 27 00:01:12,620 --> 00:01:14,450 Estamos facendo o mesmo, agora, cos compañeiros de ensino, agora 28 00:01:14,450 --> 00:01:16,410 que eles saben os seus horarios, polo que estamos tratando, por 29 00:01:16,410 --> 00:01:19,380 Sábado de mañá, para seguir con vostede, coa súa sección 30 00:01:19,380 --> 00:01:20,760 asignación e TF. 31 00:01:20,760 --> 00:01:22,770 Entenda que eles van comezar o día seguinte, domingo 32 00:01:22,770 --> 00:01:24,510 ou luns ou martes. 33 00:01:24,510 --> 00:01:27,730 E entón imos acomodar os cambios de sección que poidan xurdir 34 00:01:27,730 --> 00:01:28,690 os días que virán. 35 00:01:28,690 --> 00:01:31,590 As horas de oficina, con todo, son, unha vez máis, esta noite, 08:00 a 11, en 36 00:01:31,590 --> 00:01:33,740 Annenberg, así como mañá á noite. 37 00:01:33,740 --> 00:01:36,150 Aínda que os xogos de problemas son xeralmente debido ás xoves 38 00:01:36,150 --> 00:01:39,020 ao mediodía, entende que ten ata cinco días de atraso para gastar, 39 00:01:39,020 --> 00:01:42,430 polo tanto, a dispoñibilidade de horario de oficina os xoves se 40 00:01:42,430 --> 00:01:45,930 diñeiro nun deses días de atraso e, así, presentar 41 00:01:45,930 --> 00:01:47,070 algo o venres. 42 00:01:47,070 --> 00:01:50,850 Deixe-me suxerir que scratch é entre o máis divertido, entre os 43 00:01:50,850 --> 00:01:52,390 máis baixas importantes conxuntos de problemas. 44 00:01:52,390 --> 00:01:55,160 E gustaríame colgar os días de atraso, estratexicamente, só 45 00:01:55,160 --> 00:01:57,380 cara ao final do semestre, cando a vida empeza a estar no camiño 46 00:01:57,380 --> 00:01:59,470 con exames semestrais e outras clases. 47 00:01:59,470 --> 00:02:01,580 Establecer un problema, non obstante, sería publicado no seu curso 48 00:02:01,580 --> 00:02:06,080 web onte, como será a camiñada do curso 49 00:02:06,080 --> 00:02:08,789 a través de vídeo, que será filmado en 02:30 venres 50 00:02:08,789 --> 00:02:11,890 e, a continuación, publicado en liña o día seguinte. 51 00:02:11,890 --> 00:02:13,880 >> Así, terminou o luns. 52 00:02:13,880 --> 00:02:15,450 Eu quero - na verdade, unha nota aquí. 53 00:02:15,450 --> 00:02:18,870 Como as clases - porque Sanders non é exactamente prestan 54 00:02:18,870 --> 00:02:22,220 a Q & A ocasional e cara atrás moi ben, estamos 55 00:02:22,220 --> 00:02:24,030 vai tentar algo un pouco este ano, en que 56 00:02:24,030 --> 00:02:26,160 Se vostede non está cómodo levantar a man ou só 57 00:02:26,160 --> 00:02:28,800 prefire non levantar a man nunha sala como esta, 58 00:02:28,800 --> 00:02:30,710 imos ter algúns dos compañeiros de ensino e CAs 59 00:02:30,710 --> 00:02:33,260 cs50.net/discuss tripulación durante a charla. 60 00:02:33,260 --> 00:02:35,440 Entón se ten unha pregunta, porque eu estaba completamente 61 00:02:35,440 --> 00:02:37,510 claro sobre algo ou está curioso sobre algúns 62 00:02:37,510 --> 00:02:39,640 tema, tente enviar alí. 63 00:02:39,640 --> 00:02:42,670 Marcalo con un rótulo de charla, e nós imos facer o noso mellor 64 00:02:42,670 --> 00:02:45,430 hoxe e na próxima semana - nós tentar facer iso - a área das TIC 65 00:02:45,430 --> 00:02:47,990 en soporte electrónico, liña, ou se se sente como deberiamos 66 00:02:47,990 --> 00:02:50,430 realmente afrontalo lo en masa, un dos compañeiros de ensino ou 67 00:02:50,430 --> 00:02:52,080 CAs vai levantar a man e pedir 68 00:02:52,080 --> 00:02:53,480 anonimamente no seu nome. 69 00:02:53,480 --> 00:02:55,650 Entón, imos tentar dar un regalo para ver como isto funciona ben. 70 00:02:55,650 --> 00:02:58,540 Pero, por todos os medios, seguen a erguer as mans, como lle gustaría. 71 00:02:58,540 --> 00:03:11,420 >> Entón última vez que revelou que o 10% ou un décimo non é, en 72 00:03:11,420 --> 00:03:13,840 feito, 0,1, como foi ensino por moitos anos. 73 00:03:13,840 --> 00:03:15,390 É, de feito, un valor coma este. 74 00:03:15,390 --> 00:03:16,970 Pero iso non é totalmente certo, non? 75 00:03:16,970 --> 00:03:19,585 Só temos esta restrición en computadores en que, se 76 00:03:19,585 --> 00:03:22,450 só teñen unha cantidade finita de memoria, a memoria RAM, ou máis 77 00:03:22,450 --> 00:03:25,220 especialmente bits, así, hai só un número finito 78 00:03:25,220 --> 00:03:26,980 de cousas que pode representar. 79 00:03:26,980 --> 00:03:29,780 Por exemplo, se temos o número cero, e queremos 80 00:03:29,780 --> 00:03:32,790 representar en binario usando oito bits, onde un pouco, 81 00:03:32,790 --> 00:03:34,710 de novo, é un cero ou un un, poderiamos 82 00:03:34,710 --> 00:03:39,240 representa-lo como 00000000. 83 00:03:39,240 --> 00:03:41,160 E iso é un pouco innecesarios detallado. 84 00:03:41,160 --> 00:03:43,700 Así como no sistema decimal, no mundo real, 85 00:03:43,700 --> 00:03:47,040 Xeralmente, se quere escribir o número 123, que 86 00:03:47,040 --> 00:03:52,240 seres humanos probablemente non escribo 00000123 aínda que, 87 00:03:52,240 --> 00:03:53,940 funcionalmente, que é exactamente o mesmo número. 88 00:03:53,940 --> 00:03:56,580 Nós só unha pinga ceros á esquerda, por así dicir. 89 00:03:56,580 --> 00:03:58,270 >> En binario, podemos facer o mesmo. 90 00:03:58,270 --> 00:04:01,440 Binario e cero cero, e binario é só cero. 91 00:04:01,440 --> 00:04:02,870 Só ten un único bit. 92 00:04:02,870 --> 00:04:05,020 Pero, de novo, a unidade de medida máis común no mundo 93 00:04:05,020 --> 00:04:07,820 da computación é máis, oito bits. 94 00:04:07,820 --> 00:04:09,720 Só porque un pouco, bastante inútil. 95 00:04:09,720 --> 00:04:12,020 Oito bits, non moi útil, pero polo menos é máis 96 00:04:12,020 --> 00:04:14,280 útiles que unha única unidade de medida. 97 00:04:14,280 --> 00:04:17,100 Así, con oito bits, imos normalmente representan binario. 98 00:04:17,100 --> 00:04:20,459 Polo tanto, temos aquí os números cero, un, dous, e entón, como 99 00:04:20,459 --> 00:04:24,200 Nate fixo no noso vídeo última mércores, podemos seguir 100 00:04:24,200 --> 00:04:25,940 contando ata sete, oito. 101 00:04:25,940 --> 00:04:27,860 E entón, se usamos máis e máis bits, nós 102 00:04:27,860 --> 00:04:29,880 pode contar ata o infinito. 103 00:04:29,880 --> 00:04:32,800 Pero se só ten un número finito destes bits, como é 104 00:04:32,800 --> 00:04:35,030 caso de calquera sistema informático, ou mesmo de mísiles 105 00:04:35,030 --> 00:04:36,670 sistema, así, en verdade só ten un 106 00:04:36,670 --> 00:04:37,900 cantidade finita de precisión. 107 00:04:37,900 --> 00:04:41,290 Entón se quere para representar o número como 0,1, así, o 108 00:04:41,290 --> 00:04:43,410 ordenador ten que escoller. 109 00:04:43,410 --> 00:04:45,970 E se só ten un número finito de números que pode 110 00:04:45,970 --> 00:04:50,490 representar, pode chegar preto de 0,1 por ti, pero non pode 111 00:04:50,490 --> 00:04:53,730 necesariamente dar-lle exactamente o valor que quere. 112 00:04:53,730 --> 00:04:55,660 E este é só un dos retos de ordenadores, 113 00:04:55,660 --> 00:04:57,090 debaixo do capó, afortunadamente. 114 00:04:57,090 --> 00:04:59,110 >> A medida que avanzamos máis no semestre, o nivel máis baixo estes 115 00:04:59,110 --> 00:05:02,310 detalles fan-se moito menos interesante, pero certamente o 116 00:05:02,310 --> 00:05:05,700 aplicación destas ideas pode ter un mundo moi real 117 00:05:05,700 --> 00:05:06,760 ramificacións. 118 00:05:06,760 --> 00:05:08,190 Un deles é un pouco divertido. 119 00:05:08,190 --> 00:05:12,150 Como moitos de vostedes xa viron o Office Space incrible película? 120 00:05:12,150 --> 00:05:13,620 Se non ten, que é o seu non-oficial 121 00:05:13,620 --> 00:05:14,370 lección de casa para a semana. 122 00:05:14,370 --> 00:05:16,730 Pero en Office Space, os compañeiros en que a película teña 123 00:05:16,730 --> 00:05:19,900 vantaxe de exactamente esa idea, pero realmente roubou 124 00:05:19,900 --> 00:05:21,270 doutro filme que pode ter 125 00:05:21,270 --> 00:05:22,760 visto, incluso anos antes. 126 00:05:22,760 --> 00:05:24,920 Entón deixe-me dar-lle algúns segundos de este trailer de 127 00:05:24,920 --> 00:05:27,470 esta película incrible e iso é moi 128 00:05:27,470 --> 00:05:28,340 academicamente relevante. 129 00:05:28,340 --> 00:05:30,310 >> [XOGOS de película] 130 00:05:30,310 --> 00:05:32,240 En realidade, estou sendo promovido. 131 00:05:32,240 --> 00:05:33,360 Eu podo programar un virus que vai rasgar que 132 00:05:33,360 --> 00:05:34,460 Pon gran momento. 133 00:05:34,460 --> 00:05:35,770 Ben, como é que funciona? 134 00:05:35,770 --> 00:05:37,836 Cada vez que hai unha transacción bancaria onde o interese é 135 00:05:37,836 --> 00:05:40,154 computerizada, existen miles ao día, o ordenador acaba 136 00:05:40,154 --> 00:05:41,040 con esas fraccións de un centavo. 137 00:05:41,040 --> 00:05:43,050 Pero eu non vou facer nada ilegal. 138 00:05:43,050 --> 00:05:46,730 Ilegal? Samir, este é a América. 139 00:05:46,730 --> 00:05:48,010 Ten que xurar a Deus. 140 00:05:48,010 --> 00:05:51,870 Se ninguén sabe sobre iso, pero nós, non? Ningún membro da familia, non 141 00:05:51,870 --> 00:05:52,490 noivas, ninguén. 142 00:05:52,490 --> 00:05:53,882 [Inaudível]. 143 00:05:53,882 --> 00:05:57,594 Non te preocupes, cara, eu non vou contar para ninguén quere. 144 00:05:57,594 --> 00:05:59,680 [Película remata] 145 00:05:59,680 --> 00:06:01,900 >> Todo ben, entón quizais eu atope este filme mellor que a maioría 146 00:06:01,900 --> 00:06:05,530 persoas aquí, pero en calquera caso, o virus que foron 147 00:06:05,530 --> 00:06:06,400 intentando crear - 148 00:06:06,400 --> 00:06:08,410 e no cine, a calquera hora que eles chaman algo de un virus, 149 00:06:08,410 --> 00:06:09,770 xeralmente non é realmente un virus. 150 00:06:09,770 --> 00:06:11,600 É só un programa que alguén escribiu para facer algo. 151 00:06:11,600 --> 00:06:13,800 E, neste caso, as faces estaban tentando escribir un programa 152 00:06:13,800 --> 00:06:16,610 que se aproveitou da súa empresa chamada Innotech de 153 00:06:16,610 --> 00:06:19,740 sistema de computación en que, ordenadores, tamén, aínda que 154 00:06:19,740 --> 00:06:21,350 trata de diñeiro, non necesariamente 155 00:06:21,350 --> 00:06:23,490 representan diñeiro con precisión. 156 00:06:23,490 --> 00:06:27,630 Así, aínda que pode ter $ 0,10 na súa conta bancaria, 157 00:06:27,630 --> 00:06:31,060 0,10, así, o ordenador pode realmente creo que ten 158 00:06:31,060 --> 00:06:33,560 este centavos moitos na súa conta bancaria. 159 00:06:33,560 --> 00:06:35,750 E entón o que estes faces estaban aspirando a facer - e eles 160 00:06:35,750 --> 00:06:38,240 roubou a idea, ao parecer de Superman III, onde 161 00:06:38,240 --> 00:06:41,210 Richard Pryor fixo a mesma cousa - eles eran esencialmente 162 00:06:41,210 --> 00:06:44,880 escribir programas que aspiran a ocupar toda a fuga 163 00:06:44,880 --> 00:06:46,930 números, todos os pequenos, minúsculos, pequenas fraccións de 164 00:06:46,930 --> 00:06:50,160 tostões, e siphoning aqueles fóra de forma que os seres humanos só 165 00:06:50,160 --> 00:06:52,620 pensamento, oh, é só 0,10 dólares alí, pero todos os que 166 00:06:52,620 --> 00:06:54,410 números finais, eventualmente, engadir-se. 167 00:06:54,410 --> 00:06:57,490 Entón, unha idea marabillosa e divertida na que saíu pola culatra 168 00:06:57,490 --> 00:06:58,250 película en particular. 169 00:06:58,250 --> 00:07:01,800 >> Pero no mundo real, tamén, hai moito máis sobre 170 00:07:01,800 --> 00:07:03,190 implicacións destes tipos de cousas. 171 00:07:03,190 --> 00:07:05,450 E unha das razóns para mergullo no campo do ordenador 172 00:07:05,450 --> 00:07:07,620 ciencia é, de novo, a súa aplicabilidade non ao 173 00:07:07,620 --> 00:07:09,740 Ciencias da Enxeñaría só, pero só para 174 00:07:09,740 --> 00:07:10,650 noutros campos tamén. 175 00:07:10,650 --> 00:07:14,760 Polo tanto, este é un ollar menos alegre co que pode dar mal, pero 176 00:07:14,760 --> 00:07:17,630 tamén é bastante apertura dos ollos, eu creo que, cando se trata de 177 00:07:17,630 --> 00:07:20,760 entender exactamente como omnipresente tecnoloxías como 178 00:07:20,760 --> 00:07:22,870 ordenadores e de programación ou nos días de hoxe, 179 00:07:22,870 --> 00:07:23,930 baixo a forma de software. 180 00:07:23,930 --> 00:07:26,500 Polo tanto, este próximo clip é só preto de seis minutos, continúa 181 00:07:26,500 --> 00:07:30,320 onde paramos a última vez, pero permítenos mirar un pouco 182 00:07:30,320 --> 00:07:33,370 máis en profundidade en un tal estas cuestións. 183 00:07:33,370 --> 00:07:35,270 Deixe-me ir directo ao punto en que parou, 184 00:07:35,270 --> 00:07:37,780 que estaba ben aquí. 185 00:07:37,780 --> 00:07:41,580 E nós temos a parte dous de dous, por preto de seis minutos aquí. 186 00:07:41,580 --> 00:07:41,980 >> [MOVIE PLAY] 187 00:07:41,980 --> 00:07:45,430 Atormentado tecnoloxía de foguetes modernos. 188 00:07:45,430 --> 00:07:49,280 En 1991, co inicio da Guerra do Golfo, o Patriot 189 00:07:49,280 --> 00:07:51,350 mísil experimentou un tipo similar de 190 00:07:51,350 --> 00:07:52,645 problema de conversión de número. 191 00:07:52,645 --> 00:07:57,460 E, como resultado, 20 persoas, 20 soldados norteamericanos, foron mortos 192 00:07:57,460 --> 00:08:01,130 e preto de 100 resultaron feridos cando o Patriot, que debería 193 00:08:01,130 --> 00:08:03,400 para protexer contra Scuds entrada, 194 00:08:03,400 --> 00:08:06,020 non conseguiu disparar un mísil. 195 00:08:06,020 --> 00:08:09,350 >> Cando o Iraq invadiu Kuwait e América lanzou un deserto 196 00:08:09,350 --> 00:08:13,530 Tempestade no inicio de 1991, as baterías de mísiles Patriot foron 197 00:08:13,530 --> 00:08:16,970 implantado para protexer a Arabia Saudita e Israel a partir do Iraq 198 00:08:16,970 --> 00:08:19,810 Mísiles Scud ataque. 199 00:08:19,810 --> 00:08:23,740 O Patriot é un EUA de medio alcance do sistema superficie-aire, 200 00:08:23,740 --> 00:08:26,370 fabricado pola empresa Raytheon. 201 00:08:26,370 --> 00:08:30,860 O tamaño do interceptor Patriot en si, é sobre 202 00:08:30,860 --> 00:08:35,650 preto de 20 metros de lonxitude e pesa preto de 2.000 quilos. 203 00:08:35,650 --> 00:08:38,809 E leva unha ogiva de aproximadamente - Eu creo que é máis ou menos 204 00:08:38,809 --> 00:08:40,169 150 libras. 205 00:08:40,169 --> 00:08:45,820 E a ogiva en si é un explosivo de alta que ten 206 00:08:45,820 --> 00:08:48,120 fragmentos en torno a el. 207 00:08:48,120 --> 00:08:51,870 A carcasa da ogiva está deseñado para actuar como chumbo groso. 208 00:08:51,870 --> 00:08:54,920 Os mísiles son realizadas catro por recipiente e son 209 00:08:54,920 --> 00:08:57,850 transportado por un semi-remolque. 210 00:08:57,850 --> 00:09:02,940 >> O Patriota sistema anti-mísil remonta polo menos a 211 00:09:02,940 --> 00:09:05,530 20 anos. 212 00:09:05,530 --> 00:09:09,150 El foi orixinalmente concibido como un mísil de defensa aérea para 213 00:09:09,150 --> 00:09:12,920 derrubar avións inimigos, na primeira Guerra do Golfo. 214 00:09:12,920 --> 00:09:17,700 Cando a guerra chegou, o Exército quería usalo para lanzar 215 00:09:17,700 --> 00:09:19,880 Scuds para abaixo, e non avións. 216 00:09:19,880 --> 00:09:24,860 A Forza Aérea de Iraq non era tanto un problema, pero o Exército 217 00:09:24,860 --> 00:09:27,260 estaba preocupado Scuds. 218 00:09:27,260 --> 00:09:30,810 E así eles intentaron actualizar o Patriot. 219 00:09:30,810 --> 00:09:33,770 Interceptar un mísil inimigo viaxando a Mach 5 ía 220 00:09:33,770 --> 00:09:35,790 a ser bastante difícil. 221 00:09:35,790 --> 00:09:39,460 Pero cando o Patriot foi levado en servizo, o Exército 222 00:09:39,460 --> 00:09:43,730 non estaba en conta unha modificación do Iraq, que fixo a súa 223 00:09:43,730 --> 00:09:46,510 Scuds case imposible de bater. 224 00:09:46,510 --> 00:09:50,040 >> O que pasou é que eran os Scuds 225 00:09:50,040 --> 00:09:51,360 chegando eran inestables. 226 00:09:51,360 --> 00:09:52,266 Eles estaban bailando. 227 00:09:52,266 --> 00:09:56,300 A razón para isto foi o iraquís, a fin de obter 600 228 00:09:56,300 --> 00:10:00,650 quilómetros fóra dun mísil franxa de 300 quilómetros, levou 229 00:10:00,650 --> 00:10:02,423 peso fóra da ogiva fronte e 230 00:10:02,423 --> 00:10:03,990 feita a ogiva isqueiro. 231 00:10:03,990 --> 00:10:08,700 Polo tanto, agora o Patriot está intentando entrar no Scud, e máis de 232 00:10:08,700 --> 00:10:11,192 tempo, a esmagadora maioría do tempo, sería 233 00:10:11,192 --> 00:10:13,450 só voar polo Scud. 234 00:10:13,450 --> 00:10:16,300 Unha vez que os operadores do sistema Patriot entendeu o Patriot 235 00:10:16,300 --> 00:10:20,160 errou o obxectivo, eles detonaron a ogiva Patriota. 236 00:10:20,160 --> 00:10:22,760 Para evitar posibles sinistros, foi permitido 237 00:10:22,760 --> 00:10:25,100 a caer ao chan. 238 00:10:25,100 --> 00:10:29,400 Iso foi o que a maioría da xente viu, como bolas de lume no ceo grandes, 239 00:10:29,400 --> 00:10:34,930 e incomprendido como interceptacións de cabezas Scud. 240 00:10:34,930 --> 00:10:37,490 >> Aínda que, no ceo de noite, Patriots parecía ser 241 00:10:37,490 --> 00:10:41,570 Scuds destruído con éxito, en Dhahran, non podería haber 242 00:10:41,570 --> 00:10:43,730 erro sobre o seu rendemento. 243 00:10:43,730 --> 00:10:46,370 Alí, o sistema Patriot radar perdeu o control dun 244 00:10:46,370 --> 00:10:50,090 entrada Scud e nunca lanzado debido 245 00:10:50,090 --> 00:10:51,340 a un fallo do software. 246 00:10:54,030 --> 00:10:57,050 Foi a israelís que descubriu que canto máis tempo 247 00:10:57,050 --> 00:11:02,000 O sistema foi ligado, canto maior sexa a diferenza de tempo tornouse, 248 00:11:02,000 --> 00:11:05,530 debido a un reloxo incorporado no ordenador do sistema. 249 00:11:05,530 --> 00:11:09,060 Preto de dúas semanas antes da traxedia en Dhahran, o 250 00:11:09,060 --> 00:11:11,730 Israelís informaron ao Departamento de Defensa que o 251 00:11:11,730 --> 00:11:13,250 sistema estaba perdendo tempo. 252 00:11:13,250 --> 00:11:15,610 Despois de preto de oito horas de carreira, eles notaron que o 253 00:11:15,610 --> 00:11:18,330 sistema foi facendo visiblemente menos preciso. 254 00:11:18,330 --> 00:11:20,910 O Departamento de Defensa respondeu dicindo todos 255 00:11:20,910 --> 00:11:23,710 as baterías Patriot non deixar os sistemas 256 00:11:23,710 --> 00:11:25,450 por un tempo longo. 257 00:11:25,450 --> 00:11:28,010 Nunca dixeron que moito tempo foi - 8 horas, 10 258 00:11:28,010 --> 00:11:29,690 horas, 1.000 horas. 259 00:11:29,690 --> 00:11:31,940 Ninguén sabía. 260 00:11:31,940 --> 00:11:35,020 >> A batería de mísiles Patriot estacionado no cuartel en Dhahran 261 00:11:35,020 --> 00:11:39,030 E o seu reloxo interno fora danado en máis de 100 horas en 262 00:11:39,030 --> 00:11:42,240 na noite de 25 de febreiro. 263 00:11:42,240 --> 00:11:46,580 É monitor tempo cunha precisión de aproximadamente un décimo de segundo. 264 00:11:46,580 --> 00:11:48,830 Agora, unha décima de segundo é un número interesante porque 265 00:11:48,830 --> 00:11:52,660 non pode ser expresado en binario, exactamente, o que significa 266 00:11:52,660 --> 00:11:54,940 non pode ser expresada en calquera exactamente 267 00:11:54,940 --> 00:11:57,330 ordenador dixital moderno. 268 00:11:57,330 --> 00:11:59,130 É difícil de crer. 269 00:11:59,130 --> 00:12:01,720 Pero usar isto como un exemplo. 270 00:12:01,720 --> 00:12:04,090 >> Imos incorporarse o número un terceiro. 271 00:12:04,090 --> 00:12:07,950 Un terceiro non pode ser expresada en decimal, exactamente. 272 00:12:07,950 --> 00:12:12,710 Un terzo é 0,333 suceder ao infinito. 273 00:12:12,710 --> 00:12:17,050 Non hai ningunha forma de facelo con absoluta precisión en decimal. 274 00:12:17,050 --> 00:12:19,340 Isto é exactamente o mesmo tipo de problema que aconteceu en 275 00:12:19,340 --> 00:12:20,190 o Patriot. 276 00:12:20,190 --> 00:12:24,680 Canto máis tempo o sistema funcionou, o peor erro que o tempo se converteu. 277 00:12:24,680 --> 00:12:28,640 Despois de 100 horas de operación, o erro en tempo foi só 278 00:12:28,640 --> 00:12:29,870 cerca dun terzo dun segundo. 279 00:12:29,870 --> 00:12:34,790 Pero en termos de branco un mísil viaxando a Mach 5, 280 00:12:34,790 --> 00:12:39,140 que resultou nun erro de seguimento de máis de 600 metros. 281 00:12:39,140 --> 00:12:42,510 Sería un erro grave para os soldados en Dhahran. 282 00:12:42,510 --> 00:12:48,680 >> O que pasou é un lanzamento de Scud foi detectado polo alerta temperá 283 00:12:48,680 --> 00:12:52,440 satélites e eles sabían que o Scud estaba chegando na súa 284 00:12:52,440 --> 00:12:53,350 dirección xeral. 285 00:12:53,350 --> 00:12:55,470 Eles non sabían de onde viña. 286 00:12:55,470 --> 00:12:58,210 Era agora ata o compoñente radar do Patriot 287 00:12:58,210 --> 00:13:01,920 sistema, defendendo Dhahran, para atopar e seguir o 288 00:13:01,920 --> 00:13:03,700 mísil inimigo de entrada. 289 00:13:03,700 --> 00:13:05,390 O radar foi moi intelixente. 290 00:13:05,390 --> 00:13:07,570 Realmente controlar a posición do Scud e despois 291 00:13:07,570 --> 00:13:10,340 prever onde probablemente sería a próxima vez que 292 00:13:10,340 --> 00:13:12,040 radar enviou un pulso para fóra. 293 00:13:12,040 --> 00:13:13,730 Que foi chamado de o portón alcance. 294 00:13:13,730 --> 00:13:18,820 Entón, unha vez que o Patriot decide pasou tempo suficiente para ir 295 00:13:18,820 --> 00:13:22,600 cara atrás e comprobar o próximo lugar a este detectado 296 00:13:22,600 --> 00:13:24,190 obxecto, que vai volver. 297 00:13:24,190 --> 00:13:27,940 Entón, cando el volveu para o lugar incorrecto, non ve 298 00:13:27,940 --> 00:13:31,000 obxecto, e decidir que non había obxecto. 299 00:13:31,000 --> 00:13:34,370 Foi unha falsa detección e cae na pista. 300 00:13:34,370 --> 00:13:37,630 >> O Scud entrada desapareceu da pantalla do radar. 301 00:13:37,630 --> 00:13:41,300 E, segundos despois, el bateu no cuartel. O Scud 302 00:13:41,300 --> 00:13:44,730 matou 28 e foi o último despedido durante 303 00:13:44,730 --> 00:13:46,450 a primeira Guerra do Golfo. 304 00:13:46,450 --> 00:13:50,570 Traxicamente, o software actualizado chegou en Dhahran 305 00:13:50,570 --> 00:13:52,060 o día seguinte. 306 00:13:52,060 --> 00:13:56,210 E a falla de software fora fixado, pechando un capítulo de 307 00:13:56,210 --> 00:13:58,370 conturbada historia do mísil Patriot. 308 00:14:01,790 --> 00:14:04,990 Patriot é na verdade un acrónimo para "Tracking Phased Array 309 00:14:04,990 --> 00:14:08,516 Interceptar de Target ". 310 00:14:08,516 --> 00:14:13,390 >> Todo ben, entón un resultado moito máis triste de non moi 311 00:14:13,390 --> 00:14:14,430 comprensión deste mundo. 312 00:14:14,430 --> 00:14:18,180 E o takeaway, realmente, a partir da película é que a solución 313 00:14:18,180 --> 00:14:20,790 alí foi reiniciar o seu sistema de defensa antimísiles 314 00:14:20,790 --> 00:14:21,770 de cando en vez. 315 00:14:21,770 --> 00:14:24,280 E entón, de novo, un dos obxectivos deste curso, certamente 316 00:14:24,280 --> 00:14:26,900 nunha escala máis humilde que estas aplicacións, é 317 00:14:26,900 --> 00:14:30,710 ollos de todos realmente aberto para con exactamente como ir sobre 318 00:14:30,710 --> 00:14:34,380 máquinas de facer facer o que quere facer e como ir 319 00:14:34,380 --> 00:14:37,180 sobre iso correctamente, mentres que ao longo do camiño facendo iso 320 00:14:37,180 --> 00:14:38,810 así, de forma elegante, e así por diante. 321 00:14:38,810 --> 00:14:41,680 E así, hoxe, imos mergullar en un pouco máis diso, pero 322 00:14:41,680 --> 00:14:44,210 de xeito que non ir moi rápido, sobre todo para os menos 323 00:14:44,210 --> 00:14:46,590 cómodos, pero tamén para que se poida manter o interese do 324 00:14:46,590 --> 00:14:49,390 aqueles máis cómodo, imos comezar axiña cun pouco 325 00:14:49,390 --> 00:14:50,970 de resumo de algunhas desas ideas. 326 00:14:50,970 --> 00:14:53,710 E, de novo, pregunta, tanto en persoa ou en liña, se ten 327 00:14:53,710 --> 00:14:56,320 preguntas para que poidamos manter todos na mesma páxina. 328 00:14:56,320 --> 00:14:58,820 >> Así, o dispositivo CS50, paso rápido cara atrás, é 329 00:14:58,820 --> 00:15:02,360 o que, nas súas propias palabras? 330 00:15:02,360 --> 00:15:06,454 Todo ben se non ten idea do que estas palabras poden ser aínda. 331 00:15:06,454 --> 00:15:07,830 [Inaudível] 332 00:15:07,830 --> 00:15:10,950 Ok, entón unha interface universal para - 333 00:15:10,950 --> 00:15:11,900 que todos podemos compartir. 334 00:15:11,900 --> 00:15:12,470 Absolutamente. 335 00:15:12,470 --> 00:15:14,840 Así, poderiamos, por exemplo, dicir-lle para ir a algún 336 00:15:14,840 --> 00:15:16,910 web, a descarga deste software para Mac OS. 337 00:15:16,910 --> 00:15:19,140 Baixo este software para Windows, configurar en 338 00:15:19,140 --> 00:15:20,100 Deste xeito, e que. 339 00:15:20,100 --> 00:15:22,370 Pero a realidade é, entón, nos deparamos con moitos técnico 340 00:15:22,370 --> 00:15:23,200 apoiar cuestións. 341 00:15:23,200 --> 00:15:26,630 E tamén nos días de hoxe, moito do que está a ser feito do lado do servidor, 342 00:15:26,630 --> 00:15:28,490 no mundo da computación, especialmente cando se trata de 343 00:15:28,490 --> 00:15:31,460 desenvolvemento web e aplicacións web based, é na verdade 344 00:15:31,460 --> 00:15:35,110 moitas veces feito en computadores Unix ou Linux, ao contrario 345 00:15:35,110 --> 00:15:36,800 Macs ou PC con Windows. 346 00:15:36,800 --> 00:15:39,240 >> Así, entre os pros, entón, usar esa cousa chamada 347 00:15:39,240 --> 00:15:41,500 CS50 Appliance é todo nós imos ter o mesmo ambiente. 348 00:15:41,500 --> 00:15:43,670 Entón, todos están na mesma páxina, non importa cal hardware ten 349 00:15:43,670 --> 00:15:46,650 chegou ao campus con, pero tamén vai ser meter en exactamente 350 00:15:46,650 --> 00:15:48,230 o mesmo ambiente que vai empregar para 351 00:15:48,230 --> 00:15:51,080 extremo semestre, así como para o desenvolvemento web, así como no 352 00:15:51,080 --> 00:15:53,580 futuro para aplicacións reais do mesmo. 353 00:15:53,580 --> 00:15:56,350 Entón, máis concretamente, o aparello CS50 é unha peza de libre 354 00:15:56,350 --> 00:15:59,400 software que permite que executa un outro sistema operativo, 355 00:15:59,400 --> 00:16:02,670 Linux, neste caso, no seu propio ordenador, dunha fiestra. 356 00:16:02,670 --> 00:16:04,750 Agora non pode só baixar o aparello. 357 00:16:04,750 --> 00:16:08,170 Debe dun programa co que xogar ou realizar o aparello. 358 00:16:08,170 --> 00:16:11,220 E aquel anaco de software é xeralmente coñecido como un 359 00:16:11,220 --> 00:16:11,520 hypervisor. 360 00:16:11,520 --> 00:16:14,050 Hipervisores vir en forma de produtos como o VMware, 361 00:16:14,050 --> 00:16:15,820 Virtual Box, Parallels. 362 00:16:15,820 --> 00:16:18,390 Todos os tipos de empresas fan software libre e 363 00:16:18,390 --> 00:16:19,310 comercial, igualmente. 364 00:16:19,310 --> 00:16:21,480 O que podes ver no problema Set 1 son instrucións sobre como 365 00:16:21,480 --> 00:16:23,440 obter o software gratuíto co que a 366 00:16:23,440 --> 00:16:25,000 executar Appliance CS50. 367 00:16:25,000 --> 00:16:28,060 E unha vez que fai, vai ter, nunha ventá no seu Mac ou PC, 368 00:16:28,060 --> 00:16:30,710 un ambiente de traballo que se parece moito como este, onde 369 00:16:30,710 --> 00:16:33,100 el ten unha cousa-menú Inicio, como na 370 00:16:33,100 --> 00:16:34,510 canto esquerdo inferior. 371 00:16:34,510 --> 00:16:38,030 Ten unha carpeta Home ou directorio home, no ángulo superior esquerdo 372 00:16:38,030 --> 00:16:40,280 alí, unha lata de lixo, e así por diante. 373 00:16:40,280 --> 00:16:43,450 Entón imos separar os detalles necesarios como imos nós. 374 00:16:43,450 --> 00:16:46,430 >> Pero agora imos comezar a mergullo en C. 375 00:16:46,430 --> 00:16:49,200 Entón C é a linguaxe de programación, semellantes en espírito á 376 00:16:49,200 --> 00:16:52,390 Cero, pero moito menos gráfica, pero, ironicamente, lonxe 377 00:16:52,390 --> 00:16:54,730 máis poderosa, unha vez que comeza ilustrado con el. 378 00:16:54,730 --> 00:16:58,970 Así, en C, escribimos os programas, escribindo código fonte, que é 379 00:16:58,970 --> 00:17:01,640 esta sintaxe do inglés, semellante ás medias 380 00:17:01,640 --> 00:17:05,609 demostración de que fixemos a última vez que lle permite 381 00:17:05,609 --> 00:17:07,910 expresarse con bastante precisión, se 382 00:17:07,910 --> 00:17:09,760 arcanely, para o seu ordenador. 383 00:17:09,760 --> 00:17:11,960 >> Entón, que tipo de produto de software que realmente precisa 384 00:17:11,960 --> 00:17:15,520 para escribir programas nunha linguaxe como C, na base da nosa 385 00:17:15,520 --> 00:17:17,492 conversa luns? 386 00:17:17,492 --> 00:17:19,650 [Inaudível] 387 00:17:19,650 --> 00:17:21,079 OK, só precisa un editor de texto. 388 00:17:21,079 --> 00:17:22,890 Non precisa de ningún software especial 389 00:17:22,890 --> 00:17:24,460 per se para escribir programas. 390 00:17:24,460 --> 00:17:27,220 Só precisa un editor de texto como o Bloc de Notas, en Windows, 391 00:17:27,220 --> 00:17:30,450 TextEdit no Mac, ou algo chamado gedit, no mundo da 392 00:17:30,450 --> 00:17:32,020 Linux, que imos empregar aquí. 393 00:17:32,020 --> 00:17:33,750 E é iso, escribir programas. 394 00:17:33,750 --> 00:17:35,480 >> Pero a escrita é só a metade da ecuación. 395 00:17:35,480 --> 00:17:36,630 Debe entón executa-los. 396 00:17:36,630 --> 00:17:38,320 Pero, a fin de executar programas - 397 00:17:38,320 --> 00:17:39,600 non pode executar código fonte. 398 00:17:39,600 --> 00:17:41,500 Vostede, en vez de facer o que a el primeiro? 399 00:17:41,500 --> 00:17:41,900 Si 400 00:17:41,900 --> 00:17:43,200 DAVID J. Malan: Debe 401 00:17:43,200 --> 00:17:44,130 recompila-lo. 402 00:17:44,130 --> 00:17:49,010 E doutra persoa, a compilación do código fonte significa - 403 00:17:49,010 --> 00:17:50,260 [Inaudível] 404 00:17:52,300 --> 00:17:52,700 DAVID J. Malan: Exactamente. 405 00:17:52,700 --> 00:17:54,430 Traducíndose para ceros e uns. 406 00:17:54,430 --> 00:17:57,150 Porque todos nós, nestes días, ten ordenadores que posúen procesadores, 407 00:17:57,150 --> 00:18:00,350 case todas as cales son feitas por unha compañía chamada Intel e 408 00:18:00,350 --> 00:18:03,320 Intel Inside, significa que hai está dentro do seu cerebro 409 00:18:03,320 --> 00:18:04,990 ordenador, coñecido como o CPU. 410 00:18:04,990 --> 00:18:07,570 E unha das cousas que o cerebro fai é, el sabe 411 00:18:07,570 --> 00:18:10,390 Como entender os patróns de ceros e uns. 412 00:18:10,390 --> 00:18:13,240 El sabe o patrón de bits representa diso, o que 413 00:18:13,240 --> 00:18:15,500 estándar representa subtrações, o patrón de 414 00:18:15,500 --> 00:18:18,890 bits representan a impresión, e creando un son audible. 415 00:18:18,890 --> 00:18:22,450 >> Así, en resumo, o procesador, xunto co sistema operativo, 416 00:18:22,450 --> 00:18:25,230 que é unha peza de software que roda encima do CPU, 417 00:18:25,230 --> 00:18:26,050 por así dicir. 418 00:18:26,050 --> 00:18:29,850 Xuntos, estes dous anacos sabe como executar programas que 419 00:18:29,850 --> 00:18:31,070 Nós seres humanos escribir. 420 00:18:31,070 --> 00:18:34,040 >> Entón, se eu vou para o Appliance CS50 aquí, eu teño abrir 421 00:18:34,040 --> 00:18:35,660 un editor de texto e podo acceder a este 422 00:18:35,660 --> 00:18:36,560 nun par de formas. 423 00:18:36,560 --> 00:18:39,060 I pode ir ao menú, Programación, 424 00:18:39,060 --> 00:18:40,230 e entón eu podo seleccionar - 425 00:18:40,230 --> 00:18:40,810 Non, non este menú. 426 00:18:40,810 --> 00:18:43,860 Eu podo ir Accesorios / gedit aquí para abrir 427 00:18:43,860 --> 00:18:45,090 meu editor de texto pouco. 428 00:18:45,090 --> 00:18:48,030 Ou, máis simplemente, que pode facer clic nesta icona pouco no fondo 429 00:18:48,030 --> 00:18:48,970 canto esquerdo. 430 00:18:48,970 --> 00:18:50,430 E agora eu teño ese ambiente aquí. 431 00:18:50,430 --> 00:18:52,590 É moi reminiscente de un editor de texto simple, con só 432 00:18:52,590 --> 00:18:53,820 unha ou dúas diferenzas. 433 00:18:53,820 --> 00:18:56,420 No cume, onde está o cursor piscando agora, este é o lugar onde 434 00:18:56,420 --> 00:18:57,900 Eu podo comezar a escribir o meu código. 435 00:18:57,900 --> 00:19:00,415 No fondo é esa cousa chamada xanela de terminal. 436 00:19:00,415 --> 00:19:03,400 E que tipo de cousas que podo facer neste 437 00:19:03,400 --> 00:19:04,960 chamado fiestra de terminal? 438 00:19:04,960 --> 00:19:06,680 [Inaudível] 439 00:19:06,680 --> 00:19:07,890 >> Ok, entón eu vou executar comandos. 440 00:19:07,890 --> 00:19:10,300 E algúns dos comandos que transcorreu o luns foron un pouco 441 00:19:10,300 --> 00:19:15,070 enigmáticas no inicio, pero ls á lista, cd para o directorio cambio, 442 00:19:15,070 --> 00:19:16,540 rm para eliminar. 443 00:19:16,540 --> 00:19:19,680 Entón, é unha especie de xeito old-school de navegar no seu 444 00:19:19,680 --> 00:19:22,310 ordenador, usando só o teclado e comandos textuais, 445 00:19:22,310 --> 00:19:24,130 e non, en xeral, utilizando un rato. 446 00:19:24,130 --> 00:19:25,960 Pero imos ver, en pouco tempo, iso realmente nos dá unha 447 00:19:25,960 --> 00:19:28,520 pouco máis de potencia e un pouco máis de precisión coa que 448 00:19:28,520 --> 00:19:29,600 nos expresar. 449 00:19:29,600 --> 00:19:31,330 E entón, aquí á esquerda, nós só estamos indo a ver, 450 00:19:31,330 --> 00:19:34,360 Como comezar o software de escrita, un pequeno resumo do 451 00:19:34,360 --> 00:19:36,350 programa que temos escrito na esquina superior esquerda. 452 00:19:36,350 --> 00:19:38,360 Pero imos ver iso de novo antes de tempo. 453 00:19:38,360 --> 00:19:40,050 >> Entón, imos facer algo moi sinxelo aquí. 454 00:19:40,050 --> 00:19:43,440 Deixe-me primeiro ir adiante e vai Arquivo, Gardar, e eu son só 455 00:19:43,440 --> 00:19:45,970 Vai facer clic en jharvard aquí, máis á esquerda, e 456 00:19:45,970 --> 00:19:48,930 jharvard é, de novo, o nome para o cartafol do meu fogar, a miña 457 00:19:48,930 --> 00:19:52,110 arquivos persoais, eu agora sendo John Harvard, como todos vostedes 458 00:19:52,110 --> 00:19:54,230 en breve será John Harvard neste ambiente. 459 00:19:54,230 --> 00:19:57,360 El ten este directorio Home, Meus Documentos e así por diante, 460 00:19:57,360 --> 00:19:58,900 que quero gardar agora este ficheiro dentro 461 00:19:58,900 --> 00:20:01,520 Entón, eu vou chamalo hello.c. Entón eu estou indo a ir 462 00:20:01,520 --> 00:20:05,770 adiante e faga clic en Gardar e, agora, o que eu teño aquí é unha guía 463 00:20:05,770 --> 00:20:09,440 chamado hello.c, tanto como outro tipo de editor. 464 00:20:09,440 --> 00:20:11,760 >> Entón, agora deixe-me ir adiante e comezar a escribir un programa. 465 00:20:11,760 --> 00:20:14,440 int main (void). 466 00:20:14,440 --> 00:20:18,150 E entón eu fixen a última vez, printf para impresión formatado, 467 00:20:18,150 --> 00:20:22,120 ("Ola, mundo!" 468 00:20:22,120 --> 00:20:24,500 );. 469 00:20:24,500 --> 00:20:25,630 Case completa. 470 00:20:25,630 --> 00:20:27,130 Pero eu estou sentindo falta dun par de detalles. 471 00:20:27,130 --> 00:20:30,210 O que falta a partir deste programa que eu realmente teño para 472 00:20:30,210 --> 00:20:31,890 que realmente compilar? 473 00:20:31,890 --> 00:20:32,130 Si 474 00:20:32,130 --> 00:20:33,980 [Inaudível]? 475 00:20:33,980 --> 00:20:35,770 >> DAVID J. Malan: Si, entón eu teño incluír o estándar 476 00:20:35,770 --> 00:20:36,700 I / O biblioteca. 477 00:20:36,700 --> 00:20:39,470 Así que ir por riba de inicio, entón eu só vou 478 00:20:39,470 --> 00:20:40,790 facer un espazo para el alí. 479 00:20:40,790 --> 00:20:44,420 E eu vou facer # include. 480 00:20:44,420 --> 00:20:46,570 E teña en conta os corchetes angulares alí. 481 00:20:46,570 --> 00:20:49,410 E como un aparte, gedit é un usuario pouco agradable, se 482 00:20:49,410 --> 00:20:52,420 ás veces, un pouco confuso, no que intenta axudar á súa 483 00:20:52,420 --> 00:20:54,770 ollos entender o que se aliñan co que. 484 00:20:54,770 --> 00:20:57,760 Así, o feito de que o meu cursor está ben próximo a este ángulo 485 00:20:57,760 --> 00:21:00,600 soporte, observe como está destacando o ángulo outro 486 00:21:00,600 --> 00:21:01,920 soporte máis un regalo. 487 00:21:01,920 --> 00:21:03,770 E iso é só para chamar a miña atención para o feito de que eu 488 00:21:03,770 --> 00:21:04,460 teñen simetría. 489 00:21:04,460 --> 00:21:07,010 E simetría na programación xeral é bo. 490 00:21:07,010 --> 00:21:10,270 Do mesmo xeito, se eu pasar o meu cursor fin, observe como o 491 00:21:10,270 --> 00:21:13,630 claves de liña para mostrar que, si, eu teño un aberto 492 00:21:13,630 --> 00:21:15,160 e un pechado, por así dicir. 493 00:21:15,160 --> 00:21:16,640 >> Todo ben, e podo facer outra cousa. 494 00:21:16,640 --> 00:21:20,090 Non é estrictamente necesario, pero unha boa práctica, para dicir 495 00:21:20,090 --> 00:21:21,250 voltar 0. 496 00:21:21,250 --> 00:21:24,140 E 0 retorno fai o que para nós aquí? 497 00:21:24,140 --> 00:21:25,584 Ou significa o que? 498 00:21:25,584 --> 00:21:27,480 [Inaudível] 499 00:21:27,480 --> 00:21:28,300 DAVID J. Malan: Pero nada está mal. 500 00:21:28,300 --> 00:21:30,280 E, francamente, é difícil para moito para dar mal nun 501 00:21:30,280 --> 00:21:31,250 programar ese curto. 502 00:21:31,250 --> 00:21:33,930 Entón, eu só estou sendo super explícito que está todo ben. 503 00:21:33,930 --> 00:21:36,740 Eu, o ser humano, cando executar este programa, probablemente nunca 504 00:21:36,740 --> 00:21:38,150 ver que 0. 505 00:21:38,150 --> 00:21:41,070 Xeralmente, estes números que están sendo retornados de inicio 506 00:21:41,070 --> 00:21:43,540 apenas elevar as súas cabezas para os seres humanos cando 507 00:21:43,540 --> 00:21:44,360 algo sae mal. 508 00:21:44,360 --> 00:21:46,640 E comeza un pouco de pop up de erro do sistema dicindo, un, 509 00:21:46,640 --> 00:21:48,760 dous, tres, ou calquera que sexa o número que se 510 00:21:48,760 --> 00:21:50,100 foi realmente devolto. 511 00:21:50,100 --> 00:21:52,870 Entón, calquera cousa de malo iso? 512 00:21:52,870 --> 00:21:55,300 [Inaudível] 513 00:21:55,300 --> 00:21:58,100 >> DAVID J. Malan: Entón este non é tanto un erro funcional 514 00:21:58,100 --> 00:21:59,240 pero unha estética. 515 00:21:59,240 --> 00:22:02,340 Eu probablemente debería poñer un carácter de nova liña alí no 516 00:22:02,340 --> 00:22:05,240 final desta cadea, para que realmente se move o cursor 517 00:22:05,240 --> 00:22:08,340 a seguinte liña, o programa só parece un pouco máis bonito. 518 00:22:08,340 --> 00:22:10,340 >> Entón, agora deixe-me ir ata a miña ventá de terminal 519 00:22:10,340 --> 00:22:11,490 e zoom para atrás dentro 520 00:22:11,490 --> 00:22:13,390 E esa cousa aquí, é chamado de liña de comandos. 521 00:22:13,390 --> 00:22:16,760 É só me lembrar que eu son, jharvard @ aparello, onde 522 00:22:16,760 --> 00:22:18,850 aparello é o nome do computador no que estou. 523 00:22:18,850 --> 00:22:22,380 Entre parénteses está presente til, o símbolo rabisco, que 524 00:22:22,380 --> 00:22:24,160 representa o que? 525 00:22:24,160 --> 00:22:25,590 Audiencia: directorio Home. 526 00:22:25,590 --> 00:22:26,350 DAVID J. Malan: directorio Home. 527 00:22:26,350 --> 00:22:29,350 Entón, iso é só unha notación abreviada para dicir que están en 528 00:22:29,350 --> 00:22:32,780 seu cartafol persoal onde todos os seus arquivos van por defecto. 529 00:22:32,780 --> 00:22:36,080 Entón, agora, aquí, podo escribir ls á lista. 530 00:22:36,080 --> 00:22:40,020 E a única cousa que eu vexo aquí no momento é hello.c. 531 00:22:40,020 --> 00:22:41,770 E iso é bo, porque eu escribín iso. 532 00:22:41,770 --> 00:22:44,380 >> Entón deixe-me ir adiante e fai Olá 533 00:22:44,380 --> 00:22:46,830 E repare que eu non estou escribindo facer hello.c. 534 00:22:46,830 --> 00:22:50,300 En vez diso, eu só estou escribindo o nome base do ficheiro, Olá 535 00:22:50,300 --> 00:22:53,690 E facer, como vimos na segunda-feira, só vai deducir que quero 536 00:22:53,690 --> 00:22:54,920 o. arquivo c. 537 00:22:54,920 --> 00:22:56,820 Entón agora eu escriba facer Olá 538 00:22:56,820 --> 00:22:59,280 Agora eu vexo este comando moi longo e vai continuar 539 00:22:59,280 --> 00:23:00,480 vendo iso de novo e de novo. 540 00:23:00,480 --> 00:23:03,620 Pero, para ser bumbum, por suposto, a palabra que só apareceu, 541 00:23:03,620 --> 00:23:05,340 Que é o compilador real. 542 00:23:05,340 --> 00:23:08,200 Facer é só unha utilidade de construción. 543 00:23:08,200 --> 00:23:11,900 É só un programa máis agradable que me salva, o 544 00:23:11,900 --> 00:23:15,310 longo prazo, de ter que escribir tedioso longo 545 00:23:15,310 --> 00:23:17,020 mandos como ese. 546 00:23:17,020 --> 00:23:18,950 Entón pode realizar Clang manualmente. 547 00:23:18,950 --> 00:23:20,530 Podes escribir todo isto manualmente. 548 00:23:20,530 --> 00:23:21,580 Así queda moi tediosa. 549 00:23:21,580 --> 00:23:24,720 E así que é só un programa que simplifica a nosa vida e 550 00:23:24,720 --> 00:23:27,120 executa comandos máis complexos para nós. 551 00:23:27,120 --> 00:23:29,410 >> Todo ben, entón agora o ficheiro que eu debería ter 552 00:23:29,410 --> 00:23:31,540 no meu directorio actual? 553 00:23:31,540 --> 00:23:36,310 Non só hello.c, pero tamén Olá 554 00:23:36,310 --> 00:23:39,710 Entón, se eu quero correr Ola, lembro que eu digo punto barra, 555 00:23:39,710 --> 00:23:42,220 onde os medios de punto ir a carpeta actual, onde queira que 556 00:23:42,220 --> 00:23:46,060 son, a continuación, executa o programa chamado Ola, e de feito, agora, 557 00:23:46,060 --> 00:23:48,080 Teño Ola mundo. 558 00:23:48,080 --> 00:23:51,640 Todo ben, todas as preguntas sobre o fluxo de traballo ou a sintaxe de 559 00:23:51,640 --> 00:23:52,890 o que nós fixemos? 560 00:23:55,380 --> 00:23:57,040 >> Todo ben, entón imos levar as cousas por riba de un entalhe novo. 561 00:23:57,040 --> 00:24:00,430 Polo tanto, este foi underwhelming só para escribir un programa que só 562 00:24:00,430 --> 00:24:01,790 xa di Ola, mundo. 563 00:24:01,790 --> 00:24:03,920 Entón, nós cambiamos, o luns, para dicir, Ola, David. 564 00:24:03,920 --> 00:24:06,560 É un pouco máis persoal, pero tan difícil codificado como 565 00:24:06,560 --> 00:24:07,410 primeira versión. 566 00:24:07,410 --> 00:24:08,780 Polo tanto, non todo o que convincente. 567 00:24:08,780 --> 00:24:13,120 Pero existe, en C, certamente funcións ademais 568 00:24:13,120 --> 00:24:15,700 impresión, funcións que permiten obter datos introducidos polo usuario. 569 00:24:15,700 --> 00:24:17,990 E o xeito que fixemos iso, o outro día, foi o seguinte. 570 00:24:17,990 --> 00:24:21,440 Antes de que realmente imprimir algo, comecei a 571 00:24:21,440 --> 00:24:22,410 algo do usuario. 572 00:24:22,410 --> 00:24:23,370 Entón deixe-me facelo de novo. 573 00:24:23,370 --> 00:24:26,580 >> Cadea s, onde s é só o nome dun arbitrario, aquí, por un 574 00:24:26,580 --> 00:24:30,600 cadea, é igual a GetString. 575 00:24:30,600 --> 00:24:32,070 Entón, o que foi GetString? 576 00:24:32,070 --> 00:24:34,630 É, obviamente, recibe unha cadea, con base no seu nome. 577 00:24:34,630 --> 00:24:37,560 Pero o que é máis tecnicamente? 578 00:24:37,560 --> 00:24:38,440 É unha función. 579 00:24:38,440 --> 00:24:41,790 Polo tanto, é unha función que non ven con C per se. 580 00:24:41,790 --> 00:24:43,660 CS50 equipo escribiu isto. 581 00:24:43,660 --> 00:24:46,940 E así, para usar isto, non pode simplemente engadir stdio.h, 582 00:24:46,940 --> 00:24:49,630 Tamén cómpre incluír o que? 583 00:24:49,630 --> 00:24:50,060 Si 584 00:24:50,060 --> 00:24:54,210 Entón cs50.h, que é só un arquivo que escribiu hai uns anos. 585 00:24:54,210 --> 00:24:57,130 Nós instalado no aparello para o lado 586 00:24:57,130 --> 00:24:58,490 todos os ficheiros por defecto. 587 00:24:58,490 --> 00:25:00,500 E así, estas primeiras semanas de clase, usaremos 588 00:25:00,500 --> 00:25:02,820 isto só para simplificar o proceso de facer moi básico 589 00:25:02,820 --> 00:25:04,600 cousas como a entrada do usuario recibindo. 590 00:25:04,600 --> 00:25:07,370 Porque, como veremos algunhas semanas, a entrada do usuario entrar en un 591 00:25:07,370 --> 00:25:10,180 linguaxe como C é sorprendente complexo, 592 00:25:10,180 --> 00:25:14,360 especialmente porque non sabe con antelación, xeralmente, como 593 00:25:14,360 --> 00:25:17,030 moita cousa que o usuario vai escribir dentro 594 00:25:17,030 --> 00:25:20,340 E cando non sabe a cantidade de datos que esperar, non 595 00:25:20,340 --> 00:25:22,380 saber canto de memoria para reservar. 596 00:25:22,380 --> 00:25:25,480 E se realmente ten un usuario que está intentando contraditorio 597 00:25:25,480 --> 00:25:28,180 para invadir o seu sistema, frear o ordenador, así, 598 00:25:28,180 --> 00:25:31,600 xeralmente o primeiro método de ataque é, así como eu fixen en 599 00:25:31,600 --> 00:25:34,950 Luns, escriba unha secuencia enteira longa de caracteres aleatorios, 600 00:25:34,950 --> 00:25:37,020 presione Enter, e ver o que rompe. 601 00:25:37,020 --> 00:25:40,800 Porque xeralmente, se unha quebra do programa, que apunta a 602 00:25:40,800 --> 00:25:42,650 un fallo de seguridade, potencialmente. 603 00:25:42,650 --> 00:25:45,250 El certamente apunta para ti, programador, tendo feito unha 604 00:25:45,250 --> 00:25:49,050 erro, pero máis perigoso, que podería ter feito un 605 00:25:49,050 --> 00:25:52,430 relacionadas coa seguridade erro, e, xeralmente, nós imos ver que 606 00:25:52,430 --> 00:25:54,840 é así que as máquinas están comprometidos para este día, tanto 607 00:25:54,840 --> 00:25:56,620 no mundo da web e programas no 608 00:25:56,620 --> 00:25:58,070 liña de comandos, coma este. 609 00:25:58,070 --> 00:25:58,350 >> Todo ben. 610 00:25:58,350 --> 00:26:00,460 Así cadea s é igual GetString. 611 00:26:00,460 --> 00:26:03,380 Entón, máis concretamente, agora, o que é que a liña 6 facer aquí? 612 00:26:03,380 --> 00:26:05,640 Así, a función do lado dereito está cadea, 613 00:26:05,640 --> 00:26:06,890 leva cantos argumentos? 614 00:26:09,458 --> 00:26:09,900 Okay. 615 00:26:09,900 --> 00:26:10,400 Entón ningún. 616 00:26:10,400 --> 00:26:11,360 A sanidade pouco comprobar. 617 00:26:11,360 --> 00:26:15,380 Un argumento, unha vez máis, é só unha entrada a unha función de cambiar 618 00:26:15,380 --> 00:26:17,250 seu comportamento estándar de algunha maneira. 619 00:26:17,250 --> 00:26:19,540 Pero, neste caso, eu non quero cambiar 620 00:26:19,540 --> 00:26:20,650 o comportamento dos GetString. 621 00:26:20,650 --> 00:26:22,430 Eu só quería ter unha secuencia. 622 00:26:22,430 --> 00:26:25,190 Entón eu coloque nada nos parénteses, e entón eu coloque un 623 00:26:25,190 --> 00:26:27,550 coma demarking o fin da liña de código. 624 00:26:27,550 --> 00:26:29,840 Agora, o signo igual non significa igual, per se. 625 00:26:29,840 --> 00:26:32,690 Isto significa asignación, o que significa poñer o que queda 626 00:26:32,690 --> 00:26:36,060 emitidas dentro dereito de todo o que é do lado esquerdo. 627 00:26:36,060 --> 00:26:39,400 >> Entón, á esquerda, dicimos que temos declarado 628 00:26:39,400 --> 00:26:41,630 cadea chamada s. 629 00:26:41,630 --> 00:26:44,240 E máis concretamente, temos memoria alocada dentro 630 00:26:44,240 --> 00:26:46,340 que nós imos poñer os bits que representa unha secuencia de 631 00:26:46,340 --> 00:26:46,850 caracteres. 632 00:26:46,850 --> 00:26:49,400 Pero para hoxe, nós alocamos 633 00:26:49,400 --> 00:26:51,450 ou declarada unha cadea. 634 00:26:51,450 --> 00:26:51,790 Todo ben. 635 00:26:51,790 --> 00:26:54,760 Entón, agora, unha vez que eu fixen iso, quero conectar o valor de 636 00:26:54,760 --> 00:26:56,535 s non, o valor de David. 637 00:26:56,535 --> 00:27:00,200 Entón, iso é malo por que? 638 00:27:03,060 --> 00:27:04,870 Entón, este é só literalmente o s hard-Coded. 639 00:27:04,870 --> 00:27:06,870 É para dicir "Ola, s", o que non é o que quero. 640 00:27:06,870 --> 00:27:07,790 Entón, podo facer iso. 641 00:27:07,790 --> 00:27:10,330 O sinal de porcentaxe é un espazo reservado, pero agora eu teño 642 00:27:10,330 --> 00:27:12,520 pasar para imprimir un segundo argumento. 643 00:27:12,520 --> 00:27:15,160 Lembre que os argumentos para funcións son separadas por 644 00:27:15,160 --> 00:27:20,300 comas, para comas que vén aquí eu coloque tras esta é a carta. 645 00:27:20,300 --> 00:27:23,740 E, neste contexto, agora, s é a variable e printf, 646 00:27:23,740 --> 00:27:25,550 ao recibir as dúas entradas - 647 00:27:25,550 --> 00:27:29,440 a cadea da esquerda eo nome variable á dereita - 648 00:27:29,440 --> 00:27:32,750 que vai conectar o último para a antiga para nós, e 649 00:27:32,750 --> 00:27:34,600 só imprimir unha secuencia de caracteres contén fermosa agradable 650 00:27:34,600 --> 00:27:36,770 que é o que nós ingresaran dentro 651 00:27:36,770 --> 00:27:37,560 >> Entón, imos tentar iso. 652 00:27:37,560 --> 00:27:38,860 Indo para adiante e zoom out, de volta 653 00:27:38,860 --> 00:27:40,250 a miña xanela de terminal. 654 00:27:40,250 --> 00:27:41,840 Aumentar o zoom na parte inferior aquí. 655 00:27:41,840 --> 00:27:44,070 Insira facer Olá 656 00:27:44,070 --> 00:27:45,870 Clang parece ser reprise. 657 00:27:45,870 --> 00:27:49,280 Eu estou indo a escribir. / Ola, Intro. 658 00:27:49,280 --> 00:27:52,145 Nada parece estar a suceder aínda, pero é neste ventá 659 00:27:52,145 --> 00:27:55,700 que eu poida escribir algo como Nate, Intro, e agora temos 660 00:27:55,700 --> 00:27:56,380 Ola, Nate. 661 00:27:56,380 --> 00:27:59,600 E podo facelo de novo con Rob, e así por diante. 662 00:27:59,600 --> 00:28:03,410 Polo tanto, agardamos que agora este programa está comportándose como eu pretendo. 663 00:28:03,410 --> 00:28:05,720 >> Agora non, todo o usuario que agradable. 664 00:28:05,720 --> 00:28:07,930 Eu non teño idea o que está a ser esperado de min. 665 00:28:07,930 --> 00:28:09,620 Entón, nós certamente podemos limpar isto un pouco. 666 00:28:09,620 --> 00:28:13,270 Deixe-me volver aquí e, en vez de só mergullo e 667 00:28:13,270 --> 00:28:16,480 pedindo ao usuario para unha secuencia, deixe-me dicir explicitamente o 668 00:28:16,480 --> 00:28:17,750 usuario o que eu estou esperando. 669 00:28:17,750 --> 00:28:21,610 Entón printf ("Introduza unha cadea:" 670 00:28:21,610 --> 00:28:24,080 ); 671 00:28:24,080 --> 00:28:25,510 Entón non variables aquí. 672 00:28:25,510 --> 00:28:26,750 Non hai sinais de por cento. 673 00:28:26,750 --> 00:28:28,550 Só a frase simple Inglés. 674 00:28:28,550 --> 00:28:34,030 Déixame ir ao fondo aquí e siga novamente o meu programa. 675 00:28:34,030 --> 00:28:35,380 Pero nada parece mudar. 676 00:28:35,380 --> 00:28:37,350 Por que? 677 00:28:37,350 --> 00:28:38,380 Eu teño que recompilar. 678 00:28:38,380 --> 00:28:39,570 Así erro fácil de cometer. 679 00:28:39,570 --> 00:28:41,700 Pero ten que non só gardar o arquivo, pero 680 00:28:41,700 --> 00:28:43,260 recompilar o programa. 681 00:28:43,260 --> 00:28:46,640 E así se eu volver a correr facer Ola, agora Clang executado. 682 00:28:46,640 --> 00:28:51,800 Agora podo executar. / Olá E agora eu vexo "Introduza unha cadea:". 683 00:28:51,800 --> 00:28:52,050 Okay. 684 00:28:52,050 --> 00:28:53,440 Agora é un pouco máis user-friendly. 685 00:28:53,440 --> 00:28:55,850 Nate, Intro, Ola, Nate. 686 00:28:55,850 --> 00:28:57,310 >> Ben, imos tentar de novo e comezar a pensar 687 00:28:57,310 --> 00:28:58,080 sobre casos de canto. 688 00:28:58,080 --> 00:29:00,520 Así como scratch, é encorajado ou están a ser 689 00:29:00,520 --> 00:29:03,180 encoraxados na especificación do tipo de pensar sobre o que podería ir 690 00:29:03,180 --> 00:29:06,610 mal se non prevista todo o que o usuario pode facer. 691 00:29:06,610 --> 00:29:08,050 Erros, polo tanto, podería ocorrer. 692 00:29:08,050 --> 00:29:09,710 Entón, introduce unha secuencia - 693 00:29:09,710 --> 00:29:11,130 o que é un caso de canto aquí? 694 00:29:11,130 --> 00:29:13,320 ¿Que é un escenario que eu, o programador, non pode ter 695 00:29:13,320 --> 00:29:16,070 anticipado? 696 00:29:16,070 --> 00:29:17,600 Si 697 00:29:17,600 --> 00:29:17,920 Okay. 698 00:29:17,920 --> 00:29:22,060 Entón, o que se eu escribir un número coma este? 699 00:29:22,060 --> 00:29:22,500 Todo ben. 700 00:29:22,500 --> 00:29:24,490 Entón, el aínda funciona. 701 00:29:24,490 --> 00:29:25,880 Gramaticalmente non ten sentido. 702 00:29:25,880 --> 00:29:27,180 Pero polo menos o programa. 703 00:29:27,180 --> 00:29:28,650 >> O que é outro caso esquina? 704 00:29:28,650 --> 00:29:29,610 Algo que eu non esperaba. 705 00:29:29,610 --> 00:29:31,590 Si? 706 00:29:31,590 --> 00:29:31,940 Okay. 707 00:29:31,940 --> 00:29:34,950 Entón, nós poderíamos facer algo como un número moi, moi grande. 708 00:29:34,950 --> 00:29:37,270 Entón, imos facelo aquí. 709 00:29:37,270 --> 00:29:40,880 Deixe-me afastar por un segundo, deixe-me salientar. 710 00:29:40,880 --> 00:29:42,250 Non se pode copiar e pegar aquí. 711 00:29:42,250 --> 00:29:42,470 Todo ben. 712 00:29:42,470 --> 00:29:44,440 Entón eu non podo copiar e pegar esta xanela de terminal, así que imos 713 00:29:44,440 --> 00:29:46,950 apenas simula-lo. 714 00:29:46,950 --> 00:29:51,340 Deixe-me afastar, vai romper. 715 00:29:51,340 --> 00:29:52,700 Eu non vou facer iso por moito tempo, porque non vai 716 00:29:52,700 --> 00:29:54,440 realmente romper neste programa. 717 00:29:54,440 --> 00:29:55,260 Pero podería. 718 00:29:55,260 --> 00:29:55,830 Intro. 719 00:29:55,830 --> 00:29:56,580 Pero iso non aconteceu. 720 00:29:56,580 --> 00:29:57,050 Todo ben. 721 00:29:57,050 --> 00:29:58,440 Pero é un caso de canto xenuíno. 722 00:29:58,440 --> 00:30:01,610 E a única razón que se comportou correctamente, para 723 00:30:01,610 --> 00:30:05,820 falar, é porque a función GetString CS50 é realmente 724 00:30:05,820 --> 00:30:08,040 concibida baixo o capo, como veremos algunhas semanas, 725 00:30:08,040 --> 00:30:11,570 para reservar automaticamente RAM máis e máis, máis e máis 726 00:30:11,570 --> 00:30:14,330 de memoria do sistema operativo, cando se entende, wow, 727 00:30:14,330 --> 00:30:16,670 realmente escribiu algo moi longo. 728 00:30:16,670 --> 00:30:18,500 Agora, iso é un pouco de mentira. 729 00:30:18,500 --> 00:30:22,020 Se realmente parou por un bo tempo e eu escriba 730 00:30:22,020 --> 00:30:24,640 algo así como 5 millóns de carácteres no teclado 731 00:30:24,640 --> 00:30:28,060 aquí, ou realmente bateu copiar e pegar un pouco, que moi posiblemente 732 00:30:28,060 --> 00:30:29,730 podería facer que o programa trabe. 733 00:30:29,730 --> 00:30:32,130 Só un pouco máis difícil de simular que, cunha finita 734 00:30:32,130 --> 00:30:33,740 cantidade de tempo. 735 00:30:33,740 --> 00:30:37,320 >> O que é outra esquina caso poderiamos tentar? 736 00:30:37,320 --> 00:30:38,730 Si? 737 00:30:38,730 --> 00:30:39,020 Si 738 00:30:39,020 --> 00:30:40,360 Entón, por que non responder a nada? 739 00:30:40,360 --> 00:30:43,130 Entón, nós realmente temos que tomar algunhas medidas, porque doutra forma 740 00:30:43,130 --> 00:30:45,060 o programa vai sentir alí piscando durante todo o día. 741 00:30:45,060 --> 00:30:46,860 Pero se eu só prema Intro - 742 00:30:46,860 --> 00:30:48,780 OK, agora, aínda parece mal. 743 00:30:48,780 --> 00:30:51,670 Non falla, pero quizais haxa agora unha oportunidade de 744 00:30:51,670 --> 00:30:54,190 iniciar a implantación dun programa máis rigoroso 745 00:30:54,190 --> 00:30:55,290 que realmente comprobar. 746 00:30:55,290 --> 00:30:57,640 E se a cadea, a sentenza, a palabra que 747 00:30:57,640 --> 00:31:00,890 escribiu ten lonxitude 0, así, talvez debería berrar co 748 00:31:00,890 --> 00:31:03,770 usuario ou dicir-lle para introducir unha cadea de novo, de xeito que 749 00:31:03,770 --> 00:31:06,560 realmente conseguir o que se parece un comportamento correcto e non 750 00:31:06,560 --> 00:31:08,570 só a supervisión completa da miña parte. 751 00:31:08,570 --> 00:31:11,130 >> Pregunta ao redor? 752 00:31:11,130 --> 00:31:11,970 Número decimal. 753 00:31:11,970 --> 00:31:13,120 Polo tanto, pode probar iso tamén. 754 00:31:13,120 --> 00:31:16,840 1,10000005. 755 00:31:16,840 --> 00:31:19,470 Parece que vai só traballar realmente ben. 756 00:31:19,470 --> 00:31:21,160 E que, en realidade, é esperado. 757 00:31:21,160 --> 00:31:24,550 Aínda que pode ter ingresaran o número alí, ou un 758 00:31:24,550 --> 00:31:28,200 maior número anterior, entende que cando estamos escribindo usuario 759 00:31:28,200 --> 00:31:31,070 de entrada e estamos usando a función GetString, non 760 00:31:31,070 --> 00:31:34,380 importa o que eu estou escribindo parece un número. 761 00:31:34,380 --> 00:31:36,720 Lembre que de acordo co ASCII, todo o seu 762 00:31:36,720 --> 00:31:39,920 teclado ten un valor numérico, que pode ser mapeada a unha 763 00:31:39,920 --> 00:31:41,480 personaxe, un char. 764 00:31:41,480 --> 00:31:44,490 Polo tanto, neste caso, aínda que eu pode introducir un número, o 765 00:31:44,490 --> 00:31:48,190 ordenador vai pensar nela, por así dicir, como unha cadea - 766 00:31:48,190 --> 00:31:49,870 algo que se parece un número, pero é 767 00:31:49,870 --> 00:31:51,090 en realidade non o número. 768 00:31:51,090 --> 00:31:53,450 Pero iso é realmente un xeito perfecto, porque agora podemos 769 00:31:53,450 --> 00:31:55,450 De feito, a transición para escribir programas que 770 00:31:55,450 --> 00:31:56,730 usar outros tipos de datos. 771 00:31:56,730 --> 00:32:01,840 >> Así, ademais de usar caracteres, ou mellor, ademais de utilizar cordas, 772 00:32:01,840 --> 00:32:04,510 entender que teñen outros tipos de datos en C, así como na 773 00:32:04,510 --> 00:32:05,230 noutros idiomas. 774 00:32:05,230 --> 00:32:08,480 Un char, como o nome suxire, é só un personaxe único. 775 00:32:08,480 --> 00:32:12,150 A flutuación é un valor de punto flotante, e iso é só unha fantasía 776 00:32:12,150 --> 00:32:14,470 forma de dicir un número real - algo que ten un decimal 777 00:32:14,470 --> 00:32:17,410 momento en que algúns números á esquerda e / ou á dereita. 778 00:32:17,410 --> 00:32:21,370 Un int é un enteiro, que é só un número como 123. 779 00:32:21,370 --> 00:32:24,170 E agora o máis interesante son cousas como parella. 780 00:32:24,170 --> 00:32:28,540 O que dixemos un dobre foi a última vez? 781 00:32:28,540 --> 00:32:30,050 E 64, non. 782 00:32:30,050 --> 00:32:33,560 Así, mentres normalmente un float é de 32-bit - 783 00:32:33,560 --> 00:32:37,340 por iso é tanto tempo na memoria, el usa 32 ceros e uns 784 00:32:37,340 --> 00:32:40,530 representan valores - un dobre é, literalmente, o dobre, o que 785 00:32:40,530 --> 00:32:43,810 significa que pode representar números grandes ou 786 00:32:43,810 --> 00:32:45,810 pode representar números máis precisos. 787 00:32:45,810 --> 00:32:48,690 Entón vostede pode ter máis números despois do punto decimal, pero 788 00:32:48,690 --> 00:32:51,520 como o compañeiro dixo no vídeo, incluso algo simple 789 00:32:51,520 --> 00:32:55,360 conceptualmente como 1/3 non pode ser representado con precisión por un 790 00:32:55,360 --> 00:32:58,330 ordenador, porque finalmente se executar para fóra de bits, e 791 00:32:58,330 --> 00:33:02,510 polo tanto, só se pode facer .33333333 tantas veces, en 792 00:33:02,510 --> 00:33:05,050 que punto só teño que dicir que estou fóra de representación 793 00:33:05,050 --> 00:33:08,120 espazo, eu teño que chama-lo só un día e representa-la 794 00:33:08,120 --> 00:33:10,200 un tanto imprecisa así. 795 00:33:10,200 --> 00:33:11,110 E un longo tempo - 796 00:33:11,110 --> 00:33:13,880 nome estúpido, pero é porque non hai un tipo de datos coñecido como un 797 00:33:13,880 --> 00:33:19,350 longa en C, que casualmente é moitas veces 32 bits, así como un 798 00:33:19,350 --> 00:33:21,670 int é de 32 bits, pero un longo tempo e 799 00:33:21,670 --> 00:33:23,560 xeralmente 64 bits. 800 00:33:23,560 --> 00:33:25,740 Entón, isto significa só que pode representar maior 801 00:33:25,740 --> 00:33:26,990 números que iso. 802 00:33:26,990 --> 00:33:27,410 >> Todo ben. 803 00:33:27,410 --> 00:33:29,390 Entón, se nós realmente queremos comezar a representar as cousas, 804 00:33:29,390 --> 00:33:31,030 pode ter que tipos máis sofisticados e 805 00:33:31,030 --> 00:33:32,340 é por iso que temos cadea. 806 00:33:32,340 --> 00:33:36,450 Entón, na biblioteca CS50, que arquivo chamado cs50.h, temos 807 00:33:36,450 --> 00:33:41,110 realmente declarado un tipo de datos, por así dicir, chamado cadea, 808 00:33:41,110 --> 00:33:42,710 pero cadea non existe na realidade. 809 00:33:42,710 --> 00:33:44,780 Isto é, de novo, unha desas capas, imos pelar 810 00:33:44,780 --> 00:33:47,490 de volta nunha semana ou dúas e xoga-lo fóra, e realmente 811 00:33:47,490 --> 00:33:49,640 mirar debaixo da capa en que unha secuencia realmente é, e 812 00:33:49,640 --> 00:33:50,840 como é representado. 813 00:33:50,840 --> 00:33:53,520 Tamén imos ollar para valores booleanos. 814 00:33:53,520 --> 00:33:56,040 >> Entón, o que era un bool no contexto do scratch? 815 00:33:59,154 --> 00:34:00,300 É certo ou falso. 816 00:34:00,300 --> 00:34:03,900 Entón é só un valor que é verdadeiro ou falso, ligado ou desactivado, 1 ou 817 00:34:03,900 --> 00:34:06,140 0, con todo quere ver no mundo. 818 00:34:06,140 --> 00:34:09,739 Así, en C, grazas á biblioteca CS50, que á súa vez 819 00:34:09,739 --> 00:34:12,179 inclúe outra biblioteca debaixo do capó, temos 820 00:34:12,179 --> 00:34:14,909 acceso a un tipo de datos que se denomina bool, que será 821 00:34:14,909 --> 00:34:18,730 literalmente nos permiten asignar os valores verdadeiro ou falso para 822 00:34:18,730 --> 00:34:20,219 cousas nun programa. 823 00:34:20,219 --> 00:34:23,880 >> Entón, imos adiante aquí e escribir un pequeno programa que 824 00:34:23,880 --> 00:34:26,330 fai algo que inclúen números vez. 825 00:34:26,330 --> 00:34:29,840 Entón deixe-me volver a Appliance CS50, deixe-me ir adiante e 826 00:34:29,840 --> 00:34:32,770 crear un novo ficheiro chamado aquí - 827 00:34:32,770 --> 00:34:35,460 imos só dicir algo simple, como math.c. 828 00:34:38,270 --> 00:34:38,710 Todo ben. 829 00:34:38,710 --> 00:34:41,600 E agora vai ata o cumio do meu programa, eu son 830 00:34:41,600 --> 00:34:42,510 vai facer o de sempre - 831 00:34:42,510 --> 00:34:44,780 # Incluír, para que eu poida usar 832 00:34:44,780 --> 00:34:46,860 printf, int main (void) - 833 00:34:46,860 --> 00:34:49,270 imos volver, finalmente, o que significa int 834 00:34:49,270 --> 00:34:52,389 aquí, o que significa baleiro aquí, pero polo de agora, só sei que 835 00:34:52,389 --> 00:34:54,270 ten que iniciar programas como este. 836 00:34:54,270 --> 00:34:56,280 Agora eu estou indo a ir adiante e dicir algo un pouco 837 00:34:56,280 --> 00:35:02,110 diferente - printf ("Déame un número:" 838 00:35:02,110 --> 00:35:03,570 );. 839 00:35:03,570 --> 00:35:09,220 Entón eu vou facer int n = GetInt, porque 840 00:35:09,220 --> 00:35:12,770 Acontece que GetInt é outra función na biblioteca CS50 841 00:35:12,770 --> 00:35:14,060 Ademais GetString. 842 00:35:14,060 --> 00:35:17,340 E agora eu vou facer algo estúpido, como "grazas 843 00:35:17,340 --> 00:35:25,760 a% d ", por enteiro decimal, e entón n coma, e 844 00:35:25,760 --> 00:35:26,620 a continuación, voltar 0. 845 00:35:26,620 --> 00:35:28,940 Entón, de novo, voltar 0 non ten nada que ver co número que eu son 846 00:35:28,940 --> 00:35:30,080 pedindo ao usuario para. 847 00:35:30,080 --> 00:35:33,620 Só significa que, ao final de todo, presuntamente, está ben. 848 00:35:33,620 --> 00:35:36,290 >> Entón deixe-me ir ata a miña ventá de terminal aquí. 849 00:35:36,290 --> 00:35:39,590 Deixe-me facer escribir matemáticas, entrar. 850 00:35:39,590 --> 00:35:41,360 E algo está mal. 851 00:35:41,360 --> 00:35:44,620 Facer matemáticas non funcionou. 852 00:35:44,620 --> 00:35:46,170 Aquí está a primeira das nosas mensaxes de erro. 853 00:35:46,170 --> 00:35:46,570 Por que? 854 00:35:46,570 --> 00:35:49,720 A enigmática pouco, pero - 855 00:35:49,720 --> 00:35:50,060 Si 856 00:35:50,060 --> 00:35:51,240 Entón cs50.h. 857 00:35:51,240 --> 00:35:53,900 Entón, de novo, especialmente no inicio, vai escribir o seu primeiro 858 00:35:53,900 --> 00:35:56,590 programa para pset 1 en seccións, en horario de oficina, e 859 00:35:56,590 --> 00:35:59,050 francamente, vai ser esmagadora, por veces, o que isto 860 00:35:59,050 --> 00:36:00,000 están realmente dicindo. 861 00:36:00,000 --> 00:36:01,890 Pero vai entender moi rapidamente comezan a caer 862 00:36:01,890 --> 00:36:06,120 en baldes en que este significa que xa parou un 863 00:36:06,120 --> 00:36:08,290 do # inclúe, na parte superior do ficheiro. 864 00:36:08,290 --> 00:36:10,960 E Clang, compilador, está informando sobre iso 865 00:36:10,960 --> 00:36:14,090 Declaración dicindo, en vez fantasiosamente, implícita de 866 00:36:14,090 --> 00:36:15,990 GetInt función non é válido. 867 00:36:15,990 --> 00:36:16,310 >> Todo ben. 868 00:36:16,310 --> 00:36:17,520 Entón, o que significa isto? 869 00:36:17,520 --> 00:36:22,080 Significa só que implicitamente declarado en GetInt 870 00:36:22,080 --> 00:36:24,850 a sensación de que non explicitamente declarado. 871 00:36:24,850 --> 00:36:27,300 Para declarar explicitamente int, ten que ensinar 872 00:36:27,300 --> 00:36:28,740 Clang que existe. 873 00:36:28,740 --> 00:36:32,020 E a solución moi sinxela para iso é ensino-lo por 874 00:36:32,020 --> 00:36:34,780 incluíndo este ficheiro, cs50.h, no 875 00:36:34,780 --> 00:36:35,850 a parte superior do seu arquivo. 876 00:36:35,850 --> 00:36:40,380 Porque, literalmente, o que non é # include di Clang 877 00:36:40,380 --> 00:36:44,030 moi bonito para ir atopar o ficheiro chamado cs50.h, copia, 878 00:36:44,030 --> 00:36:48,150 pegalo automaticamente na parte superior do meu programa para min, 879 00:36:48,150 --> 00:36:50,850 e despois converter o código fonte para ceros e uns. 880 00:36:50,850 --> 00:36:52,850 Pero iso, obviamente, moi tediosas se nós, humanos, tivo 881 00:36:52,850 --> 00:36:55,370 ir copiando e colando eses arquivos grandes en todo momento, 882 00:36:55,370 --> 00:36:58,540 así # include só fai todo iso automaticamente, sen 883 00:36:58,540 --> 00:37:01,550 turvando o meu código con alguén da biblioteca. 884 00:37:01,550 --> 00:37:06,370 E unha biblioteca é só outro arquivo que contén funcións e 885 00:37:06,370 --> 00:37:08,340 outras cousas que alguén teña escrito, que somos 886 00:37:08,340 --> 00:37:10,270 alavancagem para o noso propio ben. 887 00:37:10,270 --> 00:37:10,580 >> Todo ben. 888 00:37:10,580 --> 00:37:11,200 Imos tentar de novo. 889 00:37:11,200 --> 00:37:12,250 Facer matemáticas. 890 00:37:12,250 --> 00:37:13,120 Intro. 891 00:37:13,120 --> 00:37:13,530 Bo 892 00:37:13,530 --> 00:37:14,880 De xeito que parece funcionar. 893 00:37:14,880 --> 00:37:18,330 Entón deixe-me executar matemática;. / Matemáticas. 894 00:37:18,330 --> 00:37:21,100 Introduce me dá un número, 123. 895 00:37:21,100 --> 00:37:22,620 Grazas pola 123. 896 00:37:22,620 --> 00:37:24,490 Agora imos tratar de outro caso de esquina. 897 00:37:24,490 --> 00:37:26,530 Unha cadea é moi xeneroso, porque un 898 00:37:26,530 --> 00:37:27,620 secuencia pode ser calquera cousa. 899 00:37:27,620 --> 00:37:28,910 Pode ollar como números, parece 900 00:37:28,910 --> 00:37:30,600 caracteres, parecen palabras. 901 00:37:30,600 --> 00:37:31,900 Pero un int é un int. 902 00:37:31,900 --> 00:37:34,370 Entón agora eu son o autor difícil, e está dicindo "Déame 903 00:37:34,370 --> 00:37:38,730 un número, "o que se eu tentar facer algo como 0,1? 904 00:37:38,730 --> 00:37:41,510 Ben, este é un número, e é consistente coa 905 00:37:41,510 --> 00:37:44,180 código que usei aquí, pero debaixo do capó, eu son de 906 00:37:44,180 --> 00:37:45,610 curso mediante o GetInt función. 907 00:37:45,610 --> 00:37:46,610 >> Entón imos ver o que acontece. 908 00:37:46,610 --> 00:37:48,250 Intro, novo intento. 909 00:37:48,250 --> 00:37:48,560 Todo ben. 910 00:37:48,560 --> 00:37:50,570 Deixe-me ser difícil e só prema Intro novamente. 911 00:37:50,570 --> 00:37:51,700 Intro, Intro. 912 00:37:51,700 --> 00:37:53,890 Entón agora parece que GetInt é un pouco máis 913 00:37:53,890 --> 00:37:55,240 poderoso do que GetString. 914 00:37:55,240 --> 00:37:58,540 Nós, o equipo, aplicado de tal forma que, se nós observamos 915 00:37:58,540 --> 00:38:02,100 non ten nos deu un int - e un int é un número decimal 916 00:38:02,100 --> 00:38:04,785 ceros conteñen, uns, dous, tres, catro, cinco, seis, 917 00:38:04,785 --> 00:38:05,540 Setes, oitos ou noves. 918 00:38:05,540 --> 00:38:06,310 E é iso. 919 00:38:06,310 --> 00:38:08,810 Sen puntos decimais, sen personaxes, sen puntuación. 920 00:38:08,810 --> 00:38:10,390 Parece que temos que cooperar. 921 00:38:10,390 --> 00:38:13,680 Entón deixe-me tentar catro, cinco, seis, e que me deixa completamente. 922 00:38:13,680 --> 00:38:16,760 Entón, realmente, ser anal aquí, eu probablemente debería dicir "Deixa-me 923 00:38:16,760 --> 00:38:20,310 un enteiro ", a fin de transmitir ao usuario 924 00:38:20,310 --> 00:38:22,620 exactamente o que eu pretendo. 925 00:38:22,620 --> 00:38:24,090 >> Agora imos pensar sobre debaixo do capó. 926 00:38:24,090 --> 00:38:27,930 Non imos ollar como cs50.h é aplicado hoxe, 927 00:38:27,930 --> 00:38:29,080 esa biblioteca. 928 00:38:29,080 --> 00:38:33,600 Pero se el segue dicindo que repetir, repetir, repetir, que a programación 929 00:38:33,600 --> 00:38:36,970 construír estou presuntamente usando debaixo do capó para 930 00:38:36,970 --> 00:38:39,000 implementar isto? 931 00:38:39,000 --> 00:38:39,980 Entón, só un loop, non? 932 00:38:39,980 --> 00:38:41,930 Unha das ideas máis simples que vimos en scratch. 933 00:38:41,930 --> 00:38:45,050 The Forever construír, a repetición construír. 934 00:38:45,050 --> 00:38:47,320 Presuntamente, neste programa, baixo o capo, mesmo 935 00:38:47,320 --> 00:38:49,470 que está escrito en C, e non de cero, está facendo 936 00:38:49,470 --> 00:38:54,300 algo chamado equivalente para sempre, se o usuario non ten 937 00:38:54,300 --> 00:38:58,710 ingresaran en un número enteiro, digamos repetir, repetir, repetir, repetir, de xeito 938 00:38:58,710 --> 00:39:01,220 entón, finalmente, cando nós comezamos un enteiro, entón 939 00:39:01,220 --> 00:39:02,970 romper con ese ciclo. 940 00:39:02,970 --> 00:39:05,610 >> Entón, o que outras funcións que podemos utilizar aquí na biblioteca do CS50? 941 00:39:05,610 --> 00:39:07,880 Ben, máis ou máis obvias, polo menos con base na 942 00:39:07,880 --> 00:39:09,570 tipos de datos que agora sabe que existen. 943 00:39:09,570 --> 00:39:12,900 Implementar GetString, GetInt, pero en todo o 944 00:39:12,900 --> 00:39:15,680 primeiras semanas do termo, tamén se pode usar e GetFloat 945 00:39:15,680 --> 00:39:18,870 GetDouble GetLongLong e, a fin de obter exactamente o 946 00:39:18,870 --> 00:39:20,030 tipos de datos que quere. 947 00:39:20,030 --> 00:39:24,030 Porque o detalle clave aquí é que ao contrario de algunhas linguas, 948 00:39:24,030 --> 00:39:26,630 como Python e Ruby, onde non tes que necesariamente 949 00:39:26,630 --> 00:39:29,730 declarar o tipo de datos dunha variable - 950 00:39:29,730 --> 00:39:32,390 Non ten que dicir ao ordenador cal o tipo de material 951 00:39:32,390 --> 00:39:34,000 está indo a poñer na variable - 952 00:39:34,000 --> 00:39:36,640 en C, ten que ser sempre tan precisas. 953 00:39:36,640 --> 00:39:40,060 Entón, se quere unha variable chamada n, un anaco de almacenamento 954 00:39:40,060 --> 00:39:42,900 que, neste caso, pasa a ser de 32 bits, por convención, é 955 00:39:42,900 --> 00:39:45,660 ten que dicir ao ordenador que eses bits son 956 00:39:45,660 --> 00:39:47,840 vai almacenar un número - 957 00:39:47,840 --> 00:39:50,630 non un personaxe, e non unha cadea, non un float. 958 00:39:50,630 --> 00:39:52,620 E este aborda a cuestión que efectivamente 959 00:39:52,620 --> 00:39:53,760 correu a semana pasada. 960 00:39:53,760 --> 00:39:57,050 Se estamos usando ceros e uns números para representar non só 961 00:39:57,050 --> 00:40:00,770 Pero, como números e BS e Cs, como no mundo é unha 962 00:40:00,770 --> 00:40:03,460 ordenador vai saber que este patrón de bits, en realidade, 963 00:40:03,460 --> 00:40:07,650 representa o número 65, en vez de representar a 964 00:40:07,650 --> 00:40:09,860 letra A, que por coincidencia, de acordo coa 965 00:40:09,860 --> 00:40:13,440 ASCII, lembro, era equivalente a 65? 966 00:40:13,440 --> 00:40:16,550 >> Entón, eses tipos de datos proporcionan o contexto para o ordenador, de xeito 967 00:40:16,550 --> 00:40:18,810 que se sabe se estes bits deben ser interpretados como unha 968 00:40:18,810 --> 00:40:23,660 int ou como unha cadea. 969 00:40:23,660 --> 00:40:26,500 Calquera dúbida, entón, sobre este asunto? 970 00:40:26,500 --> 00:40:28,149 Si? 971 00:40:34,780 --> 00:40:35,270 DAVID J. Malan: Boa pregunta. 972 00:40:35,270 --> 00:40:39,140 Se tirarmos stdio.h, imos gardar o arquivo - 973 00:40:39,140 --> 00:40:44,360 deixe-me ir ata a fiestra de terminal e executar facer zoom matemáticas, 974 00:40:44,360 --> 00:40:45,530 e escribir - 975 00:40:45,530 --> 00:40:47,700 agora eu teño un erro distinto, porque estou implicitamente 976 00:40:47,700 --> 00:40:49,650 declarando que funciona agora? 977 00:40:49,650 --> 00:40:50,700 Printf. 978 00:40:50,700 --> 00:40:52,970 Entón agora eu creei un novo problema, cuxa solución é 979 00:40:52,970 --> 00:40:53,890 esencialmente a mesma. 980 00:40:53,890 --> 00:40:55,365 Eu teño poñer isto de volta. 981 00:40:55,365 --> 00:40:56,615 Audiencia: [inaudível] 982 00:41:03,534 --> 00:41:04,030 DAVID J. Malan: Ah. 983 00:41:04,030 --> 00:41:04,850 Entón, se eu sacar - 984 00:41:04,850 --> 00:41:05,360 Ok, si. 985 00:41:05,360 --> 00:41:08,960 Entón, se eu eliminar a inclusión do padrón de E / S biblioteca se 986 00:41:08,960 --> 00:41:12,020 aquí, e entón está dicindo que se librar de printf, obter 987 00:41:12,020 --> 00:41:13,450 librar de printf? 988 00:41:13,450 --> 00:41:13,810 Si 989 00:41:13,810 --> 00:41:18,450 Isto debería funcionar, porque eu non estou máis usando calquera - berros. 990 00:41:18,450 --> 00:41:20,110 Acaba de mentir? 991 00:41:20,110 --> 00:41:21,650 Ah, ok. 992 00:41:21,650 --> 00:41:25,640 Iso non vai funcionar por mor dun novo erro que acaba de publicar. 993 00:41:25,640 --> 00:41:28,390 E este é un pouco máis auto-explicativo. 994 00:41:28,390 --> 00:41:29,440 >> Cal é o problema? 995 00:41:29,440 --> 00:41:30,680 Non utilizados n variables. 996 00:41:30,680 --> 00:41:34,040 Entón, ese erro é o resultado de termos configurado o 997 00:41:34,040 --> 00:41:36,640 aparello a ser particularmente pedante, para realmente gritar 998 00:41:36,640 --> 00:41:39,060 vostede por cada erro posible, aínda que sexa o tipo de 999 00:41:39,060 --> 00:41:41,950 un erro non fatal como este - é realmente como un gran 1000 00:41:41,950 --> 00:41:44,820 tratar que lle atribúe un int, poñer un número no que, a continuación, 1001 00:41:44,820 --> 00:41:46,030 só fixen nada con el? 1002 00:41:46,030 --> 00:41:47,020 Así, funcionalmente, non. 1003 00:41:47,020 --> 00:41:50,410 Iso non vai romper o programa. 1004 00:41:50,410 --> 00:41:51,490 É só unha especie de idiota, non? 1005 00:41:51,490 --> 00:41:54,220 Non hai valor a pedir para que o número, almacenado 1006 00:41:54,220 --> 00:41:56,370 nunha variable, se non vai facer nada 1007 00:41:56,370 --> 00:41:58,000 con iso, se imprimir lo ou garda-lo. 1008 00:41:58,000 --> 00:42:00,270 Polo tanto, neste caso, é Clang recoñecendo tanto, e 1009 00:42:00,270 --> 00:42:02,010 está dicindo non utilizados n variables. 1010 00:42:02,010 --> 00:42:05,380 >> Así, podemos solucionar isto, se realmente queremos. 1011 00:42:05,380 --> 00:42:07,250 Pero, de novo, isto non é unha boa programación agora. 1012 00:42:07,250 --> 00:42:09,310 Entón, eu só podería facelo - 1013 00:42:09,310 --> 00:42:12,060 baixar aquí, deixe-me limpar a pantalla, facer matemáticas. 1014 00:42:12,060 --> 00:42:13,090 Que funciona. 1015 00:42:13,090 --> 00:42:18,110 Agora podo correr o meu programa de matemáticas, ten entrada - 1016 00:42:18,110 --> 00:42:18,700 Ben, iso foi malo. 1017 00:42:18,700 --> 00:42:23,450 Recibe a entrada, e iso é todo o que fai, neste caso. 1018 00:42:23,450 --> 00:42:25,220 >> Entón, en realidade, imos tratar outro ángulo caso de que 1019 00:42:25,220 --> 00:42:26,300 non creo máis cedo. 1020 00:42:26,300 --> 00:42:28,220 Neste caso - aquí, imos volver ao que é un 1021 00:42:28,220 --> 00:42:29,500 pouco máis user-friendly. 1022 00:42:29,500 --> 00:42:32,580 Deixe-me volver aquí e facer executar as matemáticas novo. 1023 00:42:32,580 --> 00:42:34,190 Oops, o que eu fixen de malo? 1024 00:42:34,190 --> 00:42:35,400 Ten que rodar máis para atrás. 1025 00:42:35,400 --> 00:42:36,390 Okay. 1026 00:42:36,390 --> 00:42:38,490 Agora estamos de volta ao estado orixinal, onde todos 1027 00:42:38,490 --> 00:42:39,990 e espero que ben. 1028 00:42:39,990 --> 00:42:43,360 E agora, se eu executar matemáticas, 123 parece funcionar. 1029 00:42:43,360 --> 00:42:46,010 Pero este non é realmente unha proba eficaz, só para dicir 1030 00:42:46,010 --> 00:42:47,930 ok, iso funciona. 1031 00:42:47,930 --> 00:42:49,120 789, que funciona. 1032 00:42:49,120 --> 00:42:50,100 Tempo para presentar. 1033 00:42:50,100 --> 00:42:51,870 Porque hai casos de canto outros aquí. 1034 00:42:51,870 --> 00:42:55,040 Unha secuencia realmente non nos dan moito problema, escribindo nun 1035 00:42:55,040 --> 00:42:56,510 morea de caracteres. 1036 00:42:56,510 --> 00:42:59,580 Pero e se eu escribir isto? 1037 00:42:59,580 --> 00:43:04,850 Bater o número 1 dun monte, moi por aquí - 1038 00:43:04,850 --> 00:43:06,300 todo ben, está quedando un pouco aburrido, entón eu vou 1039 00:43:06,300 --> 00:43:10,040 deixar por aquí, e eu vou bater Intro. 1040 00:43:10,040 --> 00:43:11,290 >> O que diaños pasou? 1041 00:43:14,110 --> 00:43:17,680 Polo tanto, esta pode, en realidade, ser explicado. 1042 00:43:17,680 --> 00:43:18,920 Entón levou-o como binario? 1043 00:43:18,920 --> 00:43:21,130 Un bo pensamento, pero non, non é o feito de que tomou 1044 00:43:21,130 --> 00:43:22,815 como binario, porque de feito, que era só unha especie de 1045 00:43:22,815 --> 00:43:23,080 coincidencia. 1046 00:43:23,080 --> 00:43:23,930 Podemos facer iso de novo. 1047 00:43:23,930 --> 00:43:26,530 Polo tanto, non hai 2 no sistema binario, que é 1048 00:43:26,530 --> 00:43:27,420 probablemente o suficiente de calquera maneira. 1049 00:43:27,420 --> 00:43:28,780 Intro. 1050 00:43:28,780 --> 00:43:30,140 De modo que non era o problema. 1051 00:43:30,140 --> 00:43:31,390 O que máis? 1052 00:43:34,650 --> 00:43:35,400 Exactamente. 1053 00:43:35,400 --> 00:43:37,830 >> Entón, creo que volta para o que un int realmente é. 1054 00:43:37,830 --> 00:43:40,970 É de 32 bits que colectivamente son interpretadas 1055 00:43:40,970 --> 00:43:42,090 como un número. 1056 00:43:42,090 --> 00:43:44,730 Se ten de 32 bits, o que significa cada un dos bits pode ser 1057 00:43:44,730 --> 00:43:46,690 un 0 ou un 1., 0 ou 1 1058 00:43:46,690 --> 00:43:49,090 Entón, isto significa que hai dúas posibilidades para este bit, 1059 00:43:49,090 --> 00:43:51,140 dúas posibilidades para iso, dúas posibilidades para iso 1060 00:43:51,140 --> 00:43:52,570 bit - de xeito que é 2 veces 2 veces - 1061 00:43:52,570 --> 00:43:55,480 de xeito que é 2 á potencia de 32 é o número total de 1062 00:43:55,480 --> 00:43:58,960 permutacións de ceros e uns, se ten 32 1063 00:43:58,960 --> 00:44:01,400 espazos reservados, ceros ou uns, na fronte de ti. 1064 00:44:01,400 --> 00:44:04,250 Entón, se eu teño 2 a 32, matematicamente, que é o que? 1065 00:44:07,080 --> 00:44:07,840 Entón é moi. 1066 00:44:07,840 --> 00:44:09,910 E 4 millóns, máis ou menos. 1067 00:44:09,910 --> 00:44:13,510 E 4 millóns non parece ser o que foi impreso aquí. 1068 00:44:13,510 --> 00:44:16,290 En realidade, iso parece máis preto de 2 millóns. 1069 00:44:16,290 --> 00:44:17,970 Pero isto non é unha coincidencia. 1070 00:44:17,970 --> 00:44:21,590 O feito de que o ordenador teña interpretado mal o meu número enorme, 1071 00:44:21,590 --> 00:44:24,260 miña secuencia enorme duns e, a continuación, a miña secuencia enorme de dúos, 1072 00:44:24,260 --> 00:44:26,880 como preto de 2 millóns, é explicada como? 1073 00:44:30,250 --> 00:44:32,180 Hai un límite para o int. 1074 00:44:32,180 --> 00:44:34,970 Hai un certamente un valor máximo que pode representar. 1075 00:44:34,970 --> 00:44:36,370 Pero normalmente é 4 millóns, non? 1076 00:44:36,370 --> 00:44:39,100 2 ao 32 é de aproximadamente 4 millóns, que parece 1077 00:44:39,100 --> 00:44:40,350 ese é o maior número. 1078 00:44:42,420 --> 00:44:45,240 Entón, non o resto, pero un bo pensamento. 1079 00:44:45,240 --> 00:44:46,340 Números negativos. 1080 00:44:46,340 --> 00:44:49,570 Entón se ten 4000 millóns cousas que se pode 1081 00:44:49,570 --> 00:44:52,970 representar con esas varias permutacións de 32 e 0s 1082 00:44:52,970 --> 00:44:55,600 1s, ben, é lóxico que, humanos, pode querer 1083 00:44:55,600 --> 00:44:57,110 representan non só números enteiros positivos 1084 00:44:57,110 --> 00:44:58,240 pero enteiros negativos. 1085 00:44:58,240 --> 00:45:00,410 E, de feito, esta é a suposición de que o C fai. 1086 00:45:00,410 --> 00:45:03,550 Así, con 32 bits, pode representar aproximadamente negativa 2 1087 00:45:03,550 --> 00:45:06,630 millóns de todo o camiño ata a positivo 2 millóns. 1088 00:45:06,630 --> 00:45:08,750 E por iso, neste caso, o que estamos realmente a ver é só 1089 00:45:08,750 --> 00:45:13,600 á marxe da capacidade do noso enteiro, e temos, polo que 1090 00:45:13,600 --> 00:45:15,860 para falar, rebordou un enteiro. 1091 00:45:15,860 --> 00:45:19,180 Tentamos empinar máis bits nel que pode realmente se encaixan. 1092 00:45:19,180 --> 00:45:22,960 Así, o resultado final é que esencialmente ten todos os bits 1. 1093 00:45:22,960 --> 00:45:25,280 Nós capotou todos os nosos bits, nós tratamos de representar 1094 00:45:25,280 --> 00:45:27,630 o maior número posible, pero non é claramente case 1095 00:45:27,630 --> 00:45:30,960 grande abondo para representar as dúas cousas que eu teño só escribiu dentro 1096 00:45:30,960 --> 00:45:31,730 Si? 1097 00:45:31,730 --> 00:45:32,980 Audiencia: [inaudível] 1098 00:45:37,230 --> 00:45:37,830 >> DAVID J. Malan: Boa pregunta. 1099 00:45:37,830 --> 00:45:40,080 Por que non podemos simplemente representar que negativo 1100 00:45:40,080 --> 00:45:41,500 asinar como só un personaxe? 1101 00:45:41,500 --> 00:45:44,200 Entón, nós absolutamente posible, e entón poderiamos salvar 1102 00:45:44,200 --> 00:45:45,470 un bit adicional. 1103 00:45:45,470 --> 00:45:49,100 Pero aínda vai ter que representar ese trazo e 1104 00:45:49,100 --> 00:45:50,700 que vai custa-lle polo menos algo, 1105 00:45:50,700 --> 00:45:52,220 presuntamente un pouco. 1106 00:45:52,220 --> 00:45:55,610 Entón, si, nós poderíamos ter 32 bits usados ​​para o noso número, pero agora 1107 00:45:55,610 --> 00:45:57,610 necesitamos outro pouco utilizado para o noso guión 1108 00:45:57,610 --> 00:45:58,810 símbolo, o signo menos. 1109 00:45:58,810 --> 00:46:01,470 Polo tanto, agora temos 33 bits valores, o que poderiamos facer, pero é 1110 00:46:01,470 --> 00:46:02,570 só non é o camiño que está feito. 1111 00:46:02,570 --> 00:46:05,140 Fixemos un xuízo anos chamada atrás, 32 bits é unha especie de 1112 00:46:05,140 --> 00:46:06,170 unidade de medida aquí. 1113 00:46:06,170 --> 00:46:08,120 Entón, nós estamos indo a usar un destes bits de forma eficaz para 1114 00:46:08,120 --> 00:46:12,950 representan negativa, e 31 bits para representar o número. 1115 00:46:12,950 --> 00:46:15,550 Outras preguntas? 1116 00:46:15,550 --> 00:46:15,670 Todo ben. 1117 00:46:15,670 --> 00:46:16,030 Iso é moi. 1118 00:46:16,030 --> 00:46:17,930 Por que non imos ir adiante e ter a nosa pausa de cinco minutos aquí? 1119 00:46:23,580 --> 00:46:24,270 >> Todo ben. 1120 00:46:24,270 --> 00:46:31,250 Entón, de novo, para non esaxerar as aplicacións matemáticas 1121 00:46:31,250 --> 00:46:33,840 de programación, imos arrincar fóra este exemplo 1122 00:46:33,840 --> 00:46:36,590 antes de se cambiar a outras construcións, só porque 1123 00:46:36,590 --> 00:46:39,430 ha ilustrar algúns puntos comúns tropezo nalgúns dos 1124 00:46:39,430 --> 00:46:41,520 o básico cando se trata de programas de escritura. 1125 00:46:41,520 --> 00:46:44,360 Neste caso, facendo expresións aritméticas que teñen algún 1126 00:46:44,360 --> 00:46:48,010 relevancia interesante para ver a sintaxe. 1127 00:46:48,010 --> 00:46:50,430 >> Polo tanto, esta é só unha fórmula coa que pode converterse 1128 00:46:50,430 --> 00:46:52,690 temperaturas de Fahrenheit para Celsius. 1129 00:46:52,690 --> 00:46:54,600 Se non lembra, esta é só a fórmula. 1130 00:46:54,600 --> 00:46:58,870 Entón, se chame en Fahrenheit valor de 32 graos, o que é 1131 00:46:58,870 --> 00:47:02,850 conxelación, que vai ser de 32 ata 32 é 0, e, de feito, 1132 00:47:02,850 --> 00:47:05,130 0 en Celsius e tamén de cero. 1133 00:47:05,130 --> 00:47:08,210 Entón sanidade rápido check alí - que é a fórmula familiar. 1134 00:47:08,210 --> 00:47:10,880 Deixe-me ir ao aparello, porén, e comezar 1135 00:47:10,880 --> 00:47:13,920 escribir un programa chamado, como f2c, "Fahrenheit para 1136 00:47:13,920 --> 00:47:15,920 Celsius punto c ". 1137 00:47:15,920 --> 00:47:18,930 E na parte superior aquí, vou comezar con # include 1138 00:47:18,930 --> 00:47:22,190 stdio.h, e eu vou facer int main (void), e 1139 00:47:22,190 --> 00:47:24,680 de novo, imos voltar no futuro, como o que significa int 1140 00:47:24,680 --> 00:47:26,820 alí e que baleiro significa que hai. 1141 00:47:26,820 --> 00:47:28,770 E agora déixeme ir adiante e aplicar un programa que 1142 00:47:28,770 --> 00:47:31,170 esencialmente fai esta conversión para nós. 1143 00:47:31,170 --> 00:47:36,830 >> Entón printf, imos dicir, a temperatura en graos Fahrenheit. 1144 00:47:36,830 --> 00:47:40,140 E entón deixe-me ir adiante e obter o valor do usuario. 1145 00:47:40,140 --> 00:47:43,120 Que tipo de valor que eu debería recibir do usuario, se eu queira 1146 00:47:43,120 --> 00:47:45,620 para me dar unha temperatura en graos Fahrenheit? 1147 00:47:45,620 --> 00:47:48,090 Si? 1148 00:47:48,090 --> 00:47:50,090 O que propón? 1149 00:47:50,090 --> 00:47:50,410 Si 1150 00:47:50,410 --> 00:47:51,960 Entón boia sente bastante razoable. 1151 00:47:51,960 --> 00:47:53,950 Temos de novo, só algunhas opcións que 1152 00:47:53,950 --> 00:47:55,310 vimos ata agora. 1153 00:47:55,310 --> 00:48:00,100 Temos cousas como char, float, double, int, longo tempo, 1154 00:48:00,100 --> 00:48:01,150 bool cadea,. 1155 00:48:01,150 --> 00:48:03,510 Entón, destes, boia sente bastante razoable. 1156 00:48:03,510 --> 00:48:06,340 Nós poderiamos usar un dereito, dobre, porque se nós realmente queremos 1157 00:48:06,340 --> 00:48:07,580 representan a temperatura dun ser humano - 1158 00:48:07,580 --> 00:48:10,730 98,60000 - 1159 00:48:10,730 --> 00:48:12,990 poderiamos usar 64 bits para facelo, pero parece que 1160 00:48:12,990 --> 00:48:14,200 esaxeración para a temperatura. 1161 00:48:14,200 --> 00:48:16,380 Entón imos ir con float. 1162 00:48:16,380 --> 00:48:18,100 Agora eu teño unha variable. 1163 00:48:18,100 --> 00:48:20,500 Só para manter as cousas simples, eu vou chamalo de f, mais eu 1164 00:48:20,500 --> 00:48:23,370 podería só como correctamente chamalo de temperatura, 1165 00:48:23,370 --> 00:48:24,600 pero ou é bo. 1166 00:48:24,600 --> 00:48:27,610 Entón flotar f = GetFloat. 1167 00:48:27,610 --> 00:48:30,220 Así que eu agora teña decidido usar GetFloat, porén, eu 1168 00:48:30,220 --> 00:48:33,340 preciso facer unha corrección. 1169 00:48:33,340 --> 00:48:33,720 Si 1170 00:48:33,720 --> 00:48:37,460 Entón, necesitamos # include , en caso contrario, o compilador é 1171 00:48:37,460 --> 00:48:39,000 vai berrar coa xente. 1172 00:48:39,000 --> 00:48:41,720 Agora que eu teño un coche alegórico, deixe-me ir adiante e facer o 1173 00:48:41,720 --> 00:48:42,460 de conversión. 1174 00:48:42,460 --> 00:48:44,980 >> Entón, primeiro, deixe-me tamén adquirir o hábito de aquí 1175 00:48:44,980 --> 00:48:46,310 comentando o meu código. 1176 00:48:46,310 --> 00:48:49,820 Entón, de novo, un comentario é só unha notación para o ser humano que é 1177 00:48:49,820 --> 00:48:52,600 non forma parte do programa en si, senón un, axuda a 1178 00:48:52,600 --> 00:48:55,010 entender o que fixo na mañá seguinte, ou o próximo 1179 00:48:55,010 --> 00:48:57,570 mes, axuda o seu compañeiro de ensino entender o que fixo 1180 00:48:57,570 --> 00:48:59,230 ou o que quere facer, por iso é 1181 00:48:59,230 --> 00:49:00,950 práctica xeralmente moi boa. 1182 00:49:00,950 --> 00:49:02,940 Cada poucas liñas de código, escriba un comentario 1183 00:49:02,940 --> 00:49:04,490 vostede ou o seu compañeiro. 1184 00:49:04,490 --> 00:49:08,460 Entón, aquí, eu vou dicir: "Pregunta ao usuario de temperatura." 1185 00:49:08,460 --> 00:49:10,890 Non ten que ser unha frase completa, só unha frase curta. 1186 00:49:10,890 --> 00:49:14,270 Pero a idea detrás comentando en C é que cada un dos seus 1187 00:49:14,270 --> 00:49:17,980 comentarios deben capacita-lo - ou, digamos, un TF ou un compañeiro - 1188 00:49:17,980 --> 00:49:21,290 a roçar o seu programa e saber exactamente o que fai, por non 1189 00:49:21,290 --> 00:49:24,650 tanto a lectura do código, pero lendo os comentarios, que 1190 00:49:24,650 --> 00:49:26,220 debe ser sucinta e clara. 1191 00:49:26,220 --> 00:49:29,030 Todo ben, entón agora déixeme ir adiante e dicir: "Converter 1192 00:49:29,030 --> 00:49:32,660 Fahrenheit para Celsius. "Entón, eu estou indo a ir adiante e facer, 1193 00:49:32,660 --> 00:49:34,340 digamos, float c. 1194 00:49:34,340 --> 00:49:36,610 Imos manter Celsius como un valor de punto flotante. 1195 00:49:36,610 --> 00:49:37,630 >> E deixe-me dar unha facada no presente. 1196 00:49:37,630 --> 00:49:40,350 A fórmula é, de novo, aquí enriba. 1197 00:49:40,350 --> 00:49:45,510 Como 5 / F 9 veces menos 32. 1198 00:49:45,510 --> 00:49:46,360 Entón, imos facelo. 1199 00:49:46,360 --> 00:49:50,450 Entón, 5 dividido por 9, de menos - 1200 00:49:50,450 --> 00:49:52,330 Oops, eu estraguei todo xa. 1201 00:49:52,330 --> 00:49:53,070 Equipos. 1202 00:49:53,070 --> 00:49:56,550 Entón, 5/9 F menos 32 veces. 1203 00:49:56,550 --> 00:49:59,650 Entón F menos 32, punto e coma. 1204 00:49:59,650 --> 00:50:02,000 E agora, aquí abaixo, eu estou indo para adiante 1205 00:50:02,000 --> 00:50:03,220 e dicir, imprimir resultado. 1206 00:50:03,220 --> 00:50:05,160 E esa parte é doado. Printf. 1207 00:50:05,160 --> 00:50:07,980 Cómo fago para imprimir ese? 1208 00:50:07,980 --> 00:50:16,890 Ben, eu podería dicir "Ese número Celsius é% f \ n", 1209 00:50:16,890 --> 00:50:18,060 só para algunhas estética. 1210 00:50:18,060 --> 00:50:20,450 E entón, que o valor que quero conectar aquí como printf 1211 00:50:20,450 --> 00:50:21,360 segundo argumento? 1212 00:50:21,360 --> 00:50:21,650 Okay. 1213 00:50:21,650 --> 00:50:22,540 Entón, só c. 1214 00:50:22,540 --> 00:50:24,760 Entón, imos comezar con iso e despois é só devolver 0. 1215 00:50:24,760 --> 00:50:25,960 Unha vez máis, non ten nada que ver coa matemática. 1216 00:50:25,960 --> 00:50:27,610 Significa só que todo está ben. 1217 00:50:27,610 --> 00:50:31,210 >> Agora, iso é correcto, este programa? 1218 00:50:31,210 --> 00:50:31,520 Todo ben. 1219 00:50:31,520 --> 00:50:33,630 Entón eu fixen algúns erros. 1220 00:50:33,630 --> 00:50:35,980 Mesmo se non ten idea do que é programación, pode clasificar 1221 00:50:35,980 --> 00:50:37,120 de inferir de volta á escola primaria que o 1222 00:50:37,120 --> 00:50:38,740 erros aquí podería ser. 1223 00:50:38,740 --> 00:50:40,050 O que é un dos primeiros? 1224 00:50:40,050 --> 00:50:41,256 Audiencia: [inaudível] 1225 00:50:41,256 --> 00:50:41,660 DAVID J. Malan: Yeah. 1226 00:50:41,660 --> 00:50:42,940 Entón, nós estamos falta parénteses. 1227 00:50:42,940 --> 00:50:45,420 Foi deliberado que eu fixen parénteses na charla 1228 00:50:45,420 --> 00:50:48,130 desprazar aquí, porque hai realmente esa noción de orde 1229 00:50:48,130 --> 00:50:51,590 de operacións, ou precedencia, que determinadas operacións - 1230 00:50:51,590 --> 00:50:52,890 multiplicación - 1231 00:50:52,890 --> 00:50:56,000 teñen maior conexión, teñen maior precedencia, que cousas 1232 00:50:56,000 --> 00:50:58,050 como a suma ou a resta. 1233 00:50:58,050 --> 00:51:00,550 Entón, nós temos feito isto por anos só para deixar claro exactamente 1234 00:51:00,550 --> 00:51:02,840 operación matemática que debe ser feito primeiro. 1235 00:51:02,840 --> 00:51:05,010 Entón eu probablemente debería imitar exactamente isto. 1236 00:51:05,010 --> 00:51:08,990 En caso contrario, o ordenador é, presumiblemente, vai facer 1237 00:51:08,990 --> 00:51:13,090 algo así como dividir 5 por 9, a continuación, multiplicar F, a continuación, restar 1238 00:51:13,090 --> 00:51:14,850 32 da cousa toda. 1239 00:51:14,850 --> 00:51:16,480 O que non é, de feito, o que queremos facer. 1240 00:51:16,480 --> 00:51:17,340 Entón imos parenthesize. 1241 00:51:17,340 --> 00:51:20,860 Imos engadir meus parénteses aquí, parénteses aquí. 1242 00:51:20,860 --> 00:51:22,670 Imos poñer iso aquí. 1243 00:51:22,670 --> 00:51:25,130 Aquí, eu só notei outro erro que cometín ao longo do camiño. 1244 00:51:25,130 --> 00:51:25,680 Si? 1245 00:51:25,680 --> 00:51:26,930 Audiencia: [inaudível] 1246 00:51:29,632 --> 00:51:30,130 >> DAVID J. Malan: Ah. 1247 00:51:30,130 --> 00:51:30,470 Bo 1248 00:51:30,470 --> 00:51:32,400 Entón, temos de feito o mesmo número enteiro 1249 00:51:32,400 --> 00:51:34,020 cuestión da división de antes. 1250 00:51:34,020 --> 00:51:35,800 Eu corrixir isto, imos ver o que o síntoma é. 1251 00:51:35,800 --> 00:51:36,990 Pero nós imos ter que corrixir un 1252 00:51:36,990 --> 00:51:37,680 outro erro aquí. 1253 00:51:37,680 --> 00:51:38,015 Si? 1254 00:51:38,015 --> 00:51:39,540 Audiencia: [inaudível] 1255 00:51:39,540 --> 00:51:40,070 DAVID J. Malan: si. 1256 00:51:40,070 --> 00:51:43,130 Entón, erro estúpido que eu fixen, pero incriblemente importante. 1257 00:51:43,130 --> 00:51:45,870 O ordenador non vai só pechar os ollos e deixar 1258 00:51:45,870 --> 00:51:48,770 F-me usar capital, cando realmente declarou a variable 1259 00:51:48,770 --> 00:51:51,360 como un f minúsculas aquí, na liña 8. 1260 00:51:51,360 --> 00:51:54,470 Entón eu teño corrixir na liña 11 capitalización meu, que un 1261 00:51:54,470 --> 00:51:56,820 pouco, era un F maiúsculo por erro. 1262 00:51:56,820 --> 00:51:57,610 E aquí? 1263 00:51:57,610 --> 00:51:59,980 Se isto minúsculas tamén? 1264 00:51:59,980 --> 00:52:02,260 Debería ser, pero iso é unha coincidencia. 1265 00:52:02,260 --> 00:52:05,070 Que f% non ten nada que ver coa variable. 1266 00:52:05,070 --> 00:52:07,980 Entón, só para ser super claro aquí, deixe-me ir adiante e 1267 00:52:07,980 --> 00:52:10,710 renomear iso, brevemente, "temperatura". Deixe-me o nome 1268 00:52:10,710 --> 00:52:15,050 esta "temperatura". Deixe-me cambiar o nome deste. 1269 00:52:15,050 --> 00:52:18,180 Porque, de novo, f% globalmente significa, "flotando valor do punto." 1270 00:52:18,180 --> 00:52:19,950 Non ten nada que ver coa miña variable. 1271 00:52:19,950 --> 00:52:23,080 Pero "temperatura" en todo o lugar é un pouco prolixo, 1272 00:52:23,080 --> 00:52:25,370 entón eu vou volver para o meu s "f" minúscula. 1273 00:52:25,370 --> 00:52:27,890 >> Agora, deixe-me ir adiante ata a miña ventá aquí. 1274 00:52:27,890 --> 00:52:29,190 Fai f2c - 1275 00:52:29,190 --> 00:52:31,200 que foi, unha vez máis, o nome arbitrario I 1276 00:52:31,200 --> 00:52:32,590 deu a este ficheiro. 1277 00:52:32,590 --> 00:52:33,690 Parece feita. 1278 00:52:33,690 --> 00:52:35,080 Déixame correr f2c. 1279 00:52:35,080 --> 00:52:35,780 Intro. 1280 00:52:35,780 --> 00:52:37,786 Temperatura en Fahrenheit - imos facer un camiño fácil. 1281 00:52:37,786 --> 00:52:39,370 32. 1282 00:52:39,370 --> 00:52:40,910 OK, corrixir. 1283 00:52:40,910 --> 00:52:45,910 Pero, se eu fago agora 212 a ebulición - 1284 00:52:45,910 --> 00:52:46,630 maldita. 1285 00:52:46,630 --> 00:52:47,030 Todo ben. 1286 00:52:47,030 --> 00:52:50,780 Entón, claramente non corrixir, se o TF intenta 1287 00:52:50,780 --> 00:52:51,800 polo menos, dous valores. 1288 00:52:51,800 --> 00:52:53,340 Entón, cal é o problema aquí? 1289 00:52:53,340 --> 00:52:55,970 Ben, xa puxo o dedo sobre o que é o problema. 1290 00:52:55,970 --> 00:52:57,600 Pero por que é que o caso? 1291 00:52:57,600 --> 00:53:00,630 Ata aquí, cando eu estou facendo a matemática de 5 dividido por 9. 1292 00:53:00,630 --> 00:53:02,190 Así, conceptualmente, é perfectamente correcto. 1293 00:53:02,190 --> 00:53:03,690 Totalmente consistente coa fórmula. 1294 00:53:03,690 --> 00:53:05,940 Pero os computadores só fan exactamente o que 1295 00:53:05,940 --> 00:53:06,760 dicirlles o que facer. 1296 00:53:06,760 --> 00:53:08,940 E o que estamos efectivamente dicindo o ordenador aquí é 1297 00:53:08,940 --> 00:53:12,320 dividir o enteiro 5 9 polo número enteiro 1298 00:53:12,320 --> 00:53:13,670 e darme o resultado. 1299 00:53:13,670 --> 00:53:16,230 O problema, porén, é cando fai a división usando datos 1300 00:53:16,230 --> 00:53:20,220 tipo, a saída é o mesmo tipo de datos como as entradas. 1301 00:53:20,220 --> 00:53:23,670 E por iso, as dúas entradas son ambos enteiros, a saída é ir 1302 00:53:23,670 --> 00:53:25,110 ser un int. 1303 00:53:25,110 --> 00:53:28,770 E así 5 dividido por 9 é algo punto. 1304 00:53:28,770 --> 00:53:32,320 Pero o que é o enteiro máis próximo para apuntar algo? 1305 00:53:32,320 --> 00:53:33,630 Entón, é realmente 0. 1306 00:53:33,630 --> 00:53:36,620 Así como discutir o luns todo, tras o decimal 1307 00:53:36,620 --> 00:53:37,940 punto queda truncado. 1308 00:53:37,940 --> 00:53:39,495 El só queda xogado fóra. 1309 00:53:39,495 --> 00:53:42,760 Polo tanto, este é un erro completo, porque eu podería moi ben só 1310 00:53:42,760 --> 00:53:44,700 multiplicar todo por 0 aquí. 1311 00:53:44,700 --> 00:53:46,550 >> Agora, podo fixar iso nun par de formas. 1312 00:53:46,550 --> 00:53:48,080 Eu podería facelo. 1313 00:53:48,080 --> 00:53:50,490 5,0 dividido por 9,0. 1314 00:53:50,490 --> 00:53:52,110 Tecnicamente, non precisa aínda de facelo. 1315 00:53:52,110 --> 00:53:55,780 El é suficiente para facer só un dos números de un flotador - 1316 00:53:55,780 --> 00:53:58,290 ou dobre -, poñendo o punto decimal aquí. 1317 00:53:58,290 --> 00:54:01,740 Porque o que ocorre agora é cando divide un número enteiro por 1318 00:54:01,740 --> 00:54:04,670 un float, ou unha parella, o ordenador vai entender 1319 00:54:04,670 --> 00:54:06,830 oh, un dos que máis precisa. 1320 00:54:06,830 --> 00:54:09,420 Deixe-me errar do lado de lle dar máis precisión que 1321 00:54:09,420 --> 00:54:10,310 pretende. 1322 00:54:10,310 --> 00:54:12,700 Entón el vai converter o resultado - 1323 00:54:12,700 --> 00:54:16,240 el pode voltar o resultado como un valor de punto flotante ben. 1324 00:54:16,240 --> 00:54:17,330 Entón, que ía traballar. 1325 00:54:17,330 --> 00:54:18,060 Isto podería funcionar. 1326 00:54:18,060 --> 00:54:20,010 E hai outro mecanismo que veremos na 1327 00:54:20,010 --> 00:54:21,390 maior detalle a próxima semana. 1328 00:54:21,390 --> 00:54:24,690 Pode, de feito, como o programador, dicir ao ordenador 1329 00:54:24,690 --> 00:54:27,930 para tratar efectivamente un tipo de datos como 1330 00:54:27,930 --> 00:54:29,260 se fose outro. 1331 00:54:29,260 --> 00:54:30,990 >> Entón, eu podería realmente facer iso. 1332 00:54:30,990 --> 00:54:35,280 En parénteses, o que podo dicir algo así como (float), aberto 1333 00:54:35,280 --> 00:54:36,350 paren, paren preto. 1334 00:54:36,350 --> 00:54:39,050 E iso é o que se chama "casting". Unha vez máis, máis 1335 00:54:39,050 --> 00:54:39,940 a próxima semana. 1336 00:54:39,940 --> 00:54:42,280 Pero esta é só a forma programática de dicir 1337 00:54:42,280 --> 00:54:45,910 o ordenador, eu sei 9 é un número enteiro ou un longa. 1338 00:54:45,910 --> 00:54:47,700 Sei que non é un valor de punto flotante. 1339 00:54:47,700 --> 00:54:49,420 Pero tratalo como tal, de calquera maneira. 1340 00:54:49,420 --> 00:54:52,000 Entón, para lanzar un tipo de datos significa converter 1341 00:54:52,000 --> 00:54:53,310 dun a outro. 1342 00:54:53,310 --> 00:54:55,790 Francamente, isto é só un pouco feo, por iso quere propoñer que imos 1343 00:54:55,790 --> 00:54:58,830 volta para a suxestión orixinal de só converter 1344 00:54:58,830 --> 00:55:00,770 isto para valores de punto flotante manualmente. 1345 00:55:00,770 --> 00:55:02,890 Porque agora é só super claro o que está a suceder, e 1346 00:55:02,890 --> 00:55:04,280 non é todo o que distrae. 1347 00:55:04,280 --> 00:55:06,710 >> Entón, imos agora volver á miña xanela de terminal. 1348 00:55:06,710 --> 00:55:07,990 Fai f2c. 1349 00:55:07,990 --> 00:55:09,430 Deixe-me ir adiante e executar isto. 1350 00:55:09,430 --> 00:55:12,340 E, como un aparte, se cansar de escribir os comandos 1351 00:55:12,340 --> 00:55:14,910 unha e outra vez, entender que os ordenadores, como o Linux aquí, 1352 00:55:14,910 --> 00:55:16,010 tenden a ser moi intelixente. 1353 00:55:16,010 --> 00:55:18,890 E se eu acertar arriba, podemos ir pola miña historia enteira da 1354 00:55:18,890 --> 00:55:20,380 ordes, para arriba e abaixo. 1355 00:55:20,380 --> 00:55:23,840 Polo tanto, neste caso aquí, podo simplemente ir ata a executar facer f2c. 1356 00:55:23,840 --> 00:55:25,830 Estou sendo chamado, porque eu fixen de que un segundo atrás. 1357 00:55:25,830 --> 00:55:27,030 Xa é ata a data. 1358 00:55:27,030 --> 00:55:30,720 Entón agora podo correr f2c novo. 1359 00:55:30,720 --> 00:55:33,260 Imos tentar 32 Fahrenheit. 1360 00:55:33,260 --> 00:55:36,720 Agora imos tratar de 212 Fahrenheit. 1361 00:55:36,720 --> 00:55:37,250 >> Ufa. 1362 00:55:37,250 --> 00:55:38,250 Parece funcionar. 1363 00:55:38,250 --> 00:55:41,760 Agora, iso é bo, pero el sente un pouco arbitraria que 1364 00:55:41,760 --> 00:55:44,890 Estou mostrando seis números tras os puntos decimais. 1365 00:55:44,890 --> 00:55:45,070 Non? 1366 00:55:45,070 --> 00:55:47,830 Se vostede é a persoa do tempo na televisión, é unha especie de idiota 1367 00:55:47,830 --> 00:55:49,150 se está lendo a temperatura 1368 00:55:49,150 --> 00:55:50,070 este grao de precisión. 1369 00:55:50,070 --> 00:55:51,270 Entón imos simplificar isto. 1370 00:55:51,270 --> 00:55:53,880 Entón, imos realmente ir ata aquí, ao meu printf. 1371 00:55:53,880 --> 00:55:55,490 E si, quero flotar. 1372 00:55:55,490 --> 00:55:57,570 Pero quero agora especificar a precisión. 1373 00:55:57,570 --> 00:55:59,070 E eu vou ser un pouco sucinta. 1374 00:55:59,070 --> 00:56:03,090 Eu vou dicir, dáme un punto despois do punto decimal. 1375 00:56:03,090 --> 00:56:07,590 Entón, en vez de dicir f%, eu vou dicir 0,1% f. 1376 00:56:07,590 --> 00:56:09,760 E isto significa só dar-me unha posición 1377 00:56:09,760 --> 00:56:11,410 despois do punto decimal. 1378 00:56:11,410 --> 00:56:11,700 Todo ben. 1379 00:56:11,700 --> 00:56:12,570 Imos tentar de novo. 1380 00:56:12,570 --> 00:56:15,590 Deixe-me volver a executa-lo despois de compilar. 1381 00:56:15,590 --> 00:56:18,160 E agora eu escriba 32, e eu volver a 1382 00:56:18,160 --> 00:56:19,310 valor máis sucinta. 1383 00:56:19,310 --> 00:56:22,480 E podo escribir agora 212, e volver dunha forma máis sucinta 1384 00:56:22,480 --> 00:56:23,260 valor tamén. 1385 00:56:23,260 --> 00:56:25,190 E hai outras cousas que podes facer con printf. 1386 00:56:25,190 --> 00:56:27,950 Pode realmente especificar quão grande o número debe ser. 1387 00:56:27,950 --> 00:56:30,900 Se queres ter estofo sobre el, para que poida aliñar á dereita ou 1388 00:56:30,900 --> 00:56:32,360 Aliñar á esquerda todos os seus números ou 1389 00:56:32,360 --> 00:56:33,400 tentar cousas center. 1390 00:56:33,400 --> 00:56:35,340 Entón entender que hai pequenos trucos que podes facer alí. 1391 00:56:35,340 --> 00:56:38,420 Pero só se resumen a códigos de formato, 1392 00:56:38,420 --> 00:56:39,600 como temos alí. 1393 00:56:39,600 --> 00:56:41,090 >> Polo tanto, en termos de esta cuestión de precedencia. 1394 00:56:41,090 --> 00:56:43,820 Este é un cadro moi aburrido pasar por metodicamente. 1395 00:56:43,820 --> 00:56:46,780 Pero entender que os autores do C veñen-se coa 1396 00:56:46,780 --> 00:56:50,190 regras que especifican que os operadores teñen maior 1397 00:56:50,190 --> 00:56:53,680 precedencia, máis poder de conexión, que outros. 1398 00:56:53,680 --> 00:56:55,890 Así, mentres na escola, xeralmente sabía que era 1399 00:56:55,890 --> 00:56:58,930 multiplicación e división, suma e resta, a continuación, 1400 00:56:58,930 --> 00:56:59,950 a continuación, algunhas outras cousas. 1401 00:56:59,950 --> 00:57:01,720 Nun mundo de programación, hai unha moi 1402 00:57:01,720 --> 00:57:03,360 longa lista de cousas. 1403 00:57:03,360 --> 00:57:05,150 E iso non é algo que paga a pena memorizar agora. 1404 00:57:05,150 --> 00:57:07,310 Vai acostumar a el antes do tempo. 1405 00:57:07,310 --> 00:57:10,690 Pero, así como na escola, xeralmente parénteses resolver 1406 00:57:10,690 --> 00:57:12,990 as cuestións de precedencia, por facer super claro para o 1407 00:57:12,990 --> 00:57:15,620 ordenador e humanos que se pretende. 1408 00:57:15,620 --> 00:57:17,770 Polo tanto, considero que só unha folla de fraude pouco alí. 1409 00:57:17,770 --> 00:57:21,690 Pero a maioría deses detalles que non vai conseguir por algún tempo. 1410 00:57:21,690 --> 00:57:21,900 >> Todo ben. 1411 00:57:21,900 --> 00:57:24,120 Agora, imos construír e afastarse estes pouco parvo 1412 00:57:24,120 --> 00:57:25,460 exemplos matemáticos. 1413 00:57:25,460 --> 00:57:27,500 Aínda usan os mesmos fundamentos, pero comezar 1414 00:57:27,500 --> 00:57:29,960 expresar-nos un pouco máis como scratch. 1415 00:57:29,960 --> 00:57:31,660 Así, en scratch, tivemos estas expresións booleanas. 1416 00:57:31,660 --> 00:57:34,890 E en Inglés, unha expresión booleana é o que? 1417 00:57:34,890 --> 00:57:35,580 Verdadeiro ou falso. 1418 00:57:35,580 --> 00:57:38,300 É algo que é valorada como verdadeira ou falsa. 1419 00:57:38,300 --> 00:57:39,060 1 ou 0. 1420 00:57:39,060 --> 00:57:39,870 Activado ou desactivado. 1421 00:57:39,870 --> 00:57:41,000 Todo o que quere chama-lo. 1422 00:57:41,000 --> 00:57:43,210 Agora en scratch, as pezas do puzzle mirou como este. 1423 00:57:43,210 --> 00:57:45,850 E esa é a combinación, no fondo alí, de tres 1424 00:57:45,850 --> 00:57:47,980 pezas do puzzle. 1425 00:57:47,980 --> 00:57:48,980 Unha conxunción - 1426 00:57:48,980 --> 00:57:51,710 algo que ten en branco e negro. 1427 00:57:51,710 --> 00:57:53,970 E entón dúas expresións booleanas dentro dela. 1428 00:57:53,970 --> 00:57:56,460 Así, pode expresións booleanas niño de obter máis 1429 00:57:56,460 --> 00:57:59,360 complicado expresións booleanas. 1430 00:57:59,360 --> 00:58:03,930 Por exemplo, se é sábado, e é bo 1431 00:58:03,930 --> 00:58:06,180 tempo, a continuación, ir para fóra. 1432 00:58:06,180 --> 00:58:07,500 Ou algo arbitrario así. 1433 00:58:07,500 --> 00:58:10,090 Así, pode xuntarse se expresións booleanas para chegar a un 1434 00:58:10,090 --> 00:58:12,780 maior valor de verdade, cuxa resposta está baseada 1435 00:58:12,780 --> 00:58:13,800 en que os menores. 1436 00:58:13,800 --> 00:58:15,770 >> Agora, en C, afortunadamente, ese mapeamento é 1437 00:58:15,770 --> 00:58:16,720 realmente moi simple. 1438 00:58:16,720 --> 00:58:18,820 Parénteses axudar a facer as cousas claras aquí. 1439 00:58:18,820 --> 00:58:21,700 && É o que significa "e". Entón é así que 1440 00:58:21,700 --> 00:58:24,700 imos converter eses bloques a partir de cero para C. 1441 00:58:24,700 --> 00:58:27,590 E para as condicións que vimos en scratch, na man esquerda 1442 00:58:27,590 --> 00:58:31,150 banda alí, pode empilhá-los de forma semellante en C. Se x é menor 1443 00:58:31,150 --> 00:58:32,970 de y, entón facelo. 1444 00:58:32,970 --> 00:58:35,100 Else if x é maior que y, entón faino. 1445 00:58:35,100 --> 00:58:38,030 Else loxicamente eles deben ser iguais, por iso digo 1446 00:58:38,030 --> 00:58:39,140 que son iguais. 1447 00:58:39,140 --> 00:58:41,210 Así, podemos agora comezar a construír estas cousas. 1448 00:58:41,210 --> 00:58:42,170 >> Entón imos facer un exemplo. 1449 00:58:42,170 --> 00:58:45,550 Deixe-me abrir un arquivo que está na páxina web do curso que 1450 00:58:45,550 --> 00:58:47,270 Eu escribín con antelación. 1451 00:58:47,270 --> 00:58:50,540 Iso é chamado de nonswitch.c. 1452 00:58:50,540 --> 00:58:52,270 E imos ver por que, en só un momento. 1453 00:58:52,270 --> 00:58:54,770 Polo tanto, neste arquivo - nonswitch.c - 1454 00:58:54,770 --> 00:58:56,830 primeiro entender que hai unha morea de 1455 00:58:56,830 --> 00:58:58,460 comentarios na parte superior. 1456 00:58:58,460 --> 00:59:00,110 Isto é só explicando o nome do ficheiro, o que 1457 00:59:00,110 --> 00:59:01,260 fai, e así por diante. 1458 00:59:01,260 --> 00:59:04,390 E, ao parecer, demostra o uso de Boolean E-vel - 1459 00:59:04,390 --> 00:59:06,220 conxunción de dúas expresións. 1460 00:59:06,220 --> 00:59:07,670 >> Entón imos ver como este programa. 1461 00:59:07,670 --> 00:59:10,840 Eu incluír meus dous arquivos, cs50.h e stdio.h. 1462 00:59:10,840 --> 00:59:13,180 Se rolar para abaixo, agora co programa, que é un pouco máis 1463 00:59:13,180 --> 00:59:15,730 do que xa escribín antes, pero moi lexible. 1464 00:59:15,730 --> 00:59:18,360 Entón eu primeiro imprimir para o usuario, na liña 18, 1465 00:59:18,360 --> 00:59:20,460 "Deixa-me un número enteiro entre 1 e 10." Así 1466 00:59:20,460 --> 00:59:21,530 que está alí. 1467 00:59:21,530 --> 00:59:23,410 Agora podo entender o enteiro. 1468 00:59:23,410 --> 00:59:25,380 Pero entenda que GetInt - moi sinxelo. 1469 00:59:25,380 --> 00:59:26,510 El só vai ter unha int. 1470 00:59:26,510 --> 00:59:28,830 Vai garantir que non un int e non un 1471 00:59:28,830 --> 00:59:30,060 corda ou unha boia. 1472 00:59:30,060 --> 00:59:32,390 Pero non vai facer calquera tipo de verificación de límite. 1473 00:59:32,390 --> 00:59:34,750 Non para filtrar os números para ser entre un 1474 00:59:34,750 --> 00:59:35,630 determinado intervalo. 1475 00:59:35,630 --> 00:59:37,730 Polo tanto, temos que implementar que nós mesmos. 1476 00:59:37,730 --> 00:59:40,680 Así como scratch, onde eu podería facer un conxunto de 1477 00:59:40,680 --> 00:59:43,560 dúas expresións, podo facer iso en C da seguinte forma. 1478 00:59:43,560 --> 00:59:48,660 Se n é maior que ou igual a 1, e n é menor que e 1479 00:59:48,660 --> 00:59:52,220 ou igual a 3, eu estou indo moi decreto que arbitrariamente 1480 00:59:52,220 --> 00:59:53,830 número para ser un número pequeno. 1481 00:59:53,830 --> 00:59:56,730 Só por causa dunha declaración. 1482 00:59:56,730 --> 01:00:00,210 Else if n é entre 4 e 6 de impresión "Escolleu un medio 1483 01:00:00,210 --> 01:00:03,440 número. "Else se n é entre 7 e 10, print" Escolleu un 1484 01:00:03,440 --> 01:00:06,390 número grande. "Else imprimir" Escolle un número válido ". 1485 01:00:06,390 --> 01:00:07,900 Porque loxicamente, que segue, temos 1486 01:00:07,900 --> 01:00:09,230 exhaustos nosa gama. 1487 01:00:09,230 --> 01:00:12,400 >> Así que isto non é exactamente como escribir maior ou 1488 01:00:12,400 --> 01:00:15,000 igual ao dunha clase de matemáticas. 1489 01:00:15,000 --> 01:00:15,160 Non? 1490 01:00:15,160 --> 01:00:17,430 Adoita deseñar lo así, a liña baixo el. 1491 01:00:17,430 --> 01:00:19,250 Pero non hai ningunha clave no meu teclado. 1492 01:00:19,250 --> 01:00:22,390 Así, o símbolo en C para a expresión maior ou 1493 01:00:22,390 --> 01:00:25,770 é igual a dous personaxes, eo símbolo para menos 1494 01:00:25,770 --> 01:00:29,100 ou é igual a dous carácteres tamén. 1495 01:00:29,100 --> 01:00:29,330 Todo ben. 1496 01:00:29,330 --> 01:00:31,910 Entón, se eu executar este programa, pode imaxinar o que é 1497 01:00:31,910 --> 01:00:32,650 vai facer. 1498 01:00:32,650 --> 01:00:36,180 Se eu ir adiante e facer nonswitch, Intro. 1499 01:00:36,180 --> 01:00:38,130 E despois executar nonswitch. 1500 01:00:38,130 --> 01:00:39,530 Déame un número entre 1 e 10. 1501 01:00:39,530 --> 01:00:40,870 Vou dar-lle 11. 1502 01:00:40,870 --> 01:00:42,280 Eu escollín un número válido. 1503 01:00:42,280 --> 01:00:44,090 Deixe-me tentar o número 3. 1504 01:00:44,090 --> 01:00:45,990 Eu escollín un número pequeno. 1505 01:00:45,990 --> 01:00:48,360 Entón hai moi sinxelo. 1506 01:00:48,360 --> 01:00:52,230 >> E se eu queira cambiar o comportamento deste programa e 1507 01:00:52,230 --> 01:00:54,250 facer algo un pouco diferente, no canto? 1508 01:00:54,250 --> 01:00:57,620 Deixe-me ir adiante e dicir iso. 1509 01:00:57,620 --> 01:00:59,480 Deixe-me librar de todo isto. 1510 01:00:59,480 --> 01:01:03,780 E deixe-me dicir se (n == 42). 1511 01:01:03,780 --> 01:01:08,730 E entón eu estou indo para ir adiante e dicir print "Vostede escolleu o 1512 01:01:08,730 --> 01:01:16,340 resposta correcta. "Else imos ir adiante e dicir: 1513 01:01:16,340 --> 01:01:18,460 printf ("Vostede escolleu o 1514 01:01:18,460 --> 01:01:21,170 resposta errónea ");. Okay. 1515 01:01:21,170 --> 01:01:22,040 Só porque. 1516 01:01:22,040 --> 01:01:23,890 >> Agora, algúns puntos que podemos facer aquí. 1517 01:01:23,890 --> 01:01:26,570 Un, eu non escriba o símbolo que pensas que é o 1518 01:01:26,570 --> 01:01:27,390 máis razoable. 1519 01:01:27,390 --> 01:01:30,110 Cando quero comprobar a igualdade, acaba por non utilizar o 1520 01:01:30,110 --> 01:01:30,910 signo igual. 1521 01:01:30,910 --> 01:01:34,000 Vostede, en vez usar o signo igual xeito. 1522 01:01:34,000 --> 01:01:36,440 E por que pode ser, só de forma intuitiva? 1523 01:01:36,440 --> 01:01:37,030 Si 1524 01:01:37,030 --> 01:01:39,330 Audiencia: [inaudível] 1525 01:01:39,330 --> 01:01:39,615 DAVID J. Malan: Correcto. 1526 01:01:39,615 --> 01:01:41,630 O signo igual xa se usa para asignación. 1527 01:01:41,630 --> 01:01:43,020 Alguén realmente non creo niso. 1528 01:01:43,020 --> 01:01:45,820 E agora, cando se trata de probas de igualdade, temos que 1529 01:01:45,820 --> 01:01:48,850 ser máis explícito, e dicir iguais iguais. 1530 01:01:48,850 --> 01:01:52,110 Un erro moi común é facelo. 1531 01:01:52,110 --> 01:01:54,800 E, en caso de expediente ou semanas algures próximo ou no 1532 01:01:54,800 --> 01:01:58,340 próximas dúas semanas facer algo así e despois 1533 01:01:58,340 --> 01:02:00,920 loitar con el por 10, 20 minutos tentando descubrir 1534 01:02:00,920 --> 01:02:03,330 o que o erro maldito sexa, entender que é unha desas persoas 1535 01:02:03,330 --> 01:02:04,470 persoas que fixeron este erro. 1536 01:02:04,470 --> 01:02:06,030 Entón, super fácil de facer. 1537 01:02:06,030 --> 01:02:08,240 Pero o obxectivo agora é evitar este erro. 1538 01:02:08,240 --> 01:02:11,840 Isto pode avaliar, porque o que é iso realmente dicindo? 1539 01:02:11,840 --> 01:02:15,010 Se n recibe 42. 1540 01:02:15,010 --> 01:02:18,250 Entón, as persoas verbo usar, verbalmente, para expresar a 1541 01:02:18,250 --> 01:02:21,800 noción de asignación é "queda". Entón, se n fica 42. 1542 01:02:21,800 --> 01:02:24,060 Entón iso significa asignar 42 a n. 1543 01:02:24,060 --> 01:02:26,250 Agora eu teño unha expresión booleana entre parénteses, 1544 01:02:26,250 --> 01:02:30,230 dentro desta condición, cuxo valor é de 42. 1545 01:02:30,230 --> 01:02:30,390 Non? 1546 01:02:30,390 --> 01:02:32,690 Porque se avaliar iso de dentro para fóra, o total 1547 01:02:32,690 --> 01:02:34,100 resposta, agora é de 42. 1548 01:02:34,100 --> 01:02:37,360 >> Entón, se eu pregunta-lle a pregunta, "se (42)," o que é 1549 01:02:37,360 --> 01:02:38,410 que realmente dicindo? 1550 01:02:38,410 --> 01:02:40,990 Ben, expresións booleanas só pode ser verdadeira ou falsa. 1551 01:02:40,990 --> 01:02:42,010 1 ou 0. 1552 01:02:42,010 --> 01:02:43,010 Activado ou desactivado. 1553 01:02:43,010 --> 01:02:45,240 Entón, parece que temos un caso de canto aquí, en que todos dunha 1554 01:02:45,240 --> 01:02:50,060 súpeto, eu estou dicindo que "se (42)". Isto non é un valor booleano. 1555 01:02:50,060 --> 01:02:54,500 Entón, o que os ordenadores fan, pero é esencialmente iguala 1556 01:02:54,500 --> 01:02:58,620 calquera cousa que non é 0 é interpretado para ser verdade. 1557 01:02:58,620 --> 01:02:59,340 1. 1558 01:02:59,340 --> 01:02:59,690 Conectado. 1559 01:02:59,690 --> 01:03:01,510 Son todos funcionalmente equivalente. 1560 01:03:01,510 --> 01:03:05,070 Só o valor 0, ou a palabra chave falsa, como veremos 1561 01:03:05,070 --> 01:03:07,860 finalmente ver, é realmente falso. 1562 01:03:07,860 --> 01:03:15,040 Así, "se (42)" sería realmente certa, porque é distinto de cero. 1563 01:03:15,040 --> 01:03:18,620 Entón, para ser máis preciso aquí, un valor booleano non é realmente tan 1564 01:03:18,620 --> 01:03:20,680 moi verdadeiro ou falso, pero para iso 1565 01:03:20,680 --> 01:03:24,650 dos casos, se é 0 ou non-cero. 1566 01:03:24,650 --> 01:03:26,330 Tan falso ou non falso. 1567 01:03:26,330 --> 01:03:28,640 E que nos permite abarcar aínda máis 1568 01:03:28,640 --> 01:03:30,980 posibilidades na expresión entre parénteses. 1569 01:03:30,980 --> 01:03:33,840 Entón, necesitamos, sempre con moito coidado, dicir isto - 1570 01:03:33,840 --> 01:03:35,620 if (n == 42). 1571 01:03:35,620 --> 01:03:39,100 Simplemente porque necesitamos especificar unha proba de igualdade, 1572 01:03:39,100 --> 01:03:40,930 non unha asignación dun valor. 1573 01:03:40,930 --> 01:03:42,830 >> O que máis paga a pena notar aquí? 1574 01:03:42,830 --> 01:03:46,030 Estas chaves non son realmente necesarios. 1575 01:03:46,030 --> 01:03:48,650 Veño mediante a só para ser nit-picky aquí. 1576 01:03:48,650 --> 01:03:51,350 Pero cando ten unha condición que só ten unha liña de 1577 01:03:51,350 --> 01:03:55,100 código, como unha conveniencia, os programadores non precisan usar 1578 01:03:55,100 --> 01:03:56,030 as chaves. 1579 01:03:56,030 --> 01:03:59,370 Basta só guión, por razóns estéticas, e 1580 01:03:59,370 --> 01:04:01,050 continuación, escriba a liña de código. 1581 01:04:01,050 --> 01:04:04,160 Só cando quere escribir dúas liñas de código - para 1582 01:04:04,160 --> 01:04:08,230 exemplo, else printf ("Adeus!"). Se queres facer 1583 01:04:08,230 --> 01:04:09,540 que esta é rota. 1584 01:04:09,540 --> 01:04:11,700 Pode recuar todo o que queiras, pero o feito de que ten 1585 01:04:11,700 --> 01:04:14,600 ingresaran dúas liñas de código sen usar claves 1586 01:04:14,600 --> 01:04:16,860 significa que este programa non funcionará correctamente ou se cadra 1587 01:04:16,860 --> 01:04:18,530 nin sequera compilar correctamente. 1588 01:04:18,530 --> 01:04:21,040 Entón, por agora, para ser honesto, eu creo que o mellor é só costume 1589 01:04:21,040 --> 01:04:24,460 utilizar as chaves, e podes ver que eles fan 1590 01:04:24,460 --> 01:04:25,750 super claro o que está a suceder. 1591 01:04:25,750 --> 01:04:29,410 >> Ademais, como un aparte - especialmente se está entre aqueles que usan 1592 01:04:29,410 --> 01:04:31,700 os libros recomendados ou recursos en liña - 1593 01:04:31,700 --> 01:04:33,480 entender que hai esta noción de estilo no 1594 01:04:33,480 --> 01:04:34,130 programación. 1595 01:04:34,130 --> 01:04:37,280 E algunhas persoas realmente prefiren poñer a chaveta 1596 01:04:37,280 --> 01:04:38,720 aquí en liña. 1597 01:04:38,720 --> 01:04:41,520 Algunhas persoas prefiren facer cousas ridículas, 1598 01:04:41,520 --> 01:04:43,830 como poñer-los aquí. 1599 01:04:43,830 --> 01:04:45,140 Non hai resposta errónea cando se trata de 1600 01:04:45,140 --> 01:04:46,710 estilo, pero iso é malo. 1601 01:04:46,710 --> 01:04:47,700 Pero algunhas persoas fan iso. 1602 01:04:47,700 --> 01:04:49,160 [Risas] 1603 01:04:49,160 --> 01:04:51,760 DAVID J. Malan: Entón eu falar iso agora, simplemente porque, como 1604 01:04:51,760 --> 01:04:54,400 ler sobre cousas en libros ou en liña, está indo para obter 1605 01:04:54,400 --> 01:04:55,990 mensaxes diferentes de diferentes profesores e 1606 01:04:55,990 --> 01:04:56,730 distintos autores. 1607 01:04:56,730 --> 01:04:58,640 E só entende que, funcionalmente, son 1608 01:04:58,640 --> 01:05:00,740 xeralmente equivalente, pero ser consistente. 1609 01:05:00,740 --> 01:05:02,850 Polo tanto, neste caso, imos padronizar o crespo 1610 01:05:02,850 --> 01:05:04,650 claves aliñados aquí do lado esquerdo. 1611 01:05:04,650 --> 01:05:04,910 >> Todo ben. 1612 01:05:04,910 --> 01:05:07,040 Entón, imos adiante agora e executar isto, e ver o que acontece 1613 01:05:07,040 --> 01:05:07,780 con este programa. 1614 01:05:07,780 --> 01:05:09,970 Fai nonswitch. 1615 01:05:09,970 --> 01:05:11,040 A continuación, executa nonswitch. 1616 01:05:11,040 --> 01:05:13,900 Déame un número enteiro entre 0 e - de xeito que non é relevante 1617 01:05:13,900 --> 01:05:16,480 máis, pero eu só vou dicir arbitrariamente 42. 1618 01:05:16,480 --> 01:05:17,850 E eu escollín a resposta correcta. 1619 01:05:17,850 --> 01:05:20,430 Ben, agora imos realmente tomar isto en unha dirección diferente. 1620 01:05:20,430 --> 01:05:22,070 Acontece que hai algunha outra sintaxe que 1621 01:05:22,070 --> 01:05:23,480 Pode usar un programa. 1622 01:05:23,480 --> 01:05:27,310 Aquí está unha nova peza de sintaxe que é funcionalmente o mesmo, 1623 01:05:27,310 --> 01:05:30,680 pero só presenta outra forma de nos expresar. 1624 01:05:30,680 --> 01:05:32,830 Entón é iso que se chama "switch". E un 1625 01:05:32,830 --> 01:05:34,820 switch funciona do seguinte xeito. 1626 01:05:34,820 --> 01:05:37,580 É preciso, entre parénteses, un valor que quere 1627 01:05:37,580 --> 01:05:38,860 "Switch" en. 1628 01:05:38,860 --> 01:05:41,490 Queres comportarse de forma diferente a base do seu valor. 1629 01:05:41,490 --> 01:05:44,360 Así, isto significa que conecte o valor de n. 1630 01:05:44,360 --> 01:05:45,480 E o que significa isto? 1631 01:05:45,480 --> 01:05:50,530 Ben, se n é 1 ou 2 ou 3, vai adiante e imprimir "Vostede 1632 01:05:50,530 --> 01:05:52,680 escolleu un número grande "e, a continuación, romper. 1633 01:05:52,680 --> 01:05:55,720 A razón para a quebra é que o camiño é C funciona como 1634 01:05:55,720 --> 01:05:59,790 así que atopar un caso que corresponde, que inicia a execución 1635 01:05:59,790 --> 01:06:01,610 todo o código embaixo. 1636 01:06:01,610 --> 01:06:04,580 Entón, se eu teño unha liña de código, como fago aquí na liña 27, el 1637 01:06:04,580 --> 01:06:05,360 é executado. 1638 01:06:05,360 --> 01:06:07,520 Se eu engadir outra liña aquí, é executado. 1639 01:06:07,520 --> 01:06:09,350 Outra liña aquí, é executado. 1640 01:06:09,350 --> 01:06:12,460 O único programa para realizar o que está por debaixo da 1641 01:06:12,460 --> 01:06:14,680 Declaración caso aplicable cando explicitamente 1642 01:06:14,680 --> 01:06:17,210 dicir "romper". Tan mal. 1643 01:06:17,210 --> 01:06:19,220 Dereita, neste caso, como un resultado. 1644 01:06:19,220 --> 01:06:22,130 4 Proceso, 5 ou 6, do mesmo xeito, vai 1645 01:06:22,130 --> 01:06:23,160 Para imprimir unha mensaxe. 1646 01:06:23,160 --> 01:06:24,410 Neste caso, o número medio. 1647 01:06:24,410 --> 01:06:25,200 Romper. 1648 01:06:25,200 --> 01:06:28,160 Se 7, 8, 9, 10, que vai imprimir "Escolleu un gran 1649 01:06:28,160 --> 01:06:28,950 número. "Break. 1650 01:06:28,950 --> 01:06:31,290 E despois hai unha palabra clave literalmente chamado "default" 1651 01:06:31,290 --> 01:06:34,090 que é efectivamente como o "outro" construír. 1652 01:06:34,090 --> 01:06:36,010 Entón nova sintaxe, pero intelectualmente, 1653 01:06:36,010 --> 01:06:37,060 nada aquí de novo. 1654 01:06:37,060 --> 01:06:38,280 É como o scratch. 1655 01:06:38,280 --> 01:06:41,040 Se else if, else if, unha especie de bloque. 1656 01:06:41,040 --> 01:06:44,560 >> Entón esta é a versión cambiou deste programa. 1657 01:06:44,560 --> 01:06:46,280 Pero teña en conta que nós fixemos cos números aquí. 1658 01:06:46,280 --> 01:06:49,040 Deixe-me abrir unha segunda versión, só para amosar 1659 01:06:49,040 --> 01:06:50,670 algo un pouco máis concreto. 1660 01:06:50,670 --> 01:06:52,840 Polo tanto, temos aquí os graos vez. 1661 01:06:52,840 --> 01:06:55,540 Acontece que pode usar as opcións non só en números enteiros, pero en 1662 01:06:55,540 --> 01:06:56,340 caracteres. 1663 01:06:56,340 --> 01:06:58,930 Non en todos os tipos de datos, pero, polo menos, en carácteres. 1664 01:06:58,930 --> 01:07:02,670 Entón, aquí, nós poderíamos facer algo como o valor de C que 1665 01:07:02,670 --> 01:07:06,230 o usuario introduciu, na liña 19, usando a función GetChar 1666 01:07:06,230 --> 01:07:09,410 Un é o capital ou minúsculas un, imos interpretala como unha reixa, 1667 01:07:09,410 --> 01:07:11,340 e din que colleu unha nota excelente. 1668 01:07:11,340 --> 01:07:14,690 E para abaixo ao longo da instrución switch, temos outro 1669 01:07:14,690 --> 01:07:17,950 casos de "B" s e "C" s, e así por diante. 1670 01:07:17,950 --> 01:07:19,780 Pero imos agora completar outra cousa. 1671 01:07:19,780 --> 01:07:21,130 E, de novo, especie de voar a través de 1672 01:07:21,130 --> 01:07:22,200 algúns destes exemplos. 1673 01:07:22,200 --> 01:07:26,990 Pero é realmente para que poidamos aplicala los, agora - 1674 01:07:26,990 --> 01:07:28,880 ou realmente, só traducir-los agora - 1675 01:07:28,880 --> 01:07:32,220 para C. 1676 01:07:32,220 --> 01:07:33,310 >> Entón deixe-me ir adiante e facelo. 1677 01:07:33,310 --> 01:07:34,830 Vou abrir un novo arquivo. 1678 01:07:34,830 --> 01:07:39,430 E eu vou facer include. 1679 01:07:39,430 --> 01:07:42,770 E entón eu vou facer int main (void). 1680 01:07:42,770 --> 01:07:46,390 Deixe-me salvar o ficheiro como un loop.c. 1681 01:07:46,390 --> 01:07:48,280 Só como un exemplo. 1682 01:07:48,280 --> 01:07:49,910 E eu estou indo a ir adiante e facer o seguinte. 1683 01:07:49,910 --> 01:07:54,180 Eu quero escribir un programa moi tediosa. 1684 01:07:54,180 --> 01:07:56,170 Entón, 10. 1685 01:07:56,170 --> 01:07:58,862 Imos facelo. 1686 01:07:58,862 --> 01:07:59,320 9. 1687 01:07:59,320 --> 01:08:00,360 Todo ben. 1688 01:08:00,360 --> 01:08:02,120 Así que comezar a facelo na programación, é 1689 01:08:02,120 --> 01:08:03,490 probablemente facendo algo mal. 1690 01:08:03,490 --> 01:08:04,950 Pero imos comezar alí de calquera maneira. 1691 01:08:04,950 --> 01:08:05,430 Oops. 1692 01:08:05,430 --> 01:08:06,950 Isto é realmente malo. 1693 01:08:06,950 --> 01:08:08,230 7. 1694 01:08:08,230 --> 01:08:09,440 6. 1695 01:08:09,440 --> 01:08:10,750 5. 1696 01:08:10,750 --> 01:08:11,200 4. 1697 01:08:11,200 --> 01:08:12,450 Nada vai pasar cando chegamos a 0. 1698 01:08:12,450 --> 01:08:13,290 3. 1699 01:08:13,290 --> 01:08:14,590 2. 1700 01:08:14,590 --> 01:08:15,630 1. 1701 01:08:15,630 --> 01:08:16,020 Okay. 1702 01:08:16,020 --> 01:08:17,560 0. 1703 01:08:17,560 --> 01:08:18,689 Eliminar. 1704 01:08:18,689 --> 01:08:19,029 >> Todo ben. 1705 01:08:19,029 --> 01:08:20,029 Entón volva 0. 1706 01:08:20,029 --> 01:08:22,010 Polo tanto, este programa, obviamente, vai facer o que moito 1707 01:08:22,010 --> 01:08:23,310 tediosamente di que vai facer. 1708 01:08:23,310 --> 01:08:24,060 Vai imprimir os 1709 01:08:24,060 --> 01:08:25,290 valores, de arriba para abaixo. 1710 01:08:25,290 --> 01:08:27,140 Entón deixe-me fan loop. 1711 01:08:27,140 --> 01:08:28,640 E entón - berros. 1712 01:08:28,640 --> 01:08:29,700 Fai loop. 1713 01:08:29,700 --> 01:08:31,479 Eu estaba no directorio incorrecto. 1714 01:08:31,479 --> 01:08:33,300 E agora déixeme correr loop. 1715 01:08:33,300 --> 01:08:34,140 Intro. 1716 01:08:34,140 --> 01:08:34,620 Woohoo. 1717 01:08:34,620 --> 01:08:35,270 Very nice. 1718 01:08:35,270 --> 01:08:36,279 Programa, longa e agradable. 1719 01:08:36,279 --> 01:08:38,109 >> Todo ben, pero agora imos facelo mellor. 1720 01:08:38,109 --> 01:08:40,810 Así como no scratch, cando comezou a usar un looping 1721 01:08:40,810 --> 01:08:43,149 construír, no canto de só copiar e pegar todo o 1722 01:08:43,149 --> 01:08:45,580 pezas do puzzle, deixe-me presentar esa cousa. 1723 01:08:45,580 --> 01:08:48,609 Así, en C, existen varias construcións de iteração, 1724 01:08:48,609 --> 01:08:50,540 un dos que se parece con isto. 1725 01:08:50,540 --> 01:08:55,069 Un lazo "é" ten tres cousas, separados por dous puntos e comas. 1726 01:08:55,069 --> 01:08:57,770 E, a continuación, no interior do corpo do lazo, por así dicir - a 1727 01:08:57,770 --> 01:08:59,390 cousas dentro das claves - 1728 01:08:59,390 --> 01:09:01,010 podemos facer algo novo e de novo. 1729 01:09:01,010 --> 01:09:02,310 Entón, o que eu teño aquí na pantalla, este é 1730 01:09:02,310 --> 01:09:03,300 literalmente só un comentario. 1731 01:09:03,300 --> 01:09:05,380 O / / significa aquí ven un comentario. 1732 01:09:05,380 --> 01:09:06,180 Este non é un código. 1733 01:09:06,180 --> 01:09:08,890 Esta é só unha descrición inglés, para min, o humano. 1734 01:09:08,890 --> 01:09:11,300 >> Inicializações así, condicións, e actualizacións. 1735 01:09:11,300 --> 01:09:12,770 Ben, imos ver como funciona isto. 1736 01:09:12,770 --> 01:09:15,520 Isto permite-me reescribir este programa como segue. 1737 01:09:15,520 --> 01:09:16,399 Para - 1738 01:09:16,399 --> 01:09:18,029 Entón, aquí vén o meu loop - 1739 01:09:18,029 --> 01:09:19,439 int i - 1740 01:09:19,439 --> 01:09:21,330 aquí vén unha variable chamada "i" - 1741 01:09:21,330 --> 01:09:23,140 queda inicializar a 10. 1742 01:09:23,140 --> 01:09:25,260 Polo tanto, non é a miña inicialización. 1743 01:09:25,260 --> 01:09:29,450 Eu quero facer ese lazo tan longa como "i" é maior ou 1744 01:09:29,450 --> 01:09:30,899 igual a 0. 1745 01:09:30,899 --> 01:09:32,880 E en cada iteração deste lazo, quero 1746 01:09:32,880 --> 01:09:34,979 facer i -. 1747 01:09:34,979 --> 01:09:36,310 Entón vimos + + o luns. 1748 01:09:36,310 --> 01:09:37,660 - É o oposto. 1749 01:09:37,660 --> 01:09:39,410 El diminúe o valor 1. 1750 01:09:39,410 --> 01:09:43,319 Dentro deste ciclo, que quero realmente facer algo. 1751 01:09:43,319 --> 01:09:46,390 Entón, eu vou dicir algo así como printf. 1752 01:09:46,390 --> 01:09:48,939 Eu non quero dicir 10 agora, porque iso obviamente é só 1753 01:09:48,939 --> 01:09:50,000 indo para imprimir o mesmo valor. 1754 01:09:50,000 --> 01:09:52,246 O que quero para imprimir en vez diso, probablemente? 1755 01:09:52,246 --> 01:09:52,590 Si 1756 01:09:52,590 --> 01:09:55,270 Así, "i". Entón% d, i. 1757 01:09:55,270 --> 01:09:57,340 >> Entón eu vou roubar unha desas ideas de máis cedo - 1758 01:09:57,340 --> 01:09:59,640 esta substitución de códigos de formato - 1759 01:09:59,640 --> 01:10:01,620 e despois aquí abaixo, no fondo, eu vou volver 0, só 1760 01:10:01,620 --> 01:10:02,710 para unha boa medida. 1761 01:10:02,710 --> 01:10:04,740 Pero agora, eu teño un programa máis sucinto. 1762 01:10:04,740 --> 01:10:07,490 É só poucas liñas, e non uns 10 ou 11 liñas. 1763 01:10:07,490 --> 01:10:09,440 Deixe-me ir para a miña rápida aquí. 1764 01:10:09,440 --> 01:10:10,630 Lazo remake. 1765 01:10:10,630 --> 01:10:12,140 Executa de novo loop. 1766 01:10:12,140 --> 01:10:13,570 E que parece ser a mesma. 1767 01:10:13,570 --> 01:10:15,550 Agora, o programa non é máis interesante. 1768 01:10:15,550 --> 01:10:17,180 Pero agora podo escribir algo como isto. 1769 01:10:17,180 --> 01:10:18,970 Podo cambiar isto para 100. 1770 01:10:18,970 --> 01:10:21,400 Eu podo entón recompilar o meu programa. 1771 01:10:21,400 --> 01:10:23,360 E entón podo volver a executar o meu programa. 1772 01:10:23,360 --> 01:10:26,390 E agora vai super-rápido en computadores de hoxe. 1773 01:10:26,390 --> 01:10:27,820 Pero alí eu teño - 1774 01:10:27,820 --> 01:10:29,620 e realmente, a miña memoria de retroceso non 1775 01:10:29,620 --> 01:10:30,890 incluso ir tan lonxe. 1776 01:10:30,890 --> 01:10:31,680 Alí imos nós. 1777 01:10:31,680 --> 01:10:34,090 Polo tanto, temos todos os 100. 1778 01:10:34,090 --> 01:10:35,880 Pero é doado cometer erros aquí. 1779 01:10:35,880 --> 01:10:37,920 O que vai ser o comportamento esperado si 1780 01:10:37,920 --> 01:10:41,150 accidentalmente facer iso? 1781 01:10:41,150 --> 01:10:42,550 Entón ela se sente como infinito. 1782 01:10:42,550 --> 01:10:44,670 Entón, imos ver se o ordenador se comporta. 1783 01:10:44,670 --> 01:10:47,020 >> Entón deixe-me ir adiante e facer loop. 1784 01:10:47,020 --> 01:10:48,355 E deixe-me executar loop. 1785 01:10:53,590 --> 01:10:55,210 Entón, imos voltar a iso en só un momento. 1786 01:10:55,210 --> 01:10:56,720 Imos deixar que a execución. 1787 01:10:56,720 --> 01:10:59,520 Porque o que debemos contar ata, como mínimo? 1788 01:10:59,520 --> 01:11:02,200 Probablemente, polo menos, 2 millóns, se temos que moitos bits, e 1789 01:11:02,200 --> 01:11:03,660 estamos usando valores positivos. 1790 01:11:03,660 --> 01:11:04,890 Entón, imos voltar aquí. 1791 01:11:04,890 --> 01:11:07,810 Ademais destes tipos de loops, temos o que se chama, mentres 1792 01:11:07,810 --> 01:11:09,430 Loops. Entón, así como no scratch, tiña sempre 1793 01:11:09,430 --> 01:11:11,240 bloques, e tiña bloques de repetición. 1794 01:11:11,240 --> 01:11:13,270 Do mesmo xeito, en C, só tes outros xeitos 1795 01:11:13,270 --> 01:11:14,260 de se expresar. 1796 01:11:14,260 --> 01:11:17,110 Entón tes esa noción dun loop while que lle permite 1797 01:11:17,110 --> 01:11:18,860 expresar-se un pouco diferente. 1798 01:11:18,860 --> 01:11:21,490 E entón tes algo chamado un loop do-while, 1799 01:11:21,490 --> 01:11:24,200 que opera de forma lixeiramente diferente tamén. 1800 01:11:24,200 --> 01:11:25,320 E nós imos provocar estes separados ao longo do tempo. 1801 01:11:25,320 --> 01:11:28,630 >> Pero imos dar un ollo neste último aquí. 1802 01:11:28,630 --> 01:11:30,160 Se entrar en - 1803 01:11:30,160 --> 01:11:31,466 aínda en execución. 1804 01:11:31,466 --> 01:11:32,770 É ben infinito. 1805 01:11:32,770 --> 01:11:36,870 Entón deixe-me ir positiva, e mostrar como podemos realmente 1806 01:11:36,870 --> 01:11:39,410 gobernar a entrada do usuario un pouco máis eficaz. 1807 01:11:39,410 --> 01:11:40,910 É un programa moi curto. 1808 01:11:40,910 --> 01:11:43,730 E aquí temos, en principal, unha declaración int n. 1809 01:11:43,730 --> 01:11:46,570 Entón me dea unha variable chamada n. Agora, eu literalmente dicir 1810 01:11:46,570 --> 01:11:48,340 "Facer". E entón eu teño aberto rizado 1811 01:11:48,340 --> 01:11:49,630 cinta, chaveta preto. 1812 01:11:49,630 --> 01:11:52,000 E entón entender, despois diso, el di que mentres n 1813 01:11:52,000 --> 01:11:53,790 é menor que 1. 1814 01:11:53,790 --> 01:11:55,300 Entón, observe que estas liñas - 1815 01:11:55,300 --> 01:11:56,740 19-24 - 1816 01:11:56,740 --> 01:11:59,450 compoñer colectivamente un lazo do-while. 1817 01:11:59,450 --> 01:12:01,280 E, de novo, nova sintaxe, non unha idea nova. 1818 01:12:01,280 --> 01:12:03,740 É só outra forma de looping, sintaticamente. 1819 01:12:03,740 --> 01:12:04,890 Entón, o que iso fai? 1820 01:12:04,890 --> 01:12:08,000 Faga o seguinte, mentres n é menor que 1. 1821 01:12:08,000 --> 01:12:09,080 Entón, o que quero facer? 1822 01:12:09,080 --> 01:12:11,390 Eu esixo que me dea un número enteiro positivo. 1823 01:12:11,390 --> 01:12:14,110 Entón eu realmente tentar obter un número enteiro do usuario. 1824 01:12:14,110 --> 01:12:16,740 Pero en termos de a orde das operacións aquí, porque a 1825 01:12:16,740 --> 01:12:21,850 mentres condición é aquí, entón eu estou indo para comprobar, é n 1826 01:12:21,850 --> 01:12:23,100 menos que 1? 1827 01:12:23,100 --> 01:12:24,600 Entón, supoña que o usuario - 1828 01:12:24,600 --> 01:12:26,450 despois de ser esixido, desta forma - 1829 01:12:26,450 --> 01:12:29,190 tipo por valor 0. 1830 01:12:29,190 --> 01:12:34,510 Esta condición será certo ou falso? 1831 01:12:34,510 --> 01:12:35,820 Ben, iso realmente vai ser verdade. 1832 01:12:35,820 --> 01:12:38,700 Porque n é 0, e 0 é menor que 1. 1833 01:12:38,700 --> 01:12:40,140 E o que iso implica? 1834 01:12:40,140 --> 01:12:41,160 Facelo de novo. 1835 01:12:41,160 --> 01:12:41,990 Facelo de novo. 1836 01:12:41,990 --> 01:12:42,640 Facelo de novo. 1837 01:12:42,640 --> 01:12:46,080 Só unha vez que a condición é valorada como false. 1838 01:12:46,080 --> 01:12:47,510 Se eu escribir 42. 1839 01:12:47,510 --> 01:12:49,690 Ben non, 42 non é inferior a 1. 1840 01:12:49,690 --> 01:12:52,320 Así pois, este lazo está feito de execución. 1841 01:12:52,320 --> 01:12:54,650 E entón, nese punto, o programa vai dicir, grazas por 1842 01:12:54,650 --> 01:12:57,530 a 42, no presente caso. 1843 01:12:57,530 --> 01:13:00,320 Agora que ten ese xeito de se expresar - 1844 01:13:00,320 --> 01:13:02,360 Non debemos esperar a que isto termine. 1845 01:13:02,360 --> 01:13:03,620 Vai levar moito tempo. 1846 01:13:03,620 --> 01:13:04,990 Para ser continuado a próxima vez, se cadra. 1847 01:13:04,990 --> 01:13:08,050 >> Pero agora, ten a capacidade de espera para entender un 1848 01:13:08,050 --> 01:13:09,060 pouco de humor geek. 1849 01:13:09,060 --> 01:13:11,560 Desculpas. 1850 01:13:11,560 --> 01:13:13,620 Este non é representativo do humor na ciencia da computación 1851 01:13:13,620 --> 01:13:14,870 mundo, pero que é bonito. 1852 01:13:21,020 --> 01:13:23,890 Final [Risas] Imos con esta nota. 1853 01:13:23,890 --> 01:13:25,750 E nós imos velo o luns. 1854 01:13:25,750 --> 01:13:31,629 [Aplausos]