1 00:00:00,000 --> 00:00:10,940 2 00:00:10,940 --> 00:00:13,060 >> DAVID J MALAN: Tutti a destra, quindi questo è CS50. 3 00:00:13,060 --> 00:00:15,040 E questo è chiaramente un Venerdì. 4 00:00:15,040 --> 00:00:16,850 E questa è la fine della prima settimana. 5 00:00:16,850 --> 00:00:21,020 Così si può ricordare che avevamo lasciato, l'ultima volta, con un cliffhanger di sorta. 6 00:00:21,020 --> 00:00:25,020 Per cui esponiamo questa menzogna, che non importa quello che hanno insegnato in crescita 7 00:00:25,020 --> 00:00:31,610 up, 1 diviso 10 non è, in Infatti, 0.1 o 0.100 o 0.10000. 8 00:00:31,610 --> 00:00:35,270 In realtà, se si compila questo programma, come abbiamo fatto ieri, con, 9 00:00:35,270 --> 00:00:39,770 fare imprecisioni, e poi fare punti, slash, imprecisioni, 10 00:00:39,770 --> 00:00:43,600 abbiamo appreso che questo è ciò che è 1 diviso 10 è in realtà. 11 00:00:43,600 --> 00:00:46,140 Quindi questo non è davvero il caso. 12 00:00:46,140 --> 00:00:49,014 Ma questo non fa accenno a un certo fondamentale limitazione dei computer. 13 00:00:49,014 --> 00:00:50,930 E infatti, tra la cose che stanno andando a fare 14 00:00:50,930 --> 00:00:55,130 oggi è dare un'occhiata a perché di questo dato successo, quali implicazioni questo ha, 15 00:00:55,130 --> 00:00:58,430 come l'umanità non è riuscita di cogliere questo in alcuni molto 16 00:00:58,430 --> 00:01:00,410 grave situations-- il risultato del quale 17 00:01:00,410 --> 00:01:03,141 è stato abbastanza tragico e expensive-- e anche 18 00:01:03,141 --> 00:01:04,849 dare un'occhiata a come si può effettivamente difendere 19 00:01:04,849 --> 00:01:06,530 contro questi tipi di limitazioni. 20 00:01:06,530 --> 00:01:10,940 Così intuitivamente, forse, perché è 1 diviso per 10, 21 00:01:10,940 --> 00:01:15,480 secondo il mio computer qui, non solo 1/10, 0.10? 22 00:01:15,480 --> 00:01:15,980 Già. 23 00:01:15,980 --> 00:01:16,530 Cosa ne pensi? 24 00:01:16,530 --> 00:01:17,860 >> Membro del pubblico: La radice è diverso? 25 00:01:17,860 --> 00:01:18,550 >> DAVID J MALAN: La cosa è? 26 00:01:18,550 --> 00:01:19,730 Oh, la radice è diverso? 27 00:01:19,730 --> 00:01:20,720 Quindi non del tutto. 28 00:01:20,720 --> 00:01:23,200 In realtà è più fondamentale per l'hardware. 29 00:01:23,200 --> 00:01:23,980 Altri pensieri? 30 00:01:23,980 --> 00:01:24,584 Già. 31 00:01:24,584 --> 00:01:26,750 Membro del pubblico: Si rappresentare i numeri in modo diverso? 32 00:01:26,750 --> 00:01:27,880 DAVID J MALAN: Quindi they-- destra. 33 00:01:27,880 --> 00:01:29,338 Essi rappresentano i numeri in modo diverso. 34 00:01:29,338 --> 00:01:30,700 Impreciso, a quanto pare. 35 00:01:30,700 --> 00:01:33,190 In modo che è-- Bene, diversamente da quanto? 36 00:01:33,190 --> 00:01:34,490 O da chi? 37 00:01:34,490 --> 00:01:35,050 Da noi? 38 00:01:35,050 --> 00:01:35,966 Membro del pubblico: Sì. 39 00:01:35,966 --> 00:01:38,930 Non usano la virgola sistema per [incomprensibile]. 40 00:01:38,930 --> 00:01:39,680 DAVID J MALAN: OK. 41 00:01:39,680 --> 00:01:41,560 Quindi, in un certo senso, non lo fanno utilizzare il sistema decimale. 42 00:01:41,560 --> 00:01:43,720 Sotto il cofano, tutto è, infatti, binario, 43 00:01:43,720 --> 00:01:45,510 e questo è relativo, appunto. 44 00:01:45,510 --> 00:01:48,135 Ma è ancora un semplice spiegazione di quello. 45 00:01:48,135 --> 00:01:48,635 Già. 46 00:01:48,635 --> 00:01:49,970 >> Membro del pubblico: Si hanno solo tanti bit. 47 00:01:49,970 --> 00:01:52,370 Essi possono memorizzare solo fino a un certo misura, come con i decimali. 48 00:01:52,370 --> 00:01:52,780 >> DAVID J MALAN: Sì. 49 00:01:52,780 --> 00:01:54,420 Questo è ciò che sta realmente arrivare a questo. 50 00:01:54,420 --> 00:01:57,180 Si scopre che i computer tipicamente, sarà sempre solo 51 00:01:57,180 --> 00:01:59,690 utilizzare una quantità limitata di informazioni per rappresentare qualcosa. 52 00:01:59,690 --> 00:01:59,870 Destra? 53 00:01:59,870 --> 00:02:02,110 Dopo tutto, abbiamo solo una fissa quantità di spazio su disco rigido. 54 00:02:02,110 --> 00:02:04,210 Abbiamo solo un importo fisso di RAM, o la memoria del computer. 55 00:02:04,210 --> 00:02:06,251 E se avete solo un importo fisso di qualcosa, 56 00:02:06,251 --> 00:02:09,611 sicuramente non si può effettivamente contare all'infinito o un qualsiasi numero che si desidera. 57 00:02:09,611 --> 00:02:11,610 Si, un po ', bisogna scegliere quale intervallo 58 00:02:11,610 --> 00:02:13,220 di valori che si vuole sostenere. 59 00:02:13,220 --> 00:02:18,100 >> E così, ad esempio, una settimana o due fa, quando abbiamo parlato di ASCII, 60 00:02:18,100 --> 00:02:21,610 e abbiamo parlato di 8 bit, o un byte, per così dire, 61 00:02:21,610 --> 00:02:26,360 il maggior numero potremmo rappresentare con 8 bit era quello? 62 00:02:26,360 --> 00:02:28,350 255. 63 00:02:28,350 --> 00:02:31,850 E possiamo rappresentare 256 valori totali ma non se spendiamo uno di loro 64 00:02:31,850 --> 00:02:34,190 su 0-- Bene, ma se ci trascorrere uno di loro su 0, 65 00:02:34,190 --> 00:02:36,830 poi il maggior numero è, naturalmente, 255. 66 00:02:36,830 --> 00:02:39,410 >> Così si scopre, che questo è il caso, in questo contesto. 67 00:02:39,410 --> 00:02:42,350 Abbiamo iniziato a parlare, l'ultima volta, su numeri in virgola mobile, che 68 00:02:42,350 --> 00:02:44,640 sono diverse da numeri interi, in che hanno un punto decimale 69 00:02:44,640 --> 00:02:47,056 e, si spera, alcuni numeri dopo che, ma sono troppo. 70 00:02:47,056 --> 00:02:51,730 Un computer è solo tipicamente andando di utilizzare 32 bit, forse 64 bit 71 00:02:51,730 --> 00:02:53,497 per rappresentare un valore in virgola mobile. 72 00:02:53,497 --> 00:02:56,080 Così, anche se siamo cresciuti apprendimento della matematica e conoscere 73 00:02:56,080 --> 00:02:58,750 che si può assolutamente avere un numero infinito di numeri 74 00:02:58,750 --> 00:03:01,650 dopo la virgola, non se si dispone di memoria finita. 75 00:03:01,650 --> 00:03:03,930 Si, un po ', è necessario arrotondare, o scegliere quali 76 00:03:03,930 --> 00:03:05,346 numeri che stanno andando a rappresentare. 77 00:03:05,346 --> 00:03:08,710 E così si può pensare, in un certo senso, questo è il computer più vicino 78 00:03:08,710 --> 00:03:14,050 approssimazione al valore che 1/10 si può ottenere, con solo 32 o giù di lì bit. 79 00:03:14,050 --> 00:03:15,300 E non è solo 1/10. 80 00:03:15,300 --> 00:03:19,820 >> Ad esempio, se cambio questo a 1/3, che riteniamo sia ancora più semplice. 81 00:03:19,820 --> 00:03:21,300 Quindi 1 diviso per 3. 82 00:03:21,300 --> 00:03:22,355 Permettetemi di salvare il file. 83 00:03:22,355 --> 00:03:24,680 Lasciami andare avanti e ricompilarlo. 84 00:03:24,680 --> 00:03:25,820 E lasciatemi nuovamente eseguirlo. 85 00:03:25,820 --> 00:03:30,000 Anche in questo caso, a quanto pare, un terzo non è 0.3 e quindi un numero infinito di 3 di 86 00:03:30,000 --> 00:03:30,770 da allora in poi. 87 00:03:30,770 --> 00:03:32,540 Hai questo imprecisione alla fine. 88 00:03:32,540 --> 00:03:35,544 Così noi esseri umani siano corrette, e che cosa si è appreso è, infatti, corretto, 89 00:03:35,544 --> 00:03:37,460 ma stiamo urtando contro alcune limitazioni. 90 00:03:37,460 --> 00:03:39,420 >> E quello che ho pensato faremmo oggi, si comincia 91 00:03:39,420 --> 00:03:42,190 cercando in, francamente, il tragiche conseguenze di questo 92 00:03:42,190 --> 00:03:45,490 a volte, quando l'umanità non abbastanza implementare 93 00:03:45,490 --> 00:03:48,460 per questa realtà e queste limitazioni. 94 00:03:48,460 --> 00:03:52,360 E vedremo una serie di vignette dalla History Channel che prende 95 00:03:52,360 --> 00:03:53,950 uno sguardo a come le cose sono andate male. 96 00:03:53,950 --> 00:03:56,340 E 'lunga circa 8 minuti, e ci torneremo dopo questo 97 00:03:56,340 --> 00:03:59,439 e dare un'occhiata a esattamente che altro può andare storto. 98 00:03:59,439 --> 00:04:00,605 Se potessimo abbassare il lights-- 99 00:04:00,605 --> 00:04:02,350 >> [RIPRODUZIONE VIDEO] 100 00:04:02,350 --> 00:04:06,310 >> -Computers, Tutti abbiamo imparato ad accettare i problemi spesso frustranti che 101 00:04:06,310 --> 00:04:07,750 andare con loro. 102 00:04:07,750 --> 00:04:11,370 Bugs, virus e software glitch sono piccoli prezzi 103 00:04:11,370 --> 00:04:13,230 a pagare per la comodità. 104 00:04:13,230 --> 00:04:17,519 Ma in alta tecnologia e ad alta velocità applicazioni del programma spaziale militare e, 105 00:04:17,519 --> 00:04:22,130 il più piccolo problema può essere ingrandita nel disastro. 106 00:04:22,130 --> 00:04:27,750 Il 4 giugno del 1996, gli scienziati preparati per lanciare un razzo Ariane 5 senza equipaggio. 107 00:04:27,750 --> 00:04:29,890 Trasportava scientifico satelliti progettati 108 00:04:29,890 --> 00:04:33,030 stabilire precise modalità Interagisce campo magnetico della Terra 109 00:04:33,030 --> 00:04:35,600 con venti solari. 110 00:04:35,600 --> 00:04:37,930 Il razzo è stato costruito per l'Agenzia spaziale europea 111 00:04:37,930 --> 00:04:41,620 e sollevato dal suo stabilimento sulla costa della Guyana francese. 112 00:04:41,620 --> 00:04:44,924 >> -E Circa 30 secondi in il volo, in primo luogo 113 00:04:44,924 --> 00:04:46,340 qualcosa notato non andava. 114 00:04:46,340 --> 00:04:49,280 Che gli ugelli sono stati orientabili in un modo che davvero non dovrebbe. 115 00:04:49,280 --> 00:04:53,042 Circa 40 secondi dall'inizio del volo, chiaramente il veicolo era in difficoltà, 116 00:04:53,042 --> 00:04:55,250 e che, quando hanno fatto la decisione di distruggerla. 117 00:04:55,250 --> 00:04:58,970 A Sicurezza Range Officer con tremende budella preme il pulsante, 118 00:04:58,970 --> 00:05:03,940 fatto saltare in aria il razzo prima che potesse diventare un pericolo per la sicurezza pubblica. 119 00:05:03,940 --> 00:05:06,600 >> -Questo Era la fanciulla viaggio di Ariane 5, 120 00:05:06,600 --> 00:05:09,270 e la sua distruzione prese collocare causa di un difetto 121 00:05:09,270 --> 00:05:10,992 incorporato nel software del razzo. 122 00:05:10,992 --> 00:05:12,700 -Il Problema sul Ariane era che non 123 00:05:12,700 --> 00:05:15,370 era un numero che richiedeva 64 bit per esprimere, 124 00:05:15,370 --> 00:05:18,150 e voleva convertire per un numero a 16 bit. 125 00:05:18,150 --> 00:05:21,160 Si presume che il numero non è mai sta per essere molto grande, 126 00:05:21,160 --> 00:05:25,020 che la maggior parte di tali cifre in il numero a 64 bit erano 0 di. 127 00:05:25,020 --> 00:05:26,310 Si sbagliavano. 128 00:05:26,310 --> 00:05:28,680 >> -La Incapacità di uno programma software per accettare 129 00:05:28,680 --> 00:05:32,820 il tipo di numero generato dal un altro era alla base del fallimento. 130 00:05:32,820 --> 00:05:37,190 Lo sviluppo del software era diventato un parte molto costosa delle nuove tecnologie. 131 00:05:37,190 --> 00:05:40,760 L'Ariane 4 razzo era stato molto successo, tanto del software 132 00:05:40,760 --> 00:05:43,990 creato per era anche utilizzato sulla Ariane 5. 133 00:05:43,990 --> 00:05:49,750 >> -Il Problema di fondo era che il Ariane 5 è stato più veloce, accelerato velocemente. 134 00:05:49,750 --> 00:05:53,000 E il software non ha avuto spiega che cosa. 135 00:05:53,000 --> 00:05:56,330 >> -La Distruzione del razzo è stato un grande disastro finanziario, 136 00:05:56,330 --> 00:05:59,670 tutto a causa di un errore di software minuto. 137 00:05:59,670 --> 00:06:01,990 Ma questo non era il primo problemi di conversione dei dati in tempo 138 00:06:01,990 --> 00:06:05,310 aveva afflitto moderna tecnologia dei razzi. 139 00:06:05,310 --> 00:06:08,300 >> -In 1991 con l'avvio della prima guerra del Golfo, 140 00:06:08,300 --> 00:06:10,650 il missile Patriot sperimentato un simile tipo 141 00:06:10,650 --> 00:06:12,650 di problema numero di conversione. 142 00:06:12,650 --> 00:06:15,620 Come risultato, 28 persone, 28 soldati americani 143 00:06:15,620 --> 00:06:18,440 sono stati uccisi e circa Altri 100 feriti, 144 00:06:18,440 --> 00:06:21,900 quando il Patriot, che avrebbe dovuto per la protezione contro Scuds arrivo, 145 00:06:21,900 --> 00:06:24,630 omesso di sparare un missile. 146 00:06:24,630 --> 00:06:29,440 >> -Quando Iraq invase il Kuwait e l'America Desert Storm lanciato all'inizio del 1991, 147 00:06:29,440 --> 00:06:33,800 Batterie di missili Patriot sono stati schierati per proteggere l'Arabia Saudita e Israele 148 00:06:33,800 --> 00:06:37,000 da attacchi missilistici iracheni Scud. 149 00:06:37,000 --> 00:06:40,610 La Patriot è una degli Stati Uniti, a medio raggio terra-aria del sistema 150 00:06:40,610 --> 00:06:43,010 prodotto dalla società Raytheon. 151 00:06:43,010 --> 00:06:49,080 >> -La Dimensione del intercettore Patriot, in sé, è di circa, lungo circa 20 piedi. 152 00:06:49,080 --> 00:06:51,250 E pesa circa 2000 chili. 153 00:06:51,250 --> 00:06:55,195 E porta una testata di about-- Penso che sia più o meno 150 libbre. 154 00:06:55,195 --> 00:06:59,500 E la testata, in sé, è un alto esplosivo, 155 00:06:59,500 --> 00:07:02,570 che ha frammenti intorno ad esso. 156 00:07:02,570 --> 00:07:06,890 L'involucro della testata è progettato per agire come pallettoni. 157 00:07:06,890 --> 00:07:09,130 >> -Le Missili sono trasportato, 4 per contenitore, 158 00:07:09,130 --> 00:07:12,080 e sono trasportati da un semirimorchio. 159 00:07:12,080 --> 00:07:19,100 >> -Il Sistema missilistico contro Patriot risale almeno 20 anni. 160 00:07:19,100 --> 00:07:22,320 È stato originariamente progettato come missilistico di difesa aerea 161 00:07:22,320 --> 00:07:24,180 di abbattere gli aerei nemici. 162 00:07:24,180 --> 00:07:27,860 Nella prima guerra del Golfo, quando quella guerra è arrivato, 163 00:07:27,860 --> 00:07:32,745 l'esercito ha voluto usarlo per abbattere Scud, non aerei. 164 00:07:32,745 --> 00:07:36,150 La Forza iracheno non era tanto di un problema, 165 00:07:36,150 --> 00:07:39,110 ma l'esercito era preoccupato per Scud. 166 00:07:39,110 --> 00:07:42,340 E così hanno cercato di aggiornare il Patriot. 167 00:07:42,340 --> 00:07:44,760 >> -Intercepting Un nemico missile viaggia a mach cinque 168 00:07:44,760 --> 00:07:47,250 stava per essere abbastanza impegnativo. 169 00:07:47,250 --> 00:07:50,000 Ma quando il Patriot è stato ricoverato in servizio, 170 00:07:50,000 --> 00:07:54,030 l'esercito non era a conoscenza di un Modifica iracheno che ha fatto 171 00:07:54,030 --> 00:07:56,840 loro Scud quasi impossibile da colpire. 172 00:07:56,840 --> 00:08:01,020 >> -Che È successo, è il Scud che stavano arrivando in, erano instabili, 173 00:08:01,020 --> 00:08:02,310 sono stati dondolavano. 174 00:08:02,310 --> 00:08:05,140 La ragione di questo, era gli iracheni, al fine 175 00:08:05,140 --> 00:08:09,450 per ottenere 600 chilometri fuori una gamma missile 300 km, 176 00:08:09,450 --> 00:08:12,930 ha preso peso fuori dalla testata anteriore e fatto la testata più leggero. 177 00:08:12,930 --> 00:08:17,710 Così ora, il Patriot sta cercando di venire al scud, e la maggior parte del tempo, 178 00:08:17,710 --> 00:08:21,700 la stragrande maggioranza della tempo, sarebbe solo volare dal scud. 179 00:08:21,700 --> 00:08:25,700 >> -Una Volta i gestori del sistema Patriot ha realizzato il Patriot mancato il suo obiettivo, 180 00:08:25,700 --> 00:08:29,790 hanno fatto esplodere testata del Patriot, al fine di evitare eventuali perdite se esso 181 00:08:29,790 --> 00:08:32,380 è stato permesso di cadere a terra. 182 00:08:32,380 --> 00:08:36,340 >> -Che Era quello che la maggior parte la gente ha visto, quei grandi palle di fuoco nel cielo, 183 00:08:36,340 --> 00:08:41,289 e frainteso come intercettazioni di testate Scud. 184 00:08:41,289 --> 00:08:43,590 Sebbene nella notte cieli, Patriots apparso 185 00:08:43,590 --> 00:08:47,020 per essere con successo distruggendo Scud, a Dhahran, 186 00:08:47,020 --> 00:08:49,730 ci potrebbe essere nessun errore sulle sue prestazioni. 187 00:08:49,730 --> 00:08:53,990 Lì, il sistema radar del Patriot perso le tracce di un Scud in arrivo, 188 00:08:53,990 --> 00:08:56,650 e mai lanciato, a causa di un difetto software. 189 00:08:56,650 --> 00:08:59,650 190 00:08:59,650 --> 00:09:04,100 Era gli israeliani che per primo ha scoperto che quanto più il sistema era acceso, 191 00:09:04,100 --> 00:09:07,510 maggiore è il tempo di discrepanza è diventato, a causa di un orologio incorporato 192 00:09:07,510 --> 00:09:09,490 nel computer del sistema. 193 00:09:09,490 --> 00:09:12,670 >> -circa Due settimane prima la tragedia di Dhahran, 194 00:09:12,670 --> 00:09:15,010 gli israeliani segnalato per il Dipartimento della Difesa, 195 00:09:15,010 --> 00:09:17,940 che il sistema perdeva tempo, che dopo circa 8 ore di funzionamento, 196 00:09:17,940 --> 00:09:21,410 hanno notato che il sistema era diventando decisamente meno accurata. 197 00:09:21,410 --> 00:09:25,290 Il Dipartimento della Difesa ha risposto raccontando tutte le batterie Patriot 198 00:09:25,290 --> 00:09:28,070 di non lasciare il sistema per molto tempo. 199 00:09:28,070 --> 00:09:29,960 Non hanno mai detto quello che da molto tempo è stato. 200 00:09:29,960 --> 00:09:30,460 8 ore? 201 00:09:30,460 --> 00:09:30,960 10 ore? 202 00:09:30,960 --> 00:09:31,870 1000 ore? 203 00:09:31,870 --> 00:09:33,734 Nessuno sapeva. 204 00:09:33,734 --> 00:09:35,650 -la Batteria Patriot di stanza presso la caserma 205 00:09:35,650 --> 00:09:40,410 a Dhahran, e la sua viziata interna orologio, era stato su più di 100 ore 206 00:09:40,410 --> 00:09:43,041 la notte del 25 febbraio. 207 00:09:43,041 --> 00:09:47,416 >> -E Monitorati tempo con una precisione di circa 1/10 di secondo. 208 00:09:47,416 --> 00:09:49,290 Ora 1/10 di secondo è un numero interessante 209 00:09:49,290 --> 00:09:52,700 perché non può essere espresso in binario, esattamente. 210 00:09:52,700 --> 00:09:54,820 Il che significa, non può essere espressa, appunto, 211 00:09:54,820 --> 00:09:57,420 in qualsiasi moderno computer digitale. 212 00:09:57,420 --> 00:10:01,460 E 'difficile da credere, ma utilizzare questo come esempio. 213 00:10:01,460 --> 00:10:03,520 Prendiamo il numero, 1/3. 214 00:10:03,520 --> 00:10:07,110 1/3 non possono essere espresse in decimale, esattamente. 215 00:10:07,110 --> 00:10:11,490 1/3 è 0.333 in corso per l'infinito. 216 00:10:11,490 --> 00:10:15,486 Non c'è modo di farlo, con precisione assoluta, in decimale. 217 00:10:15,486 --> 00:10:18,360 E 'esattamente lo stesso tipo di problema che è accaduto nel Patriot. 218 00:10:18,360 --> 00:10:22,510 Più a lungo il sistema ha funzionato, il peggio l'errore tempo è diventato. 219 00:10:22,510 --> 00:10:28,420 >> -Dopo 100 ore di funzionamento, l'errore in tempo era solo circa 1/3 di secondo. 220 00:10:28,420 --> 00:10:31,830 Ma in termini di targeting per un missile viaggia a mach 5, 221 00:10:31,830 --> 00:10:35,890 si è tradotto in un inseguimento Errore di oltre 600 metri. 222 00:10:35,890 --> 00:10:38,970 Sarebbe un errore fatale per i soldati a Dhahran. 223 00:10:38,970 --> 00:10:45,035 >> -Che Cosa è successo, è un lancio Scud era rilevato dai satelliti di allarme rapido, 224 00:10:45,035 --> 00:10:48,930 e di nuovo che la Scud era arrivando nella loro direzione generale. 225 00:10:48,930 --> 00:10:51,170 Non sapevano dove venisse. 226 00:10:51,170 --> 00:10:53,990 >> -Era Ora fino al radar componente del sistema Patriot, 227 00:10:53,990 --> 00:10:58,520 difendendo Dhahran, per individuare e mantenere traccia del missile nemico in arrivo. 228 00:10:58,520 --> 00:10:59,690 >> -Il Radar era molto intelligente. 229 00:10:59,690 --> 00:11:01,710 Sarebbe davvero traccia la posizione del Scud 230 00:11:01,710 --> 00:11:04,040 e poi prevedere dove probabilmente sarebbe, 231 00:11:04,040 --> 00:11:06,140 la volta successiva, la radar inviato un impulso. 232 00:11:06,140 --> 00:11:07,660 Che è stato chiamato il cancello gamma. 233 00:11:07,660 --> 00:11:11,870 >> -Poi, Una volta che il Patriot decide abbastanza tempo ha 234 00:11:11,870 --> 00:11:16,280 passato a tornare indietro e controllare il prossimo posizione per questo oggetto rilevato, 235 00:11:16,280 --> 00:11:17,280 risale. 236 00:11:17,280 --> 00:11:21,690 Così, quando si tornò al sbagliato posto, poi vede nessun oggetto 237 00:11:21,690 --> 00:11:25,230 e decide che non c'era oggetto, si trattava di un falso rilevamento, 238 00:11:25,230 --> 00:11:26,650 e scende in pista. 239 00:11:26,650 --> 00:11:29,690 Il Scud entrata scomparso dallo schermo radar, 240 00:11:29,690 --> 00:11:32,670 ei secondi più tardi, sbattuto nella fortezza. 241 00:11:32,670 --> 00:11:38,100 Il Scud ha ucciso 28 e fu l'ultima uno sparato durante la prima guerra del Golfo. 242 00:11:38,100 --> 00:11:43,460 Tragicamente, il software aggiornato arrivati ​​a Dhahran il giorno seguente. 243 00:11:43,460 --> 00:11:46,150 Il difetto del software aveva stato, chiusura fisso 244 00:11:46,150 --> 00:11:48,940 un capitolo nella travagliata la storia del missile Patriot. 245 00:11:48,940 --> 00:11:50,220 >> [FINE RIPRODUZIONE] 246 00:11:50,220 --> 00:11:54,340 >> DAVID J MALAN: quindi dovremo dare un'occhiata a alcune limitazioni simili in appena un po '. 247 00:11:54,340 --> 00:11:58,470 Ma prima, andiamo transizione ad alcuni è FYI. 248 00:11:58,470 --> 00:12:01,575 Così tra-- questo fine settimana, ci sarà sezioni eccellenti, 249 00:12:01,575 --> 00:12:04,200 che hanno lo scopo di soppiantare sezioni regolari, che 250 00:12:04,200 --> 00:12:05,460 avvierà una settimana da qui. 251 00:12:05,460 --> 00:12:08,204 Date un'occhiata al sito web del CS50 Per ulteriori informazioni su quelli. 252 00:12:08,204 --> 00:12:11,120 Inoltre saranno filmate e in streaming vivere per coloro che non possono partecipare. 253 00:12:11,120 --> 00:12:12,980 Problema 1 è impostato sulla sito web già del corso, 254 00:12:12,980 --> 00:12:15,105 e daremo uno sguardo a che in appena un po '. 255 00:12:15,105 --> 00:12:18,350 E le ore di ufficio troppo, avrà collocare questo Lunedi al Giovedi. 256 00:12:18,350 --> 00:12:20,960 >> Quindi questa è stata la più canonica programma abbiamo guardato l'ultima volta. 257 00:12:20,960 --> 00:12:23,590 E 'come il più semplice programma è possibile scrivere in C, 258 00:12:23,590 --> 00:12:25,250 e anche questo è un po 'di un'affermazione audace. 259 00:12:25,250 --> 00:12:25,750 Destra? 260 00:12:25,750 --> 00:12:28,070 Perché ci sono un sacco di apparente complessità di questo. 261 00:12:28,070 --> 00:12:30,445 Quindi, diamo un rapido sguardo a ciò che alcuni di questi elementi 262 00:12:30,445 --> 00:12:33,080 erano e poi cercare di fornire un modello mentale di come 263 00:12:33,080 --> 00:12:35,710 questi semplice dei programmi Lavoriamo, e poi inizieremo 264 00:12:35,710 --> 00:12:38,050 guardare le cose sempre più complesso. 265 00:12:38,050 --> 00:12:41,280 Così questa linea qui, ha sottolineato oggi, in giallo, quello che abbiamo detto, l'ultima volta, 266 00:12:41,280 --> 00:12:43,200 che questo fa per noi? 267 00:12:43,200 --> 00:12:45,220 Qual è lo scopo serve? 268 00:12:45,220 --> 00:12:46,984 Chiunque da più indietro? 269 00:12:46,984 --> 00:12:47,483 Già. 270 00:12:47,483 --> 00:12:48,649 >> Membro del pubblico: [incomprensibile] 271 00:12:48,649 --> 00:12:50,871 272 00:12:50,871 --> 00:12:51,704 DAVID J MALAN: Good. 273 00:12:51,704 --> 00:12:53,537 Così si dà l'accesso ai comandi, o facciamo 274 00:12:53,537 --> 00:12:56,750 li chiamano funzioni, che qualcuno altro ha scritto, che vengono dichiarati, 275 00:12:56,750 --> 00:12:58,350 per così dire, in un altro file. 276 00:12:58,350 --> 00:13:02,370 Quindi vedremo esattamente ciò che un file .h è contro un file .c, alla fine. 277 00:13:02,370 --> 00:13:04,710 Ma per ora, è sufficiente sapere printf che, per esempio, 278 00:13:04,710 --> 00:13:08,370 è tra le funzioni che sono state dichiarato in qualche altro file, da qualche parte 279 00:13:08,370 --> 00:13:12,930 altro sul disco fisso del nube che ci permette di accedere printf e usiamo 280 00:13:12,930 --> 00:13:15,240 senza dover reinventare che ruota noi stessi. 281 00:13:15,240 --> 00:13:16,930 Nel frattempo, principale. 282 00:13:16,930 --> 00:13:19,690 Qual è stato l'analogo di principale, la settimana scorsa? 283 00:13:19,690 --> 00:13:20,190 Già. 284 00:13:20,190 --> 00:13:21,460 >> Membro del pubblico: Bandiera verde viene cliccato. 285 00:13:21,460 --> 00:13:21,740 >> DAVID J MALAN: Sì. 286 00:13:21,740 --> 00:13:23,490 Scratch, quando la bandiera verde cliccato. 287 00:13:23,490 --> 00:13:25,560 E 'come il pezzo del puzzle che prende il via le cose. 288 00:13:25,560 --> 00:13:28,306 E così allo stesso modo, ha fatto il mondo deciso alcuni anni fa che in C, 289 00:13:28,306 --> 00:13:30,930 e un mucchio di altre lingue, se si vuole scrivere un programma, 290 00:13:30,930 --> 00:13:33,410 la tua prima funzione deve essere chiamato, principale. 291 00:13:33,410 --> 00:13:34,641 E deve apparire così. 292 00:13:34,641 --> 00:13:36,640 Ma ci torneremo, un'altra volta, a quello che, int, 293 00:13:36,640 --> 00:13:38,690 e, vuoto, significa in questo contesto. 294 00:13:38,690 --> 00:13:42,860 Per ora, le parentesi graffe sono gentili di come forma di puzzle di Scratch 295 00:13:42,860 --> 00:13:45,080 che incapsula alcune numero di linee. 296 00:13:45,080 --> 00:13:47,070 E tra le linee qui, è questa qui. 297 00:13:47,070 --> 00:13:51,610 printf è una funzione in cui scopo la vita è per stampare una stringa formattata. 298 00:13:51,610 --> 00:13:55,010 E per formattato, vi intendo può inserire valori segnaposto, 299 00:13:55,010 --> 00:13:58,360 ed è possibile specificare il numero di decimali punti, quanti numeri da stampare 300 00:13:58,360 --> 00:14:00,040 dopo un punto decimale e simili. 301 00:14:00,040 --> 00:14:05,040 E printf, naturalmente, prende uno o più argomenti o parametri, 302 00:14:05,040 --> 00:14:06,770 altrimenti noto, più semplicemente, come ingressi. 303 00:14:06,770 --> 00:14:09,230 >> Così printf, come un sacco di funzioni, prende input. 304 00:14:09,230 --> 00:14:12,730 E questi ingressi sono abbracciati dai due parentesi qui. 305 00:14:12,730 --> 00:14:15,180 E all'interno di queste è un ingresso. 306 00:14:15,180 --> 00:14:18,600 Si tratta di una stringa, come l'abbiamo chiamato, che è solo una sequenza di caratteri, 307 00:14:18,600 --> 00:14:22,310 come una parola o una frase o un intero saggio anche, tra doppi apici. 308 00:14:22,310 --> 00:14:25,712 Ed è quello che sta per influenzare il comportamento di printf perché, naturalmente, 309 00:14:25,712 --> 00:14:27,170 è solo una funzione di stampa generica. 310 00:14:27,170 --> 00:14:29,600 Non è intenzione di sapere che cosa per la stampa, a meno che non gli si dice. 311 00:14:29,600 --> 00:14:31,000 E poi, un po 'minuzie. 312 00:14:31,000 --> 00:14:34,056 Cosa abbiamo detto questo strano sequenza di simboli è? 313 00:14:34,056 --> 00:14:34,556 Già. 314 00:14:34,556 --> 00:14:35,410 >> Membro del pubblico: Nuova linea. 315 00:14:35,410 --> 00:14:35,990 >> DAVID J MALAN: Nuova linea. 316 00:14:35,990 --> 00:14:39,340 Così si scopre, non si può semplicemente colpire, entrare, quando si scrive il programma. 317 00:14:39,340 --> 00:14:42,590 In generale, il compilatore sta per arrivare un po 'confuso su quello che vuoi dire. 318 00:14:42,590 --> 00:14:45,340 Piuttosto, si deve letteralmente dire, dammi una nuova linea di qui. 319 00:14:45,340 --> 00:14:49,506 E così / n è ciò che generalmente chiamare un carattere di escape. 320 00:14:49,506 --> 00:14:50,870 Così n, per la nuova linea. 321 00:14:50,870 --> 00:14:53,810 E il compilatore sa che quando vede / n, 322 00:14:53,810 --> 00:14:57,420 dovrebbe effettivamente indurre il computer, in definitiva, o printf, in questo caso, 323 00:14:57,420 --> 00:15:00,260 per stampare un nuovo reale la linea, come colpire la, entrare, 324 00:15:00,260 --> 00:15:01,480 sulla tastiera. 325 00:15:01,480 --> 00:15:05,620 E, infine, che cosa ha fatto che diciamo questo pezzo di sintassi è per? 326 00:15:05,620 --> 00:15:06,591 Cosa rappresenta? 327 00:15:06,591 --> 00:15:07,090 Già. 328 00:15:07,090 --> 00:15:07,490 >> Membro del pubblico: [incomprensibile] 329 00:15:07,490 --> 00:15:08,660 >> DAVID J MALAN: E 'solo la fine della linea. 330 00:15:08,660 --> 00:15:09,909 E 'la fine dell'istruzione. 331 00:15:09,909 --> 00:15:11,890 E rendersi conto che non lo facciamo metterli ovunque. 332 00:15:11,890 --> 00:15:13,900 Noi certamente non li mettiamo alle estremità di ogni linea. 333 00:15:13,900 --> 00:15:16,680 Ad esempio, non c'è nessuno sulla prima linea, non c'è nessuno sulla linea 334 00:15:16,680 --> 00:15:18,680 con, principale, non c'è nessuno dopo le parentesi graffe, 335 00:15:18,680 --> 00:15:21,740 ma potrai iniziare a vedere e ottenere familiarità con cui viene chiamato per. 336 00:15:21,740 --> 00:15:26,014 Ed è quasi sempre dopo una funzione chiamare o una dichiarazione, qualche azione 337 00:15:26,014 --> 00:15:27,180 che si sta effettivamente prendendo. 338 00:15:27,180 --> 00:15:29,520 >> E sapere adesso, soprattutto se tra quelli meno confortevole, 339 00:15:29,520 --> 00:15:32,540 questi sono i tipi di cose stupide che si finirà per sbattere accidentalmente 340 00:15:32,540 --> 00:15:33,873 la testa contro il muro sopra. 341 00:15:33,873 --> 00:15:36,107 Perché sarete logicamente fiducioso in qualche problema 342 00:15:36,107 --> 00:15:38,440 hai risolto per un problema set, e il dannato appena 343 00:15:38,440 --> 00:15:40,187 non compilare o addirittura correre. 344 00:15:40,187 --> 00:15:43,270 E così spesso, nella fase iniziale, sta andando a essere, perché vi siete persi una parentesi, 345 00:15:43,270 --> 00:15:44,455 o ti sei perso un punto e virgola. 346 00:15:44,455 --> 00:15:46,547 E quindi basta essere consapevoli di questo tipo di cose, 347 00:15:46,547 --> 00:15:49,380 e cercare di non avere frustrato da loro, perché fa molto rapidamente questo 348 00:15:49,380 --> 00:15:50,640 diventare vecchio cappello. 349 00:15:50,640 --> 00:15:53,910 Ma è molto facile da ottenere frustrati presto, come risultato. 350 00:15:53,910 --> 00:15:57,020 >> Così ora, diamo uno sguardo a come questa linea è in realtà di lavoro 351 00:15:57,020 --> 00:15:59,170 e poi guardare un po ' uno più complicato. 352 00:15:59,170 --> 00:16:02,017 Così abbiamo qui, la capacità di disegnare sullo schermo. 353 00:16:02,017 --> 00:16:04,100 E supponiamo che questo è il mio schermo del computer, 354 00:16:04,100 --> 00:16:08,589 ma sto scrivendo il, ciao del programma, e non ho implementato, printf. 355 00:16:08,589 --> 00:16:10,130 Qualcun altro ha implementato, printf. 356 00:16:10,130 --> 00:16:12,420 Chi volesse pretendere di hanno attuato, printf? 357 00:16:12,420 --> 00:16:12,920 Se possiamo? 358 00:16:12,920 --> 00:16:13,830 Va bene, come ti chiami? 359 00:16:13,830 --> 00:16:14,155 >> STUDENTE 1: [? Copal. ?] 360 00:16:14,155 --> 00:16:15,529 >> DAVID J MALAN: Copal, andiamo su. 361 00:16:15,529 --> 00:16:16,430 Vieni su. 362 00:16:16,430 --> 00:16:17,070 Tutto ok. 363 00:16:17,070 --> 00:16:22,260 Così abbiamo, qui, alcune etichette nome, dato che faremo un piccolo gioco di questo. 364 00:16:22,260 --> 00:16:26,270 E chiameremo voi, printf. 365 00:16:26,270 --> 00:16:30,170 E se volete venire qui, quello che ho appena disegnato sullo schermo, 366 00:16:30,170 --> 00:16:32,340 è abbastanza semplice, ci sono io, questo. 367 00:16:32,340 --> 00:16:35,550 >> Va bene, allora, ciao il mio nome è, printf, se volete mettere che su. 368 00:16:35,550 --> 00:16:35,740 Tutto ok. 369 00:16:35,740 --> 00:16:37,360 E se si può andare Stand da schermo del computer 370 00:16:37,360 --> 00:16:39,730 come se si è la funzione che è venuto con questo sistema di computer. 371 00:16:39,730 --> 00:16:42,063 E il vostro scopo nella vita è stampare in realtà qualcosa. 372 00:16:42,063 --> 00:16:44,560 Ma proprio come il programma che appena avuto sullo schermo, qui, 373 00:16:44,560 --> 00:16:47,060 stiamo andando ad avere per effettivamente dare qualche input. 374 00:16:47,060 --> 00:16:51,810 >> E così, se il mio ingresso, qui, è a quanto pare, ciò che è passato a printf, 375 00:16:51,810 --> 00:16:53,730 cerchiamo di tipo di beffe in su come questo. 376 00:16:53,730 --> 00:16:58,720 Ho intenzione di scrivere letteralmente un pezzo di carta, "ciao, mondo" 377 00:16:58,720 --> 00:17:03,020 backslash N. E per essere chiari, cosa Ho appena disegnato su questo pezzo di carta, 378 00:17:03,020 --> 00:17:04,020 assomiglia a questo. 379 00:17:04,020 --> 00:17:08,730 Così, quando ho eseguito questo programma, e questo linea gialla di codice viene eseguito, 380 00:17:08,730 --> 00:17:12,970 è come se io, il programma ciao, sto consegnando alcuni input via a una funzione 381 00:17:12,970 --> 00:17:13,970 che qualcun altro ha scritto. 382 00:17:13,970 --> 00:17:16,595 >> E se si, con il dito, potrebbe in realtà, con il dito, 383 00:17:16,595 --> 00:17:21,520 disegnare sullo schermo qualunque è vi è stato consegnato, 384 00:17:21,520 --> 00:17:27,465 l'effetto, in ultima analisi, è quello vedere esattamente che, sullo schermo. 385 00:17:27,465 --> 00:17:29,140 E un caso piccolo angolo qui. 386 00:17:29,140 --> 00:17:31,540 E bene, non dobbiamo vedere la, nuova linea, a questo punto. 387 00:17:31,540 --> 00:17:33,900 Non sarebbe corretto per voi disegnare esplicitamente il ritorno a capo. 388 00:17:33,900 --> 00:17:36,810 Ma se abbiamo continuato a scrivere parole sulla schermo, si finirebbe sotto quella. 389 00:17:36,810 --> 00:17:39,560 >> Quindi vi ringrazio molto, ma bastone in giro qui solo per un momento. 390 00:17:39,560 --> 00:17:42,860 Ora abbiamo bisogno di un altro volontario, se potessimo, 391 00:17:42,860 --> 00:17:46,830 che sta andando ad avere bisogno di giocare il ruolo di-- E 'solo le persone in orchestra 392 00:17:46,830 --> 00:17:47,355 adesso. 393 00:17:47,355 --> 00:17:47,980 Come about-- OK. 394 00:17:47,980 --> 00:17:48,480 Giusto qui. 395 00:17:48,480 --> 00:17:49,180 Vieni su. 396 00:17:49,180 --> 00:17:49,955 Come ti chiami? 397 00:17:49,955 --> 00:17:50,922 >> STUDENTE 2: [? Ivay. ?] 398 00:17:50,922 --> 00:17:51,796 DAVID J MALAN: Siamo spiacenti? 399 00:17:51,796 --> 00:17:52,990 STUDENTE 2: [? Ivay. ?] 400 00:17:52,990 --> 00:17:55,320 DAVID J MALAN: Ethan, andiamo su. 401 00:17:55,320 --> 00:17:55,820 No? 402 00:17:55,820 --> 00:17:58,390 Ho ricevuto che sbagliato, anche dopo aver detto che due volte? 403 00:17:58,390 --> 00:17:58,890 Vieni su. 404 00:17:58,890 --> 00:18:00,030 E 'difficile sentire qui. 405 00:18:00,030 --> 00:18:05,240 406 00:18:05,240 --> 00:18:05,740 OK. 407 00:18:05,740 --> 00:18:07,190 E mi dispiace, come ti chiami? 408 00:18:07,190 --> 00:18:07,680 >> STUDENTE 2: [? Ivay. ?] 409 00:18:07,680 --> 00:18:08,790 >> [? DAVID J MALAN: Ivay. ?] OK. 410 00:18:08,790 --> 00:18:10,430 Per ora, se non mente, si sta getString. 411 00:18:10,430 --> 00:18:11,013 >> STUDENTE 2: OK. 412 00:18:11,013 --> 00:18:11,797 Cool. 413 00:18:11,797 --> 00:18:14,630 DAVID J MALAN: Quindi, se volete di stare qui solo per un momento, 414 00:18:14,630 --> 00:18:17,100 diamo un'occhiata a un po ' altro programma complesso, che 415 00:18:17,100 --> 00:18:18,670 ora ha tre linee di codice. 416 00:18:18,670 --> 00:18:24,080 Così abbiamo, una, affermare il proprio nome utilizzando printf; due, una chiamata a GetString, 417 00:18:24,080 --> 00:18:28,060 seguita da un'assegnazione di un variabile chiamata, stringa s, o chiamato s; 418 00:18:28,060 --> 00:18:31,260 e poi un'altra chiamata a, printf, ma questa volta con due ingressi. 419 00:18:31,260 --> 00:18:33,646 >> Stato così abbiamo già fatto il tuo nome, o meglio, ci siamo 420 00:18:33,646 --> 00:18:34,770 già fatto una chiamata printf. 421 00:18:34,770 --> 00:18:38,960 Quindi ho intenzione di scrivere, il vostro nome. 422 00:18:38,960 --> 00:18:42,089 E così, quello che ho intenzione di passare, printf, in un momento, 423 00:18:42,089 --> 00:18:43,005 è semplicemente, questo. 424 00:18:43,005 --> 00:18:47,760 Quindi, se si vuole andare avanti e disegnare questo sullo schermo, questo è il vostro input ora. 425 00:18:47,760 --> 00:18:48,260 Tutto ok. 426 00:18:48,260 --> 00:18:51,160 E dimenticare corda, ora abbiamo la nostra linea di codice qui. 427 00:18:51,160 --> 00:18:54,470 Quindi, in, GetString, abbiamo bisogno di in realtà chiamata, GetString. 428 00:18:54,470 --> 00:18:57,920 Così il vostro scopo nella vita è quello di andare a piedi fuori nell'orchestra, se si potesse, 429 00:18:57,920 --> 00:18:58,980 e ottenere il nome di qualcuno. 430 00:18:58,980 --> 00:19:00,860 Ma cerchiamo di darvi qualcosa per metterlo su. 431 00:19:00,860 --> 00:19:02,908 Se si vuole, andare avanti e ottenere una stringa, 432 00:19:02,908 --> 00:19:05,241 ottenere il nome di qualcuno in quel pezzo di carta, se potessi. 433 00:19:05,241 --> 00:19:12,940 434 00:19:12,940 --> 00:19:13,530 >> Tutto ok. 435 00:19:13,530 --> 00:19:15,250 E vedremo, in un momento, il cui nome che stiamo ottenendo. 436 00:19:15,250 --> 00:19:17,630 Nel frattempo, quello che ho intenzione di hanno pronto, è un pezzo 437 00:19:17,630 --> 00:19:21,340 di carta, in cui, io vado per memorizzare qualunque valore che 438 00:19:21,340 --> 00:19:25,752 è che GetString sta tornando a me, Io, essendo una variabile stringa chiamata, s. 439 00:19:25,752 --> 00:19:26,252 Tutto ok. 440 00:19:26,252 --> 00:19:27,293 Allora, cosa hai qui? 441 00:19:27,293 --> 00:19:27,950 Nik. 442 00:19:27,950 --> 00:19:28,450 Tutto ok. 443 00:19:28,450 --> 00:19:30,910 Così abbiamo il nome di Nik qui. 444 00:19:30,910 --> 00:19:33,750 Quindi questo è ciò che letteralmente è stato restituito 445 00:19:33,750 --> 00:19:35,810 a me, per così dire, da GetString. 446 00:19:35,810 --> 00:19:38,720 >> Io, ora, sto andando a eseguire il lato sinistro 447 00:19:38,720 --> 00:19:43,440 di tale espressione, dove ho semplicemente annotare, per finalità di oggi, Nik. 448 00:19:43,440 --> 00:19:46,470 Così ora, ho una variabile chiamato, s, memorizzare il nome di Nik. 449 00:19:46,470 --> 00:19:49,520 Ho già consegnato a printf, un argomento precedente. 450 00:19:49,520 --> 00:19:52,800 Ma nella nostra terza e ultima riga codice, in realtà ho dovuto printf mano 451 00:19:52,800 --> 00:19:58,500 qualcosa di un po different-- "ciao,% s" backslash n. 452 00:19:58,500 --> 00:20:01,510 >> E così l'ultima riga vado per send-- l'ultima cosa di cui sono 453 00:20:01,510 --> 00:20:03,060 intenzione di scrivere fin d'ora, è questo. 454 00:20:03,060 --> 00:20:06,310 Quindi le due righe di codice, o piuttosto l'ultima riga di codice, 455 00:20:06,310 --> 00:20:10,690 chiede due inputs-- uno, questo, e due, questo. 456 00:20:10,690 --> 00:20:13,330 Quindi, se la nostra funzione printf possono ora prendere questi come input, 457 00:20:13,330 --> 00:20:16,000 mi permetta di cancellare lo schermo per voi. 458 00:20:16,000 --> 00:20:17,250 In realtà no, si può andare avanti. 459 00:20:17,250 --> 00:20:19,333 Lo lasciamo, dal momento che è sullo stesso programma. 460 00:20:19,333 --> 00:20:21,760 461 00:20:21,760 --> 00:20:27,380 Dovremmo vedere, ciao, Nik. 462 00:20:27,380 --> 00:20:27,880 Tutto ok. 463 00:20:27,880 --> 00:20:29,670 Quindi questo è stato un bel po ' cerchi di saltare attraverso, appena 464 00:20:29,670 --> 00:20:31,620 di scrivere, di indicare la vostra nome, e, ciao, Nik. 465 00:20:31,620 --> 00:20:37,210 Ma questa semplice idea di messaggio che passa, passaggio di ingresso e uscita di ricezione, 466 00:20:37,210 --> 00:20:40,430 è esattamente il modello che stiamo andando ad avere anche per le funzioni più complesse. 467 00:20:40,430 --> 00:20:41,804 Quindi grazie mille a tutti e due. 468 00:20:41,804 --> 00:20:43,730 Abbiamo una bella sforzo palla qui per voi. 469 00:20:43,730 --> 00:20:48,890 E grazie al nostro GetString e volontari printf simili. 470 00:20:48,890 --> 00:20:49,551 Grazie. 471 00:20:49,551 --> 00:20:50,050 Tutto ok. 472 00:20:50,050 --> 00:20:50,966 Grazie a tutti e due. 473 00:20:50,966 --> 00:20:56,640 474 00:20:56,640 --> 00:21:00,430 >> Così abbiamo parlato finora, per lo più sulle stringhe. 475 00:21:00,430 --> 00:21:06,550 E si scopre che in realtà può C capire alcuni tipi di dati diversi. 476 00:21:06,550 --> 00:21:08,860 Infatti, prendiamo uno sguardo a questi qui. 477 00:21:08,860 --> 00:21:12,490 Così C, e un sacco di lingue, capire le cose chiamati caratteri. 478 00:21:12,490 --> 00:21:16,852 Un char è generalmente un singolo byte o otto bit. 479 00:21:16,852 --> 00:21:19,810 E rappresenta un singolo carattere, come la lettera A, o capitale 480 00:21:19,810 --> 00:21:21,990 lettera A, o la lettera minuscola A, oppure un punto esclamativo, 481 00:21:21,990 --> 00:21:25,440 o qualsiasi carattere che è possibile digitare su la tastiera, e talvolta anche di più. 482 00:21:25,440 --> 00:21:26,795 Ci capita anche di vedere carri. 483 00:21:26,795 --> 00:21:31,160 Un galleggiante è, generalmente, un Valore bit a 32, o quattro byte 484 00:21:31,160 --> 00:21:33,660 perché ancora una volta, un byte è otto bit. 485 00:21:33,660 --> 00:21:36,675 >> Quindi un galleggiante è un valore in virgola mobile, qualcosa con un punto decimale. 486 00:21:36,675 --> 00:21:38,550 E in effetti, questo è ciò che il film è stato parlando 487 00:21:38,550 --> 00:21:42,240 su quando parlavano galleggiante valori del punto, un numero fisso di bit 488 00:21:42,240 --> 00:21:43,940 viene utilizzato per rappresentare un numero reale. 489 00:21:43,940 --> 00:21:45,740 Ma c'è anche cose chiamate doppie. 490 00:21:45,740 --> 00:21:47,860 Questi esistono in Java, se hai preso APCS, 491 00:21:47,860 --> 00:21:51,540 e una doppia, come il nome per fortuna suggerisce, è due volte più grande come un galleggiante. 492 00:21:51,540 --> 00:21:54,540 E 'ancora un numero reale, ha solo più bit 493 00:21:54,540 --> 00:21:58,390 con cui essere sempre più precisa, o per memorizzare i numeri ancora più grandi. 494 00:21:58,390 --> 00:21:58,890 int è facile. 495 00:21:58,890 --> 00:22:00,181 Ne abbiamo parlato l'ultima volta. 496 00:22:00,181 --> 00:22:01,160 E 'solo un numero intero. 497 00:22:01,160 --> 00:22:03,980 Ed è in genere 32 bit, o quattro byte. 498 00:22:03,980 --> 00:22:07,850 >> E così, se avete, vediamo ora, 32 bits-- e lo abbiamo fatto in settimana 0, 499 00:22:07,850 --> 00:22:10,820 mai così briefly-- se avete 32 bit, che cosa è il più grande 500 00:22:10,820 --> 00:22:13,580 numero si può rappresentare come un intero? 501 00:22:13,580 --> 00:22:16,080 Prendere o lasciare? 502 00:22:16,080 --> 00:22:18,380 E 'come 4 miliardi, e che è solo se siamo 503 00:22:18,380 --> 00:22:20,690 che rappresenta solo numeri positivi. 504 00:22:20,690 --> 00:22:23,930 Se si dispone di 32 bit, e si desidera rappresentare numeri negativi pure, 505 00:22:23,930 --> 00:22:27,100 il vostro range è, essenzialmente, negativo 2 miliardi di positivo 2 miliardi. 506 00:22:27,100 --> 00:22:29,250 Ma in generale, inizieremo a 0 arrivare fino a 4 miliardi. 507 00:22:29,250 --> 00:22:32,400 >> Non è necessario sapere con precisione, ma possiamo vedere questo, infatti, se solo 508 00:22:32,400 --> 00:22:36,400 aprire un po 'calcolatrice, qui. 509 00:22:36,400 --> 00:22:41,070 Posso fare 2 il 32, e questo è esattamente quanto è grande, 510 00:22:41,070 --> 00:22:43,190 quanti valori si può rappresentare, con 32 bit. 511 00:22:43,190 --> 00:22:44,442 Ed è circa 4 miliardi di euro. 512 00:22:44,442 --> 00:22:46,900 Quindi noi continueremo a vedere quel numero in alcuni posti diversi. 513 00:22:46,900 --> 00:22:48,890 Ma se avete bisogno di più numeri di quello, 514 00:22:48,890 --> 00:22:51,670 si scopre là del qualcosa chiamato un lungo lungo. 515 00:22:51,670 --> 00:22:54,005 E una lunga lunga è generalmente 64 bit, che 516 00:22:54,005 --> 00:22:56,380 significa che è un ordine di grandezza ancora più grande di un int. 517 00:22:56,380 --> 00:22:59,510 >> Quindi non posso nemmeno pronunciare il più grande numero che si può rappresentare, 518 00:22:59,510 --> 00:23:01,340 ma è decisamente più grande. 519 00:23:01,340 --> 00:23:05,190 Ora, come un a parte, storicamente, se un int è 32 bit, 520 00:23:05,190 --> 00:23:12,780 e un lungo tempo è di 64 bit, come grande è un lungo, non da molto tempo? 521 00:23:12,780 --> 00:23:16,500 522 00:23:16,500 --> 00:23:20,330 Si potrebbe pensare che sia più di un int ma forse meno lungo di un lungo lungo, 523 00:23:20,330 --> 00:23:21,400 ma in realtà dipende. 524 00:23:21,400 --> 00:23:23,400 >> E così si scopre uno delle frustrazioni troppo, 525 00:23:23,400 --> 00:23:26,830 con la scrittura di codice su alcuni sistemi, è che non tutti questi tipi di dati 526 00:23:26,830 --> 00:23:28,440 avere valori predeterminati. 527 00:23:28,440 --> 00:23:29,771 A volte è questo molte bit. 528 00:23:29,771 --> 00:23:31,020 A volte è che molti bit. 529 00:23:31,020 --> 00:23:32,750 Quindi dovete realmente sapere, a volte, l'hardware 530 00:23:32,750 --> 00:23:34,083 si sta eseguendo il software su. 531 00:23:34,083 --> 00:23:36,960 Per fortuna, altre lingue e altri tipi di dati che ora esistono, 532 00:23:36,960 --> 00:23:38,400 permetterà di essere più preciso. 533 00:23:38,400 --> 00:23:41,220 Beh, abbiamo visto corda, e abbiamo visto bool, troppo, 534 00:23:41,220 --> 00:23:43,960 ma si scopre quelli venire solo con la libreria CS50. 535 00:23:43,960 --> 00:23:46,240 Così coloro che non sono costruiti in C. Quelli invece, 536 00:23:46,240 --> 00:23:49,340 entrare in quel file chiamato CS50.h, che faremo alla fine 537 00:23:49,340 --> 00:23:51,831 buccia indietro gli strati di. 538 00:23:51,831 --> 00:23:53,830 Ma per ora, sono solo tipi di dati aggiuntivi. 539 00:23:53,830 --> 00:23:57,060 Un bool è un vero o falso, e un stringa è una sequenza di caratteri, 540 00:23:57,060 --> 00:23:57,970 come una parola. 541 00:23:57,970 --> 00:24:01,690 Ora printf, abbiamo visto, ha segnaposto,% s è uno. 542 00:24:01,690 --> 00:24:05,430 E si potrebbe essere in grado, ad oggi, dedurre da questi esempi, come 543 00:24:05,430 --> 00:24:07,720 si potrebbe avere un segnaposto per diversi tipi di dati. 544 00:24:07,720 --> 00:24:11,150 Ad esempio, prendere una supposizione, se ha voluto stampare un singolo carattere con 545 00:24:11,150 --> 00:24:15,270 printf, il segnaposto è probabilmente% c. 546 00:24:15,270 --> 00:24:19,650 E se si desidera stampare un intero con il segnaposto,% i. 547 00:24:19,650 --> 00:24:25,150 % lld è un lungo valore decimale lungo, ma molto lungo, in modo che le mappe a questo. 548 00:24:25,150 --> 00:24:28,640 E poi% f per il galleggiamento valore del punto o per una doppia, 549 00:24:28,640 --> 00:24:31,270 così a volte stanno ri-usato in contesti diversi. 550 00:24:31,270 --> 00:24:33,350 Quindi staremo a vedere e utilizzare alcuni di quelli nel tempo. 551 00:24:33,350 --> 00:24:36,420 E printf e altre funzioni anche sequenze di escape supporto degli altri, 552 00:24:36,420 --> 00:24:38,080 e talvolta, questi sono necessari. 553 00:24:38,080 --> 00:24:39,770 Così backslash n è una nuova linea. 554 00:24:39,770 --> 00:24:42,886 Backslash t, fa chiunque vuole prendere una pugnalata? 555 00:24:42,886 --> 00:24:43,760 Membro del pubblico: Tab. 556 00:24:43,760 --> 00:24:44,551 DAVID J MALAN: Tab. 557 00:24:44,551 --> 00:24:46,810 Quindi, se si vuole realmente per stampare una scheda, non 558 00:24:46,810 --> 00:24:49,940 un numero fisso di spazi ma una vera carattere di tabulazione, non colpire il vostro, 559 00:24:49,940 --> 00:24:53,490 scheda, tasto sulla tastiera, in generale, che effettivamente fare backslash t. 560 00:24:53,490 --> 00:24:57,750 Backslash virgolette, perché mai dovrei volerlo? 561 00:24:57,750 --> 00:24:58,250 Destra? 562 00:24:58,250 --> 00:25:00,417 Perché non posso semplicemente digitare una doppio apice sulla mia tastiera? 563 00:25:00,417 --> 00:25:02,124 Membro del pubblico: Perché, altrimenti, è 564 00:25:02,124 --> 00:25:04,830 andando a pensare che sia la fine di come il vostro stampa [? testo. ?] 565 00:25:04,830 --> 00:25:05,420 >> DAVID J MALAN: Esattamente. 566 00:25:05,420 --> 00:25:07,211 Ricordate, con la nostra esempi printf, quando 567 00:25:07,211 --> 00:25:10,075 passavano a printf in ingresso, sulla sinistra della stringa di input 568 00:25:10,075 --> 00:25:12,950 e sulla destra di tale ingresso primavera, naturalmente, era una doppia citazione. 569 00:25:12,950 --> 00:25:16,270 Se il tuo ingresso ha una doppia citazione nel mezzo di quello, 570 00:25:16,270 --> 00:25:18,920 il computer potrebbe potenzialmente confondersi, come ad, 571 00:25:18,920 --> 00:25:20,760 fa questo virgolette appartengono in mezzo? 572 00:25:20,760 --> 00:25:22,150 Appartiene con la sinistra? 573 00:25:22,150 --> 00:25:23,566 Appartiene con quella giusta? 574 00:25:23,566 --> 00:25:26,780 E così, se si vuole fare super chiaro, si fa backslash virgolette, 575 00:25:26,780 --> 00:25:30,480 in modo che sia sfuggito, per così dire, e non è conflated per qualcos'altro. 576 00:25:30,480 --> 00:25:34,400 E c'è qualche altro qui, r backslash, singoli apici, 0, 577 00:25:34,400 --> 00:25:36,510 che potremmo vedere nel corso del tempo, pure. 578 00:25:36,510 --> 00:25:37,760 E ora, per quanto riguarda le funzioni? 579 00:25:37,760 --> 00:25:41,630 >> Così le azioni che possiamo prendere finora in questa lingua, C, beh, abbiamo visto, 580 00:25:41,630 --> 00:25:44,320 printf, naturalmente, e tutti gli altri sullo schermo, 581 00:25:44,320 --> 00:25:47,140 qui, che useremo per la solo prime settimane del corso, 582 00:25:47,140 --> 00:25:48,485 venire quando la biblioteca CS50. 583 00:25:48,485 --> 00:25:51,850 E fanno molto più facile, in C, per effettivamente ottenere l'input dell'utente. 584 00:25:51,850 --> 00:25:54,200 Risulta che in C, e francamente in poche lingue, 585 00:25:54,200 --> 00:25:57,450 si tratta di un vero e proprio dolore al collo per fare qualcosa di semplice, come richiedono all'utente 586 00:25:57,450 --> 00:26:01,310 per tastiera, per il suo ingresso. 587 00:26:01,310 --> 00:26:03,240 E così queste funzioni rendono più facile. 588 00:26:03,240 --> 00:26:05,472 >> E ha anche l'errore la verifica in tutto, 589 00:26:05,472 --> 00:26:07,180 in modo che, quando si ricordare il Mercoledì, abbiamo 590 00:26:07,180 --> 00:26:09,740 visto il, riprovare, avvertimento, quando non ha collaborato, 591 00:26:09,740 --> 00:26:11,700 e ho digitato una parola, invece di un numero? 592 00:26:11,700 --> 00:26:15,402 Abbiamo fatto il lavoro pesante in anticipo su per assicurarsi che l'utente collabora. 593 00:26:15,402 --> 00:26:17,860 Ma questi sono solo di formazione ruote che alla fine, 594 00:26:17,860 --> 00:26:19,640 e rapidamente, decollare. 595 00:26:19,640 --> 00:26:22,630 >> Quindi, per ricapitolare, poi, diamo un rapido sguardo, 596 00:26:22,630 --> 00:26:26,620 proprio come abbiamo fatto con Scratch, a alcuni costrutti canonici in C. 597 00:26:26,620 --> 00:26:28,580 Questo ha lo scopo di, specie di, essere un rapido giro, 598 00:26:28,580 --> 00:26:30,990 proprio in modo da avere un riferimento e che avete visto le cose in un primo momento. 599 00:26:30,990 --> 00:26:34,100 Ma poi vedremo codifica attuale utilizzare alcuni di questi blocchi. 600 00:26:34,100 --> 00:26:36,710 Così simile a Scratch, quando avevamo dichiarazioni come, 601 00:26:36,710 --> 00:26:41,570 dire o, attendere, in C, noi abbiamo funzioni, nonché, come printf. 602 00:26:41,570 --> 00:26:45,350 >> Se vogliamo esprimere una condizione in C, è simile, nello spirito, 603 00:26:45,350 --> 00:26:47,840 a quel pezzo di puzzle che sembrava come questo in Scratch. 604 00:26:47,840 --> 00:26:49,850 Ma invece, abbiamo letteralmente basta scrivere, se. 605 00:26:49,850 --> 00:26:51,830 E poi, tra parentesi, abbiamo messo una condizione, 606 00:26:51,830 --> 00:26:54,807 se tale condizione è quello che faremo chiamare, di nuovo, una espressione booleana. 607 00:26:54,807 --> 00:26:56,390 E ancora una volta, questo è una sorta di pseudocodice. 608 00:26:56,390 --> 00:26:58,830 E, infatti, il // è un commento. 609 00:26:58,830 --> 00:27:00,550 E 'solo parole in inglese per me stesso. 610 00:27:00,550 --> 00:27:03,000 Ma questo è il generale struttura di un, se, condizione. 611 00:27:03,000 --> 00:27:05,220 Ma vedremo calcestruzzo esempi in un attimo. 612 00:27:05,220 --> 00:27:07,960 >> Se si desidera avere un forchetta a due vie in mezzo alla strada, 613 00:27:07,960 --> 00:27:11,740 proprio come abbiamo fatto con il nostro volontario Mercoledì, si può avere un, altra cosa se. 614 00:27:11,740 --> 00:27:16,020 E se si vuole avere un terzo ed condizione finale, o una situazione di default, 615 00:27:16,020 --> 00:27:19,006 si può avere solo un blocco else, lì. 616 00:27:19,006 --> 00:27:21,880 E allo stesso modo, con espressioni booleane, si può, e, insieme. 617 00:27:21,880 --> 00:27:24,296 E abbiamo visto il Mercoledì, che non è un singolo commerciale, 618 00:27:24,296 --> 00:27:28,220 è due, per ragioni di livello inferiore che avremo finalmente vedere e giocare con. 619 00:27:28,220 --> 00:27:30,410 O-ing cose insieme è 2 barre verticali. 620 00:27:30,410 --> 00:27:32,240 Su una tastiera americana, questo è generalmente una chiave 621 00:27:32,240 --> 00:27:35,730 con il tasto Shift sopra il vostro tasto Invio o il tasto Return. 622 00:27:35,730 --> 00:27:38,620 >> Poi c'è queste cose che useremo forse una o due volte. 623 00:27:38,620 --> 00:27:42,570 Essi sono funzionalmente equivalenti a cosa si può fare con una, se, altrimenti se, 624 00:27:42,570 --> 00:27:44,950 else if altro, costruire, ma si chiamano un interruttore. 625 00:27:44,950 --> 00:27:48,020 Sembrano molto diverso, ma ti vedere in alcune del nostro codice di distribuzione, 626 00:27:48,020 --> 00:27:51,890 per un futuro insieme problema, molto probabilmente, che a volte è solo una più bella 627 00:27:51,890 --> 00:27:54,060 modo di esprimere una intera mazzo di condizioni, 628 00:27:54,060 --> 00:27:57,590 senza avere un sacco di parentesi graffe e un sacco di parentesi e indentazione. 629 00:27:57,590 --> 00:28:01,910 Ma ci danno più potere che abbiamo già. 630 00:28:01,910 --> 00:28:02,550 E adesso loop. 631 00:28:02,550 --> 00:28:05,020 E questo, vedremo a poco più lentamente. 632 00:28:05,020 --> 00:28:08,470 Ma poi, inizieremo ad usare questi, soprattutto per chi ha già familiarità. 633 00:28:08,470 --> 00:28:13,830 Questo è il modo canonico, se incredibilmente modo arcano, di scrivere un ciclo in C. 634 00:28:13,830 --> 00:28:15,896 >> Ora un ciclo in Scratch è stato abbastanza semplice. 635 00:28:15,896 --> 00:28:17,020 Hai una, per sempre, blocco. 636 00:28:17,020 --> 00:28:19,760 Hai una, ripetere, blocco con solo un numero che dovete digitare. 637 00:28:19,760 --> 00:28:22,220 E con il, per ciclo, si può implementare sia di quelle idee, 638 00:28:22,220 --> 00:28:23,595 ma è un po 'più tecnico. 639 00:28:23,595 --> 00:28:25,994 Ma francamente, è anche relativamente semplice. 640 00:28:25,994 --> 00:28:28,160 Una volta che conosci l'ordine di le operazioni, letteralmente 641 00:28:28,160 --> 00:28:30,910 sono solo andando a collegare i valori e dire al computer cosa fare. 642 00:28:30,910 --> 00:28:32,800 Quindi, ecco un esempio. 643 00:28:32,800 --> 00:28:38,040 Questo è un anello che, piuttosto semplicemente, conta da un numero fino 644 00:28:38,040 --> 00:28:40,187 attraverso un altro. 645 00:28:40,187 --> 00:28:42,020 E semplicemente guardando a lui, anche se si dispone 646 00:28:42,020 --> 00:28:44,660 nessuna esperienza precedente con questo linguaggio, quale numero 647 00:28:44,660 --> 00:28:46,920 Non probabilmente iniziare il conteggio a? 648 00:28:46,920 --> 00:28:47,730 OK, 0. 649 00:28:47,730 --> 00:28:50,240 E sto indovinando che è perché voi vediamo che c'è un int e un i, 650 00:28:50,240 --> 00:28:51,073 che è una variabile. 651 00:28:51,073 --> 00:28:52,390 E 'inizializzato a 0. 652 00:28:52,390 --> 00:28:55,670 >> E poi, sembra che stiamo passando printf, un valore. 653 00:28:55,670 --> 00:28:58,000 E, in effetti, ho fatto un piccolo errore di battitura qui. 654 00:28:58,000 --> 00:28:59,850 Ma questo è facilmente risolto. 655 00:28:59,850 --> 00:29:02,390 Permettetemi di aggiungere, ho qui. 656 00:29:02,390 --> 00:29:06,150 Ora abbiamo printf benessere superato tale valore segnaposto. 657 00:29:06,150 --> 00:29:08,299 E quello che sta succedendo a contare fino in fondo? 658 00:29:08,299 --> 00:29:08,840 PUBBLICO: 50. 659 00:29:08,840 --> 00:29:09,340 50. 660 00:29:09,340 --> 00:29:10,160 49. 661 00:29:10,160 --> 00:29:10,910 DAVID J MALAN: 49. 662 00:29:10,910 --> 00:29:13,340 Così 50, a prima vista, sembra giusto. 663 00:29:13,340 --> 00:29:16,990 Ma che, a quanto pare, sta per essere la nostra condizione che manteniamo il controllo. 664 00:29:16,990 --> 00:29:21,740 E stiamo andando a fermare una volta Non ho più è inferiore a 50. 665 00:29:21,740 --> 00:29:24,920 Quindi questo ciclo, al contrario, deve esecuzione, fino a quando i è inferiore a 50. 666 00:29:24,920 --> 00:29:28,891 Ma appena diventa 50, o 51, o peggio, si dovrebbe smettere automaticamente. 667 00:29:28,891 --> 00:29:29,390 Tutto ok. 668 00:29:29,390 --> 00:29:31,200 >> Quindi, ciò che effettivamente accade qui? 669 00:29:31,200 --> 00:29:33,160 Quindi questo è l'ordine di le operazioni per un ciclo. 670 00:29:33,160 --> 00:29:35,440 Uno, si ha la cosiddetta inizializzazione. 671 00:29:35,440 --> 00:29:38,264 Questo pezzo evidenziata in giallo di codice viene eseguito prima, 672 00:29:38,264 --> 00:29:40,930 e ha l'effetto che, per Mercoledì, probabilmente immaginate. 673 00:29:40,930 --> 00:29:45,500 Si crea una variabile denominata i e negozi in quella variabile il valore 0. 674 00:29:45,500 --> 00:29:47,560 Così i è 0 a questo punto della storia. 675 00:29:47,560 --> 00:29:49,680 >> La prossima cosa che accade in questo costrutto, 676 00:29:49,680 --> 00:29:51,540 è che la condizione viene verificata. 677 00:29:51,540 --> 00:29:54,325 Così posso controllare subito, Sono io meno di 50? 678 00:29:54,325 --> 00:29:57,700 E naturalmente, la risposta per ora è, sicuramente, sì. 679 00:29:57,700 --> 00:30:00,710 Sì, perché i è 0, e questo è sicuramente inferiore a 50. 680 00:30:00,710 --> 00:30:03,866 Allora che cosa succede, è che questo riga di codice viene eseguito. 681 00:30:03,866 --> 00:30:06,740 Ed infatti, se c'è più righe di codice in quelle parentesi graffe, 682 00:30:06,740 --> 00:30:09,020 tutti vengono eseguiti uno dopo l'altro. 683 00:30:09,020 --> 00:30:11,450 >> E in effetti qui, è a quanto pare, per stampare 684 00:30:11,450 --> 00:30:15,365 il numero di i, che sta per essere 0, e poi 1, e quindi 2. 685 00:30:15,365 --> 00:30:15,865 Ma perché? 686 00:30:15,865 --> 00:30:17,410 Perché di venire incrementato? 687 00:30:17,410 --> 00:30:20,680 Ebbene, la quarta cosa che che succede è che questa sintassi 688 00:30:20,680 --> 00:30:22,610 viene eseguito, dopo il punto e virgola. 689 00:30:22,610 --> 00:30:27,506 i ++ è un modo veloce per dire; prendere il valore di i, e aggiungere 1 ad esso; 690 00:30:27,506 --> 00:30:30,380 e poi la prossima volta, aggiungere 1 ad esso; e la prossima volta, 691 00:30:30,380 --> 00:30:31,330 aggiungere 1 ad esso. 692 00:30:31,330 --> 00:30:33,640 >> Quindi, se continuiamo, cosa succederà 693 00:30:33,640 --> 00:30:35,890 prossimo è che non ho intenzione di inizializzare i mai più. 694 00:30:35,890 --> 00:30:38,290 Se ho continuato inizializzazione i per 0, questo esempio 695 00:30:38,290 --> 00:30:41,110 non finisse mai perché vorrei essere bloccato a 0. 696 00:30:41,110 --> 00:30:43,870 Ma ciò che sta per accadere è che la condizione sarà controllato, 697 00:30:43,870 --> 00:30:54,280 la riga di codice otterrà eseguito, l'i si incrementerà, 698 00:30:54,280 --> 00:30:56,970 condizione sarà verificata, codice otterrà eseguito. 699 00:30:56,970 --> 00:30:59,790 E continuava ancora andare in bicicletta, e ancora, e ancora, 700 00:30:59,790 --> 00:31:03,340 fino a quando i ++ induce un valore di 50. 701 00:31:03,340 --> 00:31:05,870 >> La condizione poi dice, 50 è meno di 50? 702 00:31:05,870 --> 00:31:09,360 La risposta, ovviamente, è no, e così l'intero codice interrompe l'esecuzione. 703 00:31:09,360 --> 00:31:13,020 E se avete più il codice sullo schermo in basso, questo è quello che succede dopo. 704 00:31:13,020 --> 00:31:17,530 E salta fuori di queste parentesi graffe e continua a stampare più dopo. 705 00:31:17,530 --> 00:31:20,470 >> Così uno scherzo ora, dal foxtrot, che avrete forse ora capire. 706 00:31:20,470 --> 00:31:30,810 707 00:31:30,810 --> 00:31:31,560 E 'sempre divertente. 708 00:31:31,560 --> 00:31:34,110 E 'come le risatine tipo di percolato, 709 00:31:34,110 --> 00:31:38,370 e poi ti rendi conto che non dovrebbe essere ridere di umorismo come questo. 710 00:31:38,370 --> 00:31:41,160 Ma c'è qualche asporto qui, pedagogicamente, troppo. 711 00:31:41,160 --> 00:31:43,577 Così si scopre che sono manca un pezzo della sintassi, 712 00:31:43,577 --> 00:31:45,410 o di perdere un foxtrot pezzo di sintassi qui. 713 00:31:45,410 --> 00:31:48,076 Quello che manca, che abbiamo avuto in ogni altro esempio, finora? 714 00:31:48,076 --> 00:31:51,599 715 00:31:51,599 --> 00:31:53,390 Ritorno, è lì, così che è un'altra cosa, 716 00:31:53,390 --> 00:31:54,440 che torneremo a non molto. 717 00:31:54,440 --> 00:31:55,398 Ciò che manca, però? 718 00:31:55,398 --> 00:31:55,908 Già. 719 00:31:55,908 --> 00:31:58,150 >> Membro del pubblico: il inizializzazione del [incomprensibile]. 720 00:31:58,150 --> 00:31:58,470 >> DAVID J MALAN: OK. 721 00:31:58,470 --> 00:31:58,980 Quindi sì. 722 00:31:58,980 --> 00:32:03,210 Quindi, in realtà, questo è-- Bene, e conteggio viene inizializzato 723 00:32:03,210 --> 00:32:05,470 in alto, o meglio, ha dichiarato in alto. 724 00:32:05,470 --> 00:32:06,960 Quindi questo è un altro modo di farlo. 725 00:32:06,960 --> 00:32:08,685 Ma non in una sola riga è valida però. 726 00:32:08,685 --> 00:32:09,310 Che ne dite qui? 727 00:32:09,310 --> 00:32:10,196 >> Membro del pubblico: E 'le parentesi graffe? 728 00:32:10,196 --> 00:32:10,640 >> DAVID J MALAN: Sì. 729 00:32:10,640 --> 00:32:12,080 Così le parentesi graffe sono mancanti. 730 00:32:12,080 --> 00:32:15,495 Ma questo codice, voglio dire, a loro credito, è in realtà, sintatticamente valido. 731 00:32:15,495 --> 00:32:17,610 Si scopre, non è necessario bisogno delle parentesi graffe 732 00:32:17,610 --> 00:32:21,691 se si dispone di una sola riga di codice che si desidera eseguire all'interno del ciclo. 733 00:32:21,691 --> 00:32:24,190 Ora siamo sempre, in classe e in tutto il nostro codice di distribuzione, 734 00:32:24,190 --> 00:32:26,730 includere le parentesi graffe comunque, solo per amor di chiarezza. 735 00:32:26,730 --> 00:32:29,010 Ma rendersi conto che nei libri di testo ed esempi on-line, 736 00:32:29,010 --> 00:32:31,300 si può benissimo vedere ricci ganci manca qualche volta. 737 00:32:31,300 --> 00:32:34,850 E va bene, se quello che si sono rientrato e destinati 738 00:32:34,850 --> 00:32:38,650 è solo una singola linea di codice, e non più righe di codice, potenzialmente. 739 00:32:38,650 --> 00:32:39,150 Tutto ok. 740 00:32:39,150 --> 00:32:44,500 Così relativo alla questione della l'imprecisione, è una questione di troppo pieno, 741 00:32:44,500 --> 00:32:48,560 nel senso che, in modo simile, non interi hanno limiti a loro 742 00:32:48,560 --> 00:32:49,970 proprio come i valori in virgola mobile? 743 00:32:49,970 --> 00:32:53,120 Nel mondo una virgola mobile valori, non può che essere così preciso, 744 00:32:53,120 --> 00:32:55,710 dopo di che, talvolta cose brutte possono accadere, 745 00:32:55,710 --> 00:32:57,760 ed i nostri programmi possono essere buggy e l'errore. 746 00:32:57,760 --> 00:33:00,050 Ora anche con numeri interi, si può incorrere in problemi. 747 00:33:00,050 --> 00:33:03,820 Ora un numero intero non ha un punto decimale o numeri dopo di esso. 748 00:33:03,820 --> 00:33:07,130 E 'solo un numero naturale, di solito. 749 00:33:07,130 --> 00:33:09,430 Quindi, cosa potrebbe andare male con un int? 750 00:33:09,430 --> 00:33:12,210 Se sto usando un int a conteggio, cosa potrebbe andare male? 751 00:33:12,210 --> 00:33:13,230 Sembra molto più semplice. 752 00:33:13,230 --> 00:33:13,873 Già. 753 00:33:13,873 --> 00:33:16,240 >> Membro del pubblico: se il numero diventa [incomprensibile] 754 00:33:16,240 --> 00:33:17,073 >> DAVID J MALAN: Sì. 755 00:33:17,073 --> 00:33:20,820 Che cosa succede se si contano così in alto, che si non può esprimere che veramente grande numero. 756 00:33:20,820 --> 00:33:21,320 Destra? 757 00:33:21,320 --> 00:33:23,910 Ad un certo punto, si sta andando di superare i limiti 758 00:33:23,910 --> 00:33:27,077 di un valore a 32 bit o un valore a 64 bit. 759 00:33:27,077 --> 00:33:29,410 Ora di nuovo, io non sono sicuro di come pronunciare un valore a 64 bit, 760 00:33:29,410 --> 00:33:32,230 ma so che con un intero a 32 bit, il valore più grande può essere, 761 00:33:32,230 --> 00:33:35,490 se è solo positivo valori, è circa 4 miliardi di euro. 762 00:33:35,490 --> 00:33:39,000 Quindi, se provo a contare fino a 5 miliardi, qualcosa sta per accadere. 763 00:33:39,000 --> 00:33:41,050 Ma vediamo che cosa, infatti, può accadere. 764 00:33:41,050 --> 00:33:44,570 Nel mondo di intero troppopieno, dove, in un certo senso, 765 00:33:44,570 --> 00:33:48,270 tracimare la capacità di un integer, cosa potrebbe accadere? 766 00:33:48,270 --> 00:33:51,190 >> Quindi, ecco un numero binario, si tratta di un ritorno al passato a 0. 767 00:33:51,190 --> 00:33:54,630 E 'tutto di 1, ei segnaposti ci sono potenze di 2, 768 00:33:54,630 --> 00:33:55,980 quindi questo è binario. 769 00:33:55,980 --> 00:33:59,416 Quindi questi sono 8, 1 bit sullo schermo. 770 00:33:59,416 --> 00:34:01,290 E se vi ricordate o rapidamente fate i conti, 771 00:34:01,290 --> 00:34:06,074 quale valore viene rappresentato qui con questi otto 1 bit? 772 00:34:06,074 --> 00:34:06,950 255. 773 00:34:06,950 --> 00:34:09,260 E anche se non fosse abbastanza sicuro della matematica, si potrebbe fare fuori. 774 00:34:09,260 --> 00:34:10,550 O si può solo tipo della ragione attraverso di essa, 775 00:34:10,550 --> 00:34:12,633 aspetta un attimo, se sono che rappresenta un valore a 8 bit, 776 00:34:12,633 --> 00:34:17,750 e ho 256 valori possibili, ma la prima delle quali è 0, 777 00:34:17,750 --> 00:34:19,909 So solo che il più grande sta per essere 255, 778 00:34:19,909 --> 00:34:21,510 e questo è ciò che questo potrebbe essere. 779 00:34:21,510 --> 00:34:26,060 >> Quindi supponiamo che io cerco di aggiungere 1 a questo valore. 780 00:34:26,060 --> 00:34:28,750 Cosa faresti in grado la scuola quando si aggiunge un 1, e 781 00:34:28,750 --> 00:34:31,139 in realtà non adatta perché si deve portare il 1? 782 00:34:31,139 --> 00:34:34,380 Che cosa è questo numero che va di diventare quando si aggiunge 1? 783 00:34:34,380 --> 00:34:37,030 E 'intenzione di diventare 0. 784 00:34:37,030 --> 00:34:37,530 Destra? 785 00:34:37,530 --> 00:34:41,139 Perché se hai avuto più bits-- e io sarò cercare di, tipo di, digitarlo fuori qui-- 786 00:34:41,139 --> 00:34:44,710 se avessimo più bit, quello che abbiamo potrebbe fare qui è aggiungere l'1, 787 00:34:44,710 --> 00:34:47,370 e poi ci piacerebbe ottenere questo. 788 00:34:47,370 --> 00:34:48,739 Ops. 789 00:34:48,739 --> 00:34:52,250 Avremmo un 1 po 'tutto il senso qui. 790 00:34:52,250 --> 00:34:55,530 >> Ma se questo è un finita valore, è solo 8 bit, 791 00:34:55,530 --> 00:34:57,480 e questo è predeterminato dal computer, 792 00:34:57,480 --> 00:34:59,370 1 che è effettivamente non c'è. 793 00:34:59,370 --> 00:35:00,980 E 'solo tipo di cade da un dirupo. 794 00:35:00,980 --> 00:35:05,480 E quindi se si aggiunge 1 a 255, cosa valore si ottiene in apparenza? 795 00:35:05,480 --> 00:35:06,180 0. 796 00:35:06,180 --> 00:35:09,700 E così i numeri accidentalmente, e forse, involontariamente, 797 00:35:09,700 --> 00:35:12,040 finiscono per avvolgere intorno come questo. 798 00:35:12,040 --> 00:35:14,079 Che cosa può essere l'implicazione di questo? 799 00:35:14,079 --> 00:35:15,620 Beh, ci sono un paio di cose diverse. 800 00:35:15,620 --> 00:35:18,751 Così uno si finisce per guardare come 0, involontariamente, 801 00:35:18,751 --> 00:35:20,750 ma è possibile tipo di vedere, anche nel mondo reale, 802 00:35:20,750 --> 00:35:23,416 nel bene e nel male, manifestazioni di questa idea di un limite. 803 00:35:23,416 --> 00:35:26,630 Per esempio, qualcuno di voi che hanno mai giocato Lego Star Wars, 804 00:35:26,630 --> 00:35:28,880 qualcuno capita di sapere il numero massimo di monete 805 00:35:28,880 --> 00:35:32,032 è possibile raccogliere in Lego Star Wars? 806 00:35:32,032 --> 00:35:35,640 Prendete una supposizione basata su domande leader di oggi. 807 00:35:35,640 --> 00:35:39,140 È più grande di 256 o 255. 808 00:35:39,140 --> 00:35:40,330 E '4 miliardi. 809 00:35:40,330 --> 00:35:42,080 Così si scopre, e ci sono alcune people-- 810 00:35:42,080 --> 00:35:46,080 alcuni googling confermato scorso notte-- hanno ottenuto 4 miliardi di monete d'oro, 811 00:35:46,080 --> 00:35:47,730 o roba del genere, in Lego Star Wars. 812 00:35:47,730 --> 00:35:49,860 Anche se a quanto pare, non c'è un modo per ingannare il gioco, 813 00:35:49,860 --> 00:35:53,222 c'è un bug o funzionalità, che consente di solo accumulare un sacco di punti. 814 00:35:53,222 --> 00:35:54,930 Ma il più grande possibile del valore, secondo 815 00:35:54,930 --> 00:35:58,360 a questa schermata di qualcuno che trovato on-line, è davvero, 4 miliardi. 816 00:35:58,360 --> 00:35:59,240 >> Ora perché? 817 00:35:59,240 --> 00:36:03,040 E 'precisamente 4.000 milioni, probabilmente perché qualcuno ha deciso, 818 00:36:03,040 --> 00:36:05,500 che stava scrivendo questo gioco, che potevano fare 4 miliardi, 819 00:36:05,500 --> 00:36:07,340 qualcosa, qualcosa, qualcosa, come il valore ho messo su 820 00:36:07,340 --> 00:36:10,256 con la calcolatrice precedente, ma è solo un po 'più pulito per l'uomo 821 00:36:10,256 --> 00:36:12,610 a dire il numero massimo di coins-- o borchie, 822 00:36:12,610 --> 00:36:14,860 come lo chiamano them-- che può raccogliere è di 4 miliardi. 823 00:36:14,860 --> 00:36:16,290 E così, perché è questo? 824 00:36:16,290 --> 00:36:20,310 Come è il gioco LEGO l'attuazione del contatore 825 00:36:20,310 --> 00:36:23,420 che è tenere traccia del numero di monete che hai? 826 00:36:23,420 --> 00:36:24,266 Stanno usando che cosa? 827 00:36:24,266 --> 00:36:26,390 Membro del pubblico: Si ferma contando dopo 4 miliardi. 828 00:36:26,390 --> 00:36:27,720 DAVID J MALAN: Si ferma contando dopo 4 miliardi, 829 00:36:27,720 --> 00:36:29,525 il che significa che può dedurre, come programmatore, 830 00:36:29,525 --> 00:36:31,960 che probabilmente sono utilizzando un numero intero a 32 bit. 831 00:36:31,960 --> 00:36:35,380 Come il programmatore letteralmente appena digitato, int, nel suo codice, 832 00:36:35,380 --> 00:36:39,620 e questo è il tipo di variabile che che stanno usando per memorizzare il codice di qualcuno. 833 00:36:39,620 --> 00:36:42,230 Quindi ci sono altre manifestazioni di questi tipi di limiti. 834 00:36:42,230 --> 00:36:45,063 >> Quindi non ho giocato a questo game-- e stavo leggendo sulla storia 835 00:36:45,063 --> 00:36:48,470 per confermare come much-- ma nel versione originale di civiltà, dove 836 00:36:48,470 --> 00:36:53,240 ti pare interagire con ogni altri e può fare la guerra o la pace, 837 00:36:53,240 --> 00:36:56,590 Gandhi doveva essere uno dei i personaggi più tranquille, come ho 838 00:36:56,590 --> 00:36:59,280 comprenderla, nella prima versione di Civilization. 839 00:36:59,280 --> 00:37:03,250 Ed infatti, su una scala da 1 a 10, la sua aggressività era solo un 1. 840 00:37:03,250 --> 00:37:05,620 Così mai così leggermente aggressivo, a quanto pare. 841 00:37:05,620 --> 00:37:11,590 >> Ma a un certo punto, è possibile a quanto pare installare la democrazia nel vostro geografia. 842 00:37:11,590 --> 00:37:14,900 E se si installa la democrazia nella vostra versione del gioco, 843 00:37:14,900 --> 00:37:17,320 allora il tuo livello di aggressività va giù. 844 00:37:17,320 --> 00:37:18,460 E 'una buona cosa. 845 00:37:18,460 --> 00:37:20,890 Le persone sono più tranquillo evidentemente, in tale situazione. 846 00:37:20,890 --> 00:37:23,190 Ma a quanto pare, qualcuno ha fatto non hanno una, se, condizione 847 00:37:23,190 --> 00:37:24,780 nella versione originale del codice. 848 00:37:24,780 --> 00:37:30,650 >> Così livello di aggressività di Gandhi è passato da positivo 1, meno 2, a negativo 1, 849 00:37:30,650 --> 00:37:33,840 ma il gioco non lo fa capire i numeri negativi. 850 00:37:33,840 --> 00:37:38,680 Che cosa è accaduto è stato l'aggressione di Gandhi livello è passato da 1, a 0, a negativo 1, 851 00:37:38,680 --> 00:37:40,900 che ha avuto l'effetto di avvolgendo intorno ad essere 852 00:37:40,900 --> 00:37:44,690 il personaggio più aggressivo nel gioco, ad un valore di 255, 853 00:37:44,690 --> 00:37:46,630 su una scala da 1 a 10. 854 00:37:46,630 --> 00:37:49,887 E da allora, ci sono stati più incarnazioni di questo gioco, 855 00:37:49,887 --> 00:37:51,720 e hanno mantenuto come una sorta di uovo di Pasqua, 856 00:37:51,720 --> 00:37:53,870 che Gandhi è apparentemente così terribilmente aggressivo. 857 00:37:53,870 --> 00:37:56,740 Ma era il risultato di un molto semplice errore di programmazione 858 00:37:56,740 --> 00:37:58,630 in tale versione molto precoce del gioco. 859 00:37:58,630 --> 00:38:02,860 >> Ora più inquietante, più recentemente, il Boeing 787 860 00:38:02,860 --> 00:38:05,720 è stato documentato come avere un bug, non il tipo di dispositivo 861 00:38:05,720 --> 00:38:07,340 si particolarmente desidera avere un bug. 862 00:38:07,340 --> 00:38:10,130 E i sintomi, che leggerò Qui, da un articolo on-line, 863 00:38:10,130 --> 00:38:13,840 era questo, un modello 787 aeroplano che è stato alimentato continuamente 864 00:38:13,840 --> 00:38:18,030 per 248 giorni può perdere tutto corrente alternata, AC, 865 00:38:18,030 --> 00:38:20,850 alimentazione elettrica, a causa le unità di controllo del generatore, 866 00:38:20,850 --> 00:38:23,330 GCUs, simultaneamente andare in modalità fail-safe. 867 00:38:23,330 --> 00:38:26,790 Quindi questo è stato un avvertimento emesso quando è stato scoperto il problema. 868 00:38:26,790 --> 00:38:28,750 Questa condizione è causata da un contatore software, 869 00:38:28,750 --> 00:38:32,230 interno al GCUs, così un numero intero o una variabile, 870 00:38:32,230 --> 00:38:36,850 che la volontà di overflow dopo 248 giorni di potenza continua. 871 00:38:36,850 --> 00:38:40,350 Boeing è in fase di lo sviluppo di un aggiornamento software che GCU 872 00:38:40,350 --> 00:38:42,350 porrà rimedio alla condizione di non sicurezza. 873 00:38:42,350 --> 00:38:44,226 >> Tanto come il missile scenario, in cui 874 00:38:44,226 --> 00:38:46,850 hanno avuto un qualche tipo di variabile che contava, e contando, 875 00:38:46,850 --> 00:38:50,720 e contare, ma a poco a poco straripante i confini della sua capacità, 876 00:38:50,720 --> 00:38:54,890 allo stesso modo ha fatto il maledetto aereo avere un overflow variabile 877 00:38:54,890 --> 00:38:56,410 dopo il tempo di esecuzione. 878 00:38:56,410 --> 00:38:59,240 E quindi il modo tongue-in-cheek di lavorare intorno a questo problema 879 00:38:59,240 --> 00:39:04,400 è quello di allineare, riavvio, il vostro aereo ogni 247 giorni, in modo che la memoria venga asciugò 880 00:39:04,400 --> 00:39:06,100 e la variabile torna a 0. 881 00:39:06,100 --> 00:39:09,410 Ma realizzare, questo è molto grande incarnazione del software, 882 00:39:09,410 --> 00:39:14,070 ma soprattutto perché abbiamo sentito parlare di Apple sistemi operativi andando in auto, 883 00:39:14,070 --> 00:39:18,030 e automobili auto-guida da parte di Google, e qualsiasi numero di incarnazioni del software 884 00:39:18,030 --> 00:39:21,000 nella nostra vita quotidiana, TV e orologi, e altro ancora, 885 00:39:21,000 --> 00:39:24,950 realizzare erano circondati da software, ognuno dei quali è scritto da noi umani. 886 00:39:24,950 --> 00:39:28,150 >> E come saremo tutti presto scopriremo, è molto facile e molto tipico 887 00:39:28,150 --> 00:39:30,250 di fare errori durante la scrittura del software. 888 00:39:30,250 --> 00:39:32,745 E se non li cattura, alcune cose cattive possono accadere. 889 00:39:32,745 --> 00:39:35,400 Ora a volte, un po ' cose divertenti possono accadere, 890 00:39:35,400 --> 00:39:38,280 o almeno qualche volta siamo sapere di aspettare qualche cattiveria. 891 00:39:38,280 --> 00:39:41,550 Così 0 diviso per 0, di grado la scuola, è generalmente una cosa negativa. 892 00:39:41,550 --> 00:39:43,050 E 'indefinito. 893 00:39:43,050 --> 00:39:46,440 E si scopre fuori-- e vediamo se il mio microfono può raccogliere questa up-- che Apple 894 00:39:46,440 --> 00:39:47,790 avuto qualche divertimento con questo di recente. 895 00:39:47,790 --> 00:39:48,850 Così ho un iPhone qui. 896 00:39:48,850 --> 00:39:54,160 Io vado a parlare con Siri e chiederle di darmi la risposta a 0 diviso per 0. 897 00:39:54,160 --> 00:39:55,850 Che cosa è 0 diviso per 0? 898 00:39:55,850 --> 00:39:59,350 899 00:39:59,350 --> 00:40:02,230 >> SIRI: Immaginate di avere 0 biscotti, e li dividono equamente 900 00:40:02,230 --> 00:40:03,540 tra 0 amici. 901 00:40:03,540 --> 00:40:05,810 Quanti biscotti fa ogni persona ottenere? 902 00:40:05,810 --> 00:40:06,350 Vedi? 903 00:40:06,350 --> 00:40:07,660 Non ha senso. 904 00:40:07,660 --> 00:40:10,540 E Cookie Monster è triste che non vi sono biscotti. 905 00:40:10,540 --> 00:40:13,987 E tu sei triste che non hai amici. 906 00:40:13,987 --> 00:40:15,570 DAVID J MALAN: È un po 'antipatico. 907 00:40:15,570 --> 00:40:17,550 Quindi questo è ciò che è stato appena detto lì. 908 00:40:17,550 --> 00:40:21,380 E 'indeterminata, non è definito, e in effetti, molti linguaggi di programmazione 909 00:40:21,380 --> 00:40:24,950 o, in realtà, compilatori rilevare quando, in un programma, 910 00:40:24,950 --> 00:40:27,050 cercare di dividere 0 per 0. 911 00:40:27,050 --> 00:40:29,830 Più divertente di questo, però, è che a quanto pare, Cookie Monster 912 00:40:29,830 --> 00:40:31,270 è su Twitter in questi giorni. 913 00:40:31,270 --> 00:40:37,610 Ed egli rispose a questo, con questo, che è assolutamente adorabile. 914 00:40:37,610 --> 00:40:40,110 Ma diamo un rapido sguardo a un paio di altri costrutti, 915 00:40:40,110 --> 00:40:43,459 e poi mettere un po 'di questo codice da utilizzare, in buoni modi. 916 00:40:43,459 --> 00:40:45,250 Così si scopre, oltre cicli for, c'è 917 00:40:45,250 --> 00:40:49,174 qualcosa chiamato un ciclo while, che un aspetto diverso e si realizza 918 00:40:49,174 --> 00:40:51,590 un po 'e differently-- avremo finalmente vediamo examples-- 919 00:40:51,590 --> 00:40:53,500 ma in un certo senso, è più semplice perché 920 00:40:53,500 --> 00:40:56,670 non consente di inizializzare e aggiornare nel limite del ciclo. 921 00:40:56,670 --> 00:40:57,794 È ancora possibile attuarla. 922 00:40:57,794 --> 00:41:01,219 Così si può fare le stesse identiche cose con un ciclo while, come con un ciclo for, 923 00:41:01,219 --> 00:41:03,260 ma la sintassi, ultimately-- come vedremo alla fine 924 00:41:03,260 --> 00:41:04,551 see-- sta per essere diverso. 925 00:41:04,551 --> 00:41:07,450 C'è anche un ciclo Do While, che è in realtà un po 'diverso, 926 00:41:07,450 --> 00:41:09,640 in che mentre un ciclo for e un ciclo while sempre 927 00:41:09,640 --> 00:41:13,005 controllare la loro condizione prima, se leggete questo top cosa a fondo, 928 00:41:13,005 --> 00:41:16,440 che tipo di sembra che stia per controllare la propria condizione ultima, perché è 929 00:41:16,440 --> 00:41:17,910 veramente l'ultima riga di codice. 930 00:41:17,910 --> 00:41:20,580 E in effetti, che sta per essere utile in alcuni programmi che scriviamo, 931 00:41:20,580 --> 00:41:23,746 se si vuole fare qualcosa ciecamente e, infine, controllare le condizioni. 932 00:41:23,746 --> 00:41:25,205 Questo non è necessariamente una cosa negativa. 933 00:41:25,205 --> 00:41:27,912 Se vogliamo delle variabili, si può fare in un paio di modi diversi. 934 00:41:27,912 --> 00:41:30,290 E abbiamo visto nel Foxtrot cartone animato, un modo di fare, 935 00:41:30,290 --> 00:41:33,400 dove si dichiara la variabile, come int contatore e virgola, 936 00:41:33,400 --> 00:41:36,570 e poi magari la prossima later-- la linea, forse 10 linee later-- 937 00:41:36,570 --> 00:41:37,800 effettivamente inizializzato. 938 00:41:37,800 --> 00:41:42,230 Quindi queste 2 righe di codice dichiarare una variabile di tipo int 939 00:41:42,230 --> 00:41:44,930 e chiamarlo contatore, quindi dà me abbastanza bit per contenere un int. 940 00:41:44,930 --> 00:41:48,230 E poi alla fine, mette il valore 0 in quella variabile. 941 00:41:48,230 --> 00:41:51,250 Organizza i di 0 e 1 in un modello, che conosciamo dalla settimana scorsa, 942 00:41:51,250 --> 00:41:53,260 rappresenta il numero che conosciamo come 0. 943 00:41:53,260 --> 00:41:56,920 O francamente, si può fare questo molto più brevemente, proprio come questo. 944 00:41:56,920 --> 00:41:59,390 >> Ora abbiamo anche la capacità di richiamare le funzioni. 945 00:41:59,390 --> 00:42:03,070 E infatti, ecco una linea 2 programma o un estratto di esso, 946 00:42:03,070 --> 00:42:06,157 che ci permette di realtà scrivere del codice che 947 00:42:06,157 --> 00:42:08,990 ottiene una stringa dal user-- molto come il nostro volontario un momento ago-- 948 00:42:08,990 --> 00:42:11,320 memorizzando il risultato in una variabile denominata nome, 949 00:42:11,320 --> 00:42:15,470 e then-- molto simile con il nostro volontario con stampe printf-- fuori quei valori 950 00:42:15,470 --> 00:42:19,180 passando due argomenti, il stringa, seguita dalla variabile 951 00:42:19,180 --> 00:42:20,781 chiamato, nome, stesso. 952 00:42:20,781 --> 00:42:23,155 Quindi, diamo uno sguardo, prima di torniamo a Mario lì, 953 00:42:23,155 --> 00:42:26,010 un paio di ora, esempi di questo. 954 00:42:26,010 --> 00:42:30,537 >> Ho intenzione di andare avanti e aperto fino, diciamo, la funzione-0.c. 955 00:42:30,537 --> 00:42:33,120 E come sempre, questo codice è disponibile sul sito web del corso, 956 00:42:33,120 --> 00:42:35,660 in modo da poter giocare insieme a a casa e guardare in un secondo momento. 957 00:42:35,660 --> 00:42:40,400 Ma ecco il programma nel suo essenza, dalla linea 17 al 22. 958 00:42:40,400 --> 00:42:43,270 Il programma principale è dove il programma è sempre sta per iniziare. 959 00:42:43,270 --> 00:42:46,980 Questo programma, a quanto pare, sta andando per stampare il vostro nome, colon. 960 00:42:46,980 --> 00:42:50,320 Sta andando poi a chiamare GetString, proprio come abbiamo fatto con i nostri volontari. 961 00:42:50,320 --> 00:42:53,365 Poi, questo è interessante, sta andando a chiamare PrintName. 962 00:42:53,365 --> 00:42:56,490 Si scopre, per tutto questo tempo, ci sembra essere una funzione chiamata PrintName. 963 00:42:56,490 --> 00:42:57,614 Che stampa il nome di qualcuno. 964 00:42:57,614 --> 00:43:01,210 Non abbiamo avuto bisogno di usare printf da ieri, c'è PrintName. 965 00:43:01,210 --> 00:43:03,500 >> Ma questo è fuorviante perché non lo fa PrintName 966 00:43:03,500 --> 00:43:06,760 venire con C. La gente non ha fatto inventarlo circa 40 o 50 anni fa, 967 00:43:06,760 --> 00:43:07,990 L'ho fatto, invece. 968 00:43:07,990 --> 00:43:10,330 E infatti, se ho scorrere ulteriormente verso il basso, avviso 969 00:43:10,330 --> 00:43:14,200 come posso scrivere il mio funzioni in C. avremo finalmente 970 00:43:14,200 --> 00:43:16,319 spiegare perché continuiamo a dire, vuoto, in alcuni punti, 971 00:43:16,319 --> 00:43:18,110 ma per oggi, andiamo basta guardare il nome. 972 00:43:18,110 --> 00:43:20,905 >> Sulla linea 24, se si vuole creare la propria funzione, 973 00:43:20,905 --> 00:43:22,780 letteralmente scrive il il nome della funzione. 974 00:43:22,780 --> 00:43:24,340 Ho scelto PrintName. 975 00:43:24,340 --> 00:43:26,159 Tra parentesi, è quindi specificare quali tipi 976 00:43:26,159 --> 00:43:28,450 di ingressi, e quanti voi vuole questa funzione per prendere. 977 00:43:28,450 --> 00:43:31,906 In questo caso, voglio prendere 1 variabile chiamata, nome, 978 00:43:31,906 --> 00:43:34,030 e sta andando ad essere di tipo, stringa, quindi sta andando 979 00:43:34,030 --> 00:43:35,780 essere una sequenza di caratteri. 980 00:43:35,780 --> 00:43:39,170 E poi, questo program-- molto simile a Scratch, 981 00:43:39,170 --> 00:43:42,590 si può avere di puzzle personalizzati pieces-- sta per avere questo comportamento personalizzato. 982 00:43:42,590 --> 00:43:46,760 Sta andando a chiamare printf passando, ciao, segnaposto, 983 00:43:46,760 --> 00:43:49,110 e poi sta andando a collegare in ciò che l'utente chiamato. 984 00:43:49,110 --> 00:43:51,450 >> Quindi questo è un esempio di ciò che uno scienziato informatico sarebbe 985 00:43:51,450 --> 00:43:55,090 astrazione chiamata o funzionale decomposizione, che sono solo 986 00:43:55,090 --> 00:43:58,110 modi di fantasia di saying-- è se vi piace questa idea di alto livello, 987 00:43:58,110 --> 00:44:01,569 come voglio funzionalità che Stampe nome di qualcuno, assolutamente si 988 00:44:01,569 --> 00:44:04,360 può letteralmente scrivere printf e poi passare gli argomenti che si desidera, 989 00:44:04,360 --> 00:44:07,340 e il programma funzionerà, come ha da Mercoledì. 990 00:44:07,340 --> 00:44:10,510 Ma si può iniziare a astrarre la nozione di stampa di un nome. 991 00:44:10,510 --> 00:44:13,270 Si può dare un nome, come PrintName, e questo 992 00:44:13,270 --> 00:44:15,280 è questa idea di stratificazione a partire dalla settimana 0. 993 00:44:15,280 --> 00:44:19,910 >> D'ora in poi, io e te non devo sapere o interessa come PrintName è implementato. 994 00:44:19,910 --> 00:44:22,470 Si utilizza printf, forse non, chissà che cosa usa? 995 00:44:22,470 --> 00:44:23,410 A chi importa? 996 00:44:23,410 --> 00:44:26,034 Ora sto parlando qui, invece di quaggiù. 997 00:44:26,034 --> 00:44:28,700 E in effetti, come i nostri programmi ottengono più avanzato e sofisticato, 998 00:44:28,700 --> 00:44:32,550 stiamo andando a continuare a prendere per scontato che esistono più bassi pezzi del puzzle di livello. 999 00:44:32,550 --> 00:44:34,780 Perché noi li scrivevamo o qualcun altro ha fatto, così 1000 00:44:34,780 --> 00:44:36,910 poter poi costruire su di essi. 1001 00:44:36,910 --> 00:44:39,430 Diamo uno sguardo a questo variante funzionare uno. 1002 00:44:39,430 --> 00:44:41,780 >> Quindi questo è un po 'più advanced, ma risulta 1003 00:44:41,780 --> 00:44:44,570 che nella biblioteca di CS50, c'è solo una funzione di GetInt. 1004 00:44:44,570 --> 00:44:47,720 Non pensavamo che, anni fa, a implementare una funzione GetPositiveInt. 1005 00:44:47,720 --> 00:44:50,970 E questo è un po 'fastidioso, perché se voi ragazzi stanno scrivendo un programma in cui 1006 00:44:50,970 --> 00:44:53,325 si vuole ottenere un positivo intero da parte dell'utente, 1007 00:44:53,325 --> 00:44:55,010 si può assolutamente utilizzare GetInt. 1008 00:44:55,010 --> 00:44:57,840 E si può assolutamente controllare con la condizione e forse un ciclo 1009 00:44:57,840 --> 00:45:00,320 se tale int è maggiore di 0 e urlare a l'utente 1010 00:45:00,320 --> 00:45:02,699 se lui o lei non dà un numero positivo. 1011 00:45:02,699 --> 00:45:04,740 Ma costruiamo questo Blocco noi stessi, una, 1012 00:45:04,740 --> 00:45:06,555 pezzo Scratch personalizzato, se si vuole. 1013 00:45:06,555 --> 00:45:08,680 Ho intenzione di avere un programma qui che alla fine, io 1014 00:45:08,680 --> 00:45:11,780 vogliono essere in grado di chiamare GetPositiveInt, e voglio essere 1015 00:45:11,780 --> 00:45:14,200 in grado di stampare qualsiasi cosa che int è. 1016 00:45:14,200 --> 00:45:16,240 Ma questo è astratto via ora. 1017 00:45:16,240 --> 00:45:19,050 E 'stato appena dato un alto livello nome che dice quello che fa, 1018 00:45:19,050 --> 00:45:21,780 che è meraviglioso perché è molto intuitivo ora da leggere. 1019 00:45:21,780 --> 00:45:24,710 E se lo faccio importa cosa c'è sotto il cofano, mi permetta di scorrere verso il basso. 1020 00:45:24,710 --> 00:45:27,140 Ed è un po 'intimidatorio all'inizio, specialmente 1021 00:45:27,140 --> 00:45:29,470 se questo è il primo programma, ma diamo uno sguardo. 1022 00:45:29,470 --> 00:45:32,860 >> Non ho più sto dicendo, vuoto, perché si scopre funzioni, 1023 00:45:32,860 --> 00:45:34,777 molto simile GetString, può restituire un valore per me. 1024 00:45:34,777 --> 00:45:36,610 Essi non solo hanno per stampare su schermo, 1025 00:45:36,610 --> 00:45:38,410 si può effettivamente mano me qualcosa di nuovo. 1026 00:45:38,410 --> 00:45:41,535 E mentre prima PrintName, Non avevo bisogno di nulla in cambio. 1027 00:45:41,535 --> 00:45:44,160 Avevo bisogno l'effetto collaterale di qualcosa che mostra sullo schermo, 1028 00:45:44,160 --> 00:45:46,570 ma non ho bisogno di un uomo a darmi qualcosa in cambio. 1029 00:45:46,570 --> 00:45:48,840 Qui, con GetPositiveInt, come con GetInt, 1030 00:45:48,840 --> 00:45:50,640 Voglio essere consegnato qualcosa in cambio. 1031 00:45:50,640 --> 00:45:53,220 Così sto dicendo che non, vuoto, sulla linea 23, ma int, 1032 00:45:53,220 --> 00:45:55,570 che dice, questa funzione che sto scrivendo, 1033 00:45:55,570 --> 00:45:58,860 chiamato GetPositiveInt sta per mi restituire un numero intero, non nulla, 1034 00:45:58,860 --> 00:45:59,890 non nulle. 1035 00:45:59,890 --> 00:46:03,280 >> Nel frattempo, sta andando a prendere nessuna ingressi, così ho, tipo di, invertito esso. 1036 00:46:03,280 --> 00:46:08,280 Non sto dando GetPositiveInt qualsiasi Ingresso, voglio che mi dia la sua uscita. 1037 00:46:08,280 --> 00:46:09,800 E allora che cosa succede ora? 1038 00:46:09,800 --> 00:46:11,640 Quindi, ecco come posso dichiarare una variabile. 1039 00:46:11,640 --> 00:46:15,090 Ho fatto al di fuori del ciclo, per motivi ci vediamo alla fine, 1040 00:46:15,090 --> 00:46:17,700 ma questo dà solo me 32 bit chiamato, n, 1041 00:46:17,700 --> 00:46:20,952 e ho predeterminare loro di memorizzare numeri interi. 1042 00:46:20,952 --> 00:46:23,660 Ed ecco che, mentre fanno costrutto, ed è per questo è utile. 1043 00:46:23,660 --> 00:46:26,700 Letteralmente fare questo, mentre n è inferiore a 1. 1044 00:46:26,700 --> 00:46:28,030 Quindi vediamo cosa succede. 1045 00:46:28,030 --> 00:46:30,760 A stampare, per favore dammi un int positivo. 1046 00:46:30,760 --> 00:46:34,300 Allora ottengo un int, utilizzando CS50 di funzionare e memorizzato in n. 1047 00:46:34,300 --> 00:46:38,990 >> E poi, che riga di codice probabilmente viene eseguito il prossimo, logico? 1048 00:46:38,990 --> 00:46:41,890 Quale linea numero? 1049 00:46:41,890 --> 00:46:42,571 Sì, così 31. 1050 00:46:42,571 --> 00:46:45,320 Non si sa fino a quando hai questo stato detto o sorta di inferire che, 1051 00:46:45,320 --> 00:46:45,986 ma questo è vero. 1052 00:46:45,986 --> 00:46:48,280 Va verso il basso e poi continua a ripetersi. 1053 00:46:48,280 --> 00:46:55,840 Quindi, se ho digitato per esempio, il numero negativo 1, è n meno di 1 negativo? 1054 00:46:55,840 --> 00:46:56,340 Già. 1055 00:46:56,340 --> 00:46:58,470 Poiché negativo 1 è inferiore a 1. 1056 00:46:58,470 --> 00:46:59,510 Quindi, che cosa dovrebbe accadere? 1057 00:46:59,510 --> 00:47:03,260 Ho intenzione di fare questo mentre n è minore di 1, 1058 00:47:03,260 --> 00:47:05,760 così ho intenzione di tornare alla linea 28. 1059 00:47:05,760 --> 00:47:09,530 >> E ogni tempo-- e corriamo questo-- fare Funzione 1 a compilarlo, 1060 00:47:09,530 --> 00:47:11,340 e ora dot funzione 1 tagliare. 1061 00:47:11,340 --> 00:47:14,280 Se scriv negativo 1, è intenzione di continuare a inveire contro di me 1062 00:47:14,280 --> 00:47:17,530 fino a quando collaboro perché ogni dei miei ingressi è inferiore a 1 1063 00:47:17,530 --> 00:47:20,070 e se è mentre meno di 1, Ho intenzione di continuare a fare questo. 1064 00:47:20,070 --> 00:47:24,240 Se ho finalmente dato un numero come 50, per fortuna, si dice, grazie per il 50. 1065 00:47:24,240 --> 00:47:24,970 Perché? 1066 00:47:24,970 --> 00:47:30,640 Perché appena n non è inferiore a 1, mi fermo sempre bloccato in questo ciclo, 1067 00:47:30,640 --> 00:47:33,840 e questa nuova parola chiave oggi, ritorno, letteralmente lo fa. 1068 00:47:33,840 --> 00:47:36,800 Così ho appena implementato, in un senso, l'equivalente di GetString, 1069 00:47:36,800 --> 00:47:40,590 dove sto restituendo a chi mi sta usando, un certo valore. 1070 00:47:40,590 --> 00:47:42,820 Essa non deve essere una stringa, è un int. 1071 00:47:42,820 --> 00:47:44,990 Quindi, un semplice, rapido ad esempio, ma ce la faremo presto 1072 00:47:44,990 --> 00:47:47,930 vedere alcuni più sofisticati versioni ancora. 1073 00:47:47,930 --> 00:47:53,882 In realtà, diamo uno sguardo ad un uno numerico, che si chiama return.c. 1074 00:47:53,882 --> 00:47:55,590 E questo è in realtà un po 'più semplice. 1075 00:47:55,590 --> 00:47:59,010 Quindi lo scopo di questo programma in life-- cerchiamo di compilare ed eseguirlo, 1076 00:47:59,010 --> 00:48:03,090 così fare ritorno, dot barra, avviso return-- 1077 00:48:03,090 --> 00:48:05,530 il programma cubi semplicemente il valore 2. 1078 00:48:05,530 --> 00:48:08,410 E 'abbastanza stupido, è difficile codice, non ci vuole nessun input, 1079 00:48:08,410 --> 00:48:12,220 ma lo fa dimostrare un'altra funzione che ho scritto io. 1080 00:48:12,220 --> 00:48:15,760 Così qui, ho dichiarato un variabile, chiamato x, di tipo int, 1081 00:48:15,760 --> 00:48:17,840 pari al numero 2, del tutto arbitraria. 1082 00:48:17,840 --> 00:48:19,530 Questo è solo un po 'di stampa soffice. 1083 00:48:19,530 --> 00:48:23,070 Dice x ora, tale e tale, cubatura dot dot dot. 1084 00:48:23,070 --> 00:48:26,390 E la magia è apparentemente in linea 21. 1085 00:48:26,390 --> 00:48:30,120 Sto chiamando una funzione chiamata, cubo, Sto consegnando un foglio di carta 1086 00:48:30,120 --> 00:48:32,890 con il numero 2 scritto su di esso, e quale valore, matematicamente, 1087 00:48:32,890 --> 00:48:34,860 voglio uscirne? 1088 00:48:34,860 --> 00:48:36,570 Proprio come un controllo di integrità? 1089 00:48:36,570 --> 00:48:37,070 8. 1090 00:48:37,070 --> 00:48:37,570 Destra? 1091 00:48:37,570 --> 00:48:40,160 Che voglio 2 Cubed indietro, 2 a la potenza di 3, 8 così indietro. 1092 00:48:40,160 --> 00:48:42,570 >> Allora, dove sta cubo implementato? 1093 00:48:42,570 --> 00:48:44,349 Beh, avviso è implementato qui. 1094 00:48:44,349 --> 00:48:47,140 E proprio come prima, logicamente, anche se la sintassi è probabilmente 1095 00:48:47,140 --> 00:48:49,320 molto nuovo per molti di voi, Voglio questa funzione 1096 00:48:49,320 --> 00:48:51,780 a portata di mano mi riporta un foglio di carta con un int su di esso. 1097 00:48:51,780 --> 00:48:53,990 Così ho un int, il nome è arbitrario, 1098 00:48:53,990 --> 00:48:55,530 ma convenientemente chiamato cubo. 1099 00:48:55,530 --> 00:48:58,430 L'ingresso ad esso, è di n tipo integer, così che è 1100 00:48:58,430 --> 00:49:00,800 come posso passare nel numero 2 su un foglio di carta. 1101 00:49:00,800 --> 00:49:03,910 E poi si scopre C supporti matematica, in modo da non dovete xe per i tempi, 1102 00:49:03,910 --> 00:49:06,680 è sufficiente utilizzare l'asterisco per la moltiplicazione. 1103 00:49:06,680 --> 00:49:11,070 E questo restituisce n volte n volte n, che è semplicemente un valore al cubo. 1104 00:49:11,070 --> 00:49:12,840 >> Allora, dove stiamo andando con tutto questo? 1105 00:49:12,840 --> 00:49:14,570 Questo è sicuramente un vorticoso giro, tranquilli, 1106 00:49:14,570 --> 00:49:16,410 che in sezioni Super e nel problem set 1, 1107 00:49:16,410 --> 00:49:18,368 sarete camminato attraverso tutto ciò tanto più. 1108 00:49:18,368 --> 00:49:22,490 E nel problema set 1, faremo transizione dal mondo grafica di Scratch 1109 00:49:22,490 --> 00:49:25,640 a qualcosa di più della riga di comando in C. Ma ci ispiriamo 1110 00:49:25,640 --> 00:49:27,680 da questo gioco qui da ieri, in cui 1111 00:49:27,680 --> 00:49:31,591 utilizzando C e l'edizione standard del p set ti implementare piramide di Mario. 1112 00:49:31,591 --> 00:49:34,340 E nell'edizione degli hacker della p set, se lo desiderano ad eleggere, 1113 00:49:34,340 --> 00:49:38,280 si implementare un po 'di più sfidando piramide con due picchi. 1114 00:49:38,280 --> 00:49:41,239 Potrai anche implementare un algoritmo, un algoritmo greedy. 1115 00:49:41,239 --> 00:49:43,030 Si scopre là del una logica interessante 1116 00:49:43,030 --> 00:49:45,640 dietro il processo di in esecuzione della stazione di un cassiere 1117 00:49:45,640 --> 00:49:47,410 e in realtà consegna qualcuno cambiamento indietro. 1118 00:49:47,410 --> 00:49:50,410 C'è un algoritmo che è abbastanza semplice, che si potrebbe anche 1119 00:49:50,410 --> 00:49:53,576 cogliere intuitivamente la prima volta che leggete it-- rendendosi conto che è quello che ho sempre 1120 00:49:53,576 --> 00:49:57,110 fatto in qualsiasi momento ho dato a qualcuno un po ' soldi back-- che permette di sempre 1121 00:49:57,110 --> 00:50:00,679 minimizzare il numero di Note di carta o monete metalliche 1122 00:50:00,679 --> 00:50:02,220 che si sta restituendo all'utente. 1123 00:50:02,220 --> 00:50:04,610 E questo, naturalmente, è interessante perché se si va a CVS o roba del genere, 1124 00:50:04,610 --> 00:50:06,430 non si vuole essere consegnato un sacco di quelli 1125 00:50:06,430 --> 00:50:07,596 o un intero gruppo di centesimi. 1126 00:50:07,596 --> 00:50:10,120 Si desidera che il minor numero monete, probabilmente, possibile. 1127 00:50:10,120 --> 00:50:13,070 >> Infine, potrai anche essere sfidati a dilettarsi con il mondo d'acqua 1128 00:50:13,070 --> 00:50:17,220 ed effettivamente ottenere un apprezzamento per una mappatura tra i tassi di flusso, 1129 00:50:17,220 --> 00:50:19,890 di come, l'acqua in una doccia, quanta acqua viene utilizzata. 1130 00:50:19,890 --> 00:50:22,640 E l'allusione in esso, sarà questa clip qui, 1131 00:50:22,640 --> 00:50:24,840 che finiremo avanti per soli 60 secondi, che 1132 00:50:24,840 --> 00:50:29,070 dipinge un quadro di docce a basso flusso. 1133 00:50:29,070 --> 00:50:30,886 >> [RIPRODUZIONE VIDEO] 1134 00:50:30,886 --> 00:50:31,385 -Tutto ok. 1135 00:50:31,385 --> 00:50:32,774 Ho tutto qui. 1136 00:50:32,774 --> 00:50:35,800 Ho ottenuto il ciclone Serie F, Hydra, Jetflow, Stoccolma 1137 00:50:35,800 --> 00:50:37,660 Supersteam, è il nome. 1138 00:50:37,660 --> 00:50:39,265 >> -E Cosa mi consiglia? 1139 00:50:39,265 --> 00:50:40,460 >> -Cosa stai cercando? 1140 00:50:40,460 --> 00:50:41,300 >> Uomo-Power. 1141 00:50:41,300 --> 00:50:42,285 Energia. 1142 00:50:42,285 --> 00:50:42,910 -Come Silkwood. 1143 00:50:42,910 --> 00:50:44,520 -Che È per le radiazioni. 1144 00:50:44,520 --> 00:50:46,335 -Giusto. 1145 00:50:46,335 --> 00:50:48,275 -Ora Che cosa è questo? 1146 00:50:48,275 --> 00:50:49,704 -Che È la Commando 450. 1147 00:50:49,704 --> 00:50:50,620 Io non vendo quello. 1148 00:50:50,620 --> 00:50:51,700 >> -Ma Questo è quello che vogliamo. 1149 00:50:51,700 --> 00:50:52,680 Si tratta di un commando di 450. 1150 00:50:52,680 --> 00:50:53,882 >> -No Mi credono. 1151 00:50:53,882 --> 00:50:55,090 E 'utilizzato solo nel circo. 1152 00:50:55,090 --> 00:50:56,512 E 'per gli elefanti. 1153 00:50:56,512 --> 00:50:59,356 >> -Ti Pagare nulla. 1154 00:50:59,356 --> 00:51:01,252 >> -Cosa Di Jerry? 1155 00:51:01,252 --> 00:51:02,760 >> -Non Poteva sopportarlo. 1156 00:51:02,760 --> 00:51:04,910 E 'delicato. 1157 00:51:04,910 --> 00:51:05,750 O si. 1158 00:51:05,750 --> 00:51:36,737 1159 00:51:36,737 --> 00:51:37,320 [FINE RIPRODUZIONE] 1160 00:51:37,320 --> 00:51:37,700 DAVID J MALAN: Va bene. 1161 00:51:37,700 --> 00:51:38,820 Questo se per CS50. 1162 00:51:38,820 --> 00:51:40,050 Ci vediamo la prossima settimana. 1163 00:51:40,050 --> 00:51:45,910 1164 00:51:45,910 --> 00:51:49,029 >> SPEAKER 1: [? Scully?], [? Ian,?] per quanto riguarda questo progetto outro, 1165 00:51:49,029 --> 00:51:50,362 cosa hai ragazzi trovare? 1166 00:51:50,362 --> 00:51:51,990 >> SPEAKER 2: Beh, abbiamo dato una varietà di pensiero, 1167 00:51:51,990 --> 00:51:53,250 e pensiamo che il modo migliore a-- 1168 00:51:53,250 --> 00:51:53,660 >> SPEAKER 3: Posso? 1169 00:51:53,660 --> 00:51:54,326 >> SPEAKER 2: Sì. 1170 00:51:54,326 --> 00:51:56,360 Con tutti i mezzi, in realtà. 1171 00:51:56,360 --> 00:51:59,425 >> SPEAKER 3: Quindi penso possiamo riassumere la nostra idea 1172 00:51:59,425 --> 00:52:05,450 per le outros con uno word-- nulla. 1173 00:52:05,450 --> 00:52:08,950 1174 00:52:08,950 --> 00:52:10,409 >> DAVID J MALAN: Niente? 1175 00:52:10,409 --> 00:52:11,200 SPEAKER 3: Niente. 1176 00:52:11,200 --> 00:52:12,990 DAVID J MALAN: Che cosa vuol dire? 1177 00:52:12,990 --> 00:52:16,260 SPEAKER 3: I outros sono per nulla. 1178 00:52:16,260 --> 00:52:21,720 SPEAKER 2: Beh, voglio dire, in filosofia, Voglio dire, niente è sempre qualcosa. 1179 00:52:21,720 --> 00:52:24,200 SPEAKER 1: Così what's-- qual è la premessa? 1180 00:52:24,200 --> 00:52:25,720 SPEAKER 3: Quindi è come la vita. 1181 00:52:25,720 --> 00:52:26,680 OK. 1182 00:52:26,680 --> 00:52:28,294 Cosa hai fatto oggi? 1183 00:52:28,294 --> 00:52:31,811 >> DAVID J MALAN: mi sono alzato, aveva prima colazione, ed è venuto a lavorare. 1184 00:52:31,811 --> 00:52:34,056 >> SPEAKER 3: Questo è un outro. 1185 00:52:34,056 --> 00:52:36,806 SPEAKER 2: Ma, voglio dire, non dovrebbe è successo qualcosa a lui su the-- 1186 00:52:36,806 --> 00:52:37,889 SPEAKER 3: No, no, no, no. 1187 00:52:37,889 --> 00:52:40,220 Non accade nulla. 1188 00:52:40,220 --> 00:52:42,910 >> SPEAKER 1: Allora, perché stiamo guardando? 1189 00:52:42,910 --> 00:52:46,956 >> SPEAKER 3: Perché si tratta di un outro per CS50. 1190 00:52:46,956 --> 00:52:48,652 >> DAVID J MALAN: Non ancora. 1191 00:52:48,652 --> 00:52:49,151