1 00:00:00,000 --> 00:00:00,000 2 00:00:00,000 --> 00:00:00,000 [MÚSICA] 3 00:00:00,000 --> 00:00:13,950 4 00:00:13,950 --> 00:00:16,240 >> DAVID J. Malan: Molt bé, això és CS50. 5 00:00:16,240 --> 00:00:18,010 I aquesta és la setmana un. 6 00:00:18,010 --> 00:00:22,050 Així recordar que l'última vegada en la setmana zero, ens hem centrat en el pensament computacional. 7 00:00:22,050 --> 00:00:25,440 I que la transició que a Scratch, una programació gràfica 8 00:00:25,440 --> 00:00:27,360 el llenguatge dels nostres amics en el Laboratori de Mitjans del MIT. 9 00:00:27,360 --> 00:00:31,730 >> I amb Scratch, ens vam explorar idees com les funcions i condicions, 10 00:00:31,730 --> 00:00:35,210 i els bucles i variables, i fins i tot esdeveniments, i fils, i més. 11 00:00:35,210 --> 00:00:37,880 I avui, anem a seguir utilitzant aquestes idees, 12 00:00:37,880 --> 00:00:40,630 i realment prendre-les per assegut, però traduir-les 13 00:00:40,630 --> 00:00:44,220 a un altre idioma conegut com a C. Ara, C és un llenguatge més tradicional. 14 00:00:44,220 --> 00:00:46,020 És un nivell més baix idioma, si es vol. 15 00:00:46,020 --> 00:00:47,300 >> És purament textual. 16 00:00:47,300 --> 00:00:49,910 I així, a primera vista, és tot va a semblar més aviat críptica 17 00:00:49,910 --> 00:00:51,430 si mai has programat abans. 18 00:00:51,430 --> 00:00:53,530 Tindrem punt i coma, i parèntesis, 19 00:00:53,530 --> 00:00:55,150 i claus, i més. 20 00:00:55,150 --> 00:00:57,240 Però adonar-se que fins i tot tot i que la sintaxi és 21 00:00:57,240 --> 00:01:00,600 a punt de mirar una mica familiaritzat per a la majoria de vostès, veure més enllà d'això. 22 00:01:00,600 --> 00:01:03,220 I tractar de veure les idees que són, de fet, familiar, 23 00:01:03,220 --> 00:01:06,750 perquè aquí a la setmana un ho començarem a fer és comparar, 24 00:01:06,750 --> 00:01:08,980 Inicialment, a les ratllades en comparació amb C. 25 00:01:08,980 --> 00:01:12,350 >> Així, per exemple, recordar que quan implementat el primer dels nostres programes 26 00:01:12,350 --> 00:01:16,220 última vegada, vam tenir un bloc que semblava una mica d'alguna cosa així- quan 27 00:01:16,220 --> 00:01:19,990 bandera verda es fa clic, i després vam una o més peces del trencaclosques per sota d'ella, 28 00:01:19,990 --> 00:01:22,150 en aquest cas, dir, hola món. 29 00:01:22,150 --> 00:01:24,870 Així que, de fet, en Scratch, en fer clic en aquesta bandera verda 30 00:01:24,870 --> 00:01:27,390 per executar el meu programa, per la qual parlar, aquests són 31 00:01:27,390 --> 00:01:29,520 els blocs que s'executen, o córrer. 32 00:01:29,520 --> 00:01:32,230 I, en concret, Scratch va dir, hola, món. 33 00:01:32,230 --> 00:01:35,377 >> Ara, podria haver especificat diferents paraules aquí. 34 00:01:35,377 --> 00:01:37,960 Però veurem que, de fet, molts d'aquests blocks-- i, de fet, 35 00:01:37,960 --> 00:01:41,880 en C moltes functions-- poden ser parametritzada o personalitzada 36 00:01:41,880 --> 00:01:43,150 per fer coses diferents. 37 00:01:43,150 --> 00:01:45,520 De fet, en C si voler convertir, ara, 38 00:01:45,520 --> 00:01:47,567 aquest programa de Scratch a aquest altre idioma, 39 00:01:47,567 --> 00:01:49,650 anem a escriure una mica alguna cosa com això. 40 00:01:49,650 --> 00:01:52,540 >> Per descomptat, hi ha alguna desconeguda Sintaxi hi ha més probable, int, 41 00:01:52,540 --> 00:01:54,380 i els parèntesis i sense efecte. 42 00:01:54,380 --> 00:01:57,740 Però printf-- tot i que ho faria crec que seria només d'impressió. 43 00:01:57,740 --> 00:02:00,120 Però la impressió d'impressió significa formatat, com aviat veurem. 44 00:02:00,120 --> 00:02:02,140 Això, literalment, s'imprimirà a la pantalla el 45 00:02:02,140 --> 00:02:05,990 està dins d'aquests parèntesis, que per descomptat, en aquest cas és, hola món. 46 00:02:05,990 --> 00:02:09,290 >> No obstant això, es donarà compte d'alguna altra sintaxi, algunes cites dobles, 47 00:02:09,290 --> 00:02:11,890 que els parèntesis al final, el punt i coma i similars. 48 00:02:11,890 --> 00:02:15,027 Així que hi ha una mica de sobrecàrrega, per així dir-ho, tant cognitivament 49 00:02:15,027 --> 00:02:17,860 i sintàcticament, que anem haver de recordar en poc temps. 50 00:02:17,860 --> 00:02:20,720 Però adonar-se que amb la pràctica, això començarà a saltar a la vista. 51 00:02:20,720 --> 00:02:24,920 >> De fet, ens centrarem en què un funció specifically-- en aquest cas, 52 00:02:24,920 --> 00:02:26,290 saludar món. 53 00:02:26,290 --> 00:02:27,560 Així és a dir la funció. 54 00:02:27,560 --> 00:02:31,320 Hola món és seu paràmetre, o argument, la seva personalització. 55 00:02:31,320 --> 00:02:34,320 >> I l'equivalència en C és només això serà una línia aquí, 56 00:02:34,320 --> 00:02:38,710 on printf és equivalent a, per exemple, la cadena entre cometes dobles, hola 57 00:02:38,710 --> 00:02:41,470 món és equivalent, per descomptat, al que hi ha a la caixa blanca allà. 58 00:02:41,470 --> 00:02:45,680 I la barra invertida n, encara que una mica estranya i absent de Scratch, 59 00:02:45,680 --> 00:02:49,380 simplement va a tenir l'efecte que anem a veure en un ordinador, com el meu Mac o un PC, 60 00:02:49,380 --> 00:02:51,660 de tan sols moure el cursor a la línia següent. 61 00:02:51,660 --> 00:02:53,970 És com colpejar Retorn al teclat. 62 00:02:53,970 --> 00:02:55,580 >> Així que veurem de nou en poc temps. 63 00:02:55,580 --> 00:02:58,640 Però primer, anem a fer una ullada a aquest un altre exemple en el cas dels bucles. 64 00:02:58,640 --> 00:03:02,830 Hem tingut aquest bucle infinit última vegada, que era una sèrie de peces d'un trencaclosques 65 00:03:02,830 --> 00:03:05,490 que van fer alguna cosa, literalment, forever-- en aquest cas, 66 00:03:05,490 --> 00:03:08,360 dir hola món, Hello World, hola món, hola món. 67 00:03:08,360 --> 00:03:10,350 Així que és un bucle infinit per disseny. 68 00:03:10,350 --> 00:03:14,580 >> En C, si volem posar en pràctica aquest mateixa idea, que podria simplement fer això. 69 00:03:14,580 --> 00:03:19,570 Encara que és veritat, printf hola món-- ara mentre que, igual semànticament, tipus de 70 00:03:19,570 --> 00:03:23,090 evoca la idea de fer alguna cosa una altra vegada, i una altra, i una altra, 71 00:03:23,090 --> 00:03:23,980 i per quant de temps? 72 00:03:23,980 --> 00:03:27,990 Bé, recordo que cert-- és cert només en o un. 73 00:03:27,990 --> 00:03:30,660 >> I és cert, per descomptat, sempre és cert. 74 00:03:30,660 --> 00:03:33,060 Així que és una mena de sentit declaració que acaba de dir veritat. 75 00:03:33,060 --> 00:03:36,890 Però de fet, això és deliberat, perquè si és cert és just sempre és cert, 76 00:03:36,890 --> 00:03:40,850 que mentre que la veritable simplement implica, si una mica indirectament, 77 00:03:40,850 --> 00:03:44,070 que les següents línies de codi entre aquestes claus 78 00:03:44,070 --> 00:03:48,320 només ha d'executar de nou, i de nou, i una altra, i en realitat mai parar. 79 00:03:48,320 --> 00:03:50,230 >> Però si vostè vol que el seu bucle per aturar, ja que 80 00:03:50,230 --> 00:03:54,500 va ser l'última vegada amb una mena això, repetiu els següents 50 vegades, 81 00:03:54,500 --> 00:03:57,700 en C podem fer el mateix amb el que hi ha anomenat per loop-- la paraula clau 82 00:03:57,700 --> 00:03:59,330 no sent temps, però per. 83 00:03:59,330 --> 00:04:03,290 I llavors tenim una nova sintaxi aquí, amb int i és igual a 0, i de menys de 50, 84 00:04:03,290 --> 00:04:03,880 i ++. 85 00:04:03,880 --> 00:04:05,430 I anem a tornar a això. 86 00:04:05,430 --> 00:04:09,660 Però això és simplement la forma en què ho faria traduir el conjunt de blocs de Scratch 87 00:04:09,660 --> 00:04:13,079 a un conjunt de línies C de codi. 88 00:04:13,079 --> 00:04:14,450 >> Mentrestant, considerar variables. 89 00:04:14,450 --> 00:04:16,540 I, de fet, només vaig veure un fa un moment. 90 00:04:16,540 --> 00:04:21,220 I en el cas de Scratch, si volgut declarar una variable anomenada i 91 00:04:21,220 --> 00:04:24,590 per a i ser sencer, només un número, i volem posar-lo en algun valor, 92 00:04:24,590 --> 00:04:28,410 faríem servir aquesta taronja bloquejar aquí-- i s'estableix en 0. 93 00:04:28,410 --> 00:04:30,800 >> I anem a veure avui i més enllà, igual que la setmana passada, 94 00:04:30,800 --> 00:04:33,850 programadors fan gairebé sempre començarà a comptar a partir de zero, de veritat 95 00:04:33,850 --> 00:04:34,950 per convenció. 96 00:04:34,950 --> 00:04:37,250 Però també perquè el record de la nostra discussió de la binària, 97 00:04:37,250 --> 00:04:39,990 el més petit nombre que pot representar amb qualsevol nombre de bits 98 00:04:39,990 --> 00:04:41,640 és només va a ser 0 en si. 99 00:04:41,640 --> 00:04:45,190 I així anem a començar en general inicialitzar fins i tot les nostres variables a 0. 100 00:04:45,190 --> 00:04:47,710 >> I en C per fer el mateix, direm int 101 00:04:47,710 --> 00:04:50,110 completament, només per convenció. 102 00:04:50,110 --> 00:04:53,390 Podria haver cridat a aquesta variable el que vulgui, igual que en Scratch. 103 00:04:53,390 --> 00:04:57,770 I llavors és igual a 0 cessionaris el valor 0 per la dreta 104 00:04:57,770 --> 00:05:01,319 i la col·loca en la variable, o el contenidor d'emmagatzematge d'allà, a l'esquerra. 105 00:05:01,319 --> 00:05:04,360 I el punt i coma com anem a veure-- i hem vist alguns d'aquests ya-- 106 00:05:04,360 --> 00:05:06,530 Només vol dir fi del pensament. 107 00:05:06,530 --> 00:05:09,430 Procedirà a fer una altra cosa en les línies que segueixen. 108 00:05:09,430 --> 00:05:11,330 >> Ara, què passa amb les expressions booleanes? 109 00:05:11,330 --> 00:05:14,320 Recordem que en Scratch, aquestes eren expressions 110 00:05:14,320 --> 00:05:16,740 que són veritables o preguntes false--, 111 00:05:16,740 --> 00:05:18,910 Realment, que són veritables o falses. 112 00:05:18,910 --> 00:05:21,960 Així, en el cas de les ratllades, podríem fer una pregunta tan simple com aquest, 113 00:05:21,960 --> 00:05:24,586 i és menor que 50? 114 00:05:24,586 --> 00:05:25,710 Així que, de nou, és un nombre sencer. 115 00:05:25,710 --> 00:05:27,210 Potser ho estem utilitzant en un programa d'Scratch 116 00:05:27,210 --> 00:05:29,310 fer un seguiment d'una puntuació o alguna cosa aixi. 117 00:05:29,310 --> 00:05:33,810 Així que aquesta sintaxi aquí a Scratch Només vol dir, i és inferior a 50? 118 00:05:33,810 --> 00:05:37,330 Bé, per sort, és una cosa simple en C. I per traduir, 119 00:05:37,330 --> 00:05:41,780 això seria simplement dir que menys de 50, utilitzant la clau familiaritzat 120 00:05:41,780 --> 00:05:42,850 en el seu teclat. 121 00:05:42,850 --> 00:05:45,141 >> Mentrestant, si vostè vol dir alguna cosa més general, 122 00:05:45,141 --> 00:05:49,890 com, bé, és x menor que i on cadascú de X i Y són ells mateixos variables? 123 00:05:49,890 --> 00:05:52,280 Podem fer la mateixa cosa en C, tant de temps com hem 124 00:05:52,280 --> 00:05:53,942 creat aquestes variables ja. 125 00:05:53,942 --> 00:05:55,650 I veurem com fer que en poc temps. 126 00:05:55,650 --> 00:05:58,590 Ens agradaria dir simplement x menor que i. 127 00:05:58,590 --> 00:06:00,530 >> Així que vostè està començant a veure algunes similituds. 128 00:06:00,530 --> 00:06:03,490 I aquelles persones que van fer Scratch van ser sens dubte 129 00:06:03,490 --> 00:06:05,250 inspirat en algunes d'aquestes idees bàsiques. 130 00:06:05,250 --> 00:06:10,350 I veurà aquest tipus de Les Llengües de sintaxi en molts 131 00:06:10,350 --> 00:06:12,160 No només rascar, no simplement C, però Python, 132 00:06:12,160 --> 00:06:14,790 i JavaScript, i altres idiomes encara. 133 00:06:14,790 --> 00:06:18,270 >> Anem a considerar una altra construcció de C, la noció d'una condició, 134 00:06:18,270 --> 00:06:20,370 fer alguna cosa de forma condicional. 135 00:06:20,370 --> 00:06:22,720 Si alguna cosa és cert, fer això. 136 00:06:22,720 --> 00:06:24,457 Si hi ha alguna cosa més és cert, fer això. 137 00:06:24,457 --> 00:06:27,040 És una espècie de la programació equivalent a una forquilla a la carretera. 138 00:06:27,040 --> 00:06:29,730 Potser és una forquilla de dues vies, una de tres vies forquilla, o més. 139 00:06:29,730 --> 00:06:32,800 I en Scratch, podríem tenir vist alguna cosa com això. 140 00:06:32,800 --> 00:06:34,010 >> Així que aquest és un gran. 141 00:06:34,010 --> 00:06:36,750 Fixeu-vos, la relativa simplicitat de la lògica. 142 00:06:36,750 --> 00:06:44,010 Si x és menor que i, a continuació, dir x és menor que i, més si x és més gran que i, 143 00:06:44,010 --> 00:06:46,230 després dir x és més gran que i. 144 00:06:46,230 --> 00:06:48,300 I llavors, lògicament, si pensa tornar a les ratllades 145 00:06:48,300 --> 00:06:52,610 o simplement la seva pròpia intuïció humana, així, si x no és més gran que i, i x 146 00:06:52,610 --> 00:06:57,000 no és menor que i, a continuació, per descomptat x serà igual a i. 147 00:06:57,000 --> 00:06:59,690 Així doncs, en aquest cas, per la jerarquització aquests blocs d'Scratch, 148 00:06:59,690 --> 00:07:02,580 podem aconseguir un període de tres forquilla camí en el camí? 149 00:07:02,580 --> 00:07:04,980 >> Mentrestant, si volem fer que en C, es podria dir que 150 00:07:04,980 --> 00:07:08,420 es veu una mica simpler-- almenys Una vegada que es familiaritzi amb la sintaxi. 151 00:07:08,420 --> 00:07:12,050 Si x és menor que i, printf x és menor que i. 152 00:07:12,050 --> 00:07:16,140 Else si x és més gran que i, printf x és més gran que i. 153 00:07:16,140 --> 00:07:21,210 Else printf x és igual a I- i, de nou, amb els extrems de barra invertida només 154 00:07:21,210 --> 00:07:24,160 per a aquestes noves línies de manera que si actualment es va trobar aquest tipus de programa 155 00:07:24,160 --> 00:07:25,940 que seria només moure el cursor en última instància, 156 00:07:25,940 --> 00:07:28,100 a la següent línia de la pantalla. 157 00:07:28,100 --> 00:07:31,270 >> Ara, per la seva banda esgarrapades tenia una altra característiques més sofisticades, només 158 00:07:31,270 --> 00:07:34,320 alguns dels quals anem a Inicialment moure cap al món de la C. 159 00:07:34,320 --> 00:07:37,010 I un d'ells era diu una llista en Scratch. 160 00:07:37,010 --> 00:07:39,100 I això era un especial tipus de variable que 161 00:07:39,100 --> 00:07:42,840 va permetre que li permet emmagatzemar múltiples coses en ella cap enrere, cap enrere, cap enrere, cap enrere. 162 00:07:42,840 --> 00:07:45,540 >> En C, que no té llistes, per se, però alguna cosa 163 00:07:45,540 --> 00:07:48,090 que són més generalment crida matrius, tot i que va 164 00:07:48,090 --> 00:07:50,590 tornar més tard aquest semestre que mira alguna cosa 165 00:07:50,590 --> 00:07:52,780 diu una llista, o en realitat una llista enllaçada. 166 00:07:52,780 --> 00:07:55,510 Però per ara, el més proper equivalent en C per a nosaltres 167 00:07:55,510 --> 00:07:57,345 serà una cosa denominat matriu. 168 00:07:57,345 --> 00:07:59,740 I una matriu és simplement una tipus especial de variable 169 00:07:59,740 --> 00:08:03,160 que li permet emmagatzemar dades cap enrere, cap enrere, cap enrere, cap enrere. 170 00:08:03,160 --> 00:08:05,840 >> I, de fet, en Scratch, si volíem accedir 171 00:08:05,840 --> 00:08:09,030 el primer element d'una matriu o 1 pel·lícules-- i vaig a anomenar-lo, 172 00:08:09,030 --> 00:08:13,600 per convenció, argv, l'argument vector, però més d'això en poc temps. 173 00:08:13,600 --> 00:08:17,090 Si vull aconseguir en el primer element de argv, en el món de les ratllades 174 00:08:17,090 --> 00:08:20,930 que realment fan típicament començarà a comptar a partir de l'1. 175 00:08:20,930 --> 00:08:22,850 >> I pel que podria aconseguir l'article 1 de argv. 176 00:08:22,850 --> 00:08:26,310 Així és com el MIT implementat la noció de llistes. 177 00:08:26,310 --> 00:08:29,860 Però en C, vaig a més simplement dir, argv, 178 00:08:29,860 --> 00:08:32,758 que al seu torn és el nom del meu pel·lícules-- o per ser clars, una matriu. 179 00:08:32,758 --> 00:08:34,549 I si vull que la primera elements, vaig 180 00:08:34,549 --> 00:08:37,890 utilitzar claudàtors, que es pot ser que no s'utilitza sovint en un teclat. 181 00:08:37,890 --> 00:08:40,150 >> Però a 0 vol dir, me la primera. 182 00:08:40,150 --> 00:08:42,160 Així que de tant en tant i com el temps passa, ens anem 183 00:08:42,160 --> 00:08:44,570 per començar a veure aquestes dicotomies entre zero i C, 184 00:08:44,570 --> 00:08:46,070 mitjançant el qual les ratllades utilitza un. 185 00:08:46,070 --> 00:08:47,670 Nosaltres fem servir en C 0 aquí. 186 00:08:47,670 --> 00:08:49,420 Però que dóna gust veure una vegada que entengui 187 00:08:49,420 --> 00:08:52,920 els fonaments de cada idioma, que les aquestes coses es posen encara més 188 00:08:52,920 --> 00:08:56,860 familiar a través de la pràctica i la pràctica. 189 00:08:56,860 --> 00:08:59,700 >> Així que realment es veuen ara en un programa. 190 00:08:59,700 --> 00:09:04,031 Aquí serà el primer de la nostra C codi font de programes complets. 191 00:09:04,031 --> 00:09:06,280 I el programa que anem per oferir a la consideració 192 00:09:06,280 --> 00:09:09,340 és la que és equivalent a aquest tros de Scratch anterior. 193 00:09:09,340 --> 00:09:13,210 >> Així que aquí, tenim el que és sens dubte el programa més simple C 194 00:09:13,210 --> 00:09:15,410 que es pot escriure En realitat fa alguna cosa. 195 00:09:15,410 --> 00:09:18,250 Ara, anem a veure més enllà, per ara, s'ha d'incloure, 196 00:09:18,250 --> 00:09:21,190 io.h estàndard, i aquests angle claudàtors, i int, i sense efecte, 197 00:09:21,190 --> 00:09:22,840 i les claus, i similars. 198 00:09:22,840 --> 00:09:25,390 >> I ens centrarem en el que, almenys intuïtivament, 199 00:09:25,390 --> 00:09:26,860 podria salten a la vista ia. 200 00:09:26,860 --> 00:09:30,300 De fet, la principal, no ho crec necessàriament sap el que és això, 201 00:09:30,300 --> 00:09:34,580 però igual que les ratllades que quan tenien bandera verda clic peça del trencaclosques, 202 00:09:34,580 --> 00:09:39,070 el mateix passa amb C com un llenguatge de programació tenir una peça principal de codi que 203 00:09:39,070 --> 00:09:43,380 és executat per defecte. I, de fet, És, literalment, va ser cridat principal. 204 00:09:43,380 --> 00:09:44,720 >> Així principal és una funció. 205 00:09:44,720 --> 00:09:48,720 I és una funció especial que existeix en C que quan s'executa un programa, 206 00:09:48,720 --> 00:09:52,720 és principal que és atropellat per predeterminat. En el món de les ratllades, 207 00:09:52,720 --> 00:09:56,970 que era en general quan la bandera verda fet clic que va aconseguir funcionament per defecte. 208 00:09:56,970 --> 00:10:01,130 >> Mentrestant, hem vist això abans, printf o d'impressió amb format, això és 209 00:10:01,130 --> 00:10:05,620 serà una funció que ve amb C, juntament amb un munt d'altres, 210 00:10:05,620 --> 00:10:10,140 que la voluntat del temps i el temps de nou, amb la finalitat de fer exactament 211 00:10:10,140 --> 00:10:12,450 com el seu nom indica, imprimir alguna cosa. 212 00:10:12,450 --> 00:10:13,500 Què volem per imprimir? 213 00:10:13,500 --> 00:10:15,770 Bé, veurem que per caràcters que tanquen 214 00:10:15,770 --> 00:10:18,680 com these-- hola món, n barra invertida entre cometes dobles, 215 00:10:18,680 --> 00:10:23,040 podem dir exactament printf El que cal imprimir a la pantalla. 216 00:10:23,040 --> 00:10:26,430 >> No obstant això, per tal de fer que, per desgràcia 217 00:10:26,430 --> 00:10:30,010 necessitarà prendre alguna cosa que és Ja críptica per a nosaltres els éssers humans, 218 00:10:30,010 --> 00:10:34,510 però almenys és alguna cosa readable-- agut inclouen, io.h estàndard, int, 219 00:10:34,510 --> 00:10:39,340 principal, nul·la, printf, tota la màgica encanteris que acabem de veure a la pantalla. 220 00:10:39,340 --> 00:10:42,470 Però en realitat hem de anar més arcà encara. 221 00:10:42,470 --> 00:10:47,140 Primer hem de traduir el codi que s'escriu en codi màquina. 222 00:10:47,140 --> 00:10:51,370 I recordar a la setmana passada que les màquines, almenys els que saben que aquí, 223 00:10:51,370 --> 00:10:54,450 al final de la dia només entendre zeros i uns. 224 00:10:54,450 --> 00:10:58,100 >> I el meu Déu, si haguéssim de escriure aquests zeros i els uns als realitat el programa, 225 00:10:58,100 --> 00:11:01,260 que seria molt, molt ràpidament eliminar la diversió de res. 226 00:11:01,260 --> 00:11:05,150 Però resulta que, a la setmana passada, que aquests patrons de zeros i uns 227 00:11:05,150 --> 00:11:06,400 només tenen un significat especial. 228 00:11:06,400 --> 00:11:08,500 En certs contextos, que poden significar nombres. 229 00:11:08,500 --> 00:11:11,840 >> En alguns contextos, que poden significar lletres o colors, o qualsevol nombre 230 00:11:11,840 --> 00:11:14,710 d'altres abstraccions allà sobre. 231 00:11:14,710 --> 00:11:18,450 Però igual que l'equip té una CPU, Central Processing Unit, 232 00:11:18,450 --> 00:11:20,390 o el cervell en l'interior del seu ordinador. 233 00:11:20,390 --> 00:11:22,240 Generalment és Intel a l'interior, perquè això és 234 00:11:22,240 --> 00:11:24,900 una de les majors empreses que fa que les CPU dels ordinadors. 235 00:11:24,900 --> 00:11:28,910 >> Doncs bé, les CPU Intel i altres simplement han decidit per endavant 236 00:11:28,910 --> 00:11:33,970 que certs patrons de zeros i les coses s'entendrà específics. 237 00:11:33,970 --> 00:11:37,040 Certs patrons de zeros i uns significarà, imprimir aquesta a la pantalla, 238 00:11:37,040 --> 00:11:39,710 o afegir aquests dos nombres, o restar aquests dos nombres, 239 00:11:39,710 --> 00:11:43,310 o moure aquesta peça de dades de la memòria del meu ordinador a través d'aquí, 240 00:11:43,310 --> 00:11:47,870 o qualsevol altre número de molt baix nivell, però en última instància útil, operacions. 241 00:11:47,870 --> 00:11:53,022 Però, per sort, els humans no van a necessitar saber aquest nivell de detall. 242 00:11:53,022 --> 00:11:56,230 De fet, com l'última vegada, en la qual abstret de nou, i una altra, i una altra, 243 00:11:56,230 --> 00:11:58,930 edifici de molt baix nivell primitives com zeros i uns 244 00:11:58,930 --> 00:12:01,160 als conceptes de més alt nivell com números i lletres, 245 00:12:01,160 --> 00:12:04,330 i els colors, i molt més, pel que podem, com a programadors 246 00:12:04,330 --> 00:12:07,080 de peu sobre les espatlles de altres que han vingut abans que nosaltres 247 00:12:07,080 --> 00:12:11,260 i utilitzar el programari que una altra persones han escrit abans de nosaltres-- 248 00:12:11,260 --> 00:12:14,340 a saber, els programes anomenats compiladors. 249 00:12:14,340 --> 00:12:17,770 >> C és un llenguatge que en general es compila, 250 00:12:17,770 --> 00:12:22,130 el que significa convertit de codi font a codi màquina. 251 00:12:22,130 --> 00:12:25,230 En particular, el que això significa és que si vostè té la seva font 252 00:12:25,230 --> 00:12:29,530 codi que s'escriu a si mateix, com aviat ho farà en un moment a la pantalla, 253 00:12:29,530 --> 00:12:33,140 i vol convertir-lo en última instància, a la màquina code-- 254 00:12:33,140 --> 00:12:37,100 aquests zeros i uns que Només teu Mac o PC 255 00:12:37,100 --> 00:12:41,230 understands-- vostè té una primera alimentar que el codi font com en 256 00:12:41,230 --> 00:12:46,340 d'entrada a una especial programa anomenat un compilador, 257 00:12:46,340 --> 00:12:48,974 la sortida de la qual veurà és el codi màquina. 258 00:12:48,974 --> 00:12:51,890 I, de fet, l'última vegada que parlem aproximadament, en realitat, al final del dia, 259 00:12:51,890 --> 00:12:52,610 solucionar problemes. 260 00:12:52,610 --> 00:12:53,360 Tens entrades. 261 00:12:53,360 --> 00:12:54,318 I vostè té sortides. 262 00:12:54,318 --> 00:12:56,560 I vostè té algun tipus d'algorisme en el medi. 263 00:12:56,560 --> 00:12:59,830 >> Els algoritmes poden ser sens dubte implementat en programari, 264 00:12:59,830 --> 00:13:02,900 com hem vist amb pseudocodi la setmana passada i com veurem amb codi real 265 00:13:02,900 --> 00:13:03,490 aquesta setmana. 266 00:13:03,490 --> 00:13:06,430 I així, de codi en realitat només té un conjunt d'algoritmes a l'interior 267 00:13:06,430 --> 00:13:10,060 de la mateixa que saber com convertir les paraules clau especials, 268 00:13:10,060 --> 00:13:12,180 com a principal, i printf, i altres que acabem 269 00:13:12,180 --> 00:13:17,620 va veure en els patrons de zeros i els que Intel Inside i altres CPU 270 00:13:17,620 --> 00:13:20,020 realment entén. 271 00:13:20,020 --> 00:13:22,460 Llavors, com fem això? 272 00:13:22,460 --> 00:13:24,470 D'on obtenim un compilador? 273 00:13:24,470 --> 00:13:26,400 >> La majoria dels que som aquí tenim un Mac o un PC. 274 00:13:26,400 --> 00:13:29,152 I s'està executant Mac OS, o Windows o Linux o Solaris, 275 00:13:29,152 --> 00:13:30,860 o qualsevol nombre d'una altra sistemes operatius. 276 00:13:30,860 --> 00:13:32,568 I, de fet, podríem sortir al web 277 00:13:32,568 --> 00:13:35,710 i descarregar un compilador per a la seva Mac o PC 278 00:13:35,710 --> 00:13:37,360 per al seu sistema operatiu en particular. 279 00:13:37,360 --> 00:13:39,617 No obstant això, tots estaríem en diferents pàgines, per dir-ho. 280 00:13:39,617 --> 00:13:41,450 Ens agradaria tenir una mica diferents configuracions. 281 00:13:41,450 --> 00:13:43,210 I les coses no funcionarien tot el mateix. 282 00:13:43,210 --> 00:13:45,280 I, de fet, en aquests dies molts de nosaltres no utilitzi 283 00:13:45,280 --> 00:13:47,516 programari que s'executa només en els nostres ordinadors portàtils. 284 00:13:47,516 --> 00:13:49,390 En canvi, fem servir una mica com un navegador que 285 00:13:49,390 --> 00:13:52,930 ens permet tenir accés basat en web- aplicacions en el núvol. 286 00:13:52,930 --> 00:13:55,630 I a finals d'aquest semestre, farem exactament això. 287 00:13:55,630 --> 00:13:59,660 Escriurem aplicacions o programari no usar code-- C, 288 00:13:59,660 --> 00:14:02,860 però altres llenguatges com Python i JavaScript-- que s'executen en el núvol. 289 00:14:02,860 --> 00:14:05,860 >> I per fer això, nosaltres mateixos durant el semestre 290 00:14:05,860 --> 00:14:11,890 en realitat utilitzar un núvol-basat ambient conegut com CS50 IDE. 291 00:14:11,890 --> 00:14:16,030 Aquesta és una programació basada en web medi ambient, o el desenvolupament integrat 292 00:14:16,030 --> 00:14:20,610 medi ambient, IDE, que està construïda sobre d'alguns programari de codi obert anomenat Cloud 9. 293 00:14:20,610 --> 00:14:22,966 I hem fet alguns pedagògica simplificacions en el 294 00:14:22,966 --> 00:14:25,840 per tal d'ocultar certes característiques en les primeres setmanes que no necessitem, 295 00:14:25,840 --> 00:14:27,770 després de la qual cosa es pot revelar-i fer la major part 296 00:14:27,770 --> 00:14:29,400 el que vulgui amb el medi ambient. 297 00:14:29,400 --> 00:14:32,470 >> I ens permet, també, per pre-instal·lar cert tipus de programari. 298 00:14:32,470 --> 00:14:35,330 Coses com un denominat CS50 biblioteca, que aviat veurem 299 00:14:35,330 --> 00:14:39,210 ens proporciona en C amb una mica funcionalitat addicional. 300 00:14:39,210 --> 00:14:44,392 Així que si vas a, en última instància, CS50.io, se li demanarà que ingressi, 301 00:14:44,392 --> 00:14:46,350 i una vegada que fas i crear un compte de forma gratuïta, 302 00:14:46,350 --> 00:14:52,150 vostè serà capaç d'accedir a una ambient que es veu bastant com aquest. 303 00:14:52,150 --> 00:14:53,760 >> Ara, això és en el mode per defecte. 304 00:14:53,760 --> 00:14:55,650 Tot és agradable i brillant a la pantalla. 305 00:14:55,650 --> 00:14:57,941 Molts de nosaltres tenim el costum de treballar en la peça que és CS50 306 00:14:57,941 --> 00:14:59,150 bastant tard a la nit. 307 00:14:59,150 --> 00:15:02,400 I pel que alguns de vostès podrien preferir convertir-lo en manera nocturna, per dir-ho. 308 00:15:02,400 --> 00:15:05,550 >> Però, en última instància, el que està veurem dins IDE CS50 309 00:15:05,550 --> 00:15:08,340 és de tres areas-- diferent una àrea de l'esquerra on 310 00:15:08,340 --> 00:15:12,604 seus arxius van a estar a l' núvol, una àrea en la part superior dreta 311 00:15:12,604 --> 00:15:14,270 on el codi serà editable. 312 00:15:14,270 --> 00:15:16,650 podràs obrir fitxes individuals per a qualsevol programa 313 00:15:16,650 --> 00:15:19,670 que s'escriu dins d'aquest semestre de la cantonada superior dreta. 314 00:15:19,670 --> 00:15:23,070 I llavors la majoria arcanamente, i no obstant això de gran abast, 315 00:15:23,070 --> 00:15:26,610 serà aquesta cosa al inferior coneguda com una finestra de terminal. 316 00:15:26,610 --> 00:15:29,450 >> Aquesta és una vella escola Interfície de línia d'ordres, 317 00:15:29,450 --> 00:15:32,240 o CLI, que permet executar ordres 318 00:15:32,240 --> 00:15:35,260 al computer-- en aquest cas, l'equip en el cloud-- 319 00:15:35,260 --> 00:15:39,090 per fer coses com compilar el codi des del codi font a codi màquina, 320 00:15:39,090 --> 00:15:43,600 per executar els seus programes, o per iniciar la seva servidor web, o per accedir a la base de dades, 321 00:15:43,600 --> 00:15:47,454 i qualsevol nombre d'altres tècniques que començarem a utilitzar després de poc temps. 322 00:15:47,454 --> 00:15:49,370 Però per arribar-hi, estem va a tenir realment 323 00:15:49,370 --> 00:15:51,240 anar en línia i començar a jugar. 324 00:15:51,240 --> 00:15:54,399 I per fer això, primer anem a començar jugant amb principal, 325 00:15:54,399 --> 00:15:55,940 i escriure la part principal d'un programa. 326 00:15:55,940 --> 00:15:59,170 I utilitzarem aquesta funció printf, que hem utilitzat anteriorment, 327 00:15:59,170 --> 00:16:01,050 simplement per dir alguna cosa. 328 00:16:01,050 --> 00:16:04,910 >> Així que aquí estic ja a l'interior de l'IDE CS50. 329 00:16:04,910 --> 00:16:05,930 He connectat amb antelació. 330 00:16:05,930 --> 00:16:07,360 I m'omple va exhibir la finestra. 331 00:16:07,360 --> 00:16:09,670 I així, en última instància, es també en problemes pròxims 332 00:16:09,670 --> 00:16:12,960 seguirà els mateixos passos que proporcionarà documentació en línia. 333 00:16:12,960 --> 00:16:16,360 Pel que no ha de preocupar sobre absorbint cada petit pas tècnic 334 00:16:16,360 --> 00:16:17,730 que faig avui aquí. 335 00:16:17,730 --> 00:16:19,222 >> Però obtindrà una pantalla com aquesta. 336 00:16:19,222 --> 00:16:20,430 Dóna la casualitat que en la manera nocturn. 337 00:16:20,430 --> 00:16:22,944 I es pot il·luminar tot per desactivació de la manera nit. 338 00:16:22,944 --> 00:16:24,860 I al final de la dia, vas a veure 339 00:16:24,860 --> 00:16:30,090 aquests tres principals areas-- l'arxiu navegador de l'esquerra, les llengüetes de codi sobre de la tapa, 340 00:16:30,090 --> 00:16:32,430 i la finestra de terminal a la part inferior. 341 00:16:32,430 --> 00:16:34,890 >> Déjame anar endavant i escriure el meu primer programa. 342 00:16:34,890 --> 00:16:42,300 Vaig a anar a Arxiu preventivament, Guardar i salvar la meva arxiu com hola.c. 343 00:16:42,300 --> 00:16:46,850 De fet, per convenció, qualsevol programa que escriuen que està escrit en el llenguatge C 344 00:16:46,850 --> 00:16:49,739 ha de tenir assignat un nom punt c, per convenció. 345 00:16:49,739 --> 00:16:53,030 Així que vaig a nomenar-hola.c, perquè Només vull dir hola al món. 346 00:16:53,030 --> 00:16:54,820 Ara vaig a enfocar i feu clic a Desa. 347 00:16:54,820 --> 00:16:58,180 I tot el que tinc aquí ara és una pestanya en el que puc començar a escriure codi. 348 00:16:58,180 --> 00:16:59,490 >> Això no va a compilar. 349 00:16:59,490 --> 00:17:00,300 Això no vol dir res. 350 00:17:00,300 --> 00:17:02,750 I pel que fins i tot si Vaig convertir això a zeros i uns, 351 00:17:02,750 --> 00:17:05,390 la CPU va a tenir cap idea del que està passant al voltant. 352 00:17:05,390 --> 00:17:14,170 Però si escric línies que coincideixen amb ser conventions-- C de C, 353 00:17:14,170 --> 00:17:20,150 de nou, aquesta language-- amb una sintaxi com això, printf hola món-- i no tinc 354 00:17:20,150 --> 00:17:22,210 ha sentit còmoda amb fer a través del temps. 355 00:17:22,210 --> 00:17:24,510 Així que no crec que vaig fer els errors tipogràfics. 356 00:17:24,510 --> 00:17:27,910 >> Però, invariablement, el primer vegada que ho faci, ho farà. 357 00:17:27,910 --> 00:17:31,090 I el que estic a punt de fer podria molt així no funcionar per a vostè la primera vegada. 358 00:17:31,090 --> 00:17:33,610 I això és perfectament bé, perquè en aquest moment es 359 00:17:33,610 --> 00:17:37,662 només podria veure una gran quantitat de novetat, però amb el temps una vegada que es familiaritzi 360 00:17:37,662 --> 00:17:39,870 amb aquest entorn, i aquest llenguatge, i altres, 361 00:17:39,870 --> 00:17:42,370 vostè començarà a veure les coses que són correctes o incorrectes. 362 00:17:42,370 --> 00:17:44,369 >> I això és el que el companys d'ensenyament i curs 363 00:17:44,369 --> 00:17:48,780 assistents es posen tan bo en el transcurs del temps, es la detecció d'errors o fallades en el seu codi. 364 00:17:48,780 --> 00:17:52,110 Però sostinc que hi ha hi ha errors en el codi. 365 00:17:52,110 --> 00:17:53,990 Així que ara vull per executar aquest programa. 366 00:17:53,990 --> 00:17:57,440 >> Ara, en el meu propi PC o Mac, estic en l'hàbit de fer doble clic a les icones 367 00:17:57,440 --> 00:17:59,350 quan vull executar algun programa. 368 00:17:59,350 --> 00:18:01,080 Però això no és el model aquí. 369 00:18:01,080 --> 00:18:04,570 En aquest entorn, que és CS50 IDE. 370 00:18:04,570 --> 00:18:07,192 Estem utilitzant un operatiu sistema anomenat Linux. 371 00:18:07,192 --> 00:18:09,900 Linux és una reminiscència d'un altre sistema operatiu, conegut generalment 372 00:18:09,900 --> 00:18:10,850 com Unix. 373 00:18:10,850 --> 00:18:16,340 I Linux és especialment conegut per que té una línia d'ordres per al Medi Ambient, la CLI. 374 00:18:16,340 --> 00:18:20,070 Ara, estem utilitzant una específica distribució de Linux anomenada Ubuntu. 375 00:18:20,070 --> 00:18:22,770 I Ubuntu és simplement una certa versió de Linux. 376 00:18:22,770 --> 00:18:27,900 >> Però d'aquests Linux en aquests dies fan realitat vénen amb interfícies gràfiques d'usuari. 377 00:18:27,900 --> 00:18:30,360 I la que ens ha tocat s'utilitza aquí està basat en web. 378 00:18:30,360 --> 00:18:32,735 Pel que aquest podria ser fins i tot una mica diferent d'alguna cosa 379 00:18:32,735 --> 00:18:35,310 vostè mateix pot ser que tingui vist o córrer en el passat. 380 00:18:35,310 --> 00:18:37,910 >> Així que seguiré endavant ara i fer el següent. 381 00:18:37,910 --> 00:18:40,950 He guardat aquest arxiu com hola.c. 382 00:18:40,950 --> 00:18:47,350 Vaig a seguir endavant i Tipus clanghello.c Així Clang 383 00:18:47,350 --> 00:18:49,850 per al llenguatge C és un compilador. 384 00:18:49,850 --> 00:18:51,952 És pre-instal lat en CS50 IDE. 385 00:18:51,952 --> 00:18:54,910 I es pot descarregar i absolutament instal al seu propi Mac o PC. 386 00:18:54,910 --> 00:18:57,910 >> Però, de nou, no tindries tots la configuració prèvia fet per a vostè. 387 00:18:57,910 --> 00:19:00,940 Així que per ara, només sóc va a executar clanghello.c. 388 00:19:00,940 --> 00:19:03,240 I ara compte aquesta sintaxi aquí amb el temps es 389 00:19:03,240 --> 00:19:06,930 compte només vol dir que estic en una carpeta o directori anomenat espai de treball. 390 00:19:06,930 --> 00:19:11,030 Aquesta mostra de dòlar és simplement convenció de sentit, escriviu les comandes aquí. 391 00:19:11,030 --> 00:19:14,560 >> És el que s'anomena un símbol, simplement per convenció és signe de dòlar. 392 00:19:14,560 --> 00:19:19,130 I si segueixo endavant ara i feu clic Introdueixi, res sembla haver succeït. 393 00:19:19,130 --> 00:19:20,930 Però això és realment una bona cosa. 394 00:19:20,930 --> 00:19:23,650 Si més no això succeeix en la seva pantalla, és més probable 395 00:19:23,650 --> 00:19:26,710 el codi és correcte, almenys sintàcticament. 396 00:19:26,710 --> 00:19:29,120 >> Així que si vull executar aquest programa, què faig? 397 00:19:29,120 --> 00:19:33,770 Doncs bé, resulta que la nom predeterminat per convenció 398 00:19:33,770 --> 00:19:38,854 per als programes quan no especifica una nom per al seu programa és només a.out. 399 00:19:38,854 --> 00:19:41,270 I aquesta sintaxi també, podràs familiaritzar-se amb poc temps. 400 00:19:41,270 --> 00:19:47,500 >> Dot slash només significa, bé, CS50 IDE, executi un programa anomenat a.out 401 00:19:47,500 --> 00:19:49,400 això és dins del meu directori actual. 402 00:19:49,400 --> 00:19:51,520 Aquest punt correspon al directori actual. 403 00:19:51,520 --> 00:19:55,040 I anem a veure quines altres seqüències de caràcters significa abans d'hora. 404 00:19:55,040 --> 00:19:58,430 >> Així que aquí anem, Enter, hola món. 405 00:19:58,430 --> 00:20:00,080 I es donarà compte, que el que ha passat? 406 00:20:00,080 --> 00:20:01,580 No només s'imprimeix hola món. 407 00:20:01,580 --> 00:20:05,990 També es va traslladar la cursor a la línia següent. 408 00:20:05,990 --> 00:20:07,160 >> I per què va ser això? 409 00:20:07,160 --> 00:20:12,400 Quin era el codi que escrivim abans que va assegurar que ho faria el cursor 410 00:20:12,400 --> 00:20:14,882 anar en la línia següent? 411 00:20:14,882 --> 00:20:16,840 El més graciós d'una equip és que només va 412 00:20:16,840 --> 00:20:18,570 fer literalment el que vostè li digui que fer. 413 00:20:18,570 --> 00:20:26,050 >> Així que si vostè li diu a printf hola, coma, espai, món, prop de la cita, 414 00:20:26,050 --> 00:20:29,090 És, literalment, només es va per imprimir els caràcters. 415 00:20:29,090 --> 00:20:31,980 Però tenia aquest caràcter especial al final, el record, la barra invertida n. 416 00:20:31,980 --> 00:20:34,230 I això és el que assegura que el caràcter es 417 00:20:34,230 --> 00:20:36,570 a la següent línia de la pantalla. 418 00:20:36,570 --> 00:20:38,097 >> De fet, em va deixar anar i fer això. 419 00:20:38,097 --> 00:20:39,430 Déjame anar per davant i esborrar això. 420 00:20:39,430 --> 00:20:41,180 Ara, observi que la la part superior de la pantalla hi ha 421 00:20:41,180 --> 00:20:42,890 una mica de llum vermella en la pestanya que indica, 422 00:20:42,890 --> 00:20:45,047 bo, no s'ha guardat l'arxiu. 423 00:20:45,047 --> 00:20:47,880 Així que seguiré endavant amb el control S o S comando, guardar l'arxiu. 424 00:20:47,880 --> 00:20:51,130 Ara goes-- va anar a donar un color verd moment--. 425 00:20:51,130 --> 00:20:53,760 I ara és hora de tornar a simplement ser una icona de tancament. 426 00:20:53,760 --> 00:21:01,860 >> Si ara corro clanghello.c de nou, Introduir, barra de punts, a.out, Enter, 427 00:21:01,860 --> 00:21:04,110 veurà que encara funcionava. 428 00:21:04,110 --> 00:21:06,020 Però és sens dubte una mica buggy. 429 00:21:06,020 --> 00:21:08,714 En aquest moment, el meu espai de treball prompt--, i després que el signe de dòlar, 430 00:21:08,714 --> 00:21:10,880 i després el meu prompt-- real és tot en la mateixa línia. 431 00:21:10,880 --> 00:21:14,540 Així que això certament un error estètic, encara que en realitat no és un error lògic. 432 00:21:14,540 --> 00:21:16,250 >> Així que vaig a desfer el que acabo de fer. 433 00:21:16,250 --> 00:21:18,560 Vaig a tornar a executar a.out. 434 00:21:18,560 --> 00:21:22,710 Avís He afegit el tornar caràcter de nova línia. 435 00:21:22,710 --> 00:21:24,280 He guardat l'arxiu. 436 00:21:24,280 --> 00:21:31,630 >> Així que vaig a tornar a executar a.out, i- maleïda sigui, un error, un error que significa error. 437 00:21:31,630 --> 00:21:35,020 Pel que la sentència és que tot i que He afegit la barra invertida n allà, 438 00:21:35,020 --> 00:21:41,180 re-guardat, van tornar a realitzar el programa, el comportament va ser el mateix. 439 00:21:41,180 --> 00:21:42,640 Per què seria? 440 00:21:42,640 --> 00:21:43,910 >> Em cal un pas, oi? 441 00:21:43,910 --> 00:21:47,620 Aquest pas clau anterior era que tens A-- quan canviï el seu codi font, 442 00:21:47,620 --> 00:21:49,610 Resulta que també funcionen mitjançant el compilador 443 00:21:49,610 --> 00:21:51,102 de nou perquè pugui obtenir nou codi màquina. 444 00:21:51,102 --> 00:21:52,810 I el codi màquina, els zeros i uns, 445 00:21:52,810 --> 00:21:56,260 van a ser gairebé idèntics, però no perfectament així, perquè necessitem, 446 00:21:56,260 --> 00:21:57,510 per descomptat, que la nova línia. 447 00:21:57,510 --> 00:22:02,640 >> Així que per solucionar aquest problema, vaig a necessitar tornar a executar clanghello.c, introdueixi, punt 448 00:22:02,640 --> 00:22:03,800 ratlla vertical, a.out. 449 00:22:03,800 --> 00:22:08,402 I ara, hola món està de tornada a on jo esperava que fos. 450 00:22:08,402 --> 00:22:09,610 Així que això és tot fi i bo. 451 00:22:09,610 --> 00:22:13,150 Però a.out és un nom bastant estúpid per a una programa, tot i que passa a ser, 452 00:22:13,150 --> 00:22:16,530 per raons històriques, la default-- significa sortides de muntatge. 453 00:22:16,530 --> 00:22:20,780 >> Però m'ho dius a mi anar per davant aquí i fer això de manera diferent. 454 00:22:20,780 --> 00:22:24,760 Vull que el meu programa hola món per realment ser anomenat hola. 455 00:22:24,760 --> 00:22:28,320 Així que si es tractés d'una icona en la meva escriptori, no es a.out. 456 00:22:28,320 --> 00:22:29,730 Es diria hola. 457 00:22:29,730 --> 00:22:33,660 >> Així que per fer això, resulta Clang que, igual que molts programes, 458 00:22:33,660 --> 00:22:37,980 dóna suport als arguments de línia de comandes, o banderes, o interruptors, 459 00:22:37,980 --> 00:22:39,600 que simplement influir en el seu comportament. 460 00:22:39,600 --> 00:22:45,160 En concret, So metàl·lic suporta un tauler o bandera, que al seu torn porta a una segona paraula. 461 00:22:45,160 --> 00:22:48,190 En aquest cas, em vaig de manera arbitrària, però raonablement, en diuen hola. 462 00:22:48,190 --> 00:22:50,710 Però podria anomenar de qualsevol Vull, excepte a.out, que 463 00:22:50,710 --> 00:22:52,390 seria més aviat el punt. 464 00:22:52,390 --> 00:22:55,640 >> I a continuació, només ha d'especificar el nom l'arxiu si vull compilar. 465 00:22:55,640 --> 00:22:59,190 Així que ara tot i que al principi de la comanda encara tinc Clang, 466 00:22:59,190 --> 00:23:01,410 al final de la comanda Encara tinc el nom de l'arxiu, 467 00:23:01,410 --> 00:23:05,520 Ara tinc aquests línia d'ordres arguments, aquestes banderes que estan dient, 468 00:23:05,520 --> 00:23:11,180 Oh, per cert, la producció-o, un arxiu hola trucada, no el a.out per defecte. 469 00:23:11,180 --> 00:23:13,810 >> Així que si prem enter ara, res sembla haver passat. 470 00:23:13,810 --> 00:23:17,900 I, però, ara que puc fer barra de punts hola. 471 00:23:17,900 --> 00:23:19,089 Així que és el mateix programa. 472 00:23:19,089 --> 00:23:21,380 Els zeros i uns són idèntics al final del dia. 473 00:23:21,380 --> 00:23:24,210 >> Però estan en dos a.out diferent archivos--, 474 00:23:24,210 --> 00:23:26,490 que és la primera versió i just anomenat tontament, 475 00:23:26,490 --> 00:23:30,250 i ara hola, el que és una gran part nom més convincent per a un programa. 476 00:23:30,250 --> 00:23:33,195 Però, honestament, mai estic va a recordar això de nou, 477 00:23:33,195 --> 00:23:34,070 i una altra, i una altra. 478 00:23:34,070 --> 00:23:36,411 I, en realitat, mentre escrivim programes més complicats, 479 00:23:36,411 --> 00:23:38,160 les ordres que vostè està va a haver d'escriure 480 00:23:38,160 --> 00:23:40,920 es posarà encara més complicat encara. 481 00:23:40,920 --> 00:23:41,940 >> I pel que no es preocupi. 482 00:23:41,940 --> 00:23:46,220 Resulta que els humans abans Ens hem adonat que ells també 483 00:23:46,220 --> 00:23:47,530 tingut aquest mateix problema. 484 00:23:47,530 --> 00:23:50,900 També ells no gaudien d'haver de escriviu les comandes, força llargs arcans, 485 00:23:50,900 --> 00:23:52,200 i molt menys recordar. 486 00:23:52,200 --> 00:23:56,070 I així els éssers humans que se'ns han fet altres programes que fan que sigui més fàcil 487 00:23:56,070 --> 00:23:57,670 per compilar el programari. 488 00:23:57,670 --> 00:24:01,609 >> I, de fet, un d'aquests programa es diu Make. 489 00:24:01,609 --> 00:24:03,150 Així que vaig a seguir endavant i fer-ho. 490 00:24:03,150 --> 00:24:05,691 Vaig a desfer tot el acaba de fer de la següent manera. 491 00:24:05,691 --> 00:24:07,690 Permetin-me LS tipus. 492 00:24:07,690 --> 00:24:10,980 I es donarà compte de tres coses- a.out, i una estrella, hola 493 00:24:10,980 --> 00:24:12,810 i una estrella, i hola.c. 494 00:24:12,810 --> 00:24:14,730 Amb sort, això hauria ser una mica intuïtiu, 495 00:24:14,730 --> 00:24:18,220 la mesura que anteriorment no havia res en aquest espai de treball. 496 00:24:18,220 --> 00:24:21,240 No hi havia res que jo tenia creat fins que vam començar a classe. 497 00:24:21,240 --> 00:24:22,840 >> I vaig crear hola.c. 498 00:24:22,840 --> 00:24:24,544 llavors jo compili, i el va anomenar a.out. 499 00:24:24,544 --> 00:24:27,460 I després he recopilat de nou lleugerament de manera diferent i el va anomenar hola. 500 00:24:27,460 --> 00:24:32,830 Així que tinc tres arxius en aquest directori, En aquesta carpeta es diu espai de treball. 501 00:24:32,830 --> 00:24:35,005 Ara, puc veure que al seu torn si Allunyar realitat. 502 00:24:35,005 --> 00:24:37,530 >> Si Allunyar aquí i mira aquest superior dreta 503 00:24:37,530 --> 00:24:39,940 cantonada, com s'havia promès l'esquerra costat de la pantalla 504 00:24:39,940 --> 00:24:42,990 sempre va a mostrar el que està en el seu compte, el que és 505 00:24:42,990 --> 00:24:44,790 dins de l'IDE CS50. 506 00:24:44,790 --> 00:24:46,680 I hi ha tres arxius allà. 507 00:24:46,680 --> 00:24:49,070 >> Així que vull per desfer-a.out i hola. 508 00:24:49,070 --> 00:24:51,275 I com pot ser que imaginar intuïtivament, es 509 00:24:51,275 --> 00:24:53,400 podria tipus de control de clic o feu clic dret sobre aquesta. 510 00:24:53,400 --> 00:24:54,590 I aquest petit menú emergent. 511 00:24:54,590 --> 00:24:57,170 Podeu descarregar l'arxiu, executi que, vista prèvia, actualitzar, canviar el nom, 512 00:24:57,170 --> 00:24:57,700 o el que no. 513 00:24:57,700 --> 00:25:00,260 >> I jo només podia eliminar, i se n'aniria. 514 00:25:00,260 --> 00:25:05,260 Però anem a fer les coses amb una ordre línia de moment, de manera que se senti còmode 515 00:25:05,260 --> 00:25:07,010 amb això, i fer el següent. 516 00:25:07,010 --> 00:25:12,345 Vaig a seguir endavant i eliminar a.out escrivint literalment rma.out. 517 00:25:12,345 --> 00:25:14,890 Resulta que, la comanda de l'eliminació o eliminació d'alguna cosa, 518 00:25:14,890 --> 00:25:16,280 no elimina ni esborra. 519 00:25:16,280 --> 00:25:21,260 >> És més succintament RM, només per estalviar que algunes combinacions de tecles i premeu la tecla Enter. 520 00:25:21,260 --> 00:25:24,707 Ara anem a ser alguna cosa crípticament eliminar a.out regular. 521 00:25:24,707 --> 00:25:27,040 Realment no sé el que és una arxiu irregular seria encara. 522 00:25:27,040 --> 00:25:28,660 Però sí vull llevar-ho. 523 00:25:28,660 --> 00:25:30,150 >> Així que vaig a escriure i per a si. 524 00:25:30,150 --> 00:25:31,940 O podria escriure un cop d'ull, i prem Enter. 525 00:25:31,940 --> 00:25:33,440 I, de nou, sembla que no passa res. 526 00:25:33,440 --> 00:25:35,840 Però això és, en general, una bona cosa. 527 00:25:35,840 --> 00:25:40,490 >> Si escric LS aquest temps, ¿Què he de veure? 528 00:25:40,490 --> 00:25:44,930 Amb sort, tot just hola i hola.c. 529 00:25:44,930 --> 00:25:47,286 Ara, com un part, se li compte d'aquesta estrella, asterisc, 530 00:25:47,286 --> 00:25:48,660 això és al final dels meus programes. 531 00:25:48,660 --> 00:25:50,201 I també estan mostrant en color verd. 532 00:25:50,201 --> 00:25:53,970 Això és només el camí del CS50 IDE que cluing en el fet 533 00:25:53,970 --> 00:25:55,280 que aquest no és el codi font. 534 00:25:55,280 --> 00:25:58,880 Això és un executable, un executable programa que en realitat es pot executar 535 00:25:58,880 --> 00:26:01,020 fent barra de punts, i després el seu nom. 536 00:26:01,020 --> 00:26:05,860 >> Ara, deixa anar per davant i treure això, rm hola, Introduir, eliminar regulars 537 00:26:05,860 --> 00:26:08,010 presentar hola, si. 538 00:26:08,010 --> 00:26:11,180 I ara si escric LS, estem de tornada a hola.c. 539 00:26:11,180 --> 00:26:13,917 Intenta no eliminar el seu codi font real. 540 00:26:13,917 --> 00:26:16,250 Tot i que hi ha característiques incorporat a IDE CS50 on 541 00:26:16,250 --> 00:26:19,870 vostè pot anar a través del seu historial de revisions i retrocedir en el temps si accidentalment 542 00:26:19,870 --> 00:26:23,660 esborrar alguna cosa, fer tenir en compte segons aquestes indicacions si o no, 543 00:26:23,660 --> 00:26:25,381 del que realment vol fer. 544 00:26:25,381 --> 00:26:27,380 I si em vaig fins al cim cantonada esquerra mà aquí, 545 00:26:27,380 --> 00:26:30,696 tot el que queda és hola.c. 546 00:26:30,696 --> 00:26:32,570 Així que hi ha raïms de altres comandaments que 547 00:26:32,570 --> 00:26:37,550 pot executar en el món de Linux, un dels quals és, de nou, Fes. 548 00:26:37,550 --> 00:26:40,180 I farem el meu programa ara de la següent manera. 549 00:26:40,180 --> 00:26:43,270 >> En comptes de fer soroll metàl·lic, en lloc de fer soroll metàl·lic-o, 550 00:26:43,270 --> 00:26:45,860 Vaig a simplement literalment, tipus, marca hola. 551 00:26:45,860 --> 00:26:49,630 I ara noto, jo sóc No escrivint make hola.c. 552 00:26:49,630 --> 00:26:50,910 Estic escrivint fan hola. 553 00:26:50,910 --> 00:26:54,840 >> I aquest programa Feu aquest ve amb l'IDE CS50, i molt més 554 00:26:54,840 --> 00:26:57,090 generalment amb Linux, és un programa que és 555 00:26:57,090 --> 00:26:59,120 va a fer un programa anomenat Hola. 556 00:26:59,120 --> 00:27:03,680 I que suposarà, per convenció, que si aquest programa es pot fer, 557 00:27:03,680 --> 00:27:09,030 que serà a partir d'una font arxiu de codi que acaben en c punt, hola.c. 558 00:27:09,030 --> 00:27:12,210 >> Així que si colpeig Entra ara, l'avís que la comanda que s'executa 559 00:27:12,210 --> 00:27:14,340 és fins i tot més llarg abans que abans. 560 00:27:14,340 --> 00:27:16,670 I això és perquè hem IDE CS50 preconfigurat per tenir 561 00:27:16,670 --> 00:27:19,878 algunes característiques addicionals incorporades a aquest no necessitem de moment, però aviat ho farà. 562 00:27:19,878 --> 00:27:23,470 Però la clau per adonar és que ara tinc un programa Hola. 563 00:27:23,470 --> 00:27:27,080 >> Si escric LS de nou, tenir un programa de hola. 564 00:27:27,080 --> 00:27:32,070 I puc executar-lo amb slash dot a.out, no, 565 00:27:32,070 --> 00:27:35,590 perquè l'objectiu d'aquest exercici va ser punt hola barra. 566 00:27:35,590 --> 00:27:38,089 I ara tinc el meu programa hola món. 567 00:27:38,089 --> 00:27:39,880 Així es mou cap endavant, estem gairebé sempre sol 568 00:27:39,880 --> 00:27:42,088 va a compilar els nostres programes utilitzant la comanda Crea. 569 00:27:42,088 --> 00:27:45,300 I després anem a executar-les punt slash, i el nom del programa. 570 00:27:45,300 --> 00:27:49,610 Però adonar-se del que fan està fent per vostè, és que no és en si un compilador. 571 00:27:49,610 --> 00:27:53,310 És només un programa de conveniència que sap com activar un compilador 572 00:27:53,310 --> 00:27:56,470 per funcionar de manera que vostè mateix pot utilitzar-lo. 573 00:27:56,470 --> 00:28:00,220 >> El que hi ha altres comandaments en Linux, i al seu torn l'IDE CS50? 574 00:28:00,220 --> 00:28:03,107 Aviat veurem que hi ha una comandament CD, Canviar directori. 575 00:28:03,107 --> 00:28:05,190 Això li permet a la interfície de línia d'ordres 576 00:28:05,190 --> 00:28:07,610 per seguir endavant i cap enrere, i obrir diferents carpetes 577 00:28:07,610 --> 00:28:08,860 sense necessitat d'utilitzar el ratolí. 578 00:28:08,860 --> 00:28:12,470 >> LS que vam veure, que significa llista els arxius en el directori actual. 579 00:28:12,470 --> 00:28:14,650 Fer Dir, pot probablement començar a deduir 580 00:28:14,650 --> 00:28:18,150 el que signifiquen ara-- fer directori, Per crear una carpeta. 581 00:28:18,150 --> 00:28:21,270 RM de Remove, RM Dir eliminar directory-- i aquests, 582 00:28:21,270 --> 00:28:24,160 de nou, són la línia d'ordres equivalents del que 583 00:28:24,160 --> 00:28:26,945 podria fer en CS50 IDE amb el ratolí. 584 00:28:26,945 --> 00:28:28,820 No obstant això, aviat es trobarà que de vegades és només 585 00:28:28,820 --> 00:28:30,610 molt més ràpid que fer coses amb un teclat, 586 00:28:30,610 --> 00:28:33,690 i en última instància molt més potent. 587 00:28:33,690 --> 00:28:36,440 >> Però és difícil argumentar que tot el que hem estat fent fins ara 588 00:28:36,440 --> 00:28:39,990 és tot el que poderosa, quan tot que hem estat dient és, hola món. 589 00:28:39,990 --> 00:28:43,740 I, de fet, la hardcoded paraules hola món en el meu programa. 590 00:28:43,740 --> 00:28:45,530 No hi ha dinamisme encara. 591 00:28:45,530 --> 00:28:49,320 Scratch va ser un ordre de magnitud més interessant la setmana passada. 592 00:28:49,320 --> 00:28:51,220 >> I així anem a arribar-hi. 593 00:28:51,220 --> 00:28:55,310 Anem a fer un pas cap a la qual per forma d'algunes d'aquestes funcions. 594 00:28:55,310 --> 00:28:59,470 Així que no només vénen amb C printf, i raïms d'altres funcions 595 00:28:59,470 --> 00:29:01,850 alguns dels quals ja veurem amb el temps, no ho fa 596 00:29:01,850 --> 00:29:05,760 que sigui tan fàcil a la dreta de la porta per aconseguir l'entrada de l'usuari. 597 00:29:05,760 --> 00:29:08,140 >> De fet, una de les debilitats de llenguatges com C, 598 00:29:08,140 --> 00:29:10,140 i fins i tot Java i, en canvi altres, és que no ho fa 599 00:29:10,140 --> 00:29:15,860 fer més fàcil per obtenir només les coses com nombres enters d'usuaris, o cadenes, paraules, 600 00:29:15,860 --> 00:29:19,970 i frases, deixar que les coses per si sols com valors de punts o nombres reals flotants 601 00:29:19,970 --> 00:29:23,240 amb punts decimals, i realment números llargs, com aviat veurem. 602 00:29:23,240 --> 00:29:27,000 Pel que aquesta llista de funcions aquí, aquests són com altres peces del trencaclosques de Scratch 603 00:29:27,000 --> 00:29:31,090 que hem pre-instal lat en CS50 IDE que utilitzarem durant unes poques setmanes 604 00:29:31,090 --> 00:29:34,010 com rodes d'entrenament de les classes, i finalment treure-se'ls, i buscar 605 00:29:34,010 --> 00:29:37,210 sota el capó, potser, per la qual com s'implementen aquestes coses. 606 00:29:37,210 --> 00:29:40,460 >> Però per fer això, anem a En realitat escriure un programa. 607 00:29:40,460 --> 00:29:41,770 Déjame anar endavant ara. 608 00:29:41,770 --> 00:29:44,750 I jo vaig a crear un nou arxiu fent clic en aquest petit plus, 609 00:29:44,750 --> 00:29:45,970 i fent clic a Nou arxiu. 610 00:29:45,970 --> 00:29:49,250 >> Vaig a guardar aquesta propera un com, diguem, string.c, 611 00:29:49,250 --> 00:29:50,750 perquè vull jugar amb cordes. 612 00:29:50,750 --> 00:29:53,990 I la cadena en C és només una seqüència de caràcters. 613 00:29:53,990 --> 00:29:56,090 Així que ara seguirem endavant i fer el següent. 614 00:29:56,090 --> 00:30:01,204 >> Incloure estàndard i IO.h-- Resulta que IO estàndard, 615 00:30:01,204 --> 00:30:03,360 IO només significa d'entrada i de sortida. 616 00:30:03,360 --> 00:30:05,920 Així resulta que aquesta línia aquí és el 617 00:30:05,920 --> 00:30:08,140 són els EUA veïna d'usar printf. 618 00:30:08,140 --> 00:30:10,410 Printf, per descomptat, produeix una sortida. 619 00:30:10,410 --> 00:30:15,000 Així que per tal d'utilitzar printf, resulta a terme vostè ha de tenir aquesta línia de codi 620 00:30:15,000 --> 00:30:16,040 a la part superior del seu arxiu. 621 00:30:16,040 --> 00:30:18,456 >> I anem a tornar al que que realment significa en poc temps. 622 00:30:18,456 --> 00:30:20,400 Resulta que en qualsevol programa C que escric, 623 00:30:20,400 --> 00:30:23,640 He de començar amb codi que s'assembla a això. 624 00:30:23,640 --> 00:30:26,860 I vostè notarà CS50 IDE, i una altra de desenvolupament integrat 625 00:30:26,860 --> 00:30:30,050 ambients com ella, Anem a tractar de la millor 626 00:30:30,050 --> 00:30:31,780 que poden acabar el seu pensament. 627 00:30:31,780 --> 00:30:35,930 De fet, fa un moment, si jo desfer el que he fet, em va colpejar Retorn. 628 00:30:35,930 --> 00:30:39,160 >> llavors em va colpejar arrissat obert cotilla, premeu la tecla Enter de nou. 629 00:30:39,160 --> 00:30:40,430 I es va acabar el meu pensament. 630 00:30:40,430 --> 00:30:45,140 Em va donar una nova línia, sangria no menys per raons d'estil agradable ja veurem. 631 00:30:45,140 --> 00:30:48,559 I llavors em surt de forma automàtica que claudàtor per acabar el meu pensament. 632 00:30:48,559 --> 00:30:50,600 Ara bé, no sempre suposo que el que vol fer. 633 00:30:50,600 --> 00:30:53,620 No obstant això, en gran part, ho fa que estalviar una mica les pulsacions de teclat. 634 00:30:53,620 --> 00:30:59,560 Així que fa un moment, ens trobem amb aquest program-- hola, món, i després compilat, 635 00:30:59,560 --> 00:31:00,460 i després va córrer la mateixa. 636 00:31:00,460 --> 00:31:01,867 Però no hi ha dinamisme aquí. 637 00:31:01,867 --> 00:31:03,700 El que si volíem fer alguna cosa diferent? 638 00:31:03,700 --> 00:31:07,630 Bé, i si jo volia en realitat obtenir una cadena de l'usuari? 639 00:31:07,630 --> 00:31:11,250 Vaig a utilitzar una peça del trencaclosques diu exactament això-- aconseguir cadena. 640 00:31:11,250 --> 00:31:15,860 >> Resulta que a C que quan vostè no vol per proporcionar informació a una peça del trencaclosques, 641 00:31:15,860 --> 00:31:19,360 o més correctament a una funció, literalment només fer parèntesi obert, 642 00:31:19,360 --> 00:31:20,430 parèntesi de tancament. 643 00:31:20,430 --> 00:31:25,540 Així que és com si hagués cap caixa blanca per escriure en. 644 00:31:25,540 --> 00:31:27,720 El bloc dir abans tenia una petita caixa blanca. 645 00:31:27,720 --> 00:31:29,660 No tenim aquesta caixa blanca ara. 646 00:31:29,660 --> 00:31:33,310 >> Però quan dic cadena GET, em voler posar el resultat en algun lloc. 647 00:31:33,310 --> 00:31:37,680 Així que un paradigma molt comú en C és cridar a una funció, com la cadena d'arribar aquí, 648 00:31:37,680 --> 00:31:41,070 i després emmagatzemar el seu valor de retorn. 649 00:31:41,070 --> 00:31:44,450 És el resultat de la seva esforç en alguna cosa. 650 00:31:44,450 --> 00:31:47,630 >> I el que és el construir a la programació, 651 00:31:47,630 --> 00:31:53,450 ja sigui en Scratch o C ara, que nosaltres es pot utilitzar per emmagatzemar en realitat alguna cosa? 652 00:31:53,450 --> 00:31:55,990 Va cridar una variable, oi? 653 00:31:55,990 --> 00:32:00,320 I en Scratch, realment no ho cuidar el que estava passant en les variables. 654 00:32:00,320 --> 00:32:02,170 >> Però en aquest cas, que realment fem. 655 00:32:02,170 --> 00:32:03,719 Vaig a dir cadena. 656 00:32:03,719 --> 00:32:05,510 I llavors jo podria anomenar això el que vulgui. 657 00:32:05,510 --> 00:32:08,340 Vaig a dir- nom, aconsegueix arribar cadena. 658 00:32:08,340 --> 00:32:10,250 >> I ara, fins i tot si ets una mica nou en això, 659 00:32:10,250 --> 00:32:11,984 Noto que em falta algun detall. 660 00:32:11,984 --> 00:32:13,150 M'estic oblidant d'un punt i coma. 661 00:32:13,150 --> 00:32:14,400 He de acabar aquest pensament. 662 00:32:14,400 --> 00:32:17,480 Així que vaig a moure el cursor, i prem punt i coma allà. 663 00:32:17,480 --> 00:32:19,130 I el que he acabo de fer? 664 00:32:19,130 --> 00:32:21,440 En aquesta línia de codi, el número 5 en el moment, 665 00:32:21,440 --> 00:32:23,799 Vaig a trucar a cadena GET sense entrades. 666 00:32:23,799 --> 00:32:26,090 Així que no hi ha poc de blanc caixa com el bloc té Desa. 667 00:32:26,090 --> 00:32:28,590 >> Només estic dient, hey, equip, porta-me'n una cadena. 668 00:32:28,590 --> 00:32:31,390 El signe igual no és realment un signe igual, per se. 669 00:32:31,390 --> 00:32:33,790 És l'assignació operador, el que significa, 670 00:32:33,790 --> 00:32:37,860 Hey, ordinador, mogui el valor des de la dreta cap a l'esquerra. 671 00:32:37,860 --> 00:32:40,480 I a l'esquerra, tinc el següent. 672 00:32:40,480 --> 00:32:43,580 >> Hey, ordinador, fes-me un string-- una seqüència de caràcters. 673 00:32:43,580 --> 00:32:45,637 I cridar a aquesta cadena Nom. 674 00:32:45,637 --> 00:32:47,220 I no tenen ni tan sols dir-Nom. 675 00:32:47,220 --> 00:32:49,970 >> Podria anomenar-lo, convencionalment, una mena de S, 676 00:32:49,970 --> 00:32:52,900 de la mateixa manera que hem utilitzat per a i trucar a la variable i. 677 00:32:52,900 --> 00:32:54,829 Però ara he de fer alguna cosa amb ell. 678 00:32:54,829 --> 00:32:57,370 Seria molt estúpid per de compilar el codi, s'executa 679 00:32:57,370 --> 00:32:59,410 aquest programa, tot i que Estic rebent una cadena, 680 00:32:59,410 --> 00:33:01,580 perquè encara és només dirà hola món. 681 00:33:01,580 --> 00:33:06,140 >> Però què passa si vull canviar això. 682 00:33:06,140 --> 00:33:07,940 Per què no puc fer això? 683 00:33:07,940 --> 00:33:11,632 Percentatge s, s comes. 684 00:33:11,632 --> 00:33:13,090 I això és una mica críptic encara. 685 00:33:13,090 --> 00:33:15,560 >> Així que permetin-me fer la meva variables més clara. 686 00:33:15,560 --> 00:33:17,510 Permetin-me esmentar aquesta variable Nom. 687 00:33:17,510 --> 00:33:20,230 I vegem si no podem molestar a part del que està passant aquí. 688 00:33:20,230 --> 00:33:22,770 >> Així que en la línia cinc, estic rebent una cadena. 689 00:33:22,770 --> 00:33:25,620 I jo estic emmagatzemant aquesta cadena, qualsevol que sigui l'usuari ha escrit a 690 00:33:25,620 --> 00:33:28,430 en el seu teclat, en una variable anomenada Nom. 691 00:33:28,430 --> 00:33:30,590 I resulta que printf fa no només 692 00:33:30,590 --> 00:33:34,220 prendre un argument de doble cites, una entrada entre cometes dobles. 693 00:33:34,220 --> 00:33:39,100 >> Pot prendre dues, o tres, o més, tal que la segona, o tercera, o quarta, 694 00:33:39,100 --> 00:33:42,320 són tots els noms de les variables, o valors que és propi, 695 00:33:42,320 --> 00:33:48,610 que vol connectar a, dinàmicament, aquesta cadena entre cometes. 696 00:33:48,610 --> 00:33:52,110 En altres paraules, què seria dolent en això? 697 00:33:52,110 --> 00:33:57,920 Si acabo de dir hola nom, la barra invertida n, salvat el meu arxiu, compilat el meu codi, 698 00:33:57,920 --> 00:34:01,660 i va córrer això, què passaria? 699 00:34:01,660 --> 00:34:05,139 >> És només dirà, hola nom, literalment N-A-M-I, 700 00:34:05,139 --> 00:34:07,900 que és una espècie d'estúpida perquè no és diferent del món. 701 00:34:07,900 --> 00:34:10,400 Així que qualsevol cosa és entre cometes el que, literalment, s'imprimeix. 702 00:34:10,400 --> 00:34:12,520 Així que si vull tenir un marcador de posició allà, 703 00:34:12,520 --> 00:34:14,422 En realitat necessito utilitzar una sintaxi especial. 704 00:34:14,422 --> 00:34:17,380 I resulta que si vostè llegeix el documentació de la funció printf, 705 00:34:17,380 --> 00:34:21,320 se li dirà que si s'utilitza per cent s, 706 00:34:21,320 --> 00:34:23,920 es pot substituir un valor de la següent manera. 707 00:34:23,920 --> 00:34:27,190 >> Després d'una coma després que cometes dobles, simplement 708 00:34:27,190 --> 00:34:29,179 escriure el nom de la variable que es vol 709 00:34:29,179 --> 00:34:33,790 per endollar en aquest format codi, o especificador de format, 710 00:34:33,790 --> 00:34:35,469 s per cent per a les cordes. 711 00:34:35,469 --> 00:34:39,190 I ara si m'he salvat el meu arxiu, Torno al meu terminal. 712 00:34:39,190 --> 00:34:42,870 I Tipus Marca de cordes, perquè, de nou, el nom d'aquest 713 00:34:42,870 --> 00:34:45,510 arxiu que he triat és string.c abans. 714 00:34:45,510 --> 00:34:48,510 >> Així que vaig a dir Prefix, introdueixi. 715 00:34:48,510 --> 00:34:51,550 Oh Déu, mira a tots els errors que hem fet ja. 716 00:34:51,550 --> 00:34:55,540 I això ho és--, això és realment com un programa de línia de sis 07:00? 717 00:34:55,540 --> 00:34:57,790 Així que aquí és on es pot molt obtenir ràpidament aclaparadora. 718 00:34:57,790 --> 00:35:00,890 >> Aquesta finestra de terminal té ara només regurgitat 719 00:35:00,890 --> 00:35:03,230 un gran nombre de missatges d'error. 720 00:35:03,230 --> 00:35:07,560 Sens dubte, no tinc més errors missatges del que tenen línies de codi. 721 00:35:07,560 --> 00:35:08,680 Llavors, què està passant? 722 00:35:08,680 --> 00:35:10,920 >> Bé, la millor estratègia de fer en qualsevol moment que 723 00:35:10,920 --> 00:35:13,710 no trobar-se amb una aclaparadora llista d'errors per l'estil, 724 00:35:13,710 --> 00:35:16,690 està desplaçar-se cap enrere, miri per la comanda que acaba d'executar, que en el meu cas 725 00:35:16,690 --> 00:35:18,020 és fer cordes. 726 00:35:18,020 --> 00:35:21,630 Mira el que fan ho va fer, i això és tot Clang comandament llarga, no és gran cosa allà. 727 00:35:21,630 --> 00:35:22,950 >> No obstant això, el vermell és dolent. 728 00:35:22,950 --> 00:35:24,750 Verd està tractant de ser gentil i servicial. 729 00:35:24,750 --> 00:35:26,140 Però segueix sent dolent, en aquest cas. 730 00:35:26,140 --> 00:35:27,510 Però on està el mal? 731 00:35:27,510 --> 00:35:31,450 >> String.c, la línia 5, de cinc caràcters. 732 00:35:31,450 --> 00:35:32,930 Així que això és només convenció comú. 733 00:35:32,930 --> 00:35:36,060 significa alguna cosa de còlon alguna cosa número de línia i el nombre de caràcters. 734 00:35:36,060 --> 00:35:41,080 Error, no declarada d'ús cadena d'identificador. 735 00:35:41,080 --> 00:35:42,900 Va voler dir estàndard en? 736 00:35:42,900 --> 00:35:45,530 >> Així que, per desgràcia, Clang està tractant de ser útil. 737 00:35:45,530 --> 00:35:46,850 Però és dolent, en aquest cas. 738 00:35:46,850 --> 00:35:49,350 No, Clang, no era la meva intenció IO estàndard. 739 00:35:49,350 --> 00:35:51,070 Vull dir que en la línia un, si. 740 00:35:51,070 --> 00:35:53,420 >> Però la línia cinc és aquest d'aquí. 741 00:35:53,420 --> 00:35:57,040 I Clang no ho fa entendre S-T-R-I-N-G. 742 00:35:57,040 --> 00:36:01,490 És un identificador no declarat, un paraula que simplement mai ha vist abans. 743 00:36:01,490 --> 00:36:05,730 I això és perquè C, el llenguatge estem creant programes en aquest moment, 744 00:36:05,730 --> 00:36:08,070 no té variables anomenades cadenes. 745 00:36:08,070 --> 00:36:11,380 >> Altrament, per defecte, el suport cosa que es diu una cadena. 746 00:36:11,380 --> 00:36:16,750 Això és un tros de CS50 argot, però molt convencional. 747 00:36:16,750 --> 00:36:18,600 Però puc solucionar aquest problema de la següent manera. 748 00:36:18,600 --> 00:36:22,090 >> Si afegeixo una línia de codi a la part superior d'aquest programa, 749 00:36:22,090 --> 00:36:27,890 incloure CS50.h, que és un altre arxiu en algun lloc dins el CS50 IDE, en algun lloc 750 00:36:27,890 --> 00:36:30,820 en el disc dur, per així dir-ho, del sistema operatiu Ubuntu 751 00:36:30,820 --> 00:36:33,590 que estic corrent, que és l'arxiu que està 752 00:36:33,590 --> 00:36:38,740 va a ensenyar el funcionament sistema del que és una cadena, simplement 753 00:36:38,740 --> 00:36:41,930 io.h com a estàndard és l'arxiu en el sistema operatiu que és 754 00:36:41,930 --> 00:36:44,430 va a ensenyar el que és printf. 755 00:36:44,430 --> 00:36:46,810 >> De fet, hauríem aconseguit un missatge molt similar 756 00:36:46,810 --> 00:36:50,600 Si IO havia admès norma Io.h i va tractar d'usar printf. 757 00:36:50,600 --> 00:36:53,632 Així que vaig a seguir endavant i just control de la presa L per esborrar la pantalla. 758 00:36:53,632 --> 00:36:56,340 O pot escriure clar i ho farà acaba de netejar la finestra del terminal. 759 00:36:56,340 --> 00:36:58,020 Però encara es pot desplaçar cap a enrere en el temps. 760 00:36:58,020 --> 00:37:01,100 >> I vaig a tornar a executar Fer una cadena. 761 00:37:01,100 --> 00:37:03,660 Creuar els dits aquesta vegada, Retorn. 762 00:37:03,660 --> 00:37:05,380 Oh, Déu meu, va funcionar. 763 00:37:05,380 --> 00:37:09,280 que em mostra una ordre llarg críptica això és el que fa que genera a través de So metàl·lic, 764 00:37:09,280 --> 00:37:10,460 però cap missatge d'error. 765 00:37:10,460 --> 00:37:12,460 Així adonar-se'n, tot i que podria obtenir per complet 766 00:37:12,460 --> 00:37:14,480 aclaparat amb la nombre de missatges d'error, 767 00:37:14,480 --> 00:37:17,540 que només podria ser aquest molest en cascada efecte, en Clang no entén 768 00:37:17,540 --> 00:37:19,620 una cosa, el que significa que llavors no entén la paraula següent, 769 00:37:19,620 --> 00:37:20,560 o la línia següent. 770 00:37:20,560 --> 00:37:22,850 I pel que només s'ofega amb el seu codi. 771 00:37:22,850 --> 00:37:24,440 No obstant això, la solució pot ser molt senzilla. 772 00:37:24,440 --> 00:37:27,822 I pel que sempre es centren en el primera línia de sortida. 773 00:37:27,822 --> 00:37:29,530 I si no ho fa comprendre-ho, només cal veure 774 00:37:29,530 --> 00:37:32,480 per a les paraules clau que podria ser pistes, i el número de línia, 775 00:37:32,480 --> 00:37:34,650 i el caràcter, on aquest error podria ser. 776 00:37:34,650 --> 00:37:40,328 >> Ara vaig a seguir endavant i escric punt slash, cadena, introdueixi. 777 00:37:40,328 --> 00:37:44,340 Hm, no està dient hola res. 778 00:37:44,340 --> 00:37:46,210 Per què? 779 00:37:46,210 --> 00:37:48,170 Doncs bé, cal recordar, on està executant? 780 00:37:48,170 --> 00:37:53,730 >> Probablement és atrapat de moment en un bucle, si es vol, en la línia 6, 781 00:37:53,730 --> 00:37:56,950 Obtenir causa de cadenes per disseny, escrita pel personal CS50, 782 00:37:56,950 --> 00:38:00,350 és, literalment, significava per seure no esperar, i esperar, 783 00:38:00,350 --> 00:38:01,850 i l'espera d'una cadena. 784 00:38:01,850 --> 00:38:03,792 Tot el que entenem per cadena és la intervenció humana. 785 00:38:03,792 --> 00:38:04,500 Així que ja saben què? 786 00:38:04,500 --> 00:38:05,166 Déjame anar per davant. 787 00:38:05,166 --> 00:38:08,704 I només en un caprici, em va deixar escriure el meu nom, David, introdueixi. 788 00:38:08,704 --> 00:38:10,120 Ara tinc un programa més dinàmic. 789 00:38:10,120 --> 00:38:11,240 Es va dir, hola David. 790 00:38:11,240 --> 00:38:16,280 >> Si segueixo endavant i córrer de nou, vaig a tractar de dir el nom Zamila, introdueixi. 791 00:38:16,280 --> 00:38:17,940 I ara tenim un programa dinàmic. 792 00:38:17,940 --> 00:38:19,380 No he codificat món. 793 00:38:19,380 --> 00:38:21,760 No he codificat nomenar, o David, o Zamila. 794 00:38:21,760 --> 00:38:25,350 >> Ara és molt més semblant als programes sabem, en la qual si es triga d'entrada, 795 00:38:25,350 --> 00:38:27,870 produeix resultats lleugerament diferents. 796 00:38:27,870 --> 00:38:31,020 Ara bé, això no és el millor l'experiència de l'usuari, o UX. 797 00:38:31,020 --> 00:38:33,000 Puc executar el programa. 798 00:38:33,000 --> 00:38:35,830 >> No sé el que se suposa a fer, llevat que en realitat miro 799 00:38:35,830 --> 00:38:37,290 o recordar el codi font. 800 00:38:37,290 --> 00:38:39,640 Així que farem l'usuari experimentar una mica millor 801 00:38:39,640 --> 00:38:41,240 amb el més simple de les coses. 802 00:38:41,240 --> 00:38:44,782 Permetin-me tornar a aquest programa, i simplement dir printf. 803 00:38:44,782 --> 00:38:48,870 >> I m'ho dius a mi seguir endavant i dir el seu nom, de còlon, i un espai, i després un punt i coma. 804 00:38:48,870 --> 00:38:51,170 I només per diversió, sense folgança n. 805 00:38:51,170 --> 00:38:52,980 I això és deliberada, perquè jo no vull 806 00:38:52,980 --> 00:38:54,590 l'indicador per passar a la següent línia. 807 00:38:54,590 --> 00:38:58,800 >> Vull, en canvi, fer això, fer cordes tornar a compilar el codi en la nova màquina 808 00:38:58,800 --> 00:39:00,980 codi de punts slash cadena. 809 00:39:00,980 --> 00:39:02,460 Ah, això és molt més bonica. 810 00:39:02,460 --> 00:39:05,780 Ara sé que en realitat el que l'ordinador vol que posi, donar-li un nom. 811 00:39:05,780 --> 00:39:10,020 >> Així que vaig a seguir endavant i escriure en Rob, entrar, i hola, Rob. 812 00:39:10,020 --> 00:39:13,640 Per tant, es dóna compte, això segueix sent, al final del dia, només un programa de nou línies. 813 00:39:13,640 --> 00:39:15,090 Però hem pres aquests passos de bebè. 814 00:39:15,090 --> 00:39:18,380 >> Vam escriure una línia amb la qual ens estaven familiaritzats, printf, hola món. 815 00:39:18,380 --> 00:39:19,980 A continuació, ens vam desfer d'una mica d'això. 816 00:39:19,980 --> 00:39:21,560 I que en realitat fem servir cadena GET. 817 00:39:21,560 --> 00:39:23,362 I tirem aquest valor en una variable. 818 00:39:23,362 --> 00:39:26,070 I després vam seguir endavant i millorat encara més amb una tercera línia. 819 00:39:26,070 --> 00:39:29,220 I aquest procés iteratiu de l'escriptura de programari és realment la clau. 820 00:39:29,220 --> 00:39:33,420 En CS50, i en la vida en general, en general, no ha de seure, 821 00:39:33,420 --> 00:39:36,800 tenir un programa en ment, i tractar d'escriptura tota la maleïda cosa alhora. 822 00:39:36,800 --> 00:39:40,810 >> Serà, inevitablement, com a resultat de la manera més errors que nosaltres mateixos vam veure aquí. 823 00:39:40,810 --> 00:39:44,070 Fins i tot jo, a dia d'avui, en constant fer altres errors estúpids, 824 00:39:44,070 --> 00:39:47,480 són errors de fet més dures que són més difícils d'entendre. 825 00:39:47,480 --> 00:39:52,095 Però va cometre més errors més línies de codi que escriuen tots alhora. 826 00:39:52,095 --> 00:39:54,220 I pel que aquesta pràctica de, escriure una mica de codi 827 00:39:54,220 --> 00:39:57,930 que se senti còmode, compila que, executar-lo, provar-ho de forma més general, 828 00:39:57,930 --> 00:40:01,370 A continuació, passar pel en-- la mateixa manera que vam mantenir capes i capes de la setmana passada, 829 00:40:01,370 --> 00:40:04,190 la construcció d'una cosa molt senzill d'una mica més complex, 830 00:40:04,190 --> 00:40:05,200 fer el mateix aquí. 831 00:40:05,200 --> 00:40:08,500 No se sent, i tractar de escriure tot un problema. 832 00:40:08,500 --> 00:40:10,780 En realitat prendre aquests passos de bebè. 833 00:40:10,780 --> 00:40:15,100 >> Ara, les cadenes no són tots tan útil per a si mateixos. 834 00:40:15,100 --> 00:40:18,210 Ens havíem fet, idealment, igual que té una mica més a la nostra caixa d'eines. 835 00:40:18,210 --> 00:40:20,990 Així que en realitat fan exactament això. 836 00:40:20,990 --> 00:40:24,900 >> Déjame anar per davant ara ja aixecar un programa lleugerament diferent. 837 00:40:24,900 --> 00:40:28,320 I anem a trucar a aquest Int.C, per sencer. 838 00:40:28,320 --> 00:40:30,870 Vaig a, de manera similar, incloure CS550.h. 839 00:40:30,870 --> 00:40:33,060 Vaig a incloure IO estàndard. 840 00:40:33,060 --> 00:40:36,630 I això va a ser bastant comú en aquests primers dies de la classe. 841 00:40:36,630 --> 00:40:39,050 >> I vaig a llistes a mi mateix amb una funció principal. 842 00:40:39,050 --> 00:40:43,370 I ara en comptes d'aconseguir una cadena, seguirem endavant i obtenir un int. 843 00:40:43,370 --> 00:40:49,285 Diguem que és i, i en diuen arribar int, prop parens, punt i coma. 844 00:40:49,285 --> 00:40:51,410 I ara farem alguna cosa amb ell, printf. 845 00:40:51,410 --> 00:40:56,190 >> Diguem alguna cosa així com hola, la barra invertida n, i coma. 846 00:40:56,190 --> 00:41:00,010 Així que estic més o menys imitant el que vaig fer fa un moment. 847 00:41:00,010 --> 00:41:01,660 Tinc aquí un marcador de posició. 848 00:41:01,660 --> 00:41:05,150 Heus aquí per comes I, perquè vull per tapar i en què marcador de posició. 849 00:41:05,150 --> 00:41:07,250 >> Així que seguirem endavant i tractar l'elaboració d'aquest programa. 850 00:41:07,250 --> 00:41:10,060 L'arxiu es diu int.c. 851 00:41:10,060 --> 00:41:12,920 Així que vaig a dir, fer int, ingressi. 852 00:41:12,920 --> 00:41:16,420 Oh el meu Déu, però no és gran cosa, oi? 853 00:41:16,420 --> 00:41:17,230 Hi ha un error. 854 00:41:17,230 --> 00:41:19,810 >> Hi ha un error sintàctic aquí de manera que el programa no pot 855 00:41:19,810 --> 00:41:25,460 compilar dins Int.C, línia set, 27 caràcters, format d'error 856 00:41:25,460 --> 00:41:28,400 especifica tipus char estrella, qualsevol que sigui. 857 00:41:28,400 --> 00:41:30,020 Però el tipus d'argument és de tipus int. 858 00:41:30,020 --> 00:41:33,110 >> Així que aquí, també, no anem A-- tot i que avui dia és una gran quantitat de material, 859 00:41:33,110 --> 00:41:35,710 anem a omplir-te de absolutament totes les característiques de C, 860 00:41:35,710 --> 00:41:38,070 i programar de manera més general, en tan sols aquestes primeres setmanes. 861 00:41:38,070 --> 00:41:40,400 Sempre hi ha sovint serà l'argot amb el qual no està familiaritzat. 862 00:41:40,400 --> 00:41:43,350 I, de fet, estel char és una cosa tornarem a 863 00:41:43,350 --> 00:41:44,830 en una setmana o el temps de dos. 864 00:41:44,830 --> 00:41:47,530 >> Però per ara, anem a veure si podem analitzar les paraules que són familiars. 865 00:41:47,530 --> 00:41:50,750 Formatos-- pel que sentim format especificador, codi de format abans. 866 00:41:50,750 --> 00:41:51,840 Això és familiar. 867 00:41:51,840 --> 00:41:53,840 Type-- però l'argument té tipus int. 868 00:41:53,840 --> 00:41:55,980 Espera un minut, i és un sencer. 869 00:41:55,980 --> 00:41:59,230 >> Potser en realitat s per cent té un significat definit. 870 00:41:59,230 --> 00:42:00,230 I, de fet, ho fa. 871 00:42:00,230 --> 00:42:03,101 Un sencer, si desitja printf per substituir-lo, 872 00:42:03,101 --> 00:42:05,350 en realitat s'ha de fer servir una especificador de format diferent. 873 00:42:05,350 --> 00:42:06,890 I no vas a saber això llevat que algú li va dir, 874 00:42:06,890 --> 00:42:07,973 o si ho havia fet abans. 875 00:42:07,973 --> 00:42:10,490 Però per cent i és el pot ser utilitzat comunament 876 00:42:10,490 --> 00:42:12,240 en printf per connectar un nombre sencer. 877 00:42:12,240 --> 00:42:14,920 També pot usar cent d per un sencer decimal. 878 00:42:14,920 --> 00:42:16,490 Però i és agradable i simple aquí. 879 00:42:16,490 --> 00:42:17,590 Així que anirem amb això. 880 00:42:17,590 --> 00:42:21,160 >> Ara vaig a seguir endavant i torneu a executar make int, Retorn. 881 00:42:21,160 --> 00:42:23,328 Això és bo, no hi ha errors. 882 00:42:23,328 --> 00:42:27,260 Dot slash OK int--, mala experiència d'usuari, perquè no m'he dit 883 00:42:27,260 --> 00:42:27,760 Què fer. 884 00:42:27,760 --> 00:42:28,426 Però això està bé. 885 00:42:28,426 --> 00:42:29,480 M'estic posant en forma ràpida. 886 00:42:29,480 --> 00:42:36,260 >> I ara me n'aniré endavant i escrigui en David, OK, Zamila, Rob. 887 00:42:36,260 --> 00:42:37,820 D'acord, pel que aquesta és una bona cosa. 888 00:42:37,820 --> 00:42:41,710 Aquest cop, estic fent servir una funció, una peça del trencaclosques, anomenat get int. 889 00:42:41,710 --> 00:42:44,230 I resulta out-- i anem a veure això més endavant en el term-- 890 00:42:44,230 --> 00:42:47,730 el personal CS50 ha implementat obtenir una cadena de tal manera 891 00:42:47,730 --> 00:42:50,350 que ho farà només físicament obtenir una cadena per a vostè. 892 00:42:50,350 --> 00:42:54,340 >> S'ha implementat int posar-se en de tal manera que només es 893 00:42:54,340 --> 00:42:55,590 obtenir un nombre sencer per a vostè. 894 00:42:55,590 --> 00:42:57,830 I si, l'ésser humà, no cooperen, és 895 00:42:57,830 --> 00:43:00,590 literalment només va a tornar a intentar dir, tornar a intentar tornar a intentar, 896 00:43:00,590 --> 00:43:05,200 literalment assegut en bucle, fins obligar-amb un nombre màgic, 897 00:43:05,200 --> 00:43:07,670 així com 50, 50 i hola. 898 00:43:07,670 --> 00:43:11,440 >> O si correm això una altra vegada i el tipus en el 42, 42 hola. 899 00:43:11,440 --> 00:43:15,750 I així, la funció get int dins d'aquesta peça del trencaclosques 900 00:43:15,750 --> 00:43:19,050 és suficient la lògica, prou pensament, d'esbrinar, el que és una paraula? 901 00:43:19,050 --> 00:43:20,330 I el que és un nombre? 902 00:43:20,330 --> 00:43:23,165 Només acceptant, en última instància, nombres. 903 00:43:23,165 --> 00:43:25,690 904 00:43:25,690 --> 00:43:30,230 >> Així que resulta que aquesta No és tot el que expressiva. 905 00:43:30,230 --> 00:43:30,910 fins ara. 906 00:43:30,910 --> 00:43:33,690 Així, yay, l'última vegada que va ser bastant ràpid 907 00:43:33,690 --> 00:43:38,320 en els jocs d'execució, i l'animació, i les obres artístiques a zero. 908 00:43:38,320 --> 00:43:42,260 I aquí, estem sent contingut amb el món hola, hola i 50. 909 00:43:42,260 --> 00:43:43,696 >> No és tot el que inspirador. 910 00:43:43,696 --> 00:43:46,070 I, de fet, aquests primers exemples prendrà algun temps 911 00:43:46,070 --> 00:43:47,510 a la rampa sobre de l'emoció. 912 00:43:47,510 --> 00:43:49,854 Però tenim molt més controlar ara, de fet. 913 00:43:49,854 --> 00:43:51,770 I anem a molt iniciar ràpidament l'estratificació 914 00:43:51,770 --> 00:43:53,870 a la part superior d'aquestes primitives bàsiques. 915 00:43:53,870 --> 00:43:56,370 >> Però primer, anem a entendre quines són les limitacions. 916 00:43:56,370 --> 00:43:58,620 De fet, una de les coses Zero no fa fàcil 917 00:43:58,620 --> 00:44:00,990 fem que realment es mira sota de la campana, 918 00:44:00,990 --> 00:44:03,740 i entendre el que és una ordinador és, el que pot fer, 919 00:44:03,740 --> 00:44:05,250 i quines són les seves limitacions. 920 00:44:05,250 --> 00:44:08,580 I, de fet, que la manca de comprensió, potencialment, a llarg termini 921 00:44:08,580 --> 00:44:12,520 pot conduir a la nostra pròpia escriptura mistakes-- insectes, escriptura programari insegur que 922 00:44:12,520 --> 00:44:13,880 és atacada d'alguna manera. 923 00:44:13,880 --> 00:44:17,130 >> Així que anem a donar alguns passos cap entendre això una mica millor per 924 00:44:17,130 --> 00:44:19,710 forma de, per exemple, el següent exemple. 925 00:44:19,710 --> 00:44:23,550 Vaig a seguir endavant i posar en pràctica molt ràpid un programa anomenat Adder. 926 00:44:23,550 --> 00:44:25,134 Igual, anem a afegir alguns números junts. 927 00:44:25,134 --> 00:44:27,800 I vaig a codificar alguns revolts aquí, i simplement copiar i enganxar 928 00:44:27,800 --> 00:44:30,270 on estava abans, només pel que podem aconseguir que va abans. 929 00:44:30,270 --> 00:44:33,090 Així que ara tinc els principis bàsics d'un programa anomenat Adder. 930 00:44:33,090 --> 00:44:34,670 >> I seguirem endavant i fer això. 931 00:44:34,670 --> 00:44:38,680 Vaig a seguir endavant i per exemple, inTX aconsegueix obtenir int. 932 00:44:38,680 --> 00:44:39,430 I saps què? 933 00:44:39,430 --> 00:44:40,990 Anem a fer una millor experiència d'usuari. 934 00:44:40,990 --> 00:44:45,740 >> Així que diguem que x és, i efectivament demanar a l'usuari que ens dóna x. 935 00:44:45,740 --> 00:44:50,600 I després em va deixar anar endavant i dir, printf Què tal que i és, aquesta vegada esperant 936 00:44:50,600 --> 00:44:53,140 dos valors de l'usuari. 937 00:44:53,140 --> 00:44:59,759 I a continuació, seguirem endavant i per exemple, printf, la suma de x i y és. 938 00:44:59,759 --> 00:45:01,300 I ara no vull fer s per cent. 939 00:45:01,300 --> 00:45:09,080 Vull fer-ho per cent i, la barra invertida n i, a continuació, connecteu valor de la suma. 940 00:45:09,080 --> 00:45:10,620 >> Llavors, com puc anar fent això? 941 00:45:10,620 --> 00:45:11,270 Tu saps que? 942 00:45:11,270 --> 00:45:12,840 Sé com utilitzar variables. 943 00:45:12,840 --> 00:45:15,140 Em van deixar de declarar una nova, int z. 944 00:45:15,140 --> 00:45:16,770 >> I vaig a prendre una conjectura aquí. 945 00:45:16,770 --> 00:45:21,470 Si hi ha signes iguals en aquest idioma, potser jo puc fer x més i, 946 00:45:21,470 --> 00:45:23,660 sempre que terme el meu pensat amb un punt i coma? 947 00:45:23,660 --> 00:45:28,170 Ara puc tornar aquí baix, connecti z, acabar aquest pensament amb un punt i coma. 948 00:45:28,170 --> 00:45:33,160 I anem a veure ara, si aquests seqüències de x lines-- és aconseguir int. 949 00:45:33,160 --> 00:45:34,770 I és aconseguir int. 950 00:45:34,770 --> 00:45:37,980 >> Afegir x i y, emmagatzemar el valor en z-- pel que, de nou, recordar el signe igual 951 00:45:37,980 --> 00:45:38,560 no és igual. 952 00:45:38,560 --> 00:45:41,100 És tasca de dreta a esquerra. 953 00:45:41,100 --> 00:45:45,180 I anem a imprimir que la suma de X i Y no és literalment z, 954 00:45:45,180 --> 00:45:46,830 però el que hi ha dins de z. 955 00:45:46,830 --> 00:45:50,090 Així que farem Negre - agradable, no hi ha errors aquesta vegada. 956 00:45:50,090 --> 00:45:53,030 Dot slash Adder, entrar, x serà 1. 957 00:45:53,030 --> 00:45:55,380 >> I va a ser 2. 958 00:45:55,380 --> 00:45:58,964 I la suma de x i y es 3. 959 00:45:58,964 --> 00:46:00,130 Així que això és tot fi i bo. 960 00:46:00,130 --> 00:46:03,260 >> Per tant és d'imaginar que les matemàtiques ha de treballar en un programa com aquest. 961 00:46:03,260 --> 00:46:04,040 Però saps què? 962 00:46:04,040 --> 00:46:06,904 És aquesta variable, la línia 12, fins i tot necessari? 963 00:46:06,904 --> 00:46:09,820 No cal entrar en l'hàbit de simplement emmagatzemar coses en les variables 964 00:46:09,820 --> 00:46:10,980 només perquè és possible. 965 00:46:10,980 --> 00:46:13,550 I, de fet, en general és mal de disseny considerat 966 00:46:13,550 --> 00:46:18,100 si crearà una variable, anomenada z en aquest cas, l'emmagatzematge d'alguna cosa en ell, 967 00:46:18,100 --> 00:46:21,390 i immediatament després usar-lo, però mai més. 968 00:46:21,390 --> 00:46:24,700 Per què donar un nom a alguna cosa z com si estàs literalment 969 00:46:24,700 --> 00:46:26,770 que utilitzarà cosa només un cop, i per tant 970 00:46:26,770 --> 00:46:29,380 proximal a on va crear en primer lloc, 971 00:46:29,380 --> 00:46:31,052 tan a prop en termes de línies de codi? 972 00:46:31,052 --> 00:46:31,760 Així que ja saben què? 973 00:46:31,760 --> 00:46:34,480 Resulta que C és bastant flexible. 974 00:46:34,480 --> 00:46:36,586 Si jo en realitat vull plug-in dels valors aquí, 975 00:46:36,586 --> 00:46:38,210 No necessito per declarar una nova variable. 976 00:46:38,210 --> 00:46:41,680 Tan sols pogués plug-in de x més I, pel fet que C entén 977 00:46:41,680 --> 00:46:43,390 aritmètica i operadors matemàtics. 978 00:46:43,390 --> 00:46:47,140 >> Pel que simplement puc dir, fer això de matemàtiques, x més i, el que aquests valors són, 979 00:46:47,140 --> 00:46:50,780 connecti el resultant sencer en aquesta cadena. 980 00:46:50,780 --> 00:46:53,730 Pel que aquest podria ser, tot i que només una línia més curta, 981 00:46:53,730 --> 00:46:58,480 un millor disseny, un programa millor, perquè hi ha menys codi, per tant, 982 00:46:58,480 --> 00:46:59,921 menys per a mi entendre. 983 00:46:59,921 --> 00:47:01,920 I també és simplement més net, en la mesura que no estem 984 00:47:01,920 --> 00:47:04,620 la introducció de noves paraules, nous símbols, com z, 985 00:47:04,620 --> 00:47:07,510 tot i que en realitat no servirà molt d'un propòsit. 986 00:47:07,510 --> 00:47:12,890 >> Per desgràcia, no és matemàtiques tots els que de vegades fiables. 987 00:47:12,890 --> 00:47:15,270 Seguirem endavant i fer això. 988 00:47:15,270 --> 00:47:18,200 Vaig a seguir endavant ara i fer el següent. 989 00:47:18,200 --> 00:47:27,650 >> Farem printf, i per cent, més cent I, es cent i, n barra invertida. 990 00:47:27,650 --> 00:47:32,240 I jo faré això- xix més i. 991 00:47:32,240 --> 00:47:34,821 Així que només vaig a reescriure aquesta forma lleugerament diferent aquí. 992 00:47:34,821 --> 00:47:36,320 Em van deixar de fer una comprovació de validesa ràpida. 993 00:47:36,320 --> 00:47:37,986 Un cop més, no sortirem endavant de nosaltres mateixos. 994 00:47:37,986 --> 00:47:41,420 Fer sumador, punt sumador de barra. 995 00:47:41,420 --> 00:47:44,950 x és 1, i és 2, 1 més 2 és 3. 996 00:47:44,950 --> 00:47:45,870 I això és bo. 997 00:47:45,870 --> 00:47:49,060 Però anem a complicar això ara una mica, i crear un nou arxiu. 998 00:47:49,060 --> 00:47:53,350 >> Vaig a trucar a aquest, dir, enters, plural per als sencers. 999 00:47:53,350 --> 00:47:55,980 Permetin-me començar on era fa un moment. 1000 00:47:55,980 --> 00:47:57,770 Però ara anem a fer algunes altres línies. 1001 00:47:57,770 --> 00:48:03,430 Déjame anar endavant i fer el següent, printf, i per cent, menys el percentatge d'i, 1002 00:48:03,430 --> 00:48:08,959 és cent i, coma x, ix mengi menys i. 1003 00:48:08,959 --> 00:48:10,750 Així que estic fent una mica diferent matemàtiques allà. 1004 00:48:10,750 --> 00:48:11,624 Anem a fer un altre. 1005 00:48:11,624 --> 00:48:16,610 Així per cent i multiplicada per cent I és i cent, la barra invertida n. 1006 00:48:16,610 --> 00:48:21,430 Anem a plug-in de x i y, i els temps de xi. 1007 00:48:21,430 --> 00:48:24,530 Utilitzarem l'asterisc en l'equip de vegades. 1008 00:48:24,530 --> 00:48:26,390 >> No utilitza x. x és un nom de variable aquí. 1009 00:48:26,390 --> 00:48:28,270 S'utilitza l'estrella per la multiplicació. 1010 00:48:28,270 --> 00:48:29,020 Anem a fer una més. 1011 00:48:29,020 --> 00:48:34,580 Printf cent I, dividit per cent i, i és per cent, 1012 00:48:34,580 --> 00:48:40,460 n barra invertida. xi dividit per I- de manera que utilitzar la barra diagonal en C 1013 00:48:40,460 --> 00:48:41,502 fer la divisió. 1014 00:48:41,502 --> 00:48:42,460 I farem un altre. 1015 00:48:42,460 --> 00:48:47,920 1016 00:48:47,920 --> 00:48:55,240 La resta de cent i, dividit per cent i, i és cent. 1017 00:48:55,240 --> 00:48:59,550 xy-- i ara resta és el que queda. 1018 00:48:59,550 --> 00:49:02,980 Quan intenta dividir una denominador reduint-los a un numerador, 1019 00:49:02,980 --> 00:49:05,570 Quant queda més que no es podia dividir a terme? 1020 00:49:05,570 --> 00:49:07,910 >> Així que no hi ha realment, necessàriament, un símbol 1021 00:49:07,910 --> 00:49:09,470 que hem utilitzat a l'escola primària per això. 1022 00:49:09,470 --> 00:49:13,830 Però hi ha en C. Pot dir x mòdul i, on 1023 00:49:13,830 --> 00:49:18,000 aquest signe de percentatge en aquesta context-- confusament quan estàs dins 1024 00:49:18,000 --> 00:49:20,170 de les cometes dobles, dins printf, cent 1025 00:49:20,170 --> 00:49:21,830 s'utilitza com l'especificador de format. 1026 00:49:21,830 --> 00:49:25,420 >> Quan s'utilitza per cent fora de que, en una expressió matemàtica, 1027 00:49:25,420 --> 00:49:29,910 és l'operador de mòdul per modular arithmetic-- per als nostres propòsits 1028 00:49:29,910 --> 00:49:33,650 aquí, només vol dir, quin és la resta de x dividit per i? 1029 00:49:33,650 --> 00:49:36,130 Així x dividit per i és x barra i. 1030 00:49:36,130 --> 00:49:38,220 Quin és la resta de X dividit per I? 1031 00:49:38,220 --> 00:49:41,780 És xi mod, com diria un programador. 1032 00:49:41,780 --> 00:49:48,300 >> Així que si he comès cap error aquí, em va deixar seguir endavant i fer sencers, plural, agradable, 1033 00:49:48,300 --> 00:49:50,010 i sencers de la ratlla vertical de punts. 1034 00:49:50,010 --> 00:49:55,270 I seguirem endavant i fer, diguem, 1, 10. 1035 00:49:55,270 --> 00:49:58,390 D'acord, 1 més 10 és 11, xec. 1036 00:49:58,390 --> 00:50:01,240 1 menys 10 és negativa 9, comprovi. 1037 00:50:01,240 --> 00:50:03,420 >> 1 vegades 10 és 10, xec. 1038 00:50:03,420 --> 00:50:07,090 1 dividit per 10 és-- OK, ens saltarem que un. 1039 00:50:07,090 --> 00:50:09,480 La resta d'1 dividit per 10 és 1. 1040 00:50:09,480 --> 00:50:10,680 Això és correcte. 1041 00:50:10,680 --> 00:50:12,630 Però hi ha un error aquí. 1042 00:50:12,630 --> 00:50:15,390 >> Així que el que jo posar el meu lliurar, no és correcte. 1043 00:50:15,390 --> 00:50:16,670 És a dir, que està a prop de 0. 1044 00:50:16,670 --> 00:50:20,670 1 dividit per 10, ja saps, si estem tallar algunes cantonades, segur, és zero. 1045 00:50:20,670 --> 00:50:28,050 Però en realitat hauria de ser 1/10, 0,1, o 0,10, 0,1000, o així successivament. 1046 00:50:28,050 --> 00:50:30,600 >> Realment no hauria de ser zero. 1047 00:50:30,600 --> 00:50:35,990 Doncs bé, resulta que l'equip està fer literalment el que li vam dir que fes. 1048 00:50:35,990 --> 00:50:39,460 Estem fent matemàtiques com x dividit per i. 1049 00:50:39,460 --> 00:50:44,680 I tots dos X i Y, per les línies de codi anterior, són nombres enters. 1050 00:50:44,680 --> 00:50:50,440 >> D'altra banda, en la línia 15, que som printf dient, hey, printf plug-in 1051 00:50:50,440 --> 00:50:54,230 un enter, plug-in d'un nombre sencer, plug-in d'un integer-- específicament 1052 00:50:54,230 --> 00:50:57,580 x, i, a continuació i, a continuació, x dividit per i. x i y són enters. 1053 00:50:57,580 --> 00:50:59,060 Estem bé. 1054 00:50:59,060 --> 00:51:01,250 >> Però el que es divideix per x x? 1055 00:51:01,250 --> 00:51:06,790 x dividit per i hauria de ser, matemàticament, 1/10, o 0,1, 1056 00:51:06,790 --> 00:51:11,600 que és un nombre real, un nombre real tenir, potencialment, un punt decimal. 1057 00:51:11,600 --> 00:51:13,230 No és un nombre enter. 1058 00:51:13,230 --> 00:51:18,290 >> Però el que és el més proper nombre sencer de 1/10, o 0,1? 1059 00:51:18,290 --> 00:51:21,114 Sí, és com que és igual a zero. 1060 00:51:21,114 --> 00:51:22,030 0,1 és com això molt. 1061 00:51:22,030 --> 00:51:22,890 I 1 és tant. 1062 00:51:22,890 --> 00:51:25,870 Així desena està més a prop de 0 el que és per a un. 1063 00:51:25,870 --> 00:51:30,800 >> I així ho està fent per C nosaltres-- tipus de perquè ens van dir que A-- 1064 00:51:30,800 --> 00:51:32,600 es truncant que sencer. 1065 00:51:32,600 --> 00:51:40,540 Es tracta de prendre el valor, que és una altra vegada se suposa que és una cosa així com 0,1000, 1066 00:51:40,540 --> 00:51:41,800 0 i així successivament. 1067 00:51:41,800 --> 00:51:45,320 I s'està truncant tot després del punt decimal 1068 00:51:45,320 --> 00:51:47,510 de manera que tot això coses, perquè no ho fa 1069 00:51:47,510 --> 00:51:51,910 cabre en la noció d'un nombre enter, el qual és només un nombre negatiu com 1, 0, 1, 1070 00:51:51,910 --> 00:51:55,830 amunt i avall, es llença a les escombraries tot el després del punt decimal perquè 1071 00:51:55,830 --> 00:51:59,020 No pot cabre un punt decimal en un nombre sencer per definició. 1072 00:51:59,020 --> 00:52:01,290 >> Així que la resposta és zero. 1073 00:52:01,290 --> 00:52:02,600 Llavors, com podem solucionar aquest problema? 1074 00:52:02,600 --> 00:52:04,400 Necessitem una altra solució tots junts. 1075 00:52:04,400 --> 00:52:06,880 I podem fer això, de la següent manera. 1076 00:52:06,880 --> 00:52:12,820 >> Déjame seguir endavant i crear una nova arxiu, aquest crida floats.c. 1077 00:52:12,820 --> 00:52:16,500 I guardar-aquí al mateix directori, float.c. 1078 00:52:16,500 --> 00:52:19,360 1079 00:52:19,360 --> 00:52:23,260 I m'ho dius a mi anar per davant i copiar alguns que el codi d'abans. 1080 00:52:23,260 --> 00:52:27,690 >> Però en lloc de 1 int, farem això. 1081 00:52:27,690 --> 00:52:31,037 Dóna'm un valor de punt flotant anomenada x. on un punt flotant 1082 00:52:31,037 --> 00:52:33,370 valor és només literalment alguna cosa amb un punt flotant. 1083 00:52:33,370 --> 00:52:34,410 Pot moure cap a l'esquerra, a la dreta. 1084 00:52:34,410 --> 00:52:35,530 És un nombre real. 1085 00:52:35,530 --> 00:52:38,050 >> I no sigui jo dic obtenir int, però arribar flotador, 1086 00:52:38,050 --> 00:52:41,420 que també estava entre el menú d'opcions a la biblioteca C250. 1087 00:52:41,420 --> 00:52:43,220 Anem a canviar i a un flotador. 1088 00:52:43,220 --> 00:52:45,000 Així que això es converteix en aconseguir flotador. 1089 00:52:45,000 --> 00:52:47,620 >> I ara, no volem que endollar sencers. 1090 00:52:47,620 --> 00:52:53,130 Resulta que hem de fer servir cent f de flotació, f cent de flotador, 1091 00:52:53,130 --> 00:52:54,560 i ara guardar-lo. 1092 00:52:54,560 --> 00:53:01,220 I ara, els dits creuats, fan flotadors, agradable, flotadors de la ratlla vertical de punts. 1093 00:53:01,220 --> 00:53:04,280 x serà un 1. i Serà 10 una altra vegada. 1094 00:53:04,280 --> 00:53:08,240 >> I, bé, bé la meva addició és correcta. 1095 00:53:08,240 --> 00:53:10,240 M'esperava més, però es va oblidar escriure-ho. 1096 00:53:10,240 --> 00:53:13,250 Així que anirem i corregir aquest error lògic. 1097 00:53:13,250 --> 00:53:16,280 >> Seguirem endavant i agafar el següent. 1098 00:53:16,280 --> 00:53:18,080 Només haurem de fer una mica de copiar i enganxar. 1099 00:53:18,080 --> 00:53:20,080 I diré menys. 1100 00:53:20,080 --> 00:53:21,890 >> I vaig a vegades dir. 1101 00:53:21,890 --> 00:53:24,060 I jo vaig a dir dividida. 1102 00:53:24,060 --> 00:53:28,240 I jo no faré de mòdul, que no és tan pertinent aquí, 1103 00:53:28,240 --> 00:53:33,690 dividits per f, i els temps Plus-- OK, anem a fer això una altra vegada. 1104 00:53:33,690 --> 00:53:44,210 >> Fer flotadors, flotadors de la ratlla vertical de punts, i 1, 10, i- agradable, no, OK. 1105 00:53:44,210 --> 00:53:45,250 Així que sóc un idiota. 1106 00:53:45,250 --> 00:53:47,000 Així que això és molt comú en ciències de la computació 1107 00:53:47,000 --> 00:53:49,780 a cometre errors estúpids com aquest. 1108 00:53:49,780 --> 00:53:53,100 >> Per a fins pedagògics, el que realment volia fer 1109 00:53:53,100 --> 00:53:57,410 va ser canviar la ciència aquí que a més, com a mínim, de vegades, 1110 00:53:57,410 --> 00:54:01,140 i per separar, ja que és d'esperar notat durant aquest exercici. 1111 00:54:01,140 --> 00:54:04,700 Així que ara anem a tornar a compilar aquest programa, fer flotadors de la ratlla vertical de punts. 1112 00:54:04,700 --> 00:54:07,950 >> I per tercera vegada, anem a veure si compleix amb les meves expectatives. 1113 00:54:07,950 --> 00:54:21,480 1, 10, entrar, sí, està bé, 1.000, dividit per 10.000, és 0,100000. 1114 00:54:21,480 --> 00:54:24,952 I resulta que podem controlar el nombre de nombres són després d'aquests punts decimals. 1115 00:54:24,952 --> 00:54:25,660 En realitat ho farà. 1116 00:54:25,660 --> 00:54:26,790 Tornarem a això. 1117 00:54:26,790 --> 00:54:28,440 >> Però ara, de fet, els càlculs són correctes. 1118 00:54:28,440 --> 00:54:30,090 Així, de nou, quin és el menjar per emportar en aquesta llista? 1119 00:54:30,090 --> 00:54:33,050 Resulta que en C, hi ha no només simplement strings-- i, de fet, 1120 00:54:33,050 --> 00:54:36,120 en realitat no hi ha, perquè afegir els de la biblioteca CS50. 1121 00:54:36,120 --> 00:54:37,710 Però no són només sencers. 1122 00:54:37,710 --> 00:54:38,990 >> Hi ha també flota. 1123 00:54:38,990 --> 00:54:42,810 I resulta que un munt d'altres dades tipus també, que farem servir en poc temps. 1124 00:54:42,810 --> 00:54:46,270 Resulta que si vols una sola caràcter, no una cadena de caràcters, 1125 00:54:46,270 --> 00:54:47,610 pot utilitzar simplement un char. 1126 00:54:47,610 --> 00:54:52,350 >> Resulta que si vols un bool, un valor booleà, veritable o fals només, 1127 00:54:52,350 --> 00:54:56,840 Gràcies a la biblioteca CS50, hem afegit a C el tipus de dades BOOL també. 1128 00:54:56,840 --> 00:54:59,180 Però també és present a molts altres idiomes també. 1129 00:54:59,180 --> 00:55:04,130 I resulta que de vegades necessitarà un nombre més gran que vénen per defecte 1130 00:55:04,130 --> 00:55:05,210 amb enters i flotadors. 1131 00:55:05,210 --> 00:55:10,590 >> I, de fet, un doble és un nombre que utilitza no 32 bits, però 64 bits. 1132 00:55:10,590 --> 00:55:14,990 I un llarg temps és un nombre que no utilitza els bits 32, sinó 64 bits, 1133 00:55:14,990 --> 00:55:19,190 respectivament, per coma flotant valors i nombres enters, respectivament. 1134 00:55:19,190 --> 00:55:22,780 Així que anem a realitat ara veure això en acció. 1135 00:55:22,780 --> 00:55:26,150 >> Vaig a seguir endavant aquí i preparar ràpidament un altre programa. 1136 00:55:26,150 --> 00:55:32,020 Aquí, seguiré endavant i no incloure CS50.h. 1137 00:55:32,020 --> 00:55:34,910 I m'ho dius a mi anar, incloure norma io.h. 1138 00:55:34,910 --> 00:55:37,320 >> I es donarà compte d'una cosa enrotllat està passant aquí. 1139 00:55:37,320 --> 00:55:40,592 No és de codificació de color a les coses de la mateixa manera com ho va fer abans. 1140 00:55:40,592 --> 00:55:43,550 I resulta que, això és perquè no han donat la cosa un nom de fitxer. 1141 00:55:43,550 --> 00:55:47,270 >> Vaig a trucar a aquest sizeof.c, i va colpejar a Desa. 1142 00:55:47,270 --> 00:55:51,039 I adonar-se del que passa al meu molt codi blanc contra aquest teló de fons negre. 1143 00:55:51,039 --> 00:55:52,830 Ara, almenys hi ha alguns porpra allà. 1144 00:55:52,830 --> 00:55:54,490 I és ressaltat de sintaxi. 1145 00:55:54,490 --> 00:55:57,700 >> Això és perquè, simplement, no tinc va dir l'IDE quin tipus d'arxiu 1146 00:55:57,700 --> 00:56:01,060 és donant-li un nom, i específicament una extensió d'arxiu. 1147 00:56:01,060 --> 00:56:03,620 Ara, seguirem endavant i fer això. 1148 00:56:03,620 --> 00:56:08,910 Vaig a seguir endavant i molt simplement imprimiu el bool following-- 1149 00:56:08,910 --> 00:56:11,080 és LU cent. 1150 00:56:11,080 --> 00:56:12,950 >> tornarem a que en un moment. 1151 00:56:12,950 --> 00:56:15,840 I després vaig a mida d'impressió de bool. 1152 00:56:15,840 --> 00:56:18,170 I ara, només per estalviar jo algun temps, estic 1153 00:56:18,170 --> 00:56:20,280 va a fer en el seu conjunt manat d'aquests alhora. 1154 00:56:20,280 --> 00:56:24,620 I, en concret, vaig a canviar això a un char i la carbonissa. 1155 00:56:24,620 --> 00:56:27,760 Aquest, canviaré a un doble i un doble. 1156 00:56:27,760 --> 00:56:31,440 >> Aquest, canviaré a un flotador i un flotador. 1157 00:56:31,440 --> 00:56:35,670 Aquest, vaig a canviar a un int i un int. 1158 00:56:35,670 --> 00:56:38,660 I aquest, vaig per canviar a un llarg temps. 1159 00:56:38,660 --> 00:56:40,840 I encara està tenint molt de temps, molt temps. 1160 00:56:40,840 --> 00:56:44,572 >> I després, finalment, vaig jo una copa de més, cadena. 1161 00:56:44,572 --> 00:56:47,030 Resulta que en C, hi ha l'operador especial anomenat 1162 00:56:47,030 --> 00:56:50,260 mida d'aquest literalment anar a, quan s'executa, 1163 00:56:50,260 --> 00:56:52,099 dir-nos la mida de cadascuna d'aquestes variables. 1164 00:56:52,099 --> 00:56:53,890 I aquesta és una manera, ara, podem connectar de nou 1165 00:56:53,890 --> 00:56:57,140 a la discussió de la setmana passada de les dades i la representació. 1166 00:56:57,140 --> 00:57:00,330 >> Déjame seguir endavant i compilar mida de mida de barra de punt de. 1167 00:57:00,330 --> 00:57:01,210 I anem a veure. 1168 00:57:01,210 --> 00:57:05,210 Resulta que en C, específicament en CS50 IDE, 1169 00:57:05,210 --> 00:57:08,170 específicament en la sistema operatiu Ubuntu, 1170 00:57:08,170 --> 00:57:11,100 que és un operatiu de 64 bits sistema en aquest cas, 1171 00:57:11,100 --> 00:57:14,189 1 bool va a utilitzar un byte d'espai. 1172 00:57:14,189 --> 00:57:16,480 Així és com es mesura la grandària, no en bits, però en bytes. 1173 00:57:16,480 --> 00:57:18,690 I recorden que és un byte de vuit bits. 1174 00:57:18,690 --> 00:57:22,030 Pel que un bool, tot i que tècnicament només necessita un 0 o 1, 1175 00:57:22,030 --> 00:57:24,092 que és una mica malgastador la forma en què hem implementat. 1176 00:57:24,092 --> 00:57:26,800 Que en realitat va a utilitzar en el seu conjunt byte-- el que tots els zeros, són potser 1177 00:57:26,800 --> 00:57:31,050 tots els estimats, o alguna cosa per l'estil, o només un dels vuit bits 1. 1178 00:57:31,050 --> 00:57:34,962 >> Un char, per la seva banda, utilitza un caràcter com un caràcter ASCII a la setmana passada, 1179 00:57:34,962 --> 00:57:36,170 serà un personatge. 1180 00:57:36,170 --> 00:57:42,340 I que se sincronitza amb la nostra noció de que sigui no més de 256 bits-- més aviat, 1181 00:57:42,340 --> 00:57:45,360 sincronitza amb ella sense estar més de 8 bits, que 1182 00:57:45,360 --> 00:57:47,450 ens dóna un màxim de 256 valors. 1183 00:57:47,450 --> 00:57:49,680 Un doble va ser de 8 bytes o 64 bits. 1184 00:57:49,680 --> 00:57:50,510 >> Un flotador es 4. 1185 00:57:50,510 --> 00:57:51,690 Un int es 4. 1186 00:57:51,690 --> 00:57:52,980 Fa molt, molt és 8. 1187 00:57:52,980 --> 00:57:54,716 I és una cadena de 8. 1188 00:57:54,716 --> 00:57:55,840 Però no es preocupi per això. 1189 00:57:55,840 --> 00:57:57,340 Anem a pelar aquesta capa. 1190 00:57:57,340 --> 00:57:59,940 Resulta, cordes poden tenir més de 8 bytes. 1191 00:57:59,940 --> 00:58:02,310 >> I, de fet, hem escrit cordes ja, hola món, 1192 00:58:02,310 --> 00:58:03,700 més de 8 bytes. 1193 00:58:03,700 --> 00:58:06,270 Però anem a tornar a que en un moment. 1194 00:58:06,270 --> 00:58:09,690 Però la presa de distància aquí és la següent. 1195 00:58:09,690 --> 00:58:15,320 >> Qualsevol equip només té un nombre finit quantitat de memòria i espai. 1196 00:58:15,320 --> 00:58:17,860 Només es pot emmagatzemar tants arxius en el seu Mac o PC. 1197 00:58:17,860 --> 00:58:23,030 Només es pot emmagatzemar tants programes en RAM funcionant alhora, necessàriament, fins i tot 1198 00:58:23,030 --> 00:58:26,360 amb la memòria virtual, perquè vostè té una quantitat finita de memòria RAM. 1199 00:58:26,360 --> 00:58:28,990 >> I només per picture-- si vostè mai ha obert un ordinador portàtil 1200 00:58:28,990 --> 00:58:31,300 o ordenat memòria extra per a un ordinador, 1201 00:58:31,300 --> 00:58:33,670 podria no saber que en l'interior del seu ordinador 1202 00:58:33,670 --> 00:58:36,590 és una cosa que es veu una mica com això. 1203 00:58:36,590 --> 00:58:40,540 Així que això és només una empresa comuna anomenada Crucial que fa RAM per a ordinadors. 1204 00:58:40,540 --> 00:58:43,620 I la memòria RAM és on els programes viure mentre s'estan executant. 1205 00:58:43,620 --> 00:58:46,630 >> Així que en tots els Mac o PC, quan es fa doble feu clic en un programa, i això s'obre, 1206 00:58:46,630 --> 00:58:48,921 i s'obre una mica de document de Word o alguna cosa aixi, 1207 00:58:48,921 --> 00:58:51,764 l'emmagatzema temporalment en RAM, memòria RAM ja que és més ràpid 1208 00:58:51,764 --> 00:58:53,680 del seu disc dur, o el disc d'estat sòlid. 1209 00:58:53,680 --> 00:58:56,600 Pel que és just on van els programes per viure quan s'estan executant, 1210 00:58:56,600 --> 00:58:58,060 o quan s'utilitzen arxius. 1211 00:58:58,060 --> 00:59:00,890 >> Pel que té coses que es veuen així per dins del seu ordinador portàtil, 1212 00:59:00,890 --> 00:59:03,320 o coses una mica més gran dins del seu escriptori. 1213 00:59:03,320 --> 00:59:07,440 Però la clau és que només té una nombre finit d'aquestes coses. 1214 00:59:07,440 --> 00:59:11,230 I només hi ha una quantitat finita de maquinari assegut en aquesta taula de la dreta 1215 00:59:11,230 --> 00:59:11,730 aquí. 1216 00:59:11,730 --> 00:59:15,920 >> Així que, sens dubte, no podem emmagatzemar nombres infinitament llarg. 1217 00:59:15,920 --> 00:59:19,030 I, però, si vostè pensa de nou a l'escola primària, el nombre de dígits pot 1218 00:59:19,030 --> 00:59:21,400 vostè té la dreta d'un punt decimal? 1219 00:59:21,400 --> 00:59:24,680 Per la resta, el nombre de dígits pot vostè té a l'esquerra de la coma decimal? 1220 00:59:24,680 --> 00:59:26,300 En realitat, infinitament molts. 1221 00:59:26,300 --> 00:59:30,840 >> Ara, nosaltres, els éssers humans només podria saber com es pronuncia milions, 1222 00:59:30,840 --> 00:59:34,990 i milers de milions, bilions de dòlars, i quadrilió, i trilions. 1223 00:59:34,990 --> 00:59:39,370 I estic empenyent els límits de la meva understanding-- o mi-- entenc 1224 00:59:39,370 --> 00:59:41,110 números, però el meu Pronunciació dels nombres. 1225 00:59:41,110 --> 00:59:44,720 Però es pot aconseguir amb infinitament gran un nombre infinit de dígits a l'esquerra 1226 00:59:44,720 --> 00:59:47,050 o a la dreta de la coma decimal. 1227 00:59:47,050 --> 00:59:50,040 >> Però els ordinadors només tenen una quantitat finita de memòria, 1228 00:59:50,040 --> 00:59:53,510 un nombre finit de transistors, un nombre finit de bombetes de llum a l'interior. 1229 00:59:53,510 --> 00:59:57,350 Llavors, què passa quan se li acaba l'espai? 1230 00:59:57,350 --> 00:59:59,620 En altres paraules, si pensar de nou a la setmana passada 1231 00:59:59,620 --> 01:00:03,160 quan parlem de nombres que elles mateixes siguin representats en binari, 1232 01:00:03,160 --> 01:00:05,480 Suposem que tenim aquest valor de 8 bits aquí. 1233 01:00:05,480 --> 01:00:08,290 >> I tenim gener 7 i un 0. 1234 01:00:08,290 --> 01:00:10,827 I suposem que volem afegir 1 a aquest valor. 1235 01:00:10,827 --> 01:00:12,410 Aquest és un nombre molt gran en aquest moment. 1236 01:00:12,410 --> 01:00:16,610 >> Això és 254, si no recordo els càlculs de l'última setmana de la dreta. 1237 01:00:16,610 --> 01:00:19,480 Però el que si canvi que més a la dreta 0 d'un 1? 1238 01:00:19,480 --> 01:00:22,800 El nombre total de Per descomptat, es converteix en vuit 1 de. 1239 01:00:22,800 --> 01:00:24,050 Així que estem sent bona. 1240 01:00:24,050 --> 01:00:27,204 >> I que probablement representa 255, encara que depenent del context 1241 01:00:27,204 --> 01:00:29,120 que en realitat podria representar un nombre negatiu. 1242 01:00:29,120 --> 01:00:31,240 Però més d'això en un altre moment. 1243 01:00:31,240 --> 01:00:34,220 Això se sent com es tracta d' tan alt com puc explicar. 1244 01:00:34,220 --> 01:00:35,290 >> Ara, és només 8 bits. 1245 01:00:35,290 --> 01:00:38,170 I el meu Mac, sens dubte, té forma més de 8 bits de la memòria. 1246 01:00:38,170 --> 01:00:39,170 Però té finita. 1247 01:00:39,170 --> 01:00:43,230 Així mateix argument s'aplica, fins i tot si tenir més d'aquests que estan a la pantalla. 1248 01:00:43,230 --> 01:00:47,020 >> Però què passa si estàs emmagatzemar aquest número, 255, 1249 01:00:47,020 --> 01:00:49,290 i que desitja comptar gener mica més alt? 1250 01:00:49,290 --> 01:00:51,600 Vols anar de 255 a la tecnologia 256. 1251 01:00:51,600 --> 01:00:55,800 El problema, per descomptat, és que si es començarà a comptar des de zero com la setmana passada, 1252 01:00:55,800 --> 01:00:59,670 no es pot comptar tan alt com 256, 257 i molt menys, 1253 01:00:59,670 --> 01:01:02,584 per no parlar de 258, m perquè el que succeeix quan s'agrega 1 gen? 1254 01:01:02,584 --> 01:01:05,000 Si ho fa la vella escola de grau enfocament, es posa gener 1 aquí, 1255 01:01:05,000 --> 01:01:08,150 i després 1 més 1 és 2, però això és Realment un zero, que porten l'1, 1256 01:01:08,150 --> 01:01:09,695 portar a la 1, portar a la 1. 1257 01:01:09,695 --> 01:01:12,620 Totes aquestes coses, aquests d'1, van a zero. 1258 01:01:12,620 --> 01:01:17,820 I que acaben, sí, com algú assenyalat, un 1 a la banda esquerra. 1259 01:01:17,820 --> 01:01:22,540 Però tot el que pugui en realitat veure i cabre en la memòria 1260 01:01:22,540 --> 01:01:27,960 és tan sols vuit de 0, el que vol dir en algun moment si, un ordinador, 1261 01:01:27,960 --> 01:01:32,490 intentat explicar prou alt, ets va a embolicar al voltant, segons sembla, 1262 01:01:32,490 --> 01:01:35,850 a zero, o potser fins i tot negatiu nombres, que són fins i tot inferiors a zero. 1263 01:01:35,850 --> 01:01:37,260 >> I podem espècie de veure això. 1264 01:01:37,260 --> 01:01:39,900 Déjame seguir endavant i escriure un veritable programa ràpid aquí. 1265 01:01:39,900 --> 01:01:43,690 Déjame seguir endavant i escriure un programa anomenat desbordament. 1266 01:01:43,690 --> 01:01:49,980 Incloure CS50.h, inclogui estàndard IO.h-- oh, 1267 01:01:49,980 --> 01:01:51,730 Realment estranyava al meu ressaltat de sintaxi. 1268 01:01:51,730 --> 01:01:54,440 Així que anem a guardar això com overflow.c. 1269 01:01:54,440 --> 01:01:57,084 >> I ara int void-- principal i en poc temps, anem a 1270 01:01:57,084 --> 01:01:59,500 tornar a explicar per què seguim escrivint int void main. 1271 01:01:59,500 --> 01:02:02,080 Però per ara, farem que, donant per fet. 1272 01:02:02,080 --> 01:02:06,200 Anem a donar a mi mateix 1 int, i inicialitzar a 0. 1273 01:02:06,200 --> 01:02:11,716 >> Farem a continuació per int i obtenir zero-- En realitat, farem un bucle infinit 1274 01:02:11,716 --> 01:02:12,590 i veure què passa. 1275 01:02:12,590 --> 01:02:22,440 Encara que és veritat, llavors anem a imprimir a terme n És per cent i, la barra invertida n, plug-n. 1276 01:02:22,440 --> 01:02:27,200 Però, ara, farem que n es fa n + 1. 1277 01:02:27,200 --> 01:02:29,660 >> Així, en altres paraules, en cada iteració d'aquest bucle infinit, 1278 01:02:29,660 --> 01:02:32,550 prenguem el valor de n, i s'afegeix 1 a la mateixa, i després 1279 01:02:32,550 --> 01:02:34,350 emmagatzemar el resultat de nou n de l'esquerra. 1280 01:02:34,350 --> 01:02:37,150 I, de fet, hem vist la sintaxi una mica com això, breument. 1281 01:02:37,150 --> 01:02:39,730 Un bon truc és en canvi d'escriure tot això a terme, 1282 01:02:39,730 --> 01:02:42,770 en realitat es pot dir que una més n és igual a 1. 1283 01:02:42,770 --> 01:02:47,480 >> O si realment vol ser de luxe, es pot dir n plus plus punt i coma. 1284 01:02:47,480 --> 01:02:50,130 Però aquests dos últims són simplement el que nosaltres anomenem el sucre sintàctica 1285 01:02:50,130 --> 01:02:50,790 per a la primera cosa. 1286 01:02:50,790 --> 01:02:53,456 >> El primer és més explícit, totalment bé, tot correcte. 1287 01:02:53,456 --> 01:02:55,470 Però això és més comú, que vaig a dir. 1288 01:02:55,470 --> 01:02:57,210 Així que anem a fer això per un moment. 1289 01:02:57,210 --> 01:03:01,685 >> Ara farem desbordament, que sona en lloc de mal averany, desbordament barra de punts. 1290 01:03:01,685 --> 01:03:04,380 1291 01:03:04,380 --> 01:03:09,852 Anem a veure, n està fent molt gran. 1292 01:03:09,852 --> 01:03:11,310 Però pensem, el gran que n pot aconseguir? 1293 01:03:11,310 --> 01:03:12,870 >> n és un enter. 1294 01:03:12,870 --> 01:03:16,400 Vam veure fa un moment amb la mida de exemple, que un int és de quatre bytes. 1295 01:03:16,400 --> 01:03:22,070 Sabem de la setmana passada, quatre bytes és 32 bits, ja que 8 vegades 4, això és 32. 1296 01:03:22,070 --> 01:03:23,460 Això va a ser de 4 milions de dòlars. 1297 01:03:23,460 --> 01:03:25,802 >> I estem fins a 800.000. 1298 01:03:25,802 --> 01:03:28,510 Això va a tenir sempre a comptar tan alt com sigui possible. 1299 01:03:28,510 --> 01:03:30,635 Així que seguiré endavant, com pot ser que després de poc temps, 1300 01:03:30,635 --> 01:03:34,910 i prem Control de C-- francament, Control C, molt, on el control general C 1301 01:03:34,910 --> 01:03:36,034 mitjans cancel·len. 1302 01:03:36,034 --> 01:03:38,200 Desafortunadament, a causa d'aquesta s'està executant en el núvol, 1303 01:03:38,200 --> 01:03:41,190 De vegades el núvol és escopint tantes coses, 1304 01:03:41,190 --> 01:03:44,180 tant la producció, que va a prendre una mica de temps per a la meva entrada 1305 01:03:44,180 --> 01:03:45,630 per arribar al núvol. 1306 01:03:45,630 --> 01:03:49,240 Així que, tot i que em va colpejar Control C Fa uns pocs segons, 1307 01:03:49,240 --> 01:03:53,110 aquest és sens dubte el costat efecte d'un bucle infinit. 1308 01:03:53,110 --> 01:03:56,070 >> I així, en aquests casos, estem deixarà que sigui. 1309 01:03:56,070 --> 01:03:59,050 I anem a afegir un altre finestra de terminal per aquí 1310 01:03:59,050 --> 01:04:03,186 amb els pols positiu, que per descomptat no ho fa d'aquesta manera, ja que encara està pensant. 1311 01:04:03,186 --> 01:04:05,310 I seguirem endavant i estar una mica més raonable. 1312 01:04:05,310 --> 01:04:07,768 >> Vaig a seguir endavant i fer-ho Això només un nombre finit de vegades. 1313 01:04:07,768 --> 01:04:10,047 Utilitzarem un bucle for, el que he al·ludit abans. 1314 01:04:10,047 --> 01:04:10,630 Anem a fer-ho. 1315 01:04:10,630 --> 01:04:13,430 Dóna'm una altra variable int i aconsegueix 0. 1316 01:04:13,430 --> 01:04:17,430 i és menor que, diguem, 64 i ++. 1317 01:04:17,430 --> 01:04:24,010 I ara permetin-me imprimámoslas n és a terme per cent i, la coma n. 1318 01:04:24,010 --> 01:04:27,547 I a continuació, això segueix sent n- va a prendre per sempre. 1319 01:04:27,547 --> 01:04:28,130 Anem a fer-ho. 1320 01:04:28,130 --> 01:04:30,620 >> n es fa n vegades 2. 1321 01:04:30,620 --> 01:04:34,140 O podríem ser de luxe i fer temps és igual a 2. 1322 01:04:34,140 --> 01:04:37,120 Però diguem que n és igual a si mateix, els temps 2. 1323 01:04:37,120 --> 01:04:39,321 En altres paraules, en aquest nova versió del programa, 1324 01:04:39,321 --> 01:04:41,820 No vull esperar per sempre com de 800.000 a 4 milions d'dòlars. 1325 01:04:41,820 --> 01:04:43,070 Anem a acabar amb això. 1326 01:04:43,070 --> 01:04:44,920 >> Anem a duplicar en realitat n cada vegada. 1327 01:04:44,920 --> 01:04:47,660 El qual, el record, la duplicació és el oposada de tenir, és clar. 1328 01:04:47,660 --> 01:04:50,035 I mentre que la setmana passada tenim alguna cosa nova, i de nou, 1329 01:04:50,035 --> 01:04:52,200 i de nou, súper ràpid, duplicació segurament ho faran 1330 01:04:52,200 --> 01:04:58,080 treure'ns d'1 a la major possible valor que podem comptar fins a amb un int. 1331 01:04:58,080 --> 01:04:59,750 >> Així que farem exactament això. 1332 01:04:59,750 --> 01:05:01,720 I anem a tornar a aquest després de poc temps. 1333 01:05:01,720 --> 01:05:04,180 Però això, de nou, és igual el bloc de repetició en Scratch. 1334 01:05:04,180 --> 01:05:05,600 I farem servir això en poc temps. 1335 01:05:05,600 --> 01:05:10,170 >> Això només vol dir recompte de zero fins, però no igual, a 64. 1336 01:05:10,170 --> 01:05:14,285 I en cada iteració d'aquesta llaç, mantindria incrementant i. 1337 01:05:14,285 --> 01:05:18,990 Així i ++ - i aquesta construcció en general en la línia 7 és només una manera súper comuna 1338 01:05:18,990 --> 01:05:22,290 de repetir algunes línies de codi, cert nombre de vegades. 1339 01:05:22,290 --> 01:05:23,362 Quines línies de codi? 1340 01:05:23,362 --> 01:05:25,570 Aquestes claus, com es poden haver recollit a partir d'ara, 1341 01:05:25,570 --> 01:05:26,780 significa, feu el següent. 1342 01:05:26,780 --> 01:05:29,510 >> És com en Scratch, quan que té els blocs grocs 1343 01:05:29,510 --> 01:05:32,680 i altres colors que tipus de abraçar o abraçar a altres blocs. 1344 01:05:32,680 --> 01:05:34,750 Això és el que aquests arrissat aparells ortopèdics estan fent aquí. 1345 01:05:34,750 --> 01:05:40,200 Així que si em van donar el meu sintaxi que dreta- pot veure el símbol de pastanaga al mig C 1346 01:05:40,200 --> 01:05:42,706 que és la quantitat de vegades que he estat tractar de resoldre aquest problema. 1347 01:05:42,706 --> 01:05:45,330 Així que anem a desfer-nos de que un en total, i tancar aquesta finestra. 1348 01:05:45,330 --> 01:05:46,520 I utilitzarem la nova. 1349 01:05:46,520 --> 01:05:51,980 Fer desbordament, barra de punts desbordament, Enter, tots els drets, 1350 01:05:51,980 --> 01:05:53,090 es veu malament al principi. 1351 01:05:53,090 --> 01:05:56,200 Però anem a retrocedir en el temps, perquè em va fer això 64 vegades. 1352 01:05:56,200 --> 01:05:58,700 >> I observi la primera vegada, n és 1. 1353 01:05:58,700 --> 01:06:03,110 La segona vegada, n és 2, després 4, després 8, després 16. 1354 01:06:03,110 --> 01:06:09,450 I sembla que quan Arribo a més o menys 1 mil milions, 1355 01:06:09,450 --> 01:06:12,800 si faig doble de nou, que ha me 2000000000. 1356 01:06:12,800 --> 01:06:14,980 Però resulta, que és just a la cúspide. 1357 01:06:14,980 --> 01:06:18,930 >> I el que en realitat es desborda un enter de 1000000000 1358 01:06:18,930 --> 01:06:23,514 a més o menys 2 negatiu milions de dòlars, a causa d'un nombre sencer, 1359 01:06:23,514 --> 01:06:25,430 a diferència de la que nombres van ser assumint la setmana passada, 1360 01:06:25,430 --> 01:06:28,397 pot ser tant positiva com negativa en la realitat i en un ordinador. 1361 01:06:28,397 --> 01:06:30,730 I així, almenys, un dels els bits són robats eficàcia. 1362 01:06:30,730 --> 01:06:34,190 Així que realment només tenim 31 bits, o 2 mil milions de valors possibles. 1363 01:06:34,190 --> 01:06:38,220 >> Però per ara, el menjar per emportar és bastant simplement, siguin quines siguin aquests números són 1364 01:06:38,220 --> 01:06:42,280 i qualsevol que sigui la matemàtica és, que succeeix una cosa dolenta amb el temps, 1365 01:06:42,280 --> 01:06:46,980 perquè amb el temps que està intentant permutar els bits massa vegades. 1366 01:06:46,980 --> 01:06:51,060 I vas efectiva de tot de 1 a 0 potser tots de, o potser 1367 01:06:51,060 --> 01:06:54,260 simplement algun altre patró que clarament, depenent del context, 1368 01:06:54,260 --> 01:06:56,342 pot ser interpretat com un nombre negatiu. 1369 01:06:56,342 --> 01:06:59,300 I pel que sembla el més alt que pot comptar en aquest programa concret 1370 01:06:59,300 --> 01:07:01,210 és només aproximadament 1 mil milions. 1371 01:07:01,210 --> 01:07:02,760 Però hi ha una solució parcial aquí. 1372 01:07:02,760 --> 01:07:03,480 Tu saps que? 1373 01:07:03,480 --> 01:07:07,600 >> Déjame canviar d'una Int a un llarg temps. 1374 01:07:07,600 --> 01:07:10,633 I m'ho dius a mi anar per davant aquí i dir-- Vaig a tenir 1375 01:07:10,633 --> 01:07:12,290 per canviar això a un llarg sense signe. 1376 01:07:12,290 --> 01:07:16,860 O bé, anem a veure, mai em acord de mi. 1377 01:07:16,860 --> 01:07:19,920 >> Seguirem endavant i crea desbordament. 1378 01:07:19,920 --> 01:07:21,860 No, no és això, LLD, gràcies. 1379 01:07:21,860 --> 01:07:23,430 Així que de vegades pot ser útil Clang. 1380 01:07:23,430 --> 01:07:27,550 No recordo el que el format especificador va ser durant molt de temps. 1381 01:07:27,550 --> 01:07:28,950 >> Però, de fet, Clang em va dir. 1382 01:07:28,950 --> 01:07:31,570 El verd és un tipus de bé, encara vol dir que va cometre un error. 1383 01:07:31,570 --> 01:07:33,190 Es endevinant que volia dir LLD. 1384 01:07:33,190 --> 01:07:38,750 >> Per això vull aprofitar és un consell, una llarga nombre decimal de longitud, llevat que. 1385 01:07:38,750 --> 01:07:43,190 I permetin-me tornar a executar-lo, dot reduir desbordament, Retorn. 1386 01:07:43,190 --> 01:07:45,020 I ara el que és fresc és això. 1387 01:07:45,020 --> 01:07:49,140 >> Si em desplaço cap enrere en el temps, encara vam començar comptant al mateix lloc-- 1, 2, 4, 1388 01:07:49,140 --> 01:07:50,220 8, 16. 1389 01:07:50,220 --> 01:07:54,860 Avís, obtenim tota la fins a arribar a 1 mil milions. 1390 01:07:54,860 --> 01:07:57,070 Però llavors amb seguretat arribar a 2000000000. 1391 01:07:57,070 --> 01:08:01,300 >> Llavors vam aconseguir a 4 milions de dòlars, a continuació, 8 mil milions, 17000000000. 1392 01:08:01,300 --> 01:08:03,340 I anem més alt, i més alt, i superior. 1393 01:08:03,340 --> 01:08:05,740 Amb el temps, això també es trenca. 1394 01:08:05,740 --> 01:08:09,350 >> Finalment, amb un llarg temps, que és el valor de 64 bits, no 1395 01:08:09,350 --> 01:08:13,660 un valor de 32 bits, si es compta massa alt, que es col·loca al voltant de 0. 1396 01:08:13,660 --> 01:08:16,410 I en aquest cas, ens ha tocat acabar amb un nombre negatiu. 1397 01:08:16,410 --> 01:08:17,550 >> Així que aquest és un problema. 1398 01:08:17,550 --> 01:08:20,439 I resulta que aquest problema no és tan arcà. 1399 01:08:20,439 --> 01:08:23,060 Encara que he deliberadament induïda amb aquests errors, 1400 01:08:23,060 --> 01:08:26,149 Resulta que ho veiem tot tipus de nosaltres, o almenys alguns de nosaltres al voltant de fer-ho. 1401 01:08:26,149 --> 01:08:28,939 >> Així que en Lego Star Wars, si Alguna vegada has jugat el joc, 1402 01:08:28,939 --> 01:08:33,830 Resulta que es pot donar la volta trencar les coses en el món de LEGO, 1403 01:08:33,830 --> 01:08:36,640 i la recollida de monedes, essencialment. 1404 01:08:36,640 --> 01:08:39,200 I si has jugat alguna vegada aquest joc massa temps, 1405 01:08:39,200 --> 01:08:42,630 ja que aquest individu no identificat aquí ho va fer, el nombre total 1406 01:08:42,630 --> 01:08:46,700 de monedes que es poden recollir és, segons sembla, 4 mil milions. 1407 01:08:46,700 --> 01:08:48,240 >> Ara, amb ell és en realitat arrodonit. 1408 01:08:48,240 --> 01:08:50,239 Així que estava tractant de LEGO mantenir les coses fàcil d'utilitzar. 1409 01:08:50,239 --> 01:08:53,779 Ells no ho van fer exactament a 2 el 32 de potència, a la setmana passada. 1410 01:08:53,779 --> 01:08:55,310 Però 4000000000 és una raó. 1411 01:08:55,310 --> 01:08:58,979 Sembla, a partir d'aquesta informació, que LEGO, i l'empresa que 1412 01:08:58,979 --> 01:09:02,624 fet aquest programari real, va decidir que el nombre màxim de monedes 1413 01:09:02,624 --> 01:09:04,540 l'usuari pot acumular és, de fet, 4 mil milions, 1414 01:09:04,540 --> 01:09:12,069 perquè van triar en el seu codi utilitzar no molt de temps, pel que sembla, 1415 01:09:12,069 --> 01:09:16,140 però només un nombre sencer, sense signe nombre sencer, només un nombre enter positiu, el 1416 01:09:16,140 --> 01:09:18,089 valor màxim més o menys és això. 1417 01:09:18,089 --> 01:09:19,380 Bé, aquí hi ha un altre divertit. 1418 01:09:19,380 --> 01:09:23,500 Així que en el joc de la civilització, la qual alguns de vostès podrien estar familiaritzats amb 1419 01:09:23,500 --> 01:09:26,660 resulta que fa anys es Va ser un error en aquest joc mitjançant el qual 1420 01:09:26,660 --> 01:09:28,750 si has jugat el paper de Gandhi en el joc, 1421 01:09:28,750 --> 01:09:34,020 en comptes d'estar molt pacifista, en canvi, va ser molt, molt 1422 01:09:34,020 --> 01:09:36,399 agressiu, en algunes circumstàncies. 1423 01:09:36,399 --> 01:09:40,529 En particular, la forma en què la civilització obres és que si vostè, el jugador, 1424 01:09:40,529 --> 01:09:44,680 adoptar la democràcia, la seva El marcador es posa l'agressivitat 1425 01:09:44,680 --> 01:09:48,130 decrementa en dos, almenys menys, i després minus. 1426 01:09:48,130 --> 01:09:50,569 >> Pel que resta 2 seva iteració actual. 1427 01:09:50,569 --> 01:09:56,650 Desafortunadament, si la seva iteració és inicialment 1, 2 i restar d'ella 1428 01:09:56,650 --> 01:09:59,050 després d'adoptar la democràcia com Gandhi aquí podria 1429 01:09:59,050 --> 01:10:02,200 ho han fet, perquè era molt passive-- 1 en l'escala d'agressivitat. 1430 01:10:02,200 --> 01:10:04,830 Però si s'adopta la democràcia, a continuació, que va d'1 a 1 negatiu. 1431 01:10:04,830 --> 01:10:11,470 >> Desafortunadament, eren l'ús de nombres sense signe, 1432 01:10:11,470 --> 01:10:15,400 el que significa que tracten fins i tot negatiu números com si fossin positius. 1433 01:10:15,400 --> 01:10:19,780 I resulta que la equivalent positiu d'1 negatiu, 1434 01:10:19,780 --> 01:10:23,480 en programes informàtics típics, és 255. 1435 01:10:23,480 --> 01:10:27,250 Així que si Gandhi adopta la democràcia té, i per tant 1436 01:10:27,250 --> 01:10:32,470 la seva puntuació es va reduir l'agressivitat, que en realitat al voltant dels rotllos a 255 1437 01:10:32,470 --> 01:10:35,470 i el fa més caràcter agressiu en el joc. 1438 01:10:35,470 --> 01:10:36,930 Pel que pot buscar a Google en això. 1439 01:10:36,930 --> 01:10:39,380 I va ser, de fet, una error de programació accidental, 1440 01:10:39,380 --> 01:10:43,010 però això ha entrat bastant la tradició des de llavors. 1441 01:10:43,010 --> 01:10:44,360 >> Això és tot diversió i valent. 1442 01:10:44,360 --> 01:10:47,760 Més alarmant és quan es real dispositius del món real, i no els jocs, 1443 01:10:47,760 --> 01:10:48,820 tenir aquests mateixos errors. 1444 01:10:48,820 --> 01:10:54,500 De fet, fa tot just un any un article vi terme sobre el Boeing 787 Dreamliner. 1445 01:10:54,500 --> 01:10:56,850 >> I l'article en un primer moment mirada llegeix una mica arcà. 1446 01:10:56,850 --> 01:11:01,480 Però dit això, un programari vulnerabilitat en Boeing 1447 01:11:01,480 --> 01:11:04,790 nou 787 Dreamliner jet té el potencial per causar pilots 1448 01:11:04,790 --> 01:11:07,220 perdre el control de l'aeronau, possiblement 1449 01:11:07,220 --> 01:11:11,750 en ple vol, els funcionaris de la FAA Les aerolínies advertir recentment. 1450 01:11:11,750 --> 01:11:14,520 Era la determinació que un model 787 1451 01:11:14,520 --> 01:11:19,770 avió que ha estat alimentat de forma contínua durant 248 dies 1452 01:11:19,770 --> 01:11:24,880 poden perdre totalment el corrent altern, CA, energia elèctrica a causa del generador 1453 01:11:24,880 --> 01:11:28,892 unitats de control, GCU, alhora entrar en mode de seguretat de. 1454 01:11:28,892 --> 01:11:29,850 És una mena de perdre. 1455 01:11:29,850 --> 01:11:35,390 No obstant això, la nota s'assenyalava, OK, ara he de, la condició va ser causada per un programari 1456 01:11:35,390 --> 01:11:38,590 comptador intern de el control del generador 1457 01:11:38,590 --> 01:11:44,860 unitats que es desbordarà després 248 dies de potència contínua. 1458 01:11:44,860 --> 01:11:47,070 Estem emetent aquest AVÍS Per evitar la pèrdua de 1459 01:11:47,070 --> 01:11:49,300 de tots AC elèctric poder, el que podria resultar 1460 01:11:49,300 --> 01:11:50,980 la pèrdua de control de l'avió. 1461 01:11:50,980 --> 01:11:55,380 >> Així que, literalment, hi ha un cert nombre sencer, o un cert tipus de dades equivalent, 1462 01:11:55,380 --> 01:11:57,960 sent utilitzat en programari en un avió real 1463 01:11:57,960 --> 01:12:00,756 que si manté el seu avió el temps suficient, que pel que sembla 1464 01:12:00,756 --> 01:12:03,880 pot ser el cas si només està executant ells constantment i mai desconnectar 1465 01:12:03,880 --> 01:12:06,810 el seu avió, segons sembla, o deixant que els seus bateries s'esgotin, 1466 01:12:06,810 --> 01:12:09,840 amb el temps es compta ascendent, i fins, i amunt, i amunt i amunt, i cap amunt. 1467 01:12:09,840 --> 01:12:12,150 >> I, per naturalesa, una quantitat finita de memòria 1468 01:12:12,150 --> 01:12:15,880 es desbordarà, rodant de nou a zero o un valor negatiu, 1469 01:12:15,880 --> 01:12:19,920 un efecte secundari que és el la realitat terriblement reals 1470 01:12:19,920 --> 01:12:23,970 que l'avió podria necessitar ser reiniciat, efectivament, 1471 01:12:23,970 --> 01:12:27,290 o podria caure, pitjor encara, a mesura que vola. 1472 01:12:27,290 --> 01:12:29,230 Pel que aquest tipus de problemes segueixen amb nosaltres, 1473 01:12:29,230 --> 01:12:33,130 even-- aquest era un article de 2015, encara més alarmant 1474 01:12:33,130 --> 01:12:36,100 quan no ho fa necessàriament entendre, apreciar, o anticipar 1475 01:12:36,100 --> 01:12:38,640 aquest tipus d'errors. 1476 01:12:38,640 --> 01:12:42,030 >> Per tant, resulta que hi ha un altre El dolent de representació de dades. 1477 01:12:42,030 --> 01:12:47,080 Resulta que fins i tot flotadors són tipus de falles, a causa dels flotadors, també, 1478 01:12:47,080 --> 01:12:51,440 Vaig proposar són de 32 bits, o potser 64 si s'utilitza un doble. 1479 01:12:51,440 --> 01:12:53,070 Però això és finit. 1480 01:12:53,070 --> 01:12:57,070 >> I el problema és que si es pot posar un nombre infinit de nombres 1481 01:12:57,070 --> 01:12:59,460 després del punt decimal, no hi ha manera que 1482 01:12:59,460 --> 01:13:02,690 pot representar tot el possible nombres que ens van ensenyar 1483 01:13:02,690 --> 01:13:04,990 en el grau de l'escola pot existir al món. 1484 01:13:04,990 --> 01:13:08,870 Un equip que, en essència, ha de triar un subconjunt d'aquests números 1485 01:13:08,870 --> 01:13:10,200 per representar amb precisió. 1486 01:13:10,200 --> 01:13:12,450 >> Ara, l'equip pot ronda potser una mica, 1487 01:13:12,450 --> 01:13:17,900 i li pot permetre a aproximadament el magatzem qualsevol nombre que possiblement podria desitjar. 1488 01:13:17,900 --> 01:13:20,940 Però només intuïtivament, si tenir un nombre finit de bits, 1489 01:13:20,940 --> 01:13:24,560 només es pot permutar elles de moltes maneres finits. 1490 01:13:24,560 --> 01:13:26,570 Pel que no pot possiblement utilitzar un nombre finit 1491 01:13:26,570 --> 01:13:29,880 de permutació de bits, patrons de zeros i uns, 1492 01:13:29,880 --> 01:13:32,940 per representar un infinit nombre de nombres, 1493 01:13:32,940 --> 01:13:37,370 el que suggereix que els ordinadors podrien molt bé ser mentint a nosaltres a vegades. 1494 01:13:37,370 --> 01:13:38,770 >> De fet, farem això. 1495 01:13:38,770 --> 01:13:41,239 Déjame tornar al IDE CS50. 1496 01:13:41,239 --> 01:13:43,030 Déjame anar endavant i crear un petit programa 1497 01:13:43,030 --> 01:13:47,940 La imprecisió trucada, per mostrar que els ordinadors són, de fet, imprecisa. 1498 01:13:47,940 --> 01:13:51,910 >> I m'ho dius a mi seguir endavant i començar amb alguns que el codi d'abans, 1499 01:13:51,910 --> 01:13:53,830 i ara acaba de fer el següent. 1500 01:13:53,830 --> 01:14:03,640 Déjame seguir endavant i fer printf, cent f, la barra invertida n, 1 dividit per 10. 1501 01:14:03,640 --> 01:14:07,430 En altres paraules, anem a bussejar en la més profunda a 1/10, igual que 1 i dividit per 10. 1502 01:14:07,430 --> 01:14:09,760 Sens dubte, un ordinador pot representar 1/10. 1503 01:14:09,760 --> 01:14:13,620 >> Així que seguirem endavant i fer imprecisió. 1504 01:14:13,620 --> 01:14:14,390 Anem a veure. 1505 01:14:14,390 --> 01:14:16,210 Format especifica el tipus doble. 1506 01:14:16,210 --> 01:14:18,160 No obstant això, l'argument té tipus int. 1507 01:14:18,160 --> 01:14:19,040 Què està passant? 1508 01:14:19,040 --> 01:14:21,970 >> Oh, interessant, així que és una lliçó apresa d'abans. 1509 01:14:21,970 --> 01:14:26,050 Jo dic, bé, fira d'informàtica un flotador amb cent f. 1510 01:14:26,050 --> 01:14:28,200 Però ho estic donant 2 punts. 1511 01:14:28,200 --> 01:14:31,120 Així que resulta, puc arreglar això en un parell de maneres. 1512 01:14:31,120 --> 01:14:38,430 >> Tan sols pogués convertir en un 1,0, i 10-10,0, el que, de fet, 1513 01:14:38,430 --> 01:14:42,390 tenir l'efecte de convertir ells en floats-- encara amb sort 1514 01:14:42,390 --> 01:14:43,180 el mateix nombre. 1515 01:14:43,180 --> 01:14:45,880 O resulta que hi ha alguna cosa veurem de nou en poc temps. 1516 01:14:45,880 --> 01:14:47,170 Es podria emetre els números. 1517 01:14:47,170 --> 01:14:49,880 >> Pot, l'ús d'aquest parèntesi expressió, es pot dir, 1518 01:14:49,880 --> 01:14:52,560 Hey, ordinador, pren això 10, que sé que és un int. 1519 01:14:52,560 --> 01:14:54,660 Però tractar-la, si us plau, com si fos un flotador. 1520 01:14:54,660 --> 01:14:56,680 Però això se sent innecessàriament complexa. 1521 01:14:56,680 --> 01:14:59,040 >> Per als nostres propòsits avui, només anem a literalment 1522 01:14:59,040 --> 01:15:02,700 els fan valors de punt flotant amb un punt decimal, com aquest. 1523 01:15:02,700 --> 01:15:07,060 Déjame anar endavant i torneu a executar, fer imprecisió, bé, barra de punts 1524 01:15:07,060 --> 01:15:08,870 imprecisió, introdueixi. 1525 01:15:08,870 --> 01:15:10,990 OK, estem en bon estat. 1526 01:15:10,990 --> 01:15:18,194 >> 1 dividit per 10, d'acord al meu Mac aquí, és, de fet, 0,100000. 1527 01:15:18,194 --> 01:15:21,360 Ara, em van ensenyar a l'escola primària allà ha de ser un nombre infinit de 0 de. 1528 01:15:21,360 --> 01:15:23,151 Així que anem a tractar, almenys, per veure alguns d'ells. 1529 01:15:23,151 --> 01:15:26,770 Resulta que és una mica printf encara més elegant que hem estat utilitzant. 1530 01:15:26,770 --> 01:15:30,890 Resulta que vostè no ha d'especificar f just per cent, o simplement per cent i. 1531 01:15:30,890 --> 01:15:33,830 En realitat es pot especificar algunes opcions de control aquí. 1532 01:15:33,830 --> 01:15:36,470 >> En concret, vaig a dir, hey, printf, 1533 01:15:36,470 --> 01:15:39,660 En realitat em mostren 10 punts decimals. 1534 01:15:39,660 --> 01:15:40,820 Així que sembla una mica estrany. 1535 01:15:40,820 --> 01:15:42,845 Però vostè diu per cent, punt, la quantitat de nombres 1536 01:15:42,845 --> 01:15:44,970 desitja veure després de la punt decimal i, a continuació, f 1537 01:15:44,970 --> 01:15:48,340 per plana, simplement perquè això és el que diu la documentació. 1538 01:15:48,340 --> 01:15:50,080 Déjame anar per davant i salvament d'aquesta. 1539 01:15:50,080 --> 01:15:52,460 >> I noto també, que estic rebent cansat de tornar a escriure les coses. 1540 01:15:52,460 --> 01:15:55,900 Així que estic establint el i fletxa inferior de les meves claus aquí. 1541 01:15:55,900 --> 01:15:58,710 I si segueixo colpejant cap amunt, vostè pot veure tots els ordres 1542 01:15:58,710 --> 01:16:01,090 que vaig fer, o mal fet. 1543 01:16:01,090 --> 01:16:04,630 >> I vaig a seguir endavant i ara en realitat no utilitzar que, pel que sembla. 1544 01:16:04,630 --> 01:16:11,416 Fer imprecisió, punt reduir de manera imprecision-- 1545 01:16:11,416 --> 01:16:13,290 el que em van ensenyar a l'escola primària comprova cap a fora. 1546 01:16:13,290 --> 01:16:19,010 Fins i tot si ho imprimeixo a 10 decimals el situa, de fet, és 0,10000. 1547 01:16:19,010 --> 01:16:19,840 Però saps què? 1548 01:16:19,840 --> 01:16:21,150 >> Aconseguirem una mica cobdiciós. 1549 01:16:21,150 --> 01:16:23,990 Diguem que, igual que, mostreu-me 55 punts després del punt decimal. 1550 01:16:23,990 --> 01:16:26,160 Anem a prendre això programar a fer un volt. 1551 01:16:26,160 --> 01:16:31,170 Permetin-me refer amb maquillatge imprecisió, ratlla vertical del punt, la imprecisió. 1552 01:16:31,170 --> 01:16:32,390 >> I aquí anem. 1553 01:16:32,390 --> 01:16:34,420 La seva infància va ser una mentida. 1554 01:16:34,420 --> 01:16:48,410 Pel que sembla, 1 dividit per 10 és de fet 0.100000000000000005551115123-- 1555 01:16:48,410 --> 01:16:49,740 >> Què està passant? 1556 01:16:49,740 --> 01:16:53,360 Doncs bé, resulta que, si la classe de mirar prou lluny en el subjacent 1557 01:16:53,360 --> 01:16:55,950 representació d'aquest nombre, que en realitat 1558 01:16:55,950 --> 01:17:00,400 no és exactament 1/10, o el 0,1 i el un nombre infinit de zeros. 1559 01:17:00,400 --> 01:17:01,630 Ara, per què? 1560 01:17:01,630 --> 01:17:06,250 >> Doncs bé, tot i que això és un simple nombre a nosaltres els éssers humans, 1 dividit per 10, 1561 01:17:06,250 --> 01:17:10,910 tot i així és un d'un nombre infinit nombres que podrien imaginar. 1562 01:17:10,910 --> 01:17:14,490 No obstant això, un equip només pot representar un nombre finit de nombres menys. 1563 01:17:14,490 --> 01:17:18,710 I així, efectivament, el que la equip està mostrant nosaltres és el seu punt més proper 1564 01:17:18,710 --> 01:17:22,940 aproximació al nombre volem creure és 1/10, 1565 01:17:22,940 --> 01:17:27,760 o realment 0,10000 ad infinitum. 1566 01:17:27,760 --> 01:17:30,425 >> Més aviat, però, això és tan a prop com es pot aconseguir. 1567 01:17:30,425 --> 01:17:32,300 I, de fet, si ens fixem sota de la campana, 1568 01:17:32,300 --> 01:17:37,050 ja que estem aquí examinat 55 dígits després del punt decimal, 1569 01:17:37,050 --> 01:17:39,990 que en realitat veiem que la realitat. 1570 01:17:39,990 --> 01:17:42,610 Ara com un a part, si no tens Alguna vegada has vist la movie-- 1571 01:17:42,610 --> 01:17:45,780 la majoria de vostès probablement haven't-- però fa alguns anys Superman 3, 1572 01:17:45,780 --> 01:17:49,500 Richard Pryor apalancat fonamentalment aquest la realitat en la seva companyia per robar una gran quantitat 1573 01:17:49,500 --> 01:17:53,500 de fraccions i fraccions de centaus, perquè el company-- pel que recordo, 1574 01:17:53,500 --> 01:17:57,210 que ha estat un Rato-- era essencialment llençar qualsevol cosa que no encaixava 1575 01:17:57,210 --> 01:17:58,790 en la noció de centaus. 1576 01:17:58,790 --> 01:18:01,480 >> Però si se sumen tots aquests diminuts, diminuts, diminuts números de nou, 1577 01:18:01,480 --> 01:18:04,960 i una altra, i una altra, es pot, com en és el cas, fer una bona quantitat de diners. 1578 01:18:04,960 --> 01:18:08,010 >> Aquesta mateixa idea va ser arrencada per una més recent, però encara ara majors 1579 01:18:08,010 --> 01:18:10,500 pel·lícula, anomenat espai d'oficina, on els nois d'aquesta pel·lícula, 1580 01:18:10,500 --> 01:18:13,501 va fer el mateix, ficat la pota per complet, acabat amb massa 1581 01:18:13,501 --> 01:18:14,666 diners en el seu compte bancari. 1582 01:18:14,666 --> 01:18:15,800 Tot era molt sospitós. 1583 01:18:15,800 --> 01:18:19,290 Però al final del dia, imprecisió és tot el que ens envolta. 1584 01:18:19,290 --> 01:18:22,240 >> I que, també, pot haver És alarmant el cas. 1585 01:18:22,240 --> 01:18:25,590 Resulta que Superman 3 i espai d'oficina a una banda, hi ha 1586 01:18:25,590 --> 01:18:28,460 poden ser algunes molt real ramificacions mundials 1587 01:18:28,460 --> 01:18:32,290 de les realitats de la imprecisa representació de dades 1588 01:18:32,290 --> 01:18:34,770 que fins i tot els éssers humans a el dia d'avui no necessàriament 1589 01:18:34,770 --> 01:18:38,230 entendre, així com hauríem, o recordar tan sovint com hauríem. 1590 01:18:38,230 --> 01:18:42,950 I, de fet, el següent clip és a partir d'una mirada a un món molt real 1591 01:18:42,950 --> 01:18:47,730 ramificacions del que passa si no aprecien que la imprecisió 1592 01:18:47,730 --> 01:18:50,065 pot succeir en representació de nombres. 1593 01:18:50,065 --> 01:18:51,300 >> [REPRODUCCIÓ DE VÍDEO] 1594 01:18:51,300 --> 01:18:55,620 >> -Informàtica, Tots hem arribat a acceptar els problemes sovint frustrants que 1595 01:18:55,620 --> 01:19:00,310 anar amb ells-- insectes, virus, i falles en el programari, 1596 01:19:00,310 --> 01:19:03,130 per als preus de petit a pagar per la comoditat. 1597 01:19:03,130 --> 01:19:07,800 Però en l'alta tecnologia i d'alta velocitat aplicacions de programes espacials militars i, 1598 01:19:07,800 --> 01:19:12,800 el més petit problema pot magnificar en el desastre. 1599 01:19:12,800 --> 01:19:18,900 >> El 4 de juny de 1996, els científics van preparar per llançar un coet no tripulat Ariane 5. 1600 01:19:18,900 --> 01:19:21,220 portava científica satèl·lits dissenyats 1601 01:19:21,220 --> 01:19:24,600 establir amb precisió com el interactua camp magnètic de la Terra 1602 01:19:24,600 --> 01:19:27,410 amb vents solars. 1603 01:19:27,410 --> 01:19:30,800 El coet va ser construït per l'Agència Espacial Europea, 1604 01:19:30,800 --> 01:19:34,370 i desenganxar de les seves instal·lacions a la costa de la Guaiana francesa. 1605 01:19:34,370 --> 01:19:37,540 >> -En Uns 37 segons en el vol, primer 1606 01:19:37,540 --> 01:19:39,270 adonat que alguna cosa anava malament. 1607 01:19:39,270 --> 01:19:42,250 Els filtres es gira sobre un eix en de manera que en realitat no hauria. 1608 01:19:42,250 --> 01:19:46,580 Al voltant de 40 segons de vol, clarament, el vehicle estava en problemes. 1609 01:19:46,580 --> 01:19:48,850 >> I això és quan van fer una decisió de destruir-lo. 1610 01:19:48,850 --> 01:19:52,780 L'oficial de seguretat de gamma, amb tremendes ganyes, prem el botó, 1611 01:19:52,780 --> 01:19:58,150 explotar el coet, abans que pogués convertir-se en un perill per a la seguretat pública. 1612 01:19:58,150 --> 01:20:01,060 >> -Aquesta Era la donzella viatge de l'Ariane 5. 1613 01:20:01,060 --> 01:20:03,960 I la seva destrucció es va dur lloc a causa d'un defecte 1614 01:20:03,960 --> 01:20:05,822 incrustat en el programari del coet. 1615 01:20:05,822 --> 01:20:08,280 -El Problema va ser en l'Ariane que hi havia un nombre que 1616 01:20:08,280 --> 01:20:10,600 requereix 64 bits per a expressar. 1617 01:20:10,600 --> 01:20:13,590 I volien convertir a un nombre de 16 bits. 1618 01:20:13,590 --> 01:20:15,610 Se suposa que la nombre mai es va 1619 01:20:15,610 --> 01:20:20,980 a ser molt gran, que la majoria de les dígits en un nombre de 64 bits eren zeros. 1620 01:20:20,980 --> 01:20:22,440 Estaven equivocats. 1621 01:20:22,440 --> 01:20:25,060 >> -La Incapacitat d'una programa de programari per acceptar 1622 01:20:25,060 --> 01:20:29,510 el tipus de nombre generat per una altra va ser la causa de la falla. 1623 01:20:29,510 --> 01:20:34,350 El desenvolupament de programari s'havia convertit en una part molt costosa de les noves tecnologies. 1624 01:20:34,350 --> 01:20:38,140 El coet Ariane han estat molt èxit, pel que gran part del programari 1625 01:20:38,140 --> 01:20:41,550 creat per a ella també era utilitzat en el Ariane 5. 1626 01:20:41,550 --> 01:20:47,940 >> -El Problema bàsic era que l'Ariane 5 va ser més ràpida, es va accelerar més ràpidament. 1627 01:20:47,940 --> 01:20:51,450 I el programari no tenia van representar per a això. 1628 01:20:51,450 --> 01:20:55,060 >> -La Destrucció del coet Va ser un gran desastre financer, 1629 01:20:55,060 --> 01:20:58,790 tot es deu a un error de programari minut. 1630 01:20:58,790 --> 01:21:01,210 Però aquesta no va ser la primera problemes de conversió de dades de temps 1631 01:21:01,210 --> 01:21:04,820 havia plagat la tecnologia de coets moderna. 1632 01:21:04,820 --> 01:21:08,050 >> -En 1991, amb l'inici de la primera Guerra del Golf, 1633 01:21:08,050 --> 01:21:10,570 el míssil de patriota experimentat una classe similar 1634 01:21:10,570 --> 01:21:12,800 del problema de la conversió nombre. 1635 01:21:12,800 --> 01:21:16,090 I com a resultat, 28 persones, 28 soldats nord-americans, 1636 01:21:16,090 --> 01:21:19,080 van ser assassinats, i sobre altres 100 ferits, 1637 01:21:19,080 --> 01:21:22,780 quan el patriota, que se suposava per protegir contra Scuds entrants, 1638 01:21:22,780 --> 01:21:25,830 deixat de disparar un míssil. 1639 01:21:25,830 --> 01:21:31,670 >> -Quan L'Iraq va envair Kuwait, i Amèrica Tempesta del Desert llançat a principis de 1991, 1640 01:21:31,670 --> 01:21:35,780 bateries de míssils Patriot van ser desplegats per protegir Aràbia Saudita i Israel 1641 01:21:35,780 --> 01:21:39,230 dels atacs de míssils Scud iraquians. 1642 01:21:39,230 --> 01:21:43,810 El Patriot és un mitjà de rang dels EUA superfície per a sistema d'aire, fabricat 1643 01:21:43,810 --> 01:21:45,770 per l'empresa Raytheon. 1644 01:21:45,770 --> 01:21:52,340 >> -El Mida dels interceptors Patriot si està a més o menys 20 peus de llarg. 1645 01:21:52,340 --> 01:21:55,230 I pesa al voltant de 2.000 lliures. 1646 01:21:55,230 --> 01:21:59,320 I porta una ogiva de l'entorn, Crec que és més o menys 150 lliures. 1647 01:21:59,320 --> 01:22:03,930 I el cap de combat en si és un explosiu d'alta potència, que 1648 01:22:03,930 --> 01:22:07,330 té fragments voltant d'ella. 1649 01:22:07,330 --> 01:22:11,680 La carcassa del cap de combat és dissenyat per actuar com perdigons. 1650 01:22:11,680 --> 01:22:14,110 >> -Els Míssils es duen quatre per contenidor, 1651 01:22:14,110 --> 01:22:17,130 i són transportats per un semiremolc. 1652 01:22:17,130 --> 01:22:24,930 >> -El Sistema Patriot antimíssils es remunta almenys 20 anys. 1653 01:22:24,930 --> 01:22:28,420 Va ser dissenyat originalment com un míssil de defensa aèria 1654 01:22:28,420 --> 01:22:30,720 per enderrocar avions enemics. 1655 01:22:30,720 --> 01:22:34,500 A la primera guerra del Golf, quan la guerra va arribar, 1656 01:22:34,500 --> 01:22:39,745 l'Exèrcit volia utilitzar-lo per enderrocar Scuds, no aeroplans. 1657 01:22:39,745 --> 01:22:43,620 >> La Força Aèria Iraquiana va ser no tant d'un problema. 1658 01:22:43,620 --> 01:22:46,670 Però l'exèrcit estava preocupat per Scuds. 1659 01:22:46,670 --> 01:22:50,170 I pel que van tractar de actualitzar el Patriot. 1660 01:22:50,170 --> 01:22:52,800 >> -Intercepting Un enemic míssil que viatja a Mach 5 1661 01:22:52,800 --> 01:22:55,830 que anava a ser un repte suficient. 1662 01:22:55,830 --> 01:22:58,490 Però quan el Patriot va ser traslladat d'urgència en servei, 1663 01:22:58,490 --> 01:23:02,860 l'Exèrcit no estava al tant d'una modificació iraquià que va fer 1664 01:23:02,860 --> 01:23:05,930 seus Scuds gairebé impossible de colpejar. 1665 01:23:05,930 --> 01:23:10,740 >> -El Que passa és que els Scuds arribaven eren inestables. 1666 01:23:10,740 --> 01:23:11,692 Van ser desplaçament. 1667 01:23:11,692 --> 01:23:14,910 La raó d'això era els iraquians, per tal 1668 01:23:14,910 --> 01:23:18,280 per arribar a 600 quilòmetres fora d'un 300 quilòmetres 1669 01:23:18,280 --> 01:23:21,700 abast dels míssils, va prendre el pes fora de l'ogiva davant. 1670 01:23:21,700 --> 01:23:23,390 Van fer l'ogiva més lleuger. 1671 01:23:23,390 --> 01:23:27,330 >> Així que ara el Patriot és tractant d'arribar a la Scud. 1672 01:23:27,330 --> 01:23:30,230 I la majoria de les vegades, la immensa majoria de les vegades, 1673 01:23:30,230 --> 01:23:32,940 seria simplement sortir volant pel Scud. 1674 01:23:32,940 --> 01:23:37,260 Una vegada que els operadors del sistema Patriot es va adonar de la Patriot no va aconseguir el seu objectiu, 1675 01:23:37,260 --> 01:23:41,690 detonar l'ogiva de l'Patriota per evitar possibles baixes si 1676 01:23:41,690 --> 01:23:44,570 es va deixar caure a terra. 1677 01:23:44,570 --> 01:23:48,790 >> Això va ser el que van veure la majoria de la gent, aquestes grans boles de foc al cel, 1678 01:23:48,790 --> 01:23:54,550 i malinterpretat com intercepcions de ogives Scud. 1679 01:23:54,550 --> 01:23:56,630 >> -Encara Que A la nit cels, patriotes aparèixer 1680 01:23:56,630 --> 01:24:00,370 ser amb èxit la destrucció de míssils Scud, en Dhahran, 1681 01:24:00,370 --> 01:24:03,360 no podia haver error sobre el seu rendiment. 1682 01:24:03,360 --> 01:24:07,970 Allà, sistema de radar de la Patriot perdut la pista d'un Scud entrant, 1683 01:24:07,970 --> 01:24:10,721 i mai posat en marxa a causa a un defecte de programari. 1684 01:24:10,721 --> 01:24:14,090 1685 01:24:14,090 --> 01:24:18,940 Van ser els israelians que es va descobrir per primera vegada que com més temps el sistema estava en marxa, 1686 01:24:18,940 --> 01:24:22,690 com més gran és la discrepància de temps es va convertir, a causa d'un rellotge incorporat 1687 01:24:22,690 --> 01:24:24,810 a l'ordinador del sistema. 1688 01:24:24,810 --> 01:24:28,210 >> -Sobre De dues setmanes abans la tragèdia en Dhahran, 1689 01:24:28,210 --> 01:24:30,770 els israelians van informar de el Departament de Defensa 1690 01:24:30,770 --> 01:24:32,590 que el sistema estava perdent el temps. 1691 01:24:32,590 --> 01:24:35,360 Després de prop de vuit hores o en execució, es van adonar que el sistema de 1692 01:24:35,360 --> 01:24:37,720 va ser que es vegi amb menys precisa. 1693 01:24:37,720 --> 01:24:41,900 El Departament de Defensa va respondre dient a totes les bateries Patriot 1694 01:24:41,900 --> 01:24:44,950 per no deixar els sistemes durant molt de temps. 1695 01:24:44,950 --> 01:24:49,160 Mai van dir el molt temps era-- vuit hores, 10 hores, 1.000 hores. 1696 01:24:49,160 --> 01:24:51,360 Ningú sabia. 1697 01:24:51,360 --> 01:24:53,380 >> -La Bateria Patriot estacionats a les casernes 1698 01:24:53,380 --> 01:24:58,350 en Dhahran i la seva deficient interna rellotge havia estat en més de 100 hores 1699 01:24:58,350 --> 01:25:01,670 en la nit del 25 de febrer. 1700 01:25:01,670 --> 01:25:05,917 >> -És Seguit de temps amb una precisió del voltant d'un dècim d'un segon. 1701 01:25:05,917 --> 01:25:08,000 Ara, un dècim d'un segon és un nombre interessant, 1702 01:25:08,000 --> 01:25:11,920 a causa que no es pot expressar en binari exactament, que 1703 01:25:11,920 --> 01:25:16,820 vol dir que no es pot expressar exactament en qualsevol ordinador digital moderna. 1704 01:25:16,820 --> 01:25:18,540 És difícil de creure. 1705 01:25:18,540 --> 01:25:21,210 >> Però utilitzar això com un exemple. 1706 01:25:21,210 --> 01:25:23,540 Prenguem el nombre d'un terç. 1707 01:25:23,540 --> 01:25:27,350 Una tercera no pot ser expressat en decimal exactament. 1708 01:25:27,350 --> 01:25:32,080 Una tercera part és 0,333 passant per l'infinit. 1709 01:25:32,080 --> 01:25:36,480 >> No hi ha manera de fer això amb la precisió absoluta en decimal. 1710 01:25:36,480 --> 01:25:39,560 Aquest és exactament el tipus de problema Això va passar al Patriot. 1711 01:25:39,560 --> 01:25:44,100 Com més llarg sigui el sistema va funcionar, la es va convertir en el pitjor error de temps. 1712 01:25:44,100 --> 01:25:48,890 >> -Després De 100 hores de funcionament, el d'error en el temps era només al voltant d'un terç 1713 01:25:48,890 --> 01:25:50,600 d'un segon. 1714 01:25:50,600 --> 01:25:54,210 Però en termes de focalització 1 míssil que viatja a Mach 5, 1715 01:25:54,210 --> 01:25:58,710 que va donar lloc a un seguiment d'error de més de 600 metres. 1716 01:25:58,710 --> 01:26:02,120 Seria un error greu per als soldats en el 1717 01:26:02,120 --> 01:26:08,940 es va passar una llanxa era Scud detectat pels satèl·lits d'alerta primerenca 1718 01:26:08,940 --> 01:26:12,860 i sabien que era l'Scud venint en la seva direcció general. 1719 01:26:12,860 --> 01:26:15,320 Ells no sabien d'on venia. 1720 01:26:15,320 --> 01:26:18,250 >> -Va Ser Fins ara el radar component del sistema Patriot 1721 01:26:18,250 --> 01:26:23,190 la defensa de Dhahran per localitzar i mantenir pista de l'míssil enemic entrant. 1722 01:26:23,190 --> 01:26:24,609 >> -El Radar era molt intel·ligent. 1723 01:26:24,609 --> 01:26:26,650 Seria realment un seguiment la posició del Scud, 1724 01:26:26,650 --> 01:26:30,350 i després predir on probablement seria la propera vegada que el radar va enviar 1725 01:26:30,350 --> 01:26:31,420 Un pols a terme. 1726 01:26:31,420 --> 01:26:33,110 Que es va cridar una porta de distància. 1727 01:26:33,110 --> 01:26:37,660 >> -Llavors, Una vegada que el Patriot decideix el temps suficient té 1728 01:26:37,660 --> 01:26:42,450 va passar a tornar enrere i comprovar la següent ubicació per a aquest objecte detectat, 1729 01:26:42,450 --> 01:26:43,600 que es remunta. 1730 01:26:43,600 --> 01:26:48,650 Així que quan es va tornar al mal lloc, a continuació, no veu cap objecte. 1731 01:26:48,650 --> 01:26:52,160 I decideix que no hi havia objecte, que era una falsa detecció, 1732 01:26:52,160 --> 01:26:53,930 i deixa caure la pista. 1733 01:26:53,930 --> 01:26:57,030 >> -La Entrant Scud va desaparèixer des de la pantalla de radar. 1734 01:26:57,030 --> 01:27:00,260 I segons més tard, va xocar contra la caserna. 1735 01:27:00,260 --> 01:27:06,150 El Scud va matar a 28, i va ser l'últim 1 disparades durant la primera Guerra del Golf. 1736 01:27:06,150 --> 01:27:11,960 >> Tràgicament, el programari actualitzat arribat a Dhahran el dia següent. 1737 01:27:11,960 --> 01:27:14,930 La falla de programari tenia estat fixat, el tancament 1738 01:27:14,930 --> 01:27:19,806 un capítol en el problemàtic la història del míssil Patriot. 1739 01:27:19,806 --> 01:27:20,729 >> [REPRODUCCIÓ DE VÍDEO] 1740 01:27:20,729 --> 01:27:23,520 DAVID J. Malan: Així que això és tot el que dir que aquests problemes de desbordament 1741 01:27:23,520 --> 01:27:25,860 i imprecisió són massa reals. 1742 01:27:25,860 --> 01:27:26,920 Llavors, com hem arribat fins aquí? 1743 01:27:26,920 --> 01:27:28,895 Vam començar amb només parlar d'printf. 1744 01:27:28,895 --> 01:27:31,270 Un cop més, aquesta funció que imprimeix alguna cosa a la pantalla, 1745 01:27:31,270 --> 01:27:33,450 i es va introduir a partir de llavors algunes altres funcions 1746 01:27:33,450 --> 01:27:34,945 de l'anomenada biblioteca d'CS50. 1747 01:27:34,945 --> 01:27:36,910 I seguirem veure aquests en el moment oportú. 1748 01:27:36,910 --> 01:27:40,760 I nosaltres, en particular, utilitzem cadena GET, i obtenir int, i ara també obtenir flotador, 1749 01:27:40,760 --> 01:27:44,410 i no obstant això, altres encara ens trobem amb i l'ús de nosaltres mateixos abans d'hora. 1750 01:27:44,410 --> 01:27:47,220 >> No obstant això, en ocasions, tenen ja vist una necessitat 1751 01:27:47,220 --> 01:27:50,520 per emmagatzemar el que aquestes funcions mà cap enrere? 1752 01:27:50,520 --> 01:27:52,920 Ens tornar una seqüència de la mà, o int o un flotador. 1753 01:27:52,920 --> 01:27:56,070 I de vegades hem de posar això cadena, o int o float, en algun lloc. 1754 01:27:56,070 --> 01:28:00,100 >> I per emmagatzemar aquestes coses, recuperar únicament igual que en Scratch, tenim variables. 1755 01:28:00,100 --> 01:28:03,260 Però a diferència de les ratllades, en C tenim tipus reals 1756 01:28:03,260 --> 01:28:05,530 de les dades variables-- tipus, més generally-- 1757 01:28:05,530 --> 01:28:08,640 entre ells, una cadena, un sencer, una surar, i aquests altres encara. 1758 01:28:08,640 --> 01:28:12,321 >> I així, quan declarem les variables en C, haurem de declarar els tipus de dades. 1759 01:28:12,321 --> 01:28:14,820 Això no és una cosa que anem a haver de fer més endavant en el semestre 1760 01:28:14,820 --> 01:28:16,810 a mesura que passem a altres idiomes. 1761 01:28:16,810 --> 01:28:19,610 Però per ara, ens cal a priori per avançat, 1762 01:28:19,610 --> 01:28:24,370 explicar a la computadora quin tipus de de la variable que volem que ens donen. 1763 01:28:24,370 --> 01:28:27,290 >> Ara, mentrestant, per imprimir aquests tipus de tipus de dades, 1764 01:28:27,290 --> 01:28:29,570 hem de dir-li a printf què esperar. 1765 01:28:29,570 --> 01:28:32,450 I vam veure cent s per cordes, i el percentatge d'i per sencers, 1766 01:28:32,450 --> 01:28:33,790 i alguns altres ja. 1767 01:28:33,790 --> 01:28:37,237 I aquests són només els requisits per a la presentació visual 1768 01:28:37,237 --> 01:28:38,070 d'aquesta informació. 1769 01:28:38,070 --> 01:28:42,080 >> I cada un d'aquests pot ser realitat parametritzada o ajustat d'alguna manera, 1770 01:28:42,080 --> 01:28:45,370 si vol avançar en el control el tipus de sortida que s'obté. 1771 01:28:45,370 --> 01:28:49,604 I, de fet, resulta que no només ¿Hi ha barra invertida n per a una nova línia. 1772 01:28:49,604 --> 01:28:52,520 Hi ha una altra cosa anomenada barra invertida r per a un retorn de carro, el qual 1773 01:28:52,520 --> 01:28:54,360 s'assembla més a una màquina d'escriure vella escola, 1774 01:28:54,360 --> 01:28:57,690 i també de Windows utilitza per a molts anys. 1775 01:28:57,690 --> 01:28:59,690 >> Hi ha t barra invertida per les pestanyes. 1776 01:28:59,690 --> 01:29:03,170 Resulta, que si es vol cometes dobles dins d'una cadena, 1777 01:29:03,170 --> 01:29:05,000 Recordem que hem utilitzat cometes dobles 1778 01:29:05,000 --> 01:29:07,900 cotització de l'esquerra i la dreta acaba de les nostres cordes fins al moment. 1779 01:29:07,900 --> 01:29:09,420 Això sembla confondre les coses. 1780 01:29:09,420 --> 01:29:12,503 >> Si vostè vol posar una doble cita a el medi d'un string-- i, de fet, 1781 01:29:12,503 --> 01:29:13,670 és confús per veure. 1782 01:29:13,670 --> 01:29:17,120 I el que ha de fugir, de manera que parlar, una doble cita amb alguna cosa 1783 01:29:17,120 --> 01:29:18,860 de la mateixa manera que, literalment, la barra invertida cometes dobles. 1784 01:29:18,860 --> 01:29:20,230 I hi ha alguns altres encara. 1785 01:29:20,230 --> 01:29:24,540 I veurem més d'aquests en l'ús real en poc temps. 1786 01:29:24,540 --> 01:29:27,930 >> Així que ara transició de de dades, i la representació, 1787 01:29:27,930 --> 01:29:30,820 i operadors aritmètics, tot del que ens va donar algun edifici 1788 01:29:30,820 --> 01:29:32,070 blocs amb les quals jugar. 1789 01:29:32,070 --> 01:29:34,481 Però ara anem a donar realitat nosaltres la resta del vocabulari 1790 01:29:34,481 --> 01:29:36,230 que ja teníem la setmana passada amb les ratllades 1791 01:29:36,230 --> 01:29:39,350 per fer una ullada a algun altre construccions en C-- no tots ells. 1792 01:29:39,350 --> 01:29:41,680 Però les idees que estan punt de veure realment només 1793 01:29:41,680 --> 01:29:45,610 posar l'accent en la traducció de una llengua, Scratch, a un altre, C. 1794 01:29:45,610 --> 01:29:48,470 >> I amb el temps, anem a recollir més eines per a la nostra caixa d'eines, 1795 01:29:48,470 --> 01:29:49,820 per així dir-ho, sintàcticament. 1796 01:29:49,820 --> 01:29:54,190 I, de fet, es veurà que les idees ara són bastant familiar de la setmana passada. 1797 01:29:54,190 --> 01:29:55,200 Així que anem a fer això. 1798 01:29:55,200 --> 01:29:58,870 >> Seguirem endavant i preparar ràpidament un programa que realment utilitza algunes expressions, 1799 01:29:58,870 --> 01:30:00,720 una expressió booleana. 1800 01:30:00,720 --> 01:30:02,810 Déjame anar per davant aquí i crear un nou arxiu. 1801 01:30:02,810 --> 01:30:06,090 Vaig a trucar a aquest condition.c. 1802 01:30:06,090 --> 01:30:09,350 >> Déjame anar endavant i incloure la biblioteca CS50. 1803 01:30:09,350 --> 01:30:12,640 I em va deixar anar endavant i incloc io.h estàndard per a les nostres funcions, 1804 01:30:12,640 --> 01:30:14,690 i printf, i molt més, respectivament. 1805 01:30:14,690 --> 01:30:18,900 Permetin-me que em lliuro repetitiu de int buit principal, l'explicació anem a 1806 01:30:18,900 --> 01:30:20,360 tornar en el futur. 1807 01:30:20,360 --> 01:30:23,820 >> Ara vaig a seguir endavant i donar a mi mateix a través d'un int int get. 1808 01:30:23,820 --> 01:30:25,970 Llavors m'ho dius a mi seguir endavant i fer això. 1809 01:30:25,970 --> 01:30:30,150 Vull dir, si i és less-- de deixar distingir entre positiu i negatiu, 1810 01:30:30,150 --> 01:30:31,260 o valors zero. 1811 01:30:31,260 --> 01:30:36,630 >> Així que si i és menor que zero, em va deixar Només té aquest programa simplement dir, 1812 01:30:36,630 --> 01:30:42,370 negatiu, barra invertida n, del que Si i és més gran que zero. 1813 01:30:42,370 --> 01:30:47,030 Ara estic, per descomptat, dirà printf positiu, la barra invertida n. 1814 01:30:47,030 --> 01:30:50,690 I després una altra cosa si: Jo podria fer això. 1815 01:30:50,690 --> 01:30:53,410 >> Jo podria fer si i és igual a 0. 1816 01:30:53,410 --> 01:30:55,840 Però estaria fent en menys un error ja. 1817 01:30:55,840 --> 01:30:59,480 Recordem que el signe igual és no és igual, ja que els éssers humans ho saben. 1818 01:30:59,480 --> 01:31:01,010 >> Però és l'operador d'assignació. 1819 01:31:01,010 --> 01:31:05,640 I nosaltres no volem tenir 0 al la dreta i la va posar en i de l'esquerra. 1820 01:31:05,640 --> 01:31:11,810 Així que per evitar aquesta confusió, o potser el mal ús del signe igual, 1821 01:31:11,810 --> 01:31:14,740 els éssers humans van decidir fa alguns anys que en molts llenguatges de programació 1822 01:31:14,740 --> 01:31:18,000 quan es vol comprovar la igualtat entre l'esquerra i la dreta, 1823 01:31:18,000 --> 01:31:19,635 en realitat s'utilitza és igual als iguals. 1824 01:31:19,635 --> 01:31:21,010 De manera que pegar-li el signe igual dues vegades. 1825 01:31:21,010 --> 01:31:25,600 Quan es vol assignar de dreta a l'esquerra, s'utilitza un sol signe igual. 1826 01:31:25,600 --> 01:31:29,360 Pel que podíem fer una altra cosa això- Si i és igual a igual a zero. 1827 01:31:29,360 --> 01:31:31,710 >> Llavors podria anar i obrir les meves claus, 1828 01:31:31,710 --> 01:31:36,087 i dir, printf 0, la barra invertida n, fet. 1829 01:31:36,087 --> 01:31:38,170 Però recorda com aquests bifurcacions en el camí poden treballar. 1830 01:31:38,170 --> 01:31:39,836 I, en realitat, només pensar en la lògica. 1831 01:31:39,836 --> 01:31:41,510 I és un nombre. 1832 01:31:41,510 --> 01:31:43,320 És un nombre enter, específicament. 1833 01:31:43,320 --> 01:31:48,600 I això vol dir que va a ser menys de 0, o més gran que 0, o 0. 1834 01:31:48,600 --> 01:31:51,600 Així que hi ha una espècie d'aquest cas per defecte implícit. 1835 01:31:51,600 --> 01:31:54,920 >> I així podríem, igual Zero, prescindir de la persona si, 1836 01:31:54,920 --> 01:31:55,747 i dir una altra cosa. 1837 01:31:55,747 --> 01:31:57,830 Lògicament, si el programador sap que només hi 1838 01:31:57,830 --> 01:32:01,635 tres cubs en què una escenari pot fall-- la primera, 1839 01:32:01,635 --> 01:32:03,510 la segona, o la tercera en aquest cas-- no fer 1840 01:32:03,510 --> 01:32:07,100 molestar l'addició de la precisió addicional i la lògica addicional allà. 1841 01:32:07,100 --> 01:32:09,690 Només seguir endavant amb el cas per defecte aquí d'una altra cosa. 1842 01:32:09,690 --> 01:32:11,950 >> Ara, seguirem endavant després de salvar això, fer 1843 01:32:11,950 --> 01:32:15,760 condicions esquitxen reduir conditions-- no una gran interfície d'usuari, 1844 01:32:15,760 --> 01:32:18,914 perquè no em va portar a la usuari, com he esmentat anteriorment. 1845 01:32:18,914 --> 01:32:19,580 Però això està bé. 1846 01:32:19,580 --> 01:32:20,454 Anem a mantenir simple. 1847 01:32:20,454 --> 01:32:21,890 Intentarem el nombre 42. 1848 01:32:21,890 --> 01:32:23,240 I això és positiu. 1849 01:32:23,240 --> 01:32:26,120 Intentarem el nombre 42 negatiu, negatiu. 1850 01:32:26,120 --> 01:32:28,244 >> Anem a provar el valor 0. 1851 01:32:28,244 --> 01:32:29,160 I, de fet, funciona. 1852 01:32:29,160 --> 01:32:33,900 Ara, veurà amb problemes abans de llarg, el que es prova tres vegades, 1853 01:32:33,900 --> 01:32:34,980 probablement no és suficient. 1854 01:32:34,980 --> 01:32:37,438 És possible que vulgueu provar alguns nombres més grans, alguns més petits 1855 01:32:37,438 --> 01:32:40,520 nombres, alguns casos de cantonada, com anem a venir per descriure'ls. 1856 01:32:40,520 --> 01:32:42,500 >> Però, per ara, es tracta d'una programa bastant simple. 1857 01:32:42,500 --> 01:32:45,160 I estic bastant segur que, lògicament, que es divideix en tres casos. 1858 01:32:45,160 --> 01:32:49,360 I, de fet, tot i que només centrat en els aspectes negatius potencials 1859 01:32:49,360 --> 01:32:53,480 d'imprecisió i de desbordament, en realitat en què molts dels problemes del CS50, 1860 01:32:53,480 --> 01:32:56,000 nosaltres no ens anem a preocupar sobre, tot el temps, 1861 01:32:56,000 --> 01:32:59,050 les qüestions de desbordament i imprecisió, perquè, de fet, en C, 1862 01:32:59,050 --> 01:33:01,889 no és en realitat tot el que fàcil d'evitar aquestes coses. 1863 01:33:01,889 --> 01:33:04,180 Si desitja comptar fins més gran i més gran, i més gran, 1864 01:33:04,180 --> 01:33:07,510 Resulta que hi ha tècniques que es pot utilitzar, sovint amb coses trucades 1865 01:33:07,510 --> 01:33:11,240 biblioteques, col·leccions de codi, que les altres persones van escriure que pot utilitzar, 1866 01:33:11,240 --> 01:33:13,910 i altres llenguatges com Java i altres, en realitat 1867 01:33:13,910 --> 01:33:15,800 fer que sigui molt més fàcil a comptar fins i tot més alt. 1868 01:33:15,800 --> 01:33:19,810 Pel que realment és que alguns d'aquests perills en funció de l'idioma que utilitzi. 1869 01:33:19,810 --> 01:33:22,710 I en les properes setmanes, anem a veure el perillós C realment 1870 01:33:22,710 --> 01:33:24,950 pot ser si no s'utilitza correctament. 1871 01:33:24,950 --> 01:33:27,610 Però a partir d'aquí, i amb Python i JavaScript, es 1872 01:33:27,610 --> 01:33:32,620 ens capa en algunes proteccions addicionals, i córrer menys d'aquests riscos. 1873 01:33:32,620 --> 01:33:35,820 >> Així que farem una mica més lògica interessant en el nostre programa. 1874 01:33:35,820 --> 01:33:39,110 Així que permetin-me seguir endavant i crear un programa anomenat Logical 1875 01:33:39,110 --> 01:33:43,804 perquè jo pugui jugar amb alguns la lògica real, logical.c. 1876 01:33:43,804 --> 01:33:46,870 Vaig a copiar i enganxar alguns codi d'abans, així que torni 1877 01:33:46,870 --> 01:33:49,950 a aquest bonic punt de partida. 1878 01:33:49,950 --> 01:33:53,980 >> Concedeix-me temps fer C. carbó estic va a donar-li un nom de C 1879 01:33:53,980 --> 01:33:58,510 només perquè és convencional, obtenir un personatge de l'usuari. 1880 01:33:58,510 --> 01:34:00,730 I anem a suposar com Estic posant en pràctica part 1881 01:34:00,730 --> 01:34:04,130 d'aquest programa Rm, el remove programa abans que se li demani a l'usuari 1882 01:34:04,130 --> 01:34:05,400 per eliminar un arxiu. 1883 01:34:05,400 --> 01:34:06,750 Com podem fer això? 1884 01:34:06,750 --> 01:34:11,090 >> Vull dir, si C és igual iguals, entre cometes, 1885 01:34:11,090 --> 01:34:16,304 i, a continuació, vaig a assumir que l'usuari ha triat si. 1886 01:34:16,304 --> 01:34:17,470 Jo només vaig a imprimir si. 1887 01:34:17,470 --> 01:34:19,440 Si veritablement estigués escrivint el programa d'eliminació, 1888 01:34:19,440 --> 01:34:21,420 podríem treure l'arxiu amb més línies de codi. 1889 01:34:21,420 --> 01:34:22,461 Però anem a mantenir les coses simples. 1890 01:34:22,461 --> 01:34:25,950 1891 01:34:25,950 --> 01:34:31,250 >> Perquè si c és igual a igual n- i ara aquí, que vaig a dir, 1892 01:34:31,250 --> 01:34:32,980 l'usuari ha d'haver volgut dir que no. 1893 01:34:32,980 --> 01:34:34,360 I després una altra cosa, saps què? 1894 01:34:34,360 --> 01:34:36,200 No sé què més l'usuari va a escriure. 1895 01:34:36,200 --> 01:34:38,533 Així que només vaig a dir que que és un error, el 1896 01:34:38,533 --> 01:34:40,070 ell o ella realment escrit. 1897 01:34:40,070 --> 01:34:41,180 >> Llavors, què està passant aquí? 1898 01:34:41,180 --> 01:34:44,530 Hi ha una diferència fonamental enfront del que he fet en el passat. 1899 01:34:44,530 --> 01:34:49,300 Les cometes dobles, cometes dobles, doble cites, i, però, cometes simples, 1900 01:34:49,300 --> 01:34:50,170 cometes simples. 1901 01:34:50,170 --> 01:34:52,860 Resulta que en C, que quan voleu escriure una cadena, 1902 01:34:52,860 --> 01:34:56,680 vostè fa ús de cometes dobles, així com nosaltres hem estat utilitzant tot aquest temps amb printf. 1903 01:34:56,680 --> 01:35:02,030 >> Però si vostè vol tractar amb només una caràcter individual, una crida char, 1904 01:35:02,030 --> 01:35:03,780 a continuació, que realment utilitza cometes simples. 1905 01:35:03,780 --> 01:35:05,450 Aquells de vostès que han programat abans, pot ser que no tingui 1906 01:35:05,450 --> 01:35:07,850 havia de preocupar per això distinció en determinats idiomes. 1907 01:35:07,850 --> 01:35:09,450 En C, sí que importa. 1908 01:35:09,450 --> 01:35:12,560 I així, quan arribi a un char i vull comparar aquest carbó utilitzant iguals 1909 01:35:12,560 --> 01:35:18,350 és igual a alguna carta com a S o N, faig, de fet, necessita tenir les cometes simples. 1910 01:35:18,350 --> 01:35:19,770 >> Ara, seguirem endavant i fer això. 1911 01:35:19,770 --> 01:35:26,180 Seguirem endavant i fer realitza dot lògiques slash lògic. 1912 01:35:26,180 --> 01:35:27,305 I ara estic que se li demani. 1913 01:35:27,305 --> 01:35:30,638 Per tant, és de suposar, una millor experiència d'usuari seria en realitat em digui què fer aquí. 1914 01:35:30,638 --> 01:35:33,030 Però vaig a cegament dir i per a si, bé, bé. 1915 01:35:33,030 --> 01:35:35,780 >> Anem a córrer de nou, n per no, agradable. 1916 01:35:35,780 --> 01:35:39,610 Suposem que igual que certes persones que conec, meus bloqueig de majúscules clau està en massa freqüència. 1917 01:35:39,610 --> 01:35:43,740 Així que faig I majúscula, enter, error. 1918 01:35:43,740 --> 01:35:46,130 OK, no és exactament el que estic esperant. 1919 01:35:46,130 --> 01:35:48,170 De fet, l'ordinador està fent literalment el 1920 01:35:48,170 --> 01:35:51,794 Li vaig dir a fer-- comprovar si hi ha minúscules i i n minúscula. 1921 01:35:51,794 --> 01:35:53,960 Això no se sent com a bona experiència dels usuaris, però. 1922 01:35:53,960 --> 01:35:59,010 Déjame demanar i acceptar ja sigui minúscules o majúscules. 1923 01:35:59,010 --> 01:36:02,090 Així que resulta, és possible que vulgueu dir alguna cosa com a Scratch, 1924 01:36:02,090 --> 01:36:08,150 com literal o C és igual és igual únic de capitals i citat. 1925 01:36:08,150 --> 01:36:11,400 Resulta que C no té aquesta paraula clau literal o. 1926 01:36:11,400 --> 01:36:12,880 >> Però té dues barres verticals. 1927 01:36:12,880 --> 01:36:15,463 Vostè ha de mantenir Shift general, si està utilitzant un teclat dels EUA, 1928 01:36:15,463 --> 01:36:18,910 i prem la barra vertical clau per sobre de la tecla de retorn. 1929 01:36:18,910 --> 01:36:22,410 Però aquesta barra vertical o barra vertical indica. 1930 01:36:22,410 --> 01:36:26,220 >> Si, per contra, volíem dir i, igual que en Scratch, 1931 01:36:26,220 --> 01:36:28,180 podríem fer signe de signe. 1932 01:36:28,180 --> 01:36:31,330 Això no té sentit lògic aquí, perquè un ésser humà no podria 1933 01:36:31,330 --> 01:36:37,110 han escrit tant i com minúscules i i el capital I com el mateix caràcter. 1934 01:36:37,110 --> 01:36:39,470 Així que, o és el que ens proposem aquí. 1935 01:36:39,470 --> 01:36:46,280 >> Així que si faig això en els dos llocs, o c és igual a és igual a N majúscula, ara torni a executar, 1936 01:36:46,280 --> 01:36:49,390 donar lògica, torneu a executar lògica. 1937 01:36:49,390 --> 01:36:51,200 Ara, puc escriure i. 1938 01:36:51,200 --> 01:36:53,920 I puc fer-ho de nou amb I majúscula, o N majúscula 1939 01:36:53,920 --> 01:36:56,630 I podria afegir a addicional combinacions fixes. 1940 01:36:56,630 --> 01:36:58,810 >> Així que aquesta és una lògica programa de la mesura en que ara 1941 01:36:58,810 --> 01:37:01,940 Estic comprovant lògicament per aquest valor o aquest valor. 1942 01:37:01,940 --> 01:37:06,420 I jo no tinc que, necessàriament, arribar a dues IFS IFS més o en cas contrari. 1943 01:37:06,420 --> 01:37:09,960 De fet, em puc combinar algunes de les relacionats amb la lògica junts d'aquesta manera. 1944 01:37:09,960 --> 01:37:11,950 Així que això seria millor dissenyada que simplement 1945 01:37:11,950 --> 01:37:17,490 a dir, si C és igual a minúscula i, imprimir sí, més si c és igual a I majúscula, 1946 01:37:17,490 --> 01:37:20,074 imprimir sí, més si c és igual lower-- en altres paraules, 1947 01:37:20,074 --> 01:37:21,990 vostè no ha de tenir més i més branques. 1948 01:37:21,990 --> 01:37:28,840 Es poden combinar alguns dels equivalents branques lògicament, com en aquest camí. 1949 01:37:28,840 --> 01:37:34,150 >> Així que anem a fer una ullada a un sol ingredient final, un últim constructe, 1950 01:37:34,150 --> 01:37:34,847 que permet C. 1951 01:37:34,847 --> 01:37:36,930 I anem a tornar al futur a altres encara. 1952 01:37:36,930 --> 01:37:41,400 I després anem a la conclusió examinat pel que no la correcció de code-- 1953 01:37:41,400 --> 01:37:46,070 Com obtenir el codi de treball-- però el disseny de codi, i plantar les llavors des del principi. 1954 01:37:46,070 --> 01:37:51,337 >> Així que permetin-me seguir endavant i obrir un nou arxiu aquí. 1955 01:37:51,337 --> 01:37:51,920 Tu saps que? 1956 01:37:51,920 --> 01:37:54,450 Vaig a tornar a posar en pràctica aquest mateix programa, 1957 01:37:54,450 --> 01:37:55,940 però utilitzant una construcció diferent. 1958 01:37:55,940 --> 01:38:00,110 >> Així que em va deixar ràpidament lliurar-me accés per incloure CS50.h 1959 01:38:00,110 --> 01:38:04,150 per a la biblioteca de CS50, Io.h estàndard per printf. 1960 01:38:04,150 --> 01:38:06,510 Dóna'm la meva void main int. 1961 01:38:06,510 --> 01:38:09,310 I després per aquí, i molt Em seguir endavant i fer això. 1962 01:38:09,310 --> 01:38:12,010 >> Char c aconsegueix obtenir char, de la mateixa manera que abans. 1963 01:38:12,010 --> 01:38:16,770 I vaig a utilitzar una nova construcció ara-- canviar, en què caràcter? 1964 01:38:16,770 --> 01:38:19,820 Així interruptor és una mena El pas d'un tren pistes. 1965 01:38:19,820 --> 01:38:22,070 O, en realitat, és una espècie de Si una persona, si una altra persona si, 1966 01:38:22,070 --> 01:38:23,980 però escrit de manera una mica diferent. 1967 01:38:23,980 --> 01:38:25,490 >> Un interruptor s'assembla a això. 1968 01:38:25,490 --> 01:38:29,060 Vostè té interruptor, i després ho caràcter o nombre que voleu veure, 1969 01:38:29,060 --> 01:38:32,000 a continuació, algunes claus com a Zero, només dir fer aquestes coses. 1970 01:38:32,000 --> 01:38:33,480 I llavors vostè ha diferents casos. 1971 01:38:33,480 --> 01:38:34,830 >> No s'utilitza si, i altres. 1972 01:38:34,830 --> 01:38:37,050 Literalment s'utilitza el cas de textos. 1973 01:38:37,050 --> 01:38:38,790 I es podria dir alguna cosa com això. 1974 01:38:38,790 --> 01:38:43,820 >> Així en el cas d'una minúscula i, o en el cas d'una capital I, 1975 01:38:43,820 --> 01:38:47,350 seguir endavant i imprimir si. 1976 01:38:47,350 --> 01:38:49,020 I després sortir de l'interruptor. 1977 01:38:49,020 --> 01:38:49,580 Això és. 1978 01:38:49,580 --> 01:38:50,880 Hem acabat. 1979 01:38:50,880 --> 01:38:57,270 >> Perquè si, per així dir-ho, n minúscula o majúscula N, 1980 01:38:57,270 --> 01:39:02,560 a continuació, seguir endavant i d'impressió fora no, i després trencar. 1981 01:39:02,560 --> 01:39:08,022 Else-- i aquest tipus és el de cas per defecte indeed-- printf error-- 1982 01:39:08,022 --> 01:39:10,980 i només per si de cas, tot i que lògicament aquesta ruptura no cal 1983 01:39:10,980 --> 01:39:12,896 perquè estem al final l'interruptor de totes maneres, 1984 01:39:12,896 --> 01:39:14,520 Ara estic trencant l'exterior del switch. 1985 01:39:14,520 --> 01:39:16,280 Pel que aquest es veu una mica diferent. 1986 01:39:16,280 --> 01:39:18,272 >> Però, lògicament, és en realitat equivalent. 1987 01:39:18,272 --> 01:39:19,980 I ¿per què fer servir un sobre l'altre? 1988 01:39:19,980 --> 01:39:23,220 De vegades, només preferència personal, de vegades l'estètica, 1989 01:39:23,220 --> 01:39:25,420 si Trobo una ullada a aquest Ara, hi ha alguna cosa 1990 01:39:25,420 --> 01:39:27,510 a dir sobre la llegibilitat d'aquest codi. 1991 01:39:27,510 --> 01:39:30,690 És a dir, no importa el fet que aquest codi és nou per a molts de nosaltres a l'habitació. 1992 01:39:30,690 --> 01:39:33,515 >> Però només una mica és bastant. 1993 01:39:33,515 --> 01:39:37,760 Veus minúscules i, majúscula, n minúscula, per defecte N majúscula, 1994 01:39:37,760 --> 01:39:40,150 que només tipus de salts a la vista d'una manera 1995 01:39:40,150 --> 01:39:42,200 que, sens dubte, potser l'exemple anterior 1996 01:39:42,200 --> 01:39:45,780 a les FI, i les barres verticals, i les FI altres, no podrien tenir. 1997 01:39:45,780 --> 01:39:51,600 Així que això és realment una qüestió de personal elecció, de veritat, o la llegibilitat, 1998 01:39:51,600 --> 01:39:52,360 del codi. 1999 01:39:52,360 --> 01:39:58,230 >> Però en termes de funcionalitat, em va deixar seguir endavant i fer un interruptor, barra de punts 2000 01:39:58,230 --> 01:40:05,830 interruptor, i ara escrigui en i minúscules, I majúscula, minúscula n, N majúscula, 2001 01:40:05,830 --> 01:40:09,250 David, perquè això és tornar a intentar ni un sol símbol. 2002 01:40:09,250 --> 01:40:12,050 Anem a fer x, l'error, com s'esperava. 2003 01:40:12,050 --> 01:40:15,640 I, logically-- i això és una cosa Jo animaria en general-- fins i tot 2004 01:40:15,640 --> 01:40:17,790 encara que només ens estem rascant la superfície d'algunes d'aquestes característiques. 2005 01:40:17,790 --> 01:40:20,560 >> I pot ser que no sigui evident quan es vostè se senti baix en el teclat, 2006 01:40:20,560 --> 01:40:21,370 Com funciona això? 2007 01:40:21,370 --> 01:40:22,240 El que faria això? 2008 01:40:22,240 --> 01:40:25,630 El bonic d'haver un ordinador portàtil o de sobretaula, o l'accés 2009 01:40:25,630 --> 01:40:29,290 a un ordinador amb un compilador, i amb un editor de codi com aquest, 2010 01:40:29,290 --> 01:40:32,990 està gairebé sempre es pot respondre a aquestes preguntes per vostè acaba de tractar. 2011 01:40:32,990 --> 01:40:36,570 >> Per exemple, si la retòrica pregunta en qüestió eren, 2012 01:40:36,570 --> 01:40:39,540 ¿Què passa si s'oblida seus estats de descans? 2013 01:40:39,540 --> 01:40:41,400 Que és realment una molt comú que cal fer, 2014 01:40:41,400 --> 01:40:43,540 ja que no es veu com si realment els necessita. 2015 01:40:43,540 --> 01:40:46,790 En realitat, no completen la seva pensat com un parèntesi o un arrissat 2016 01:40:46,790 --> 01:40:47,714 cotilla ho fa. 2017 01:40:47,714 --> 01:40:49,630 Seguirem endavant i tornar a compilar el codi i veure. 2018 01:40:49,630 --> 01:40:53,690 Així que l'interruptor, interruptor de barra de punts. 2019 01:40:53,690 --> 01:40:56,435 Anem escrigui en minúscules i, la caixa superior, Enter. 2020 01:40:56,435 --> 01:40:59,390 2021 01:40:59,390 --> 01:41:00,700 Pel que he escrit i. 2022 01:41:00,700 --> 01:41:04,420 >> El programa va dir que sí, no, error, com si canviava d'opinió. 2023 01:41:04,420 --> 01:41:09,280 Però és com que era, perquè el que succeeix amb un interruptor és el primer cas que es 2024 01:41:09,280 --> 01:41:13,899 partit essencialment vol dir, eh equip, executar tot el codi sota d'ella. 2025 01:41:13,899 --> 01:41:16,690 I si vostè no diu trenqui, o no digui trenqui, o no diuen descans, 2026 01:41:16,690 --> 01:41:19,540 l'equip va a bufar a través de totes les línies 2027 01:41:19,540 --> 01:41:22,779 i executar tots ells fins s'arriba a aquest suport arrissat. 2028 01:41:22,779 --> 01:41:24,320 Així que els frens són, de fet, cal. 2029 01:41:24,320 --> 01:41:27,120 Però aquí és un menjar per emportar, quan En cas de dubte, provar alguna cosa. 2030 01:41:27,120 --> 01:41:29,510 Potser a guardar el programa en primer lloc, o guardar-lo en un arxiu extra 2031 01:41:29,510 --> 01:41:32,930 si està realment preocupat per fer malbé i haver de recuperar 2032 01:41:32,930 --> 01:41:34,430 el treball que se sap que funciona. 2033 01:41:34,430 --> 01:41:35,410 >> Però provar coses. 2034 01:41:35,410 --> 01:41:38,074 I no tingui por que, potser, del que l'equip pot fer, 2035 01:41:38,074 --> 01:41:39,490 o que podria trencar alguna cosa. 2036 01:41:39,490 --> 01:41:42,790 Sempre es pot tornar en certa versió anterior. 2037 01:41:42,790 --> 01:41:45,640 >> Així que anem a acabar mirant en el disseny de codi. 2038 01:41:45,640 --> 01:41:49,020 Tenim aquesta facultat ara per escriure condicions i bucles d'escriptura, 2039 01:41:49,020 --> 01:41:50,850 i variables, i les funcions de trucada. 2040 01:41:50,850 --> 01:41:54,590 Així que, francament, estem de tornada a la classe de on érem fa una setmana amb Scratch, 2041 01:41:54,590 --> 01:42:00,120 encara que amb un text menys convincent medi ambient que permet ratllades. 2042 01:42:00,120 --> 01:42:03,990 >> Però Tingueu en compte la rapidesa amb què hem adquirit que el vocabulari, encara que sigui 2043 01:42:03,990 --> 01:42:07,570 Va a prendre una mica de temps per assimilar, de manera que ara podem fer servir aquest vocabulari 2044 01:42:07,570 --> 01:42:10,320 per escriure programes més interessants. 2045 01:42:10,320 --> 01:42:12,940 I anem a fer un pas de nadó cap que, com segueix. 2046 01:42:12,940 --> 01:42:14,890 Déjame anar endavant i crear un nou arxiu aquí. 2047 01:42:14,890 --> 01:42:17,750 >> Vaig a trucar a aquest prototype.c, i introduir 2048 01:42:17,750 --> 01:42:20,954 per primera vegada, la capacitat per fer les seves pròpies funcions. 2049 01:42:20,954 --> 01:42:22,870 Alguns de vostès podrien tenir fet això amb Scratch, 2050 01:42:22,870 --> 01:42:25,430 pel qual vostè pot crear el seu blocs personalitzats propis en zero, 2051 01:42:25,430 --> 01:42:27,892 i després arrossegar-los en el seu lloc allà on vulgui en C. 2052 01:42:27,892 --> 01:42:30,100 I en la majoria de programació idiomes, es pot fer exactament 2053 01:42:30,100 --> 01:42:33,580 que- fer les seves pròpies funcions, si no existeixen ja. 2054 01:42:33,580 --> 01:42:38,660 >> Així, per exemple, em va deixar anar per davant i incloure CS50.h, i inclouen 2055 01:42:38,660 --> 01:42:43,110 io.h estàndard, nul·la principal int. 2056 01:42:43,110 --> 01:42:46,020 I ara tenim una marcador de posició de llest per a funcionar. 2057 01:42:46,020 --> 01:42:48,550 Guardo coses d'impressió com noms de les persones avui dia. 2058 01:42:48,550 --> 01:42:51,910 I això se sent com- No seria bo si hi ha 2059 01:42:51,910 --> 01:42:53,936 eren una funció anomenada en lletra d'impremta? 2060 01:42:53,936 --> 01:42:55,060 Jo no he de fer servir printf. 2061 01:42:55,060 --> 01:42:56,976 No he de recordar tots els codis de format. 2062 01:42:56,976 --> 01:43:00,050 Per què no jo, o per què no ho va fer algú abans que jo, 2063 01:43:00,050 --> 01:43:02,980 crear una funció anomenada print nom, que donat un nom, 2064 01:43:02,980 --> 01:43:03,980 simplement ho imprimeix? 2065 01:43:03,980 --> 01:43:08,700 >> En altres paraules, si dic, hey, ordinador, dóna'm una cadena 2066 01:43:08,700 --> 01:43:11,870 preguntant a l'usuari per a tal, a través de la funció get cadena de CS50. 2067 01:43:11,870 --> 01:43:15,090 Hey, ordinador, ja que en la cadena de la variable a la banda esquerra, 2068 01:43:15,090 --> 01:43:16,150 i en diuen s. 2069 01:43:16,150 --> 01:43:22,150 I llavors, hey equip, vagi per davant i imprimir que el nom de la persona, fet. 2070 01:43:22,150 --> 01:43:26,240 >> Ara, seria bo, perquè aquest programa, ben anomenat, 2071 01:43:26,240 --> 01:43:29,170 em diu el que ha de fer per mitjà dels noms dels de funció. 2072 01:43:29,170 --> 01:43:32,930 Deixa que vagi a fer prototip, ENTER. 2073 01:43:32,930 --> 01:43:34,930 I, desafortunadament, això no va a volar. 2074 01:43:34,930 --> 01:43:39,430 >> Prototype.c, línia 7, caràcter 5, l'error, la declaració implícita 2075 01:43:39,430 --> 01:43:42,960 Nom de la funció d'impressió és invàlid en C99, C99 2076 01:43:42,960 --> 01:43:45,130 és a dir, una versió de C que va sortir el 1999. 2077 01:43:45,130 --> 01:43:45,730 Això és tot. 2078 01:43:45,730 --> 01:43:48,780 >> Així que no sé què tot això significa encara. 2079 01:43:48,780 --> 01:43:50,810 Però sí que reconeix error en vermell. 2080 01:43:50,810 --> 01:43:51,770 Això és bastant obvi. 2081 01:43:51,770 --> 01:43:53,769 >> I sembla que amb el caràcter verd aquí, 2082 01:43:53,769 --> 01:43:57,520 el problema és amb lletra d'impremta, obert parin s, prop parin, punt i coma. 2083 01:43:57,520 --> 01:44:01,800 Però la declaració implícita d' funció que vam veure breument abans. 2084 01:44:01,800 --> 01:44:04,880 Això vol dir, simplement, que Clang no sé el que vull dir. 2085 01:44:04,880 --> 01:44:09,000 >> He utilitzat una paraula del vocabulari que és Mai vist o ha estat ensenyat abans. 2086 01:44:09,000 --> 01:44:11,950 I així que he de ensenyar el que significa aquesta funció. 2087 01:44:11,950 --> 01:44:13,590 Així que vaig a seguir endavant i fer això. 2088 01:44:13,590 --> 01:44:17,970 >> Vaig a seguir endavant i posar en pràctica la meva pròpia funció anomenada Imprimir Nom. 2089 01:44:17,970 --> 01:44:24,720 I vaig a dir, de la següent manera, que ho fa, printf, hola, cent 2090 01:44:24,720 --> 01:44:27,760 s, la barra invertida n, nom, punt i coma. 2091 01:44:27,760 --> 01:44:29,250 Llavors, què acabo de fer? 2092 01:44:29,250 --> 01:44:31,325 >> Així que resulta, a implementar la seva pròpia funció, 2093 01:44:31,325 --> 01:44:33,845 quin tipus de prestat alguns la mateixa estructura que principal 2094 01:44:33,845 --> 01:44:35,720 que simplement hem estat es dóna per fet, i jo 2095 01:44:35,720 --> 01:44:37,730 saber si el copies i pegant bastant més del que 2096 01:44:37,730 --> 01:44:39,170 He estat escrivint en el passat. 2097 01:44:39,170 --> 01:44:40,570 Notar el patró aquí. 2098 01:44:40,570 --> 01:44:43,750 Int, principal, Buit, anem a esmicolar en poc temps el que això significa en realitat. 2099 01:44:43,750 --> 01:44:46,160 >> Però per ara, només notar el paral·lelisme. 2100 01:44:46,160 --> 01:44:48,210 Buit, en lletra d'impremta, nom de la cadena, de manera que cal 2101 01:44:48,210 --> 01:44:50,310 una paraula clau porpra, que començarem 2102 01:44:50,310 --> 01:44:54,067 trucar a un tipus de retorn, el nom de la funció, i llavors l'entrada. 2103 01:44:54,067 --> 01:44:56,400 Així que, en realitat, podem destil·lar aquest tipus de com la setmana passada 2104 01:44:56,400 --> 01:44:59,030 com, aquest és el nom o la algoritme del codi que estem 2105 01:44:59,030 --> 01:45:00,761 anar a la write-- algoritme subjacent 2106 01:45:00,761 --> 01:45:02,010 el codi que anem a escriure. 2107 01:45:02,010 --> 01:45:03,180 >> Aquesta és la seva entrada. 2108 01:45:03,180 --> 01:45:04,670 Aquest és la seva sortida. 2109 01:45:04,670 --> 01:45:08,730 Aquesta funció, el nom d'impressió, és dissenyat per tenir una cadena anomenada nom, 2110 01:45:08,730 --> 01:45:11,350 o el que sigui, com a entrada, i després buit. 2111 01:45:11,350 --> 01:45:13,904 No retorna res, com arribar cadena o aconseguir int fa. 2112 01:45:13,904 --> 01:45:15,570 Pel que em va a lliurar alguna cosa a canvi. 2113 01:45:15,570 --> 01:45:17,960 Només va a tenir una efecte secundari, per dir-ho així, 2114 01:45:17,960 --> 01:45:19,570 d'imprimir el nom d'una persona. 2115 01:45:19,570 --> 01:45:22,260 Així avís, línia 7, I pot trucar en lletra d'impremta. 2116 01:45:22,260 --> 01:45:25,920 La línia 10, puc definir o posar en pràctica en lletra d'impremta. 2117 01:45:25,920 --> 01:45:28,450 Però, per desgràcia, això no és suficient. 2118 01:45:28,450 --> 01:45:31,230 >> Déjame anar endavant i recompilar aquest després de desar. 2119 01:45:31,230 --> 01:45:33,910 Vaja, ara, ho he fet pitjor encara, semblaria. 2120 01:45:33,910 --> 01:45:37,027 Així declaració implícita de Nom de la funció d'impressió no és vàlid. 2121 01:45:37,027 --> 01:45:38,360 I, de nou, no hi ha més errors. 2122 01:45:38,360 --> 01:45:41,430 Però com jo vaig advertir abans, fins i tot si es deixin confondre amb, 2123 01:45:41,430 --> 01:45:44,850 o una mica trist veure a tants errors, se centren només en la primera 2124 01:45:44,850 --> 01:45:47,500 inicialment, a causa que només podria han tingut un efecte en cascada. 2125 01:45:47,500 --> 01:45:51,970 Així C, o Clang més específicament, Encara no reconeix el nom d'impressió. 2126 01:45:51,970 --> 01:45:54,580 >> I això és perquè Clang, per disseny, és una mica ximple. 2127 01:45:54,580 --> 01:45:56,280 Només fa el que li indica que fer. 2128 01:45:56,280 --> 01:46:00,950 I només ho fa en l'ordre en el qual es digui que faci. 2129 01:46:00,950 --> 01:46:05,270 >> Així que he definit en la principal línia de quatre, com ho hem fet bastant sovint. 2130 01:46:05,270 --> 01:46:07,980 He definit en lletra d'impremta en la línia 10. 2131 01:46:07,980 --> 01:46:11,793 Però estic tractant d'usar Nom d'impressió en línia de set. 2132 01:46:11,793 --> 01:46:13,670 >> És massa aviat, no existeix encara. 2133 01:46:13,670 --> 01:46:19,150 Així que podria ser intel·ligent, i ser com, OK, així que anem a tocar en conjunt, 2134 01:46:19,150 --> 01:46:23,680 i moure el nom d'impressió cap amunt aquí, i tornar a compilar. 2135 01:46:23,680 --> 01:46:24,550 Oh Déu meu. 2136 01:46:24,550 --> 01:46:25,260 Ha funcionat. 2137 01:46:25,260 --> 01:46:26,670 Era tan simple com això. 2138 01:46:26,670 --> 01:46:28,120 >> Però la lògica és exactament això. 2139 01:46:28,120 --> 01:46:30,870 Cal ensenyar-li a el que Clang és mitjançant la definició de la funció de primera. 2140 01:46:30,870 --> 01:46:31,920 A continuació, pot utilitzar-lo. 2141 01:46:31,920 --> 01:46:33,940 Però, francament, això se sent com un pendent relliscosa. 2142 01:46:33,940 --> 01:46:35,773 >> Així que cada vegada que funciono en un problema, només sóc 2143 01:46:35,773 --> 01:46:39,450 va a seleccionar i copiar la Vaig escriure, tallar i enganxar aquí. 2144 01:46:39,450 --> 01:46:41,370 I, sens dubte, podríem inventar alguns escenaris 2145 01:46:41,370 --> 01:46:43,286 on una funció podria que hagi de trucar a un altre. 2146 01:46:43,286 --> 01:46:46,030 I que no es pot posar a cada funció sobre de qualsevol altre. 2147 01:46:46,030 --> 01:46:47,930 >> Per tant, resulta que hi una solució millor. 2148 01:46:47,930 --> 01:46:50,100 Podem deixar que això sigui. 2149 01:46:50,100 --> 01:46:53,677 I, francament, és generalment agradable, i convenient, i el bon disseny 2150 01:46:53,677 --> 01:46:56,760 posar principal en primer lloc, perquè, de nou, principal de la mateixa manera que quan es fa clic a bandera verda, 2151 01:46:56,760 --> 01:46:59,027 que és la funció que és executat per defecte. 2152 01:46:59,027 --> 01:47:01,110 Pel que també podria posar a la part superior de l'arxiu 2153 01:47:01,110 --> 01:47:03,560 de manera que quan vostè o qualsevol un altre ésser humà es veu a l'arxiu 2154 01:47:03,560 --> 01:47:06,360 vostè sap el que està passant amb només llegir principal en primer lloc. 2155 01:47:06,360 --> 01:47:15,360 Així que resulta, podem dir Clang proactiva, hey, Clang, en línia de quatre, 2156 01:47:15,360 --> 01:47:17,940 Prometo posar en pràctica una funció anomenada Imprimir 2157 01:47:17,940 --> 01:47:22,600 Nom que pren un nom de cadena anomenat com a entrada i retorna res, el buit. 2158 01:47:22,600 --> 01:47:24,770 I vaig a moure a a terme més endavant. 2159 01:47:24,770 --> 01:47:25,680 >> Aquí ve principal. 2160 01:47:25,680 --> 01:47:29,130 Ara principal en la línia 9 es pot utilitzar Imprimir Nom perquè Clang 2161 01:47:29,130 --> 01:47:32,600 està confiant que, amb el temps, es trobarà amb la definició 2162 01:47:32,600 --> 01:47:34,880 de l'aplicació d'impressió Nom. 2163 01:47:34,880 --> 01:47:37,390 Així que després de guardar el meu arxiu, i molt Em seguir endavant i fer el prototip, 2164 01:47:37,390 --> 01:47:38,498 es veu bé en aquesta ocasió. 2165 01:47:38,498 --> 01:47:43,470 Dot slash, prototip, em va deixar seguir endavant i escriure un nom. 2166 01:47:43,470 --> 01:47:48,440 David, hola David, Zamila, hola Zamila, i, de fet, ara es treballa. 2167 01:47:48,440 --> 01:47:52,200 >> Així que l'ingredient aquí és que hem fet una funció personalitzada, com un costum 2168 01:47:52,200 --> 01:47:54,219 bloc de zero ens estem cridant. 2169 01:47:54,219 --> 01:47:57,010 Però a diferència de les ratllades on es pot acaba de crear i començar a usar-lo, 2170 01:47:57,010 --> 01:47:59,330 Ara hem de ser una poc més pedant, 2171 01:47:59,330 --> 01:48:03,410 i en realitat entrenar Clang usar, o per esperar-lo. 2172 01:48:03,410 --> 01:48:09,140 Ara, com un a part, per què tot aquest temps ha hem estat a cegues en la fe incloent 2173 01:48:09,140 --> 01:48:12,170 CS50.h, i incloent estàndard io.h? 2174 01:48:12,170 --> 01:48:15,190 >> Doncs bé, resulta que, entre algunes altres coses, 2175 01:48:15,190 --> 01:48:18,550 tot el que està en els punts h arxius, que passen a ser els arxius. 2176 01:48:18,550 --> 01:48:20,460 Hi ha els arxius de capçalera, per dir-ho. 2177 01:48:20,460 --> 01:48:23,270 Encara estan escrits en C. No obstant això, que són un tipus diferent d'arxiu. 2178 01:48:23,270 --> 01:48:28,690 >> Per ara, es pot gairebé assumir que tot el que està dins de CS50.h 2179 01:48:28,690 --> 01:48:33,360 és alguns d'una sola línia d'aquest tipus, no per a les funcions d'impressió anomenats Nom, 2180 01:48:33,360 --> 01:48:36,840 però per obtenir una cadena de, Get Flotador, i alguns altres. 2181 01:48:36,840 --> 01:48:41,510 I hi ha prototips similars, traçadors de línies un, dins de l'estàndard io.h 2182 01:48:41,510 --> 01:48:46,241 per printf, que ara està en la meva pròpia funció d'impressió Nom. 2183 01:48:46,241 --> 01:48:49,490 Així, en altres paraules, tot aquest temps que hem acaba de ser cegament copiar i enganxar 2184 01:48:49,490 --> 01:48:51,780 incloure això, inclogui que, què està passant? 2185 01:48:51,780 --> 01:48:55,310 Aquests són només tipus de pistes al so metàl·lic com a quines funcions 2186 01:48:55,310 --> 01:49:00,170 són, de fet, implementat, just en diferents arxius en una altra part 2187 01:49:00,170 --> 01:49:02,440 en un altre lloc en el sistema. 2188 01:49:02,440 --> 01:49:05,160 >> Així que hem implementat en lletra d'impremta. 2189 01:49:05,160 --> 01:49:07,910 Es té aquest efecte secundari de imprimir alguna cosa a la pantalla. 2190 01:49:07,910 --> 01:49:10,170 Però no és així en realitat dóna'm una mica de volta. 2191 01:49:10,170 --> 01:49:12,200 Com fem per la implementació d'un programa que 2192 01:49:12,200 --> 01:49:14,510 jo no lliurar alguna cosa a canvi? 2193 01:49:14,510 --> 01:49:15,580 >> Bé, anem a provar això. 2194 01:49:15,580 --> 01:49:21,360 Déjame anar per davant i posar en pràctica un arxiu anomenat return.c 2195 01:49:21,360 --> 01:49:24,530 pel que podem demostrar com alguna cosa Obtenir com cordes, o obtenir Int, 2196 01:49:24,530 --> 01:49:27,340 és en realitat tornar alguna cosa nova a l'usuari. 2197 01:49:27,340 --> 01:49:29,840 Seguirem endavant i definir int void main. 2198 01:49:29,840 --> 01:49:33,230 >> I, de nou, en el futur, anem a explicar el que int i aquest buit 2199 01:49:33,230 --> 01:49:34,090 és en realitat fent. 2200 01:49:34,090 --> 01:49:35,840 Però per ara, anem a donar per fet. 2201 01:49:35,840 --> 01:49:39,970 Vaig a seguir endavant i printf, per a una bona experiència d'usuari, x és. 2202 01:49:39,970 --> 01:49:44,360 I llavors vaig a esperar que el usuari-me x int amb get. 2203 01:49:44,360 --> 01:49:48,459 >> I després vaig a seguir endavant i imprimir x al quadrat. 2204 01:49:48,459 --> 01:49:50,500 Així que quan vostè té només una teclat, la gent comunament 2205 01:49:50,500 --> 01:49:52,600 utilitzar la petita pastanaga símbol en el teclat 2206 01:49:52,600 --> 01:49:55,330 per representar la potència de, o l'exponent de. 2207 01:49:55,330 --> 01:49:58,960 El que x al quadrat és present i. 2208 01:49:58,960 --> 01:50:00,660 >> I ara vaig a fer això. 2209 01:50:00,660 --> 01:50:03,940 Tan sols pogués fer-- el que és x al quadrat? x quadrat és x vegades x. 2210 01:50:03,940 --> 01:50:06,690 >> I ho vam fer alguna Fa temps que ja avui dia. 2211 01:50:06,690 --> 01:50:08,730 Això no se sent com tot el que molt progrés. 2212 01:50:08,730 --> 01:50:09,570 Tu saps que? 2213 01:50:09,570 --> 01:50:13,100 Anem a palanquegen una mica d'aquesta idea des de l'última vegada de l'abstracció. 2214 01:50:13,100 --> 01:50:16,080 >> ¿No seria bo si hi ha una funció anomenada 2215 01:50:16,080 --> 01:50:18,460 quadrat que fa exactament això? 2216 01:50:18,460 --> 01:50:20,640 Encara, al final de la dia, fa el mateix matemàtiques. 2217 01:50:20,640 --> 01:50:22,410 Però anem abstracta lluny la idea de prendre 2218 01:50:22,410 --> 01:50:25,280 un nombre multiplicat per una altra, i només li donen un nom, 2219 01:50:25,280 --> 01:50:27,360 com la quadratura d'aquest valor. 2220 01:50:27,360 --> 01:50:29,560 >> I, en altres paraules, en C, crearem una funció 2221 01:50:29,560 --> 01:50:32,660 anomenat quadrat que fa exactament això. 2222 01:50:32,660 --> 01:50:34,600 Serà anomenat quadrat. 2223 01:50:34,600 --> 01:50:35,790 Es va a prendre un int. 2224 01:50:35,790 --> 01:50:37,820 I anem a voluntat simplement cridar-n, per defecte. 2225 01:50:37,820 --> 01:50:39,403 >> Però podria dir que és el que vulguem. 2226 01:50:39,403 --> 01:50:42,900 I tot el que es va a fer, literalment, és el retorn 2227 01:50:42,900 --> 01:50:45,810 el resultat de n vegades n. 2228 01:50:45,810 --> 01:50:48,980 Però com que és tornar alguna cosa, la qual cosa 2229 01:50:48,980 --> 01:50:53,690 és la paraula clau en la porpra que hem mai havia vist abans, jo, en la línia 11, 2230 01:50:53,690 --> 01:50:55,410 No es pot dir sense efecte aquest moment. 2231 01:50:55,410 --> 01:51:01,320 >> Buit, en l'exemple que acabem de veure en lloc del nom d'impressió, només significa, 2232 01:51:01,320 --> 01:51:02,190 fer quelcom. 2233 01:51:02,190 --> 01:51:04,170 Però no em lliurar alguna cosa a canvi. 2234 01:51:04,170 --> 01:51:06,790 En aquest cas, jo vull per tornar n vegades n, 2235 01:51:06,790 --> 01:51:08,460 o sigui el que sigui, aquest nombre. 2236 01:51:08,460 --> 01:51:12,460 >> Així que no puc dir, hey, ordinador, Torno res, nul·la. 2237 01:51:12,460 --> 01:51:16,166 Es va a tornar, per naturalesa, un int. 2238 01:51:16,166 --> 01:51:17,790 I això és tot el que està passant aquí. 2239 01:51:17,790 --> 01:51:20,070 >> L'entrada de la quadratura serà un int. 2240 01:51:20,070 --> 01:51:24,760 I perquè puguem usar-lo, ha de tenir un nom, N. Es va a la sortida 2241 01:51:24,760 --> 01:51:26,240 1 int que no necessita un nom. 2242 01:51:26,240 --> 01:51:29,590 Podem deixem a principal, o qui usarme per recordar aquest valor si 2243 01:51:29,590 --> 01:51:31,120 voler amb la seva pròpia variable. 2244 01:51:31,120 --> 01:51:33,230 >> I, de nou, l'únic nou paraula clau aquí és Retorn. 2245 01:51:33,230 --> 01:51:34,480 I només estic fent una mica de matemàtica. 2246 01:51:34,480 --> 01:51:41,825 Si jo realment volia ser innecessària, Podria dir producte int n vegades es posa n. 2247 01:51:41,825 --> 01:51:44,170 >> I llavors jo podria dir, el producte de tornada. 2248 01:51:44,170 --> 01:51:47,360 Però, de nou, al meu punt anterior de això simplement no és bona design-- 2249 01:51:47,360 --> 01:51:50,060 de la mateixa manera que, per què introduir un nom, un símbol, com a producte, 2250 01:51:50,060 --> 01:51:51,570 només per tornar immediatament? 2251 01:51:51,570 --> 01:51:53,670 És una mica més net, una mica més fort, per la 2252 01:51:53,670 --> 01:51:59,380 per parlar, només per dir retorn n vegades n, desfer-se d'aquesta línia completament. 2253 01:51:59,380 --> 01:52:02,860 >> I és només menys codi per llegir, menys possibilitats d'errors. 2254 01:52:02,860 --> 01:52:05,180 I veurem si aquest En realitat ara treballa. 2255 01:52:05,180 --> 01:52:09,380 Ara, vaig a anar endavant i fer de retorn. 2256 01:52:09,380 --> 01:52:11,460 >> Uh-oh, declaració implícita de la funció. 2257 01:52:11,460 --> 01:52:14,080 Vaig fer aquest error abans, no és gran cosa. 2258 01:52:14,080 --> 01:52:18,950 Em van deixar de natura, així com ressaltar i copiar, exactament el mateix prototip de funció, 2259 01:52:18,950 --> 01:52:21,342 o la signatura, de la funció aquí. 2260 01:52:21,342 --> 01:52:22,800 O podria moure tota la funció. 2261 01:52:22,800 --> 01:52:23,841 >> Però això és una mica mandrós. 2262 01:52:23,841 --> 01:52:24,870 Així que no farem això. 2263 01:52:24,870 --> 01:52:27,960 Ara, vull deixar de retorn de nou, punt de retorn barra. 2264 01:52:27,960 --> 01:52:32,790 >> x és quadrat 2. x és 4. x és quadrat 3. x és 9. 2265 01:52:32,790 --> 01:52:35,300 I la funció sembla Ara que està funcionant. 2266 01:52:35,300 --> 01:52:36,550 Llavors, quin és la diferència aquí? 2267 01:52:36,550 --> 01:52:42,520 Tinc una funció que es diu quadrat, en aquest cas, que presento una entrada. 2268 01:52:42,520 --> 01:52:43,830 I jo torni una sortida. 2269 01:52:43,830 --> 01:52:46,210 I, no obstant això, amb anterioritat, si Obro l'altre exemple 2270 01:52:46,210 --> 01:52:51,640 d'abans, que va ser cridat prototype.c, 2271 01:52:51,640 --> 01:52:54,770 Tenia en lletra d'impremta, que retornat buit, per així dir-ho, 2272 01:52:54,770 --> 01:52:58,730 O es va tornar res, i simplement tenia un efecte secundari. 2273 01:52:58,730 --> 01:53:00,230 >> Llavors, què està passant aquí? 2274 01:53:00,230 --> 01:53:03,520 Bé, consideri la funció obtenir la seqüència per un moment. 2275 01:53:03,520 --> 01:53:06,570 Hem estat utilitzant la funció obtenir cadena de la següent manera. 2276 01:53:06,570 --> 01:53:10,464 >> Hem tingut una funció get cadena, com són CS50.h, 2277 01:53:10,464 --> 01:53:16,624 Inclouen estàndard io.h, int, principal, nul·la. 2278 01:53:16,624 --> 01:53:18,790 I a continuació, cada vegada que he anomenada cadena GET fins al moment, 2279 01:53:18,790 --> 01:53:23,260 He dit alguna cosa així com: cadena s aconsegueix obtenir la seqüència, ja que vam aconseguir el string-- 2280 01:53:23,260 --> 01:53:27,880 anem a trucar a aquesta cadena get get.c-- si retorna una cadena que pot llavors 2281 01:53:27,880 --> 01:53:32,050 utilitzar, i dir hola, coma, s per cent, la barra invertida n, s. 2282 01:53:32,050 --> 01:53:35,660 >> Així que aquest és el mateix exemple, Realment, que teníem abans. 2283 01:53:35,660 --> 01:53:37,920 Així que arribar cadena retorna un valor. 2284 01:53:37,920 --> 01:53:41,260 Però fa un moment, la cadena d'impressió no retorna un valor. 2285 01:53:41,260 --> 01:53:42,721 Simplement té un efecte secundari. 2286 01:53:42,721 --> 01:53:44,220 Així que aquesta és una diferència fonamental. 2287 01:53:44,220 --> 01:53:46,710 Hem vist diferents tipus de funcions que ara, 2288 01:53:46,710 --> 01:53:49,490 alguns dels quals han tornat valors, alguns dels quals no ho fan. 2289 01:53:49,490 --> 01:53:51,890 Així que potser és la seqüència, o int o float. 2290 01:53:51,890 --> 01:53:53,480 O potser és només buit. 2291 01:53:53,480 --> 01:53:55,710 >> I la diferència és que aquestes funcions que 2292 01:53:55,710 --> 01:53:59,940 obtenir dades i retornar un valor són en realitat portar alguna cosa nova a la taula, 2293 01:53:59,940 --> 01:54:01,110 per dir-ho així. 2294 01:54:01,110 --> 01:54:03,710 Així que seguirem endavant i mirar a un conjunt final 2295 01:54:03,710 --> 01:54:09,129 d'exemples que dóna un sentit, ara, de la forma en què podria, de fet, abstracta millor, 2296 01:54:09,129 --> 01:54:11,670 i millor, i millor, o més, i més, i més, per tal 2297 01:54:11,670 --> 01:54:13,810 per escriure, en última instància, un millor codi. 2298 01:54:13,810 --> 01:54:16,860 Seguirem endavant, i en l'esperit d'Scratch, feu el següent. 2299 01:54:16,860 --> 01:54:21,700 >> Déjame anar endavant i incloc CS50.h i l'estàndard io.h. 2300 01:54:21,700 --> 01:54:24,010 Deixin-me seguir endavant i donar jo una int, principal, nul·la. 2301 01:54:24,010 --> 01:54:27,380 I m'ho dius a mi anar per davant, dic a això cough.c. 2302 01:54:27,380 --> 01:54:35,510 >> I em va deixar anar endavant i només com esgarrapades, imprimiu la tos / n. 2303 01:54:35,510 --> 01:54:37,170 I vull fer això tres vegades. 2304 01:54:37,170 --> 01:54:39,670 Així que estic, per descomptat, només va copiar i enganxar tres vegades. 2305 01:54:39,670 --> 01:54:46,440 Ara vaig a fer tos tos barra de punts. 2306 01:54:46,440 --> 01:54:50,120 Anem a donar a mi mateix una mica més d'espai Aquí es poden introduir, tos, tos, tos. 2307 01:54:50,120 --> 01:54:53,970 >> Hi ha, òbviament, ia una oportunitat de millora. 2308 01:54:53,970 --> 01:54:55,679 He copiat i enganxat un parell de vegades avui. 2309 01:54:55,679 --> 01:54:58,261 Però això només va ser així que no ho vaig fer ha d'escriure tants caràcters. 2310 01:54:58,261 --> 01:55:00,250 Encara canviat el aquestes línies de codi són. 2311 01:55:00,250 --> 01:55:04,240 >> Aquestes tres línies són idèntics, que se sent mandrós i, de fet, és a dir, 2312 01:55:04,240 --> 01:55:07,110 i probablement no és l'enfocament correcte. 2313 01:55:07,110 --> 01:55:11,029 Així, amb el que l'ingredient podríem millorar aquest codi? 2314 01:55:11,029 --> 01:55:12,570 No hem de copiar i enganxar el codi. 2315 01:55:12,570 --> 01:55:15,070 >> I, de fet, cada vegada que se senti a si mateix de copiar i enganxar, 2316 01:55:15,070 --> 01:55:17,700 i ni tan sols el canvi de codi, probabilitats són que hi ha una millor manera. 2317 01:55:17,700 --> 01:55:19,470 I, de fet, no ho és. 2318 01:55:19,470 --> 01:55:22,510 Déjame seguir endavant i fer un bucle, tot i que la sintaxi no podria 2319 01:55:22,510 --> 01:55:24,570 venir naturalment encara. 2320 01:55:24,570 --> 01:55:29,494 >> Feu això tres vegades, simplement fent el following-- 2321 01:55:29,494 --> 01:55:31,160 i m'he assabentat d'això des de la pràctica. 2322 01:55:31,160 --> 01:55:32,810 Però tenim un nombre d'exemples ara. 2323 01:55:32,810 --> 01:55:34,950 I veurà en línia més referències fixes. 2324 01:55:34,950 --> 01:55:37,790 >> Aquesta és la sintaxi de la línia 6, que de la mateixa manera que les ratllades que es repeteix 2325 01:55:37,790 --> 01:55:40,090 bloc, repetiu els següents tres vegades. 2326 01:55:40,090 --> 01:55:41,340 És una mica màgica per ara. 2327 01:55:41,340 --> 01:55:43,050 Però això va a aconseguir més, i més familiar. 2328 01:55:43,050 --> 01:55:45,050 >> I es va a repetir línia de vuit tres vegades, 2329 01:55:45,050 --> 01:55:52,390 pel que si puc tornar a compilar la tos maquillatge, slash dot tos, tos, tos, tos. 2330 01:55:52,390 --> 01:55:54,030 Encara funciona de la mateixa manera. 2331 01:55:54,030 --> 01:55:55,550 Així que això és tot fi i bo. 2332 01:55:55,550 --> 01:55:58,200 Però això no és molt abstracta. 2333 01:55:58,200 --> 01:55:59,371 >> És perfectament correcte. 2334 01:55:59,371 --> 01:56:01,370 Però sembla que hi ha podria ser una oportunitat, 2335 01:56:01,370 --> 01:56:03,750 com en el món de Zero, al tipus d'inici 2336 01:56:03,750 --> 01:56:07,530 afegir alguns termes aquí perquè Jo no només tinc una mica de bucle, 2337 01:56:07,530 --> 01:56:09,867 i una funció que diu tos, o que tossir. 2338 01:56:09,867 --> 01:56:10,450 Tu saps que? 2339 01:56:10,450 --> 01:56:12,620 Vaig a tractar de ser una mica més fresc que això, 2340 01:56:12,620 --> 01:56:16,090 i en realitat escriure una funció que té alguns efectes secundaris, en diuen la tos. 2341 01:56:16,090 --> 01:56:20,830 >> I es necessita cap entrada, i retorna cap valor com a sortida. 2342 01:56:20,830 --> 01:56:22,680 Però vostè sap el que fa? 2343 01:56:22,680 --> 01:56:29,370 Ho fa això- printf, entre cometes, tossir. 2344 01:56:29,370 --> 01:56:32,380 >> I ara aquí, vaig per seguir endavant i per int, 2345 01:56:32,380 --> 01:56:36,070 i resulta en zero, i menys de 3, i més plus. 2346 01:56:36,070 --> 01:56:39,770 Vaig a fer no printf, que és podria dir-se que una implementació de baix nivell 2347 01:56:39,770 --> 01:56:40,270 detall. 2348 01:56:40,270 --> 01:56:41,353 No m'importa com tossir. 2349 01:56:41,353 --> 01:56:43,240 Només vull utilitzar la funció de la tos. 2350 01:56:43,240 --> 01:56:44,840 I jo només vaig a trucar a la tos. 2351 01:56:44,840 --> 01:56:46,204 >> Ara, observi la dicotomia. 2352 01:56:46,204 --> 01:56:49,370 Quan es crida a una funció, si no ho fa que desitgi donar-li entrades, totalment bé. 2353 01:56:49,370 --> 01:56:51,780 Només fer parèntesi d'obertura, tancament parin, i ja està. 2354 01:56:51,780 --> 01:56:56,271 >> Quan es defineix una funció, o declarar el prototip d'una funció, 2355 01:56:56,271 --> 01:56:58,770 si se sap per endavant que no és va a prendre cap argument, 2356 01:56:58,770 --> 01:57:01,170 dir nul·la en aquells parèntesi allà. 2357 01:57:01,170 --> 01:57:05,660 I això fa que la certesa que es no per casualitat es mal ús. 2358 01:57:05,660 --> 01:57:07,020 Déjame seguir endavant i fer la tos. 2359 01:57:07,020 --> 01:57:08,540 I, per descomptat, he comès un error. 2360 01:57:08,540 --> 01:57:10,410 >> Maleïda sigui, cal declaració implícita. 2361 01:57:10,410 --> 01:57:11,325 Però això està bé. 2362 01:57:11,325 --> 01:57:12,590 És una solució fàcil. 2363 01:57:12,590 --> 01:57:18,240 Només necessito el prototip més amunt en el meu arxiu del que estic d'utilitzar-lo. 2364 01:57:18,240 --> 01:57:20,070 >> Així que ara vull deixar ments de nou, agradable. 2365 01:57:20,070 --> 01:57:20,790 Ara, funciona. 2366 01:57:20,790 --> 01:57:22,930 Fer la tos, tos, tos, tos. 2367 01:57:22,930 --> 01:57:25,930 Així es podria pensar que estem molt poc més de l'enginyeria d'aquest problema. 2368 01:57:25,930 --> 01:57:26,763 I, de fet, som. 2369 01:57:26,763 --> 01:57:28,870 Aquest no és un bon candidat d'un programa de 2370 01:57:28,870 --> 01:57:31,930 en el moment de refactorització, i fer el que és 2371 01:57:31,930 --> 01:57:35,645 anomenat descomposició jeràrquica, on es pren una mica de codi, i després 2372 01:57:35,645 --> 01:57:38,790 quin tipus de coses fora de factors, per tal adscriure més semàntica a ells, 2373 01:57:38,790 --> 01:57:40,930 i reutilitzar-la en última instància, a més llarg termini. 2374 01:57:40,930 --> 01:57:43,490 Però és un bloc de construcció cap programes més sofisticats 2375 01:57:43,490 --> 01:57:45,600 que començarem escrit poc temps que 2376 01:57:45,600 --> 01:57:50,090 ens permet disposar de vocabulari amb el qual escriure millor codi. 2377 01:57:50,090 --> 01:57:52,920 I, de fet, veurem si ens No es pot generalitzar més a fons. 2378 01:57:52,920 --> 01:57:57,984 >> Sembla una mica coix que jo, principal, hagi de preocupar per aquest maleït bucle, 2379 01:57:57,984 --> 01:57:59,400 i cridar a la tos i una altra. 2380 01:57:59,400 --> 01:58:03,050 Per què no puc simplement dir-li a la tos, Si us plau, tossir tres vegades? 2381 01:58:03,050 --> 01:58:08,170 En altres paraules, per què no puc simplement donar entrada a tossir i fer això? 2382 01:58:08,170 --> 01:58:11,270 >> Per què no puc simplement dir, en tos principal tres vegades. 2383 01:58:11,270 --> 01:58:13,150 I ara, això és una mena de màgic. 2384 01:58:13,150 --> 01:58:14,540 És molt iteratiu aquí. 2385 01:58:14,540 --> 01:58:15,940 I és, de fet, un petit pas. 2386 01:58:15,940 --> 01:58:19,250 >> Però només la capacitat de dir en línia de vuit, tossir tres vegades, 2387 01:58:19,250 --> 01:58:20,730 és només molt més fàcil de llegir. 2388 01:58:20,730 --> 01:58:24,210 I, a més, no he de saber ni li importa com s'implementa la tos. 2389 01:58:24,210 --> 01:58:26,460 I, de fet, més tard en el termini i per a projectes fi de carrera, 2390 01:58:26,460 --> 01:58:29,150 Si vostè aborda un projecte amb un company de classe o dos companys de classe, 2391 01:58:29,150 --> 01:58:32,370 s'adonarà que vas a que, o desitja, dividir el treball. 2392 01:58:32,370 --> 01:58:34,650 >> I vas a voler decidir per endavant, ¿qui va a fer què, 2393 01:58:34,650 --> 01:58:35,483 i en el qual peces? 2394 01:58:35,483 --> 01:58:37,520 I no seria agradable si, per exemple, 2395 01:58:37,520 --> 01:58:40,100 fer-se càrrec de l'escriptura principal, fet. 2396 01:58:40,100 --> 01:58:43,470 I el seu company de cambra, o el seu soci més en general, 2397 01:58:43,470 --> 01:58:45,230 s'encarrega de l'aplicació de la tos. 2398 01:58:45,230 --> 01:58:49,540 >> I aquesta divisió, aquestes parets de l'abstracció, 2399 01:58:49,540 --> 01:58:52,310 o capes d'abstracció si va, són súper poderós, 2400 01:58:52,310 --> 01:58:55,480 perquè especialment per a més gran, més programes i sistemes complexos, 2401 01:58:55,480 --> 01:59:00,070 que permet a diverses persones per construir coses junts, i en última instància 2402 01:59:00,070 --> 01:59:02,680 puntada seu treball junts d'aquesta manera. 2403 01:59:02,680 --> 01:59:05,332 Però, és clar, necessitarà establir ara la tos. 2404 01:59:05,332 --> 01:59:07,290 Hem de dir-li a la tos que, hey, saps què? 2405 01:59:07,290 --> 01:59:11,230 Vas a haver de prendre una input-- pel que no buida, sinó int i ara. 2406 01:59:11,230 --> 01:59:15,170 Seguirem endavant i posar en ments de l'int. i resulta en zero. 2407 01:59:15,170 --> 01:59:16,890 >> i és menor que el nombre de vegades. 2408 01:59:16,890 --> 01:59:18,550 He dit tres abans. 2409 01:59:18,550 --> 01:59:20,420 Però això no és el que vull. 2410 01:59:20,420 --> 01:59:25,520 Em volen tusso a generalitzar-se a suportar qualsevol nombre d'iteracions. 2411 01:59:25,520 --> 01:59:28,800 >> Així que, de fet, és n que vull, qualsevol que sigui l'usuari em diu. 2412 01:59:28,800 --> 01:59:31,620 Ara, puc seguir endavant i dir la tos d'impressió. 2413 01:59:31,620 --> 01:59:34,750 I tant i fa nombre l'usuari passa a, 2414 01:59:34,750 --> 01:59:36,890 Vaig a repetir moltes vegades. 2415 01:59:36,890 --> 01:59:39,160 >> Així que al final del dia, programa és idèntic. 2416 01:59:39,160 --> 01:59:42,820 Però compte totes aquestes coses fins i tot podria ser en un altre arxiu. 2417 01:59:42,820 --> 01:59:45,620 De fet, no sé al printf moment com s'implementa. 2418 01:59:45,620 --> 01:59:47,980 >> No sé en aquest moment com arribar cadena, o aconseguir int o float arribar 2419 01:59:47,980 --> 01:59:48,646 s'implementen. 2420 01:59:48,646 --> 01:59:50,930 I jo no vull veure'ls en la meva pantalla. 2421 01:59:50,930 --> 01:59:55,320 Tal com és, estic començant a centrar-se en meu programa, no aquestes funcions. 2422 01:59:55,320 --> 01:59:59,070 >> I així, de fet, tan aviat com es iniciar la factorització codi com això, 2423 01:59:59,070 --> 02:00:01,397 podríem fins i tot moure la tos en un arxiu separat? 2424 02:00:01,397 --> 02:00:02,730 Una altra persona podria posar-lo en pràctica. 2425 02:00:02,730 --> 02:00:06,810 I vostè i el seu programa es converteix en el molt bonic, i molt fàcil de llegir, 2426 02:00:06,810 --> 02:00:10,830 podria dir-se que, en realitat quatre programa de línia d'allà mateix. 2427 02:00:10,830 --> 02:00:13,510 >> Així que seguirem endavant ara i fer un canvi més. 2428 02:00:13,510 --> 02:00:16,180 Notar que el meu prototip ha de canviar sobre de la tapa. 2429 02:00:16,180 --> 02:00:18,390 Així que permetin-me arreglar això pel Jo no cridar a. 2430 02:00:18,390 --> 02:00:22,580 >> Fer la tos, la tos em deixa córrer una vegada A més, segueix fent el mateix. 2431 02:00:22,580 --> 02:00:26,010 Però ara, explica que tenim una ingredient per a una versió final. 2432 02:00:26,010 --> 02:00:26,940 Tu saps que? 2433 02:00:26,940 --> 02:00:29,040 Jo no vull simplement tossir, necessàriament. 2434 02:00:29,040 --> 02:00:30,802 Vull tenir una mica més general. 2435 02:00:30,802 --> 02:00:31,510 Així que ja saben què? 2436 02:00:31,510 --> 02:00:32,450 Vull fer això. 2437 02:00:32,450 --> 02:00:37,140 Vull tenir, igual que les ratllades fa, un bloc d'exemple, però no només 2438 02:00:37,140 --> 02:00:38,680 dir alguna cosa cert nombre de vegades. 2439 02:00:38,680 --> 02:00:41,510 Ho vull dir una cadena molt específica. 2440 02:00:41,510 --> 02:00:43,850 I, per tant, no ho crec volem que s'acaba de dir la tos. 2441 02:00:43,850 --> 02:00:47,660 Vull que digui el cadena es passa a. 2442 02:00:47,660 --> 02:00:49,960 >> Així notar, he generalitzi això perquè ara 2443 02:00:49,960 --> 02:00:53,110 diguem sent com un bon nom per això, com Scratch, 2444 02:00:53,110 --> 02:00:55,530 presa dos arguments, a diferència de les ratllades. 2445 02:00:55,530 --> 02:00:56,570 Una d'elles és una cadena. 2446 02:00:56,570 --> 02:00:57,300 Un d'ells és un int. 2447 02:00:57,300 --> 02:00:58,130 >> I podria canviar ells. 2448 02:00:58,130 --> 02:01:00,713 Jo només una cosa així com la idea de dir la cadena primer, i després 2449 02:01:00,713 --> 02:01:01,940 quantes vegades posteriors. 2450 02:01:01,940 --> 02:01:03,970 Void vol dir que encara no torna res. 2451 02:01:03,970 --> 02:01:06,428 Aquests són només part visual efectes, com amb [? Jordan ,?] 2452 02:01:06,428 --> 02:01:08,240 un efecte secundari verbal de cridar. 2453 02:01:08,240 --> 02:01:12,630 Encara fa una mica n vegades, 0 fins, però no és igual a n. 2454 02:01:12,630 --> 02:01:14,540 Això vol dir vegades n totals. 2455 02:01:14,540 --> 02:01:16,540 I després simplement imprimir el que és de cadena. 2456 02:01:16,540 --> 02:01:19,060 Així que en realitat he generalitzi aquesta línia de codi. 2457 02:01:19,060 --> 02:01:22,460 Així que ara, Com implement la funció de tos? 2458 02:01:22,460 --> 02:01:25,520 >> Puc fer la tos buit. 2459 02:01:25,520 --> 02:01:28,501 I encara puc prendre en la forma Moltes vegades es desitja que faci ombra. 2460 02:01:28,501 --> 02:01:29,250 Però saps què? 2461 02:01:29,250 --> 02:01:31,240 Ara puc dir en musclera. 2462 02:01:31,240 --> 02:01:36,540 >> Puc dir amb cridar a la paraula tos, passant n. 2463 02:01:36,540 --> 02:01:40,410 I si vull aplicar també, només per diversió, una funció esternut, 2464 02:01:40,410 --> 02:01:42,290 Puc esternudar cert nombre de vegades. 2465 02:01:42,290 --> 02:01:47,300 I puc seguir reutilitzant n, perquè notar que m en aquest context o abast 2466 02:01:47,300 --> 02:01:49,470 només existeix dins d'aquesta funció. 2467 02:01:49,470 --> 02:01:52,767 >> I n en aquest context només existeix dins d'aquesta funció aquí. 2468 02:01:52,767 --> 02:01:54,600 Així que anem a tornar a aquestes qüestions d'abast. 2469 02:01:54,600 --> 02:02:01,160 I aquí, només vaig a dir, Achoo, i després n vegades, punt i coma. 2470 02:02:01,160 --> 02:02:04,340 >> I ara, només cal demanar prestat aquestes funcions Firmes aquí. 2471 02:02:04,340 --> 02:02:06,290 Així que la tos és correcta. 2472 02:02:06,290 --> 02:02:10,090 esternut buit és correcta ara. 2473 02:02:10,090 --> 02:02:12,390 >> I encara només necessito dir. 2474 02:02:12,390 --> 02:02:18,990 Així que vaig a dir, per exemple cadena s, int n, punt i coma. 2475 02:02:18,990 --> 02:02:22,010 Així que he més de l'enginyeria del diables d'aquest programa. 2476 02:02:22,010 --> 02:02:23,760 >> I això no ho fa necessàriament que es tracta d' 2477 02:02:23,760 --> 02:02:26,343 el que ha de fer l'escriure fins i tot el més simple dels programes. 2478 02:02:26,343 --> 02:02:29,280 Prendre una cosa que és òbviament molt simple, molt curt, 2479 02:02:29,280 --> 02:02:31,800 i tornar a posar-lo en pràctica usant manera massa codi. 2480 02:02:31,800 --> 02:02:34,560 Però en veritat no veus, i en temps de mirar cap enrere en aquests exemples, 2481 02:02:34,560 --> 02:02:38,610 i s'adonen, oh, aquests són els passos ens va portar a generalitzar en realitat, 2482 02:02:38,610 --> 02:02:40,797 al factor alguna cosa fora, fins que al final de la dia 2483 02:02:40,797 --> 02:02:42,380 el meu codi és en realitat bastant raonable. 2484 02:02:42,380 --> 02:02:45,960 Perquè si vull tossir 3 esternuden vegades i després tres vegades, 2485 02:02:45,960 --> 02:02:50,420 Simplement vaig a tornar a executar això, programa de fer la tos, la tos i córrer. 2486 02:02:50,420 --> 02:02:53,620 I tinc tres tos i 3 esternuda. 2487 02:02:53,620 --> 02:02:55,990 >> I pel que aquest és un bàsic paradigma, si es vol, 2488 02:02:55,990 --> 02:03:00,110 de com podem anar sobre En realitat la implementació d'un programa. 2489 02:03:00,110 --> 02:03:03,220 Però anem a veure ara el que és hem estat fent tot aquest temps, 2490 02:03:03,220 --> 02:03:06,940 i el que algunes de les peces finals estan darrere d'aquest simple comandament. 2491 02:03:06,940 --> 02:03:09,620 Al final del dia, tenim estat utilitzant Clang com el nostre compilador. 2492 02:03:09,620 --> 02:03:11,494 Hem estat escrivint font codi, convertint-la 2493 02:03:11,494 --> 02:03:12,820 a través d'Clang en codi màquina. 2494 02:03:12,820 --> 02:03:15,540 >> I nosaltres hem estat utilitzant simplement Fer per facilitar les nostres pulsacions de tecles de manera 2495 02:03:15,540 --> 02:03:20,740 que no hem de recordar els encanteris de si mateix Clang. 2496 02:03:20,740 --> 02:03:22,640 Però el que és realment fer fent? 2497 02:03:22,640 --> 02:03:24,750 I, al seu torn, el que és Clang realment fer? 2498 02:03:24,750 --> 02:03:28,790 >> Resulta, però, hem simplificat la discussió d'avui, dient: 2499 02:03:28,790 --> 02:03:33,090 es pren el codi font, s'envia com entrada a un compilador, que li dóna 2500 02:03:33,090 --> 02:03:35,750 de sortida de la màquina codi, resulta que hi ha 2501 02:03:35,750 --> 02:03:37,420 a uns passos diferents a l'interior hi ha. 2502 02:03:37,420 --> 02:03:41,940 I compilació passa a ser el paraigua termini per a un munt de passos. 2503 02:03:41,940 --> 02:03:43,970 Però anem a burlen això molt ràpid. 2504 02:03:43,970 --> 02:03:48,070 >> Resulta que hem estat fent més coses cada vegada que executi un programa, 2505 02:03:48,070 --> 02:03:50,990 o cada vegada que compili un programa d'avui. 2506 02:03:50,990 --> 02:03:55,020 Així preprocessament es refereix a esto-- res en un programa C, 2507 02:03:55,020 --> 02:03:58,720 com veurem una vegada i una altra, que s'inicia amb aquest símbol de hash, 2508 02:03:58,720 --> 02:04:03,320 o el símbol hashtag aquí, vol dir es tracta d'una directiva de preprocessador. 2509 02:04:03,320 --> 02:04:07,330 Això vol dir que, en aquest cas, ei ordinador, fer alguna cosa amb aquesta imatge 2510 02:04:07,330 --> 02:04:09,430 abans que realment compilar el meu propi codi. 2511 02:04:09,430 --> 02:04:15,220 >> En aquest cas, el hash inclou és a dir, en essència, forma de dir de C, 2512 02:04:15,220 --> 02:04:19,325 Hey ordinador, anar a buscar el contingut de CS50.h i enganxar aquí. 2513 02:04:19,325 --> 02:04:22,170 Hey ordinador, anar a buscar la el contingut de la norma io.h, 2514 02:04:22,170 --> 02:04:24,690 allà on estigui a la disc dur, pega aquí. 2515 02:04:24,690 --> 02:04:27,390 Així que aquestes coses passen primer a l'execució prèvia. 2516 02:04:27,390 --> 02:04:28,880 >> I Clang fa tot això per a nosaltres. 2517 02:04:28,880 --> 02:04:30,510 I ho fa tan rematadament ràpid, que ni tan sols 2518 02:04:30,510 --> 02:04:32,000 veure quatre coses diferents que succeeixen. 2519 02:04:32,000 --> 02:04:34,100 Però aquesta és la primera d'aquestes mesures. 2520 02:04:34,100 --> 02:04:35,560 >> El que en realitat succeeix després? 2521 02:04:35,560 --> 02:04:38,320 Així, la propera oficial pas és la compilació. 2522 02:04:38,320 --> 02:04:40,385 I resulta que compilació d'un programa 2523 02:04:40,385 --> 02:04:44,060 tècnicament significa que va des codi font, les coses que he 2524 02:04:44,060 --> 02:04:47,890 estat escrivint avui en dia, a alguna cosa anomenat codi assemblador, alguna cosa 2525 02:04:47,890 --> 02:04:49,260 que es veu una mica diferent. 2526 02:04:49,260 --> 02:04:51,050 >> I, de fet, podem veure això molt ràpid. 2527 02:04:51,050 --> 02:04:53,890 Déjame anar en realitat en el meu IDE. 2528 02:04:53,890 --> 02:04:58,050 Déjame anar endavant i hola.c obert, la qual cosa és el primer programa amb el qual ens 2529 02:04:58,050 --> 02:04:59,120 començar avui. 2530 02:04:59,120 --> 02:05:04,130 I em va deixar anar endavant i corro 1 Clang mica diferent, Clang-s, hola.c, 2531 02:05:04,130 --> 02:05:07,720 que en realitat es va a dóna'm un altre arxiu hello.s. 2532 02:05:07,720 --> 02:05:10,330 >> I probablement mai es tornar a veure aquest tipus de codi. 2533 02:05:10,330 --> 02:05:13,030 Si es pren un nivell més baix classe de sistemes com CS61, 2534 02:05:13,030 --> 02:05:14,920 veurà molt més d'aquest tipus de codi. 2535 02:05:14,920 --> 02:05:17,020 Però aquest és el llenguatge assemblador. 2536 02:05:17,020 --> 02:05:22,050 Aquest és el llenguatge assemblador X86 que la CPU subjacent 2537 02:05:22,050 --> 02:05:24,460 CS50 IDE entén realment. 2538 02:05:24,460 --> 02:05:27,060 >> I críptic com ho fa mira, és una cosa 2539 02:05:27,060 --> 02:05:29,180 l'equip entén bastant bé. 2540 02:05:29,180 --> 02:05:30,790 Sub q, aquesta és una de resta. 2541 02:05:30,790 --> 02:05:31,660 Hi ha moviments. 2542 02:05:31,660 --> 02:05:35,730 >> Hi ha trucant a les funcions aquí, x oring, un moviment, un complement, sense oposició, 2543 02:05:35,730 --> 02:05:36,430 un retorn. 2544 02:05:36,430 --> 02:05:38,850 Així que hi ha alguns molt instruccions de baix nivell 2545 02:05:38,850 --> 02:05:41,280 que entenen que les CPU He al·ludit anteriorment. 2546 02:05:41,280 --> 02:05:43,100 Això és el que Intel Inside. 2547 02:05:43,100 --> 02:05:45,030 >> Hi ha patrons de zeros i uns que 2548 02:05:45,030 --> 02:05:51,800 assignar a aquests redactada arcanamente, però una cosa així-anomenat, instruccions, 2549 02:05:51,800 --> 02:05:52,780 per dir-ho així. 2550 02:05:52,780 --> 02:05:54,780 Això és el que passa quan compilar el codi. 2551 02:05:54,780 --> 02:05:58,560 Vostè aconsegueix el muntatge llengua fora d'ell, la qual cosa 2552 02:05:58,560 --> 02:06:04,680 significa el tercer pas és acoblar que el codi de muntatge en, en última instància, 2553 02:06:04,680 --> 02:06:09,080 zeros màquina code-- i uns, no les text que acabem de veure fa un moment. 2554 02:06:09,080 --> 02:06:13,370 >> Per tant pretractament no que troben i reemplaçar, i algunes altres coses. 2555 02:06:13,370 --> 02:06:16,430 Compilació pren la seva font codi de C, el codi font 2556 02:06:16,430 --> 02:06:18,980 que escrivim, per al muntatge codi que acabem va observar el. 2557 02:06:18,980 --> 02:06:22,170 Muntatge deté acoblament codi per zeros i uns 2558 02:06:22,170 --> 02:06:24,680 que la CPU realment es comprendre al final del dia. 2559 02:06:24,680 --> 02:06:27,630 I la vinculació és l'últim pas això succeeix per nosaltres-- de nou, 2560 02:06:27,630 --> 02:06:29,830 tan ràpid que ni tan sols notice-- que diu: 2561 02:06:29,830 --> 02:06:32,460 eh equip, prendre totes els zeros i uns que 2562 02:06:32,460 --> 02:06:36,750 el resultat de la compilació de codi de David, i la seva funció principal en aquest cas. 2563 02:06:36,750 --> 02:06:39,160 >> I escolta ordinador, anar a buscar tots els zeros i uns 2564 02:06:39,160 --> 02:06:42,180 que el personal CS50 escriure dins de la biblioteca CS50. 2565 02:06:42,180 --> 02:06:43,440 Barrejar els de David de. 2566 02:06:43,440 --> 02:06:46,648 I escolta ordinador, anar a buscar tots els zeros i els que una altra persona va escriure anys 2567 02:06:46,648 --> 02:06:47,470 Fa de printf. 2568 02:06:47,470 --> 02:06:49,880 I afegir aquells en el cosa sencera, pel que hem 2569 02:06:49,880 --> 02:06:52,870 tinc els meus zeros i uns, la zeros i uns del personal CS50, 2570 02:06:52,870 --> 02:06:55,370 printf els zeros i uns, i qualsevol cosa que estigui utilitzant. 2571 02:06:55,370 --> 02:07:00,410 >> Tots ells aconsegueixen combinar-se entre si en una sola programa anomenat, en aquest cas, hola. 2572 02:07:00,410 --> 02:07:03,141 Així que d'ara en endavant, ens limitarem utilitzar la paraula compilació. 2573 02:07:03,141 --> 02:07:06,390 I donarem per fet que quan diem, compilar el programa, és a dir, 2574 02:07:06,390 --> 02:07:08,849 Hey fer el pre-processament, muntatge, i la vinculació. 2575 02:07:08,849 --> 02:07:11,890 Però en realitat hi ha algunes coses sucoses passant allà sota de la campana. 2576 02:07:11,890 --> 02:07:13,723 I sobretot si sentir curiositat algun temps, 2577 02:07:13,723 --> 02:07:15,900 es pot començar a jugar al voltant d'aquest nivell inferior. 2578 02:07:15,900 --> 02:07:19,660 Però per ara, adonar-se que entre els robatoris de pilota per avui 2579 02:07:19,660 --> 02:07:23,420 són, senzillament, la inici d'un procés, 2580 02:07:23,420 --> 02:07:26,700 de sentir-se còmode amb una mena hola món. 2581 02:07:26,700 --> 02:07:29,575 De fet, la major part del que vam fer avui després, no s'enfonsarà en super ràpida. 2582 02:07:29,575 --> 02:07:31,491 I que prendrà algun temps, i una mica de pràctica. 2583 02:07:31,491 --> 02:07:33,864 I les probabilitats són, que va a classificar de voler colpejar el teclat 2584 02:07:33,864 --> 02:07:34,780 o cridar a la pantalla. 2585 02:07:34,780 --> 02:07:35,880 I tot això està bé. 2586 02:07:35,880 --> 02:07:38,320 Encara que, potser tracti de no fer-ho a la biblioteca tant. 2587 02:07:38,320 --> 02:07:40,820 >> I en última instància, se li ser capaços, però, per començar 2588 02:07:40,820 --> 02:07:44,580 veure patrons, tant en bon codi que has escrit i en errors 2589 02:07:44,580 --> 02:07:45,370 que vostè ha fet. 2590 02:07:45,370 --> 02:07:48,965 I de la mateixa manera que el procés de convertint en un TF o una CA és com, 2591 02:07:48,965 --> 02:07:51,590 vostè començarà a millorar i millor al veure aquests patrons, 2592 02:07:51,590 --> 02:07:53,774 i acaba de resoldre la seva propis problemes en última instància. 2593 02:07:53,774 --> 02:07:56,940 Mentrestant, hi haurà un munt de nosaltres per donar-li suport, i aconseguir que 2594 02:07:56,940 --> 02:07:57,481 a través d'aquest. 2595 02:07:57,481 --> 02:07:59,450 I en els escriptura-ups per a tots els problemes 2596 02:07:59,450 --> 02:08:01,366 serà guiat a través de tots els comandaments 2597 02:08:01,366 --> 02:08:05,330 que per cert, conec de molta pràctica per ara, 2598 02:08:05,330 --> 02:08:07,380 però podria haver volat sobre del cap per ara. 2599 02:08:07,380 --> 02:08:08,580 I això és totalment bé. 2600 02:08:08,580 --> 02:08:11,230 >> Però, en última instància, vas per començar a veure patrons emergeixen. 2601 02:08:11,230 --> 02:08:14,260 I un cop que passes tota la estúpids detalls, com parèntesis, 2602 02:08:14,260 --> 02:08:16,710 i claus, i punts i comes, i les coses, francament, 2603 02:08:16,710 --> 02:08:19,360 que no és en absolut intel·lectualment interessant. 2604 02:08:19,360 --> 02:08:22,690 I no és l'objectiu de prendre qualsevol classe d'introducció. 2605 02:08:22,690 --> 02:08:24,410 És les idees que es van a importar. 2606 02:08:24,410 --> 02:08:26,659 >> És els bucles, i el condicions i les funcions, 2607 02:08:26,659 --> 02:08:30,552 i amb més força l'abstracció, i la factorització de codi, 2608 02:08:30,552 --> 02:08:33,510 i el bon disseny i la bona estil, i en última instància la correcció 2609 02:08:33,510 --> 02:08:37,330 del seu codi, que és en última instància, importarà més. 2610 02:08:37,330 --> 02:08:40,925 Així que la setmana que ve, anem a prendre aquestes idees que vam veure per primer cop a Scratch 2611 02:08:40,925 --> 02:08:42,800 i ara s'han traduït a C. I anem a començar 2612 02:08:42,800 --> 02:08:45,740 per introduir la primera de les dominis del món real del curs. 2613 02:08:45,740 --> 02:08:50,140 >> Ens centrarem en el món de la seguretat, i més específicament la criptografia, 2614 02:08:50,140 --> 02:08:51,980 l'art de la codificació de la informació. 2615 02:08:51,980 --> 02:08:54,000 I entre els primers vostès el problema vostè mateix 2616 02:08:54,000 --> 02:08:56,840 s'arriba a escriure més enllà jugant amb alguns de la sintaxi 2617 02:08:56,840 --> 02:08:59,880 i la solució d'alguns lògica problemes, en última instància, en poc temps, 2618 02:08:59,880 --> 02:09:03,960 és en realitat per convertir o xifrar, i, finalment, desxifrar la informació. 2619 02:09:03,960 --> 02:09:06,470 I tot el que hem fet avui en dia, ho farà bastant baixa 2620 02:09:06,470 --> 02:09:09,190 nivell, és només va a permetre que prenguem un, i un, 2621 02:09:09,190 --> 02:09:13,550 i un pas més cap amunt escriure el codi més interessant encara. 2622 02:09:13,550 --> 02:09:15,050 >> Per tant més que la setmana que ve. 2623 02:09:15,050 --> 02:09:17,834 2624 02:09:17,834 --> 02:09:18,762 >> [REPRODUCCIÓ DE VÍDEO] 2625 02:09:18,762 --> 02:09:19,690 2626 02:09:19,690 --> 02:09:22,006 >> -Què Pot dir-me de l'última vegada que ho vas veure? 2627 02:09:22,006 --> 02:09:26,041 2628 02:09:26,041 --> 02:09:27,040 -Què Pot dir que, en realitat? 2629 02:09:27,040 --> 02:09:30,500 2630 02:09:30,500 --> 02:09:35,340 Vull dir, era com qualsevol altre assaig de preproducció, 2631 02:09:35,340 --> 02:09:40,510 excepte que no hi havia alguna cosa que va dir al final que em va quedar gravada. 2632 02:09:40,510 --> 02:09:44,810 2633 02:09:44,810 --> 02:09:46,640 >> -Aquest Va ser CS50. 2634 02:09:46,640 --> 02:09:49,440 2635 02:09:49,440 --> 02:09:52,190 >> -És Un tall de tot el món, gran treball en l'assaig. 2636 02:09:52,190 --> 02:09:53,070 >> El dinar de -això? 2637 02:09:53,070 --> 02:09:54,986 >> Sí, vostè i jo podem prendre un entrepà en una estona. 2638 02:09:54,986 --> 02:09:58,380 Em van deixar amb debrief David molt ràpidament. 2639 02:09:58,380 --> 02:09:59,160 David? 2640 02:09:59,160 --> 02:10:01,260 David? 2641 02:10:01,260 --> 02:10:03,110 >> [FI DE REPRODUCCIÓ]