1 00:00:07,590 --> 00:00:09,920 [Powered by Google Translate] DAVID J. MALAN: Va bene, questo è CS50 e questo è il 2 00:00:09,920 --> 00:00:15,250 fine della settimana 1, così carte sono in studio e il numero totale di 3 00:00:15,250 --> 00:00:18,640 compagni di classe che avete quest'anno è 745. 4 00:00:18,640 --> 00:00:20,920 E siamo così entusiasti di avere così tanti di voi nel corso 5 00:00:20,920 --> 00:00:23,680 questo semestre, ma anche se questo corso è così grande, 6 00:00:23,680 --> 00:00:26,090 rendersi conto che si tratta di queste cose come pranzi di venerdì, come 7 00:00:26,090 --> 00:00:29,020 orari di ufficio, di 15 persone, sezioni e così via che 8 00:00:29,020 --> 00:00:30,590 devono realmente per creare questa più intima 9 00:00:30,590 --> 00:00:31,140 ambiente. 10 00:00:31,140 --> 00:00:34,070 Quindi, anche se si può raccogliere una o due volte alla settimana, qui in 11 00:00:34,070 --> 00:00:36,420 Sanders, sa che gran parte della vostra esperienza in questo corso 12 00:00:36,420 --> 00:00:39,330 sarà molto essere hands-on sul fianco dei tuoi compagni di classe 13 00:00:39,330 --> 00:00:40,730 e il personale docente. 14 00:00:40,730 --> 00:00:43,960 >> Quindi qui si va, Autunno 2012. 15 00:00:43,960 --> 00:00:47,530 Quindi ricordare che l'ultima volta abbiamo finito con una nota di 16 00:00:47,530 --> 00:00:50,460 imprecisione, parlando della rappresentazione dei numeri. 17 00:00:50,460 --> 00:00:52,950 E abbiamo guardato uno dei fallimenti che è successo, nel 18 00:00:52,950 --> 00:00:54,920 mondo reale, quando si trattava di malintesi 19 00:00:54,920 --> 00:00:55,890 funzionamento dei computer. 20 00:00:55,890 --> 00:00:58,590 Bene, oggi ci rivisitare un'altra di quelle idee 21 00:00:58,590 --> 00:01:01,410 così come continuare la nostra discussione del cliente CS50 22 00:01:01,410 --> 00:01:04,090 e C e che cosa significa veramente da programmare. 23 00:01:04,090 --> 00:01:06,430 Ma prima, solo un paio di annunci vortice. 24 00:01:06,430 --> 00:01:08,930 >> Sezioni iniziare questa Domenica, e la prima settimana è sempre un 25 00:01:08,930 --> 00:01:11,030 po 'di un rapido avvio, perché abbiamo appena ricevuto in 26 00:01:11,030 --> 00:01:12,620 i moduli di sezione. 27 00:01:12,620 --> 00:01:14,450 Stiamo facendo la stessa cosa, ora, con i compagni di insegnamento, ora 28 00:01:14,450 --> 00:01:16,410 di conoscere i loro programmi, quindi stiamo puntando, da 29 00:01:16,410 --> 00:01:19,380 Sabato mattina, per seguire con voi con la vostra sezione 30 00:01:19,380 --> 00:01:20,760 assegnazione e TF. 31 00:01:20,760 --> 00:01:22,770 Rendetevi conto che inizieranno il giorno seguente, Domenica 32 00:01:22,770 --> 00:01:24,510 o Lunedi o Martedì. 33 00:01:24,510 --> 00:01:27,730 E poi ci ospiterà cambiamenti di sezione che si presentano 34 00:01:27,730 --> 00:01:28,690 nei giorni a venire. 35 00:01:28,690 --> 00:01:31,590 Orario di ricevimento, nel frattempo, sono, ancora una volta, questa sera, 08:00 a 11, in 36 00:01:31,590 --> 00:01:33,740 Annenberg, così come domani sera. 37 00:01:33,740 --> 00:01:36,150 Anche se il set di problemi sono generalmente dovute il giovedì 38 00:01:36,150 --> 00:01:39,020 a mezzogiorno, rende conto di avere fino a cinque giorni di ritardo a spendere, 39 00:01:39,020 --> 00:01:42,430 quindi sulla disponibilità di orari di ufficio il giovedì se 40 00:01:42,430 --> 00:01:45,930 si contanti in uno di quei giorni di ritardo e, quindi, presentare 41 00:01:45,930 --> 00:01:47,070 qualcosa il Venerdì. 42 00:01:47,070 --> 00:01:50,850 Mi permetto di suggerire che Scratch è tra i più divertente, tra le 43 00:01:50,850 --> 00:01:52,390 più bassi set problema chiave. 44 00:01:52,390 --> 00:01:55,160 E vorrei appendere su quei giorni di ritardo, strategicamente, basta 45 00:01:55,160 --> 00:01:57,380 per la fine del semestre in cui la vita comincia a mettersi in cammino 46 00:01:57,380 --> 00:01:59,470 con le elezioni di medio termine e altre classi. 47 00:01:59,470 --> 00:02:01,580 Set Problema 1, nel frattempo, sarebbe stato pubblicato sul suo corso la 48 00:02:01,580 --> 00:02:06,080 sito web di questo Venerdì, come sarà al passo del corso 49 00:02:06,080 --> 00:02:08,789 attraverso il video, che sarà girato alle 02:30 il Venerdì 50 00:02:08,789 --> 00:02:11,890 e poi pubblicato online il giorno successivo. 51 00:02:11,890 --> 00:02:13,880 >> Quindi abbiamo finito il Lunedi. 52 00:02:13,880 --> 00:02:15,450 Voglio - in realtà, una nota qui. 53 00:02:15,450 --> 00:02:18,870 Poiché le classi - perché Sanders non esattamente prestano 54 00:02:18,870 --> 00:02:22,220 stessa al casual Q & A avanti e indietro terribilmente bene, siamo 55 00:02:22,220 --> 00:02:24,030 intenzione di provare qualcosa di un po 'di novità di quest'anno, in base al quale 56 00:02:24,030 --> 00:02:26,160 se non stai bene alzando la mano o semplicemente 57 00:02:26,160 --> 00:02:28,800 preferisce non alzare la mano in una stanza come questa, 58 00:02:28,800 --> 00:02:30,710 stiamo andando ad avere alcuni dei compagni di insegnamento e CA 59 00:02:30,710 --> 00:02:33,260 cs50.net/discuss equipaggio durante la lezione. 60 00:02:33,260 --> 00:02:35,440 Quindi, se avete una domanda, perché ero completamente 61 00:02:35,440 --> 00:02:37,510 chiaro su qualcosa o siete curiosi di sapere un po 'di 62 00:02:37,510 --> 00:02:39,640 argomento, prova a pubblicare lì. 63 00:02:39,640 --> 00:02:42,670 Tagga la foto con una etichetta di conferenza, e noi faremo del nostro meglio 64 00:02:42,670 --> 00:02:45,430 oggi e la prossima settimana - we'll provare questo fuori - di mettere in campo la 65 00:02:45,430 --> 00:02:47,990 formato elettronico, on-line, o se ci si sente come dovremmo 66 00:02:47,990 --> 00:02:50,430 davvero affrontare in massa, uno dei compagni di insegnamento o 67 00:02:50,430 --> 00:02:52,080 CA sarà alzare la mano e chiedere 68 00:02:52,080 --> 00:02:53,480 anonimo a vostro nome. 69 00:02:53,480 --> 00:02:55,650 Quindi dovremo dare a questo una prova e vedere come funziona. 70 00:02:55,650 --> 00:02:58,540 Ma, con tutti i mezzi, continuerà a sollevare le mani, come si desidera. 71 00:02:58,540 --> 00:03:11,420 >> Così l'ultima volta ci ha rivelato che il 10% o un decimo non è, in 72 00:03:11,420 --> 00:03:13,840 Infatti, 0.1, come vi è stato insegnato molti anni fa. 73 00:03:13,840 --> 00:03:15,390 E ', infatti, un valore come questo. 74 00:03:15,390 --> 00:03:16,970 Ma non è del tutto vero, giusto? 75 00:03:16,970 --> 00:03:19,585 Non ci resta che questo vincolo nel computer per cui, se si 76 00:03:19,585 --> 00:03:22,450 hanno solo una quantità limitata di memoria, RAM, o più 77 00:03:22,450 --> 00:03:25,220 in particolare bit, beh, c'è solo un numero finito 78 00:03:25,220 --> 00:03:26,980 di cose che si possono rappresentare. 79 00:03:26,980 --> 00:03:29,780 Per esempio, se abbiamo il numero zero, e noi vogliamo 80 00:03:29,780 --> 00:03:32,790 rappresentano in binario, con otto bit, dove un po ', 81 00:03:32,790 --> 00:03:34,710 di nuovo, è uno zero o uno, potremmo 82 00:03:34,710 --> 00:03:39,240 rappresentarlo come 00000000. 83 00:03:39,240 --> 00:03:41,160 E questo è un po 'inutilmente prolisso. 84 00:03:41,160 --> 00:03:43,700 Proprio come nel sistema decimale nel mondo reale, 85 00:03:43,700 --> 00:03:47,040 in generale, se si vuole scrivere il numero 123, si 86 00:03:47,040 --> 00:03:52,240 gli esseri umani probabilmente non scrivere 00000123, anche se, 87 00:03:52,240 --> 00:03:53,940 funzionale, che è esattamente lo stesso numero. 88 00:03:53,940 --> 00:03:56,580 Ci basta semplicemente inserire zeri iniziali, per così dire. 89 00:03:56,580 --> 00:03:58,270 >> In binario, siamo in grado di fare lo stesso. 90 00:03:58,270 --> 00:04:01,440 Binario e zero, zero e binario è solo zero. 91 00:04:01,440 --> 00:04:02,870 Hai solo bisogno di un po 'sola. 92 00:04:02,870 --> 00:04:05,020 Ma ancora una volta, l'unità di misura più comune in tutto il mondo 93 00:04:05,020 --> 00:04:07,820 di computing è byte, otto bit. 94 00:04:07,820 --> 00:04:09,720 Solo perché un po ', abbastanza inutile. 95 00:04:09,720 --> 00:04:12,020 Otto bit, non è terribilmente utile, ma almeno è più 96 00:04:12,020 --> 00:04:14,280 utile di una singola unità di misura. 97 00:04:14,280 --> 00:04:17,100 Quindi, con otto bit, ci rappresentano in genere binario. 98 00:04:17,100 --> 00:04:20,459 Quindi qui abbiamo i numeri zero, uno, due, e poi, come 99 00:04:20,459 --> 00:04:24,200 Nate ha fatto nel nostro video Mercoledì scorso, possiamo continuare 100 00:04:24,200 --> 00:04:25,940 contare fino a sette, a otto. 101 00:04:25,940 --> 00:04:27,860 E poi se si usa bit sempre di più, si 102 00:04:27,860 --> 00:04:29,880 può contare fino a infinito. 103 00:04:29,880 --> 00:04:32,800 Ma se si ha solo un numero finito di questi bit, così come 104 00:04:32,800 --> 00:04:35,030 il caso in qualsiasi sistema informatico, o addirittura missili 105 00:04:35,030 --> 00:04:36,670 sistema, beh, in realtà è solo un 106 00:04:36,670 --> 00:04:37,900 quantità finita di precisione. 107 00:04:37,900 --> 00:04:41,290 Quindi, se si vuole rappresentare il numero come 0.1, bene, la 108 00:04:41,290 --> 00:04:43,410 computer deve scegliere. 109 00:04:43,410 --> 00:04:45,970 E se si ha solo un numero finito di numeri che può 110 00:04:45,970 --> 00:04:50,490 rappresentare, può avvicinarsi a 0,1 per voi, ma non può 111 00:04:50,490 --> 00:04:53,730 necessariamente dare esattamente il valore che si desidera. 112 00:04:53,730 --> 00:04:55,660 E questo è solo una delle sfide di computer, 113 00:04:55,660 --> 00:04:57,090 sotto il cofano, per fortuna. 114 00:04:57,090 --> 00:04:59,110 >> Mentre ci muoviamo più nel semestre, questi livello inferiore 115 00:04:59,110 --> 00:05:02,310 dettagli diventano molto meno interessante, ma certamente la 116 00:05:02,310 --> 00:05:05,700 applicazione di queste idee possono avere un mondo molto reale 117 00:05:05,700 --> 00:05:06,760 ramificazioni. 118 00:05:06,760 --> 00:05:08,190 Uno è un po 'divertente. 119 00:05:08,190 --> 00:05:12,150 Quanti di voi hanno visto la sorprendente Office Space film? 120 00:05:12,150 --> 00:05:13,620 Se non lo avete, che è il tuo non ufficiale 121 00:05:13,620 --> 00:05:14,370 compiti a casa per la settimana. 122 00:05:14,370 --> 00:05:16,730 Ma in Office Space, i compagni in quel film prende 123 00:05:16,730 --> 00:05:19,900 vantaggio proprio questa idea, ma in realtà rubato 124 00:05:19,900 --> 00:05:21,270 da un altro film che si potrebbe avere 125 00:05:21,270 --> 00:05:22,760 visto, anche anni prima. 126 00:05:22,760 --> 00:05:24,920 Quindi lasciate che vi dia qualche secondo di questo trailer 127 00:05:24,920 --> 00:05:27,470 questo film incredibile e questo è molto 128 00:05:27,470 --> 00:05:28,340 accademicamente rilevante. 129 00:05:28,340 --> 00:05:30,310 >> [Riproduzione del filmato] 130 00:05:30,310 --> 00:05:32,240 In realtà sto promosso. 131 00:05:32,240 --> 00:05:33,360 Posso programmare un virus che cattura che 132 00:05:33,360 --> 00:05:34,460 luogo fuori alla grande. 133 00:05:34,460 --> 00:05:35,770 Beh, come funziona? 134 00:05:35,770 --> 00:05:37,836 Ogni volta che c'è una transazione bancaria in cui l'interesse è 135 00:05:37,836 --> 00:05:40,154 computerizzata, ci sono migliaia al giorno, il computer finisce 136 00:05:40,154 --> 00:05:41,040 con queste frazioni di centesimo. 137 00:05:41,040 --> 00:05:43,050 Ma io non ho intenzione di fare qualcosa di illegale. 138 00:05:43,050 --> 00:05:46,730 Illegale? Samir, questa è l'America. 139 00:05:46,730 --> 00:05:48,010 Devi giuro su Dio. 140 00:05:48,010 --> 00:05:51,870 Se nessuno sa di questo, ma noi, va bene? Nessun membro della famiglia, non 141 00:05:51,870 --> 00:05:52,490 fidanzate, nessuno. 142 00:05:52,490 --> 00:05:53,882 [Incomprensibile]. 143 00:05:53,882 --> 00:05:57,594 Non ti preoccupare, amico, non lo dirò a nessuno neanche. 144 00:05:57,594 --> 00:05:59,680 [Film si conclude] 145 00:05:59,680 --> 00:06:01,900 >> Va bene, quindi forse ho trovato questo film meglio di molti altri 146 00:06:01,900 --> 00:06:05,530 persone qui, ma in ogni caso, il virus che erano 147 00:06:05,530 --> 00:06:06,400 cercando di creare - 148 00:06:06,400 --> 00:06:08,410 e nei film, ogni volta che chiamerei qualcosa di un virus, 149 00:06:08,410 --> 00:06:09,770 non è generalmente in realtà un virus. 150 00:06:09,770 --> 00:06:11,600 E 'solo un programma che qualcuno ha scritto di fare qualcosa. 151 00:06:11,600 --> 00:06:13,800 E in questo caso, i ragazzi stavano cercando di scrivere un programma 152 00:06:13,800 --> 00:06:16,610 che hanno approfittato della loro società denominata Innotech di 153 00:06:16,610 --> 00:06:19,740 informatica del sistema, cioè se i computer, anche, anche quando 154 00:06:19,740 --> 00:06:21,350 tratta di soldi, non può necessariamente 155 00:06:21,350 --> 00:06:23,490 rappresentano denaro proprio. 156 00:06:23,490 --> 00:06:27,630 Quindi, anche se si potrebbe avere 0,10 dollari nel tuo conto in banca, 157 00:06:27,630 --> 00:06:31,060 0.10, beh, il computer potrebbe effettivamente pensare di avere 158 00:06:31,060 --> 00:06:33,560 questo molti centesimi nel tuo conto in banca. 159 00:06:33,560 --> 00:06:35,750 E così quello che questi ragazzi sono stati che aspirano a fare - e che 160 00:06:35,750 --> 00:06:38,240 rubato l'idea, viene fuori da Superman III, dove 161 00:06:38,240 --> 00:06:41,210 Richard Pryor fatto la stessa cosa - erano essenzialmente 162 00:06:41,210 --> 00:06:44,880 scrivere programmi che aspirano a prendere tutte le finali 163 00:06:44,880 --> 00:06:46,930 i numeri, tutti i piccoli, minuscoli, minuscole frazioni di 164 00:06:46,930 --> 00:06:50,160 penny, e sottraendo quelli fuori in modo che gli umani appena 165 00:06:50,160 --> 00:06:52,620 pensiero, oh, è solo 0,10 dollari là, ma tutti coloro 166 00:06:52,620 --> 00:06:54,410 numeri finali alla fine tornano. 167 00:06:54,410 --> 00:06:57,490 Quindi, una splendida idea e ritorto contro esilarante in quel 168 00:06:57,490 --> 00:06:58,250 film particolare. 169 00:06:58,250 --> 00:07:01,800 >> Ma nel mondo reale, anche, ci sono molto più preoccupante 170 00:07:01,800 --> 00:07:03,190 implicazioni di questo genere di cose. 171 00:07:03,190 --> 00:07:05,450 E uno dei motivi per tuffarsi nel campo di computer 172 00:07:05,450 --> 00:07:07,620 la scienza è, ancora una volta, la sua applicabilità non al 173 00:07:07,620 --> 00:07:09,740 ingegneria scienze da solo, ma solo per 174 00:07:09,740 --> 00:07:10,650 altri campi. 175 00:07:10,650 --> 00:07:14,760 Quindi questo è un aspetto meno spensierato a ciò che può andare storto, ma 176 00:07:14,760 --> 00:07:17,630 è anche piuttosto l'apertura degli occhi, credo, quando si tratta di 177 00:07:17,630 --> 00:07:20,760 capire esattamente come onnipresente tecnologie come 178 00:07:20,760 --> 00:07:22,870 computer e di programmazione o in questi giorni, 179 00:07:22,870 --> 00:07:23,930 sotto forma di software. 180 00:07:23,930 --> 00:07:26,500 Quindi questo clip successiva si tratta solo di sei minuti, continua 181 00:07:26,500 --> 00:07:30,320 dove avevamo lasciato l'ultima volta, ma ci permette di guardare un po ' 182 00:07:30,320 --> 00:07:33,370 più in profondità, quali di questi problemi uno. 183 00:07:33,370 --> 00:07:35,270 Vorrei passare direttamente al punto in cui avevamo lasciato, 184 00:07:35,270 --> 00:07:37,780 che era proprio qui. 185 00:07:37,780 --> 00:07:41,580 E noi abbiamo una parte due di due, per circa sei minuti qui. 186 00:07:41,580 --> 00:07:41,980 >> [PLAY MOVIE] 187 00:07:41,980 --> 00:07:45,430 Afflitto moderna tecnologia missilistica. 188 00:07:45,430 --> 00:07:49,280 Nel 1991, con l'inizio della prima guerra del Golfo, il Patriot 189 00:07:49,280 --> 00:07:51,350 missile sperimentato un simile tipo di 190 00:07:51,350 --> 00:07:52,645 numero di conversione problema. 191 00:07:52,645 --> 00:07:57,460 E come risultato, 20 persone, 20 soldati americani, sono stati uccisi 192 00:07:57,460 --> 00:08:01,130 e circa 100 feriti, quando il Patriot, che avrebbe dovuto 193 00:08:01,130 --> 00:08:03,400 per la protezione contro Scud arrivo, 194 00:08:03,400 --> 00:08:06,020 non è riuscito a sparare un missile. 195 00:08:06,020 --> 00:08:09,350 >> Quando l'Iraq invase il Kuwait e l'America ha lanciato un deserto 196 00:08:09,350 --> 00:08:13,530 Tempesta all'inizio del 1991, batterie di missili Patriot sono stati 197 00:08:13,530 --> 00:08:16,970 distribuito per proteggere l'Arabia Saudita e Israele dalla iracheno 198 00:08:16,970 --> 00:08:19,810 Scud missile attacchi. 199 00:08:19,810 --> 00:08:23,740 Il Patriot è un medio raggio statunitense superficie-aria sistema, 200 00:08:23,740 --> 00:08:26,370 prodotto dalla società Raytheon. 201 00:08:26,370 --> 00:08:30,860 La dimensione del intercettore Patriot stesso, si tratta di 202 00:08:30,860 --> 00:08:35,650 circa 20 metri di lunghezza e pesa circa 2.000 chili. 203 00:08:35,650 --> 00:08:38,809 E porta una testata di circa - penso che sia o meno 204 00:08:38,809 --> 00:08:40,169 150 libbre. 205 00:08:40,169 --> 00:08:45,820 E la stessa testata è un esplosivo che ha 206 00:08:45,820 --> 00:08:48,120 frammenti intorno ad esso. 207 00:08:48,120 --> 00:08:51,870 L'involucro della testata è progettato per agire come pallettoni. 208 00:08:51,870 --> 00:08:54,920 I missili vengono effettuate quattro per ogni contenitore e sono 209 00:08:54,920 --> 00:08:57,850 trasportato da un semirimorchio. 210 00:08:57,850 --> 00:09:02,940 >> Il sistema antimissile Patriot risale almeno al 211 00:09:02,940 --> 00:09:05,530 20 anni. 212 00:09:05,530 --> 00:09:09,150 È stato originariamente progettato come una difesa contro i missili aria 213 00:09:09,150 --> 00:09:12,920 abbattere aerei nemici, nella prima guerra del Golfo. 214 00:09:12,920 --> 00:09:17,700 Quando la guerra è arrivato, l'esercito voleva usarla per sparare 215 00:09:17,700 --> 00:09:19,880 giù Scud, non aerei. 216 00:09:19,880 --> 00:09:24,860 L'Air Force irachena non era tanto di un problema, ma l'esercito 217 00:09:24,860 --> 00:09:27,260 era preoccupato per Scud. 218 00:09:27,260 --> 00:09:30,810 E così hanno cercato di aggiornare il Patriot. 219 00:09:30,810 --> 00:09:33,770 Intercettare un missile nemico viaggia a MACH 5 andava 220 00:09:33,770 --> 00:09:35,790 essere abbastanza impegnativo. 221 00:09:35,790 --> 00:09:39,460 Ma quando il Patriot è stato ricoverato in servizio, l'Esercito 222 00:09:39,460 --> 00:09:43,730 non era a conoscenza di una modifica iracheno che hanno fatto la loro 223 00:09:43,730 --> 00:09:46,510 Scud quasi impossibile da colpire. 224 00:09:46,510 --> 00:09:50,040 >> Quello che è successo è la Scud che erano 225 00:09:50,040 --> 00:09:51,360 arrivando erano instabili. 226 00:09:51,360 --> 00:09:52,266 Erano oscillazione. 227 00:09:52,266 --> 00:09:56,300 La ragione di questo è stata la iracheni, al fine di ottenere 600 228 00:09:56,300 --> 00:10:00,650 chilometri su un missile serie 300 chilometri, ha preso 229 00:10:00,650 --> 00:10:02,423 peso dalla testata anteriore e 230 00:10:02,423 --> 00:10:03,990 fatta la testata accendino. 231 00:10:03,990 --> 00:10:08,700 Così ora il Patriot sta cercando di venire a Scud, e la maggior parte 232 00:10:08,700 --> 00:10:11,192 il tempo, la stragrande maggioranza del tempo, sarebbe 233 00:10:11,192 --> 00:10:13,450 solo volo da parte Scud. 234 00:10:13,450 --> 00:10:16,300 Una volta che i gestori del sistema Patriot realizzato il Patriot 235 00:10:16,300 --> 00:10:20,160 mancato il suo obiettivo, hanno fatto esplodere la testata Patriot. 236 00:10:20,160 --> 00:10:22,760 Per evitare possibili perdite, si è permesso 237 00:10:22,760 --> 00:10:25,100 di cadere a terra. 238 00:10:25,100 --> 00:10:29,400 Questo è ciò che la maggior parte delle persone hanno visto, come palle di fuoco grande nel cielo, 239 00:10:29,400 --> 00:10:34,930 e incompreso come intercetta di testate Scud. 240 00:10:34,930 --> 00:10:37,490 >> Anche se, nel cielo notturno, Patriots sembrava essere 241 00:10:37,490 --> 00:10:41,570 Scud successo distrutte, a Dhahran, non ci poteva essere 242 00:10:41,570 --> 00:10:43,730 errore sulle sue prestazioni. 243 00:10:43,730 --> 00:10:46,370 Lì, sistema radar del Patriot perso le tracce di un 244 00:10:46,370 --> 00:10:50,090 in arrivo Scud e mai lanciato a causa 245 00:10:50,090 --> 00:10:51,340 ad un difetto del software. 246 00:10:54,030 --> 00:10:57,050 Era gli israeliani che per primo ha scoperto che più a lungo 247 00:10:57,050 --> 00:11:02,000 il sistema era, maggiore è la differenza di tempo è diventato, 248 00:11:02,000 --> 00:11:05,530 a causa di un orologio incorporato nel computer del sistema. 249 00:11:05,530 --> 00:11:09,060 Circa due settimane prima della tragedia a Dhahran, la 250 00:11:09,060 --> 00:11:11,730 Israeliani segnalato al Dipartimento della Difesa che il 251 00:11:11,730 --> 00:11:13,250 sistema è stato perdere tempo. 252 00:11:13,250 --> 00:11:15,610 Dopo circa otto ore di corsa, hanno notato che il 253 00:11:15,610 --> 00:11:18,330 sistema è stato sempre sensibilmente meno accurato. 254 00:11:18,330 --> 00:11:20,910 Il Dipartimento della Difesa ha risposto raccontando tutti 255 00:11:20,910 --> 00:11:23,710 le batterie Patriot non lasciare i sistemi 256 00:11:23,710 --> 00:11:25,450 per un tempo lungo. 257 00:11:25,450 --> 00:11:28,010 Non hanno mai detto quello che un tempo era - 8 ore, 10 258 00:11:28,010 --> 00:11:29,690 ore, 1000 ore. 259 00:11:29,690 --> 00:11:31,940 Nessuno lo sapeva. 260 00:11:31,940 --> 00:11:35,020 >> La batteria Patriot di stanza presso la caserma di Dhahran 261 00:11:35,020 --> 00:11:39,030 e il suo orologio interno difettoso era stato in oltre 100 ore 262 00:11:39,030 --> 00:11:42,240 la notte del 25 febbraio. 263 00:11:42,240 --> 00:11:46,580 Si rintracciato tempo con una precisione di circa un decimo di secondo. 264 00:11:46,580 --> 00:11:48,830 Ora un decimo di secondo è un numero interessante perché 265 00:11:48,830 --> 00:11:52,660 non può essere espresso in binario, esattamente, il che significa 266 00:11:52,660 --> 00:11:54,940 non può essere espressa esattamente in qualsiasi 267 00:11:54,940 --> 00:11:57,330 moderno computer digitale. 268 00:11:57,330 --> 00:11:59,130 E 'difficile da credere. 269 00:11:59,130 --> 00:12:01,720 Ma utilizzare questo come esempio. 270 00:12:01,720 --> 00:12:04,090 >> Prendiamo il numero di un terzo. 271 00:12:04,090 --> 00:12:07,950 Un terzo non può essere espresso in decimale, esattamente. 272 00:12:07,950 --> 00:12:12,710 Un terzo è 0,333 in corso per l'infinito. 273 00:12:12,710 --> 00:12:17,050 Non c'è modo di farlo con assoluta precisione in decimale. 274 00:12:17,050 --> 00:12:19,340 Questo è esattamente lo stesso tipo di problema che è successo nel 275 00:12:19,340 --> 00:12:20,190 il Patriot. 276 00:12:20,190 --> 00:12:24,680 Più lungo è il sistema ha, peggio il tempo è diventato l'errore. 277 00:12:24,680 --> 00:12:28,640 Dopo 100 ore di funzionamento, l'errore nel tempo solo 278 00:12:28,640 --> 00:12:29,870 circa un terzo di secondo. 279 00:12:29,870 --> 00:12:34,790 Ma in termini di targeting per un missile che viaggia a MACH 5, 280 00:12:34,790 --> 00:12:39,140 si è tradotto in un errore di inseguimento di oltre 600 metri. 281 00:12:39,140 --> 00:12:42,510 Sarebbe un errore fatale per i soldati a Dhahran. 282 00:12:42,510 --> 00:12:48,680 >> Quello che è successo è un lancio Scud è stato rilevato da preallarme 283 00:12:48,680 --> 00:12:52,440 satelliti e sapevano che stava arrivando la Scud nel loro 284 00:12:52,440 --> 00:12:53,350 direzione generale. 285 00:12:53,350 --> 00:12:55,470 Non sapevano da dove venisse. 286 00:12:55,470 --> 00:12:58,210 E 'stato ora alla componente radar del Patriot 287 00:12:58,210 --> 00:13:01,920 sistema, difendendo Dhahran, per individuare e tenere traccia della 288 00:13:01,920 --> 00:13:03,700 nemico missile in arrivo. 289 00:13:03,700 --> 00:13:05,390 Il radar era molto intelligente. 290 00:13:05,390 --> 00:13:07,570 Si sarebbe effettivamente monitorare la posizione della Scud e poi 291 00:13:07,570 --> 00:13:10,340 prevedere dove probabilmente sarebbe stata la prossima volta che il 292 00:13:10,340 --> 00:13:12,040 radar inviato un impulso fuori. 293 00:13:12,040 --> 00:13:13,730 Questo è stato chiamato il cancello gamma. 294 00:13:13,730 --> 00:13:18,820 Poi, una volta che il Patriot decide è passato abbastanza tempo per andare 295 00:13:18,820 --> 00:13:22,600 sostenere e controllare la posizione successiva di questo detected 296 00:13:22,600 --> 00:13:24,190 oggetto, va indietro. 297 00:13:24,190 --> 00:13:27,940 Così, quando è tornato al posto sbagliato, allora non lo vede 298 00:13:27,940 --> 00:13:31,000 oggetto, e decide che non vi era alcun oggetto. 299 00:13:31,000 --> 00:13:34,370 E 'stato un falso rilevamento e lascia cadere la pista. 300 00:13:34,370 --> 00:13:37,630 >> L'arrivo Scud scompare dallo schermo radar. 301 00:13:37,630 --> 00:13:41,300 E pochi secondi dopo, lo sbatté in caserma. La Scud 302 00:13:41,300 --> 00:13:44,730 uccisi 28 e fu l'ultimo licenziato durante 303 00:13:44,730 --> 00:13:46,450 la prima guerra del Golfo. 304 00:13:46,450 --> 00:13:50,570 Tragicamente, il software aggiornato arrivati ​​a Dhahran 305 00:13:50,570 --> 00:13:52,060 il giorno seguente. 306 00:13:52,060 --> 00:13:56,210 E il difetto del software era stato fissato, la chiusura di un capitolo 307 00:13:56,210 --> 00:13:58,370 la tormentata storia del missile Patriot. 308 00:14:01,790 --> 00:14:04,990 PATRIOT è in realtà l'acronimo di "Tracking Phased Array 309 00:14:04,990 --> 00:14:08,516 Intercettazione di Target ". 310 00:14:08,516 --> 00:14:13,390 >> Va bene, quindi un risultato molto più dolorosa di non del tutto 311 00:14:13,390 --> 00:14:14,430 comprensione di questo mondo. 312 00:14:14,430 --> 00:14:18,180 E l'asporto, in realtà, dal film è che la soluzione 313 00:14:18,180 --> 00:14:20,790 c'era riavviare il sistema di difesa missilistica 314 00:14:20,790 --> 00:14:21,770 ogni tanto un po '. 315 00:14:21,770 --> 00:14:24,280 E così ancora una volta, uno degli obiettivi di questo corso, di certo 316 00:14:24,280 --> 00:14:26,900 su scala più modesta di queste applicazioni, è 317 00:14:26,900 --> 00:14:30,710 tutti davvero aperto gli occhi a esattamente come si va su 318 00:14:30,710 --> 00:14:34,380 macchine per la produzione fare quello che vuoi fare e come si va 319 00:14:34,380 --> 00:14:37,180 a fare che correttamente, mentre lungo la strada facendo 320 00:14:37,180 --> 00:14:38,810 bene, elegantemente, e così via. 321 00:14:38,810 --> 00:14:41,680 E così oggi, cerchiamo di immergersi in un po 'di più di questo, ma 322 00:14:41,680 --> 00:14:44,210 in modo da non andare troppo veloce, in particolare per quelli meno 323 00:14:44,210 --> 00:14:46,590 confortevole, ma anche in modo da poter mantenere l'interesse di 324 00:14:46,590 --> 00:14:49,390 quelli più comodo, diciamo solo iniziare rapidamente con un po ' 325 00:14:49,390 --> 00:14:50,970 di riassunto di alcune di queste idee. 326 00:14:50,970 --> 00:14:53,710 E ancora, chiedere di distanza, sia di persona o on-line, se si dispone di 327 00:14:53,710 --> 00:14:56,320 domande in modo che possiamo tenere tutti sulla stessa pagina. 328 00:14:56,320 --> 00:14:58,820 >> Così il CS50 Appliance, passo indietro, è 329 00:14:58,820 --> 00:15:02,360 quello che, con parole tue? 330 00:15:02,360 --> 00:15:06,454 Va bene se non avete idea di ciò che queste parole possono essere ancora. 331 00:15:06,454 --> 00:15:07,830 [Incomprensibile] 332 00:15:07,830 --> 00:15:10,950 Ok, quindi una interfaccia universale per - 333 00:15:10,950 --> 00:15:11,900 che tutti possiamo condividere. 334 00:15:11,900 --> 00:15:12,470 Assolutamente. 335 00:15:12,470 --> 00:15:14,840 Così potremmo, per esempio, vi dirà di andare a un po 'di 336 00:15:14,840 --> 00:15:16,910 sito web, scaricare il software per Mac OS. 337 00:15:16,910 --> 00:15:19,140 Scarica il software per Windows, configurare in 338 00:15:19,140 --> 00:15:20,100 qua e di là. 339 00:15:20,100 --> 00:15:22,370 Ma la realtà è poi ci si imbatte in innumerevoli tecniche 340 00:15:22,370 --> 00:15:23,200 sostegno problemi. 341 00:15:23,200 --> 00:15:26,630 E anche in questi giorni, molto di ciò che è stato fatto lato server, 342 00:15:26,630 --> 00:15:28,490 nel mondo dei computer, specialmente quando si tratta di 343 00:15:28,490 --> 00:15:31,460 sviluppo web e applicativi web based, è in realtà 344 00:15:31,460 --> 00:15:35,110 molto spesso fatto su computer Unix o Linux, a differenza di 345 00:15:35,110 --> 00:15:36,800 Mac o PC Windows. 346 00:15:36,800 --> 00:15:39,240 >> Quindi, tra i pregi, poi, di utilizzare questa cosa chiamata 347 00:15:39,240 --> 00:15:41,500 CS50 Appliance è avremo tutti lo stesso ambiente. 348 00:15:41,500 --> 00:15:43,670 Così tutti sono sulla stessa pagina, non importa quale hardware 349 00:15:43,670 --> 00:15:46,650 è venuto a campus con ma sarà anche dilettarsi esattamente 350 00:15:46,650 --> 00:15:48,230 l'ambiente stesso che userete verso 351 00:15:48,230 --> 00:15:51,080 semestre end sia per lo sviluppo web, così come nella 352 00:15:51,080 --> 00:15:53,580 futuro per applicazioni reali loro. 353 00:15:53,580 --> 00:15:56,350 Quindi più concretamente, Appliance CS50 è un pezzo privo di 354 00:15:56,350 --> 00:15:59,400 software che consente di eseguire un altro sistema operativo, 355 00:15:59,400 --> 00:16:02,670 Linux, in questo caso, sul proprio computer, in una finestra. 356 00:16:02,670 --> 00:16:04,750 Ora non si può semplicemente scaricare l'apparecchio. 357 00:16:04,750 --> 00:16:08,170 Hai bisogno di un programma con cui giocare o eseguire l'apparecchio. 358 00:16:08,170 --> 00:16:11,220 E quel pezzo di software è generalmente noto come 359 00:16:11,220 --> 00:16:11,520 hypervisor. 360 00:16:11,520 --> 00:16:14,050 Hypervisor si presentano sotto forma di prodotti come VMware, 361 00:16:14,050 --> 00:16:15,820 Virtual Box, Parallels. 362 00:16:15,820 --> 00:16:18,390 Tutti i tipi di aziende a fare software, sia libero e 363 00:16:18,390 --> 00:16:19,310 commerciale, allo stesso modo. 364 00:16:19,310 --> 00:16:21,480 Quello che vedrete nel Problema Set 1 sono riportate le istruzioni su come 365 00:16:21,480 --> 00:16:23,440 ottenere il software gratuito con il quale 366 00:16:23,440 --> 00:16:25,000 eseguire il Appliance CS50. 367 00:16:25,000 --> 00:16:28,060 E una volta che lo fai, avrai, in una finestra sul vostro Mac o PC, 368 00:16:28,060 --> 00:16:30,710 un ambiente desktop che sembra abbastanza come questo, dove 369 00:16:30,710 --> 00:16:33,100 ha un menu di avvio, come cosa in 370 00:16:33,100 --> 00:16:34,510 in basso a sinistra. 371 00:16:34,510 --> 00:16:38,030 Ha una cartella Home o Home directory, in alto a sinistra 372 00:16:38,030 --> 00:16:40,280 lì, un bidone della spazzatura, e così via. 373 00:16:40,280 --> 00:16:43,450 Quindi dovremo prendere in giro a parte i dettagli necessari come andiamo. 374 00:16:43,450 --> 00:16:46,430 >> Ma ora cominciamo a tuffarsi in C. 375 00:16:46,430 --> 00:16:49,200 Quindi C è questo linguaggio di programmazione, simile nello spirito alla 376 00:16:49,200 --> 00:16:52,390 Gratta e Vinci, ma molto meno grafica, ma per ironia della sorte, di gran lunga 377 00:16:52,390 --> 00:16:54,730 più potente una volta che ottenete esperti con esso. 378 00:16:54,730 --> 00:16:58,970 Quindi, in C, abbiamo scrivere programmi per la scrittura del codice sorgente, che è 379 00:16:58,970 --> 00:17:01,640 questo inglese sintassi simile, simile alle calze 380 00:17:01,640 --> 00:17:05,609 dimostrazione che abbiamo fatto l'ultima volta che ti permette di 381 00:17:05,609 --> 00:17:07,910 esprimersi con precisione, se 382 00:17:07,910 --> 00:17:09,760 arcanamente, al computer. 383 00:17:09,760 --> 00:17:11,960 >> Quindi, che tipo di software del prodotto ne hai veramente bisogno 384 00:17:11,960 --> 00:17:15,520 di scrivere programmi in un linguaggio come il C, sulla base delle nostre 385 00:17:15,520 --> 00:17:17,492 conversazione il Lunedi? 386 00:17:17,492 --> 00:17:19,650 [Incomprensibile] 387 00:17:19,650 --> 00:17:21,079 OK, avete solo bisogno di un editor di testo. 388 00:17:21,079 --> 00:17:22,890 Non è necessario alcun software speciale 389 00:17:22,890 --> 00:17:24,460 di per sé, per scrivere programmi. 390 00:17:24,460 --> 00:17:27,220 Hai solo bisogno di un editor di testo come Blocco note di Windows, 391 00:17:27,220 --> 00:17:30,450 TextEdit su Mac, o qualcosa che si chiama gedit, nel mondo della 392 00:17:30,450 --> 00:17:32,020 Linux, che useremo qui. 393 00:17:32,020 --> 00:17:33,750 E questo è tutto, per scrivere i programmi. 394 00:17:33,750 --> 00:17:35,480 >> Ma la scrittura è solo metà dell'equazione. 395 00:17:35,480 --> 00:17:36,630 È quindi necessario per farli funzionare. 396 00:17:36,630 --> 00:17:38,320 Ma per eseguire programmi - 397 00:17:38,320 --> 00:17:39,600 non è possibile eseguire il codice sorgente. 398 00:17:39,600 --> 00:17:41,500 È invece fare quello che a prima? 399 00:17:41,500 --> 00:17:41,900 Gia '. 400 00:17:41,900 --> 00:17:43,200 DAVID J. MALAN: è necessario 401 00:17:43,200 --> 00:17:44,130 compilarlo. 402 00:17:44,130 --> 00:17:49,010 E qualcun altro, la compilazione del codice sorgente significa - 403 00:17:49,010 --> 00:17:50,260 [Incomprensibile] 404 00:17:52,300 --> 00:17:52,700 DAVID J. MALAN: Esattamente. 405 00:17:52,700 --> 00:17:54,430 Tradurre a zero e uno. 406 00:17:54,430 --> 00:17:57,150 Per tutti noi, in questi giorni, i computer che dispongono di CPU, 407 00:17:57,150 --> 00:18:00,350 quasi totalità dei quali sono realizzati da una società chiamata Intel, e 408 00:18:00,350 --> 00:18:03,320 Intel Inside, questo significa che c'è dentro il vostro cervello di 409 00:18:03,320 --> 00:18:04,990 computer, noto come la CPU. 410 00:18:04,990 --> 00:18:07,570 E una delle cose che fa è che il cervello, lo sa 411 00:18:07,570 --> 00:18:10,390 come capire i modelli di zero e uno. 412 00:18:10,390 --> 00:18:13,240 Sa quale schema di bit rappresenta, inoltre, che cosa 413 00:18:13,240 --> 00:18:15,500 modello rappresenta sottrazioni, quale schema di 414 00:18:15,500 --> 00:18:18,890 bit rappresentano la stampa, e creando un suono udibile. 415 00:18:18,890 --> 00:18:22,450 >> Così, in breve, la CPU, accoppiato con il sistema operativo, 416 00:18:22,450 --> 00:18:25,230 che è un pezzo di software che gira in cima alla CPU, 417 00:18:25,230 --> 00:18:26,050 per così dire. 418 00:18:26,050 --> 00:18:29,850 Insieme, questi due pezzi sapere come eseguire i programmi che 419 00:18:29,850 --> 00:18:31,070 noi umani scrivere. 420 00:18:31,070 --> 00:18:34,040 >> Quindi, se vado in Appliance CS50 qui, ho bisogno di aprire 421 00:18:34,040 --> 00:18:35,660 un editor di testo e posso accedere a questa 422 00:18:35,660 --> 00:18:36,560 in un paio di modi. 423 00:18:36,560 --> 00:18:39,060 Mi può andare al menu, Programmazione, 424 00:18:39,060 --> 00:18:40,230 e poi posso selezionare - 425 00:18:40,230 --> 00:18:40,810 No, non quel menu. 426 00:18:40,810 --> 00:18:43,860 Posso andare a Accessori / gedit qui per aprire il 427 00:18:43,860 --> 00:18:45,090 il mio editor di testo piccolo. 428 00:18:45,090 --> 00:18:48,030 O più semplicemente, posso fare clic su questa piccola icona in basso a 429 00:18:48,030 --> 00:18:48,970 mano sinistra. 430 00:18:48,970 --> 00:18:50,430 E ora ho questo ambiente qui. 431 00:18:50,430 --> 00:18:52,590 E 'piuttosto ricorda un semplice editor di testo, con solo 432 00:18:52,590 --> 00:18:53,820 uno o due differenze. 433 00:18:53,820 --> 00:18:56,420 Nella parte superiore, in cui il cursore lampeggia ora, è qui 434 00:18:56,420 --> 00:18:57,900 Posso iniziare a scrivere il mio codice. 435 00:18:57,900 --> 00:19:00,415 In fondo è questa cosa chiamata la finestra del terminale. 436 00:19:00,415 --> 00:19:03,400 E che tipo di cose che si può fare in questo 437 00:19:03,400 --> 00:19:04,960 cosiddetta finestra di terminale? 438 00:19:04,960 --> 00:19:06,680 [Incomprensibile] 439 00:19:06,680 --> 00:19:07,890 >> Ok, quindi mi eseguire i comandi. 440 00:19:07,890 --> 00:19:10,300 E alcuni dei comandi che correvano il Lunedi erano un po ' 441 00:19:10,300 --> 00:19:15,070 criptici in un primo momento, ma per la lista ls, cd per change directory, 442 00:19:15,070 --> 00:19:16,540 rm, per rimuovere. 443 00:19:16,540 --> 00:19:19,680 Quindi è una specie di vecchia scuola mezzo di navigazione vostra 444 00:19:19,680 --> 00:19:22,310 computer, utilizzando solo la tastiera e comandi testuali, 445 00:19:22,310 --> 00:19:24,130 e non, in generale, utilizzando un mouse. 446 00:19:24,130 --> 00:19:25,960 Ma staremo a vedere, in breve tempo, questa realtà ci dà un 447 00:19:25,960 --> 00:19:28,520 potenza poco più piccola e una precisione più con cui 448 00:19:28,520 --> 00:19:29,600 esprimerci. 449 00:19:29,600 --> 00:19:31,330 E poi qui a sinistra, stiamo solo andando a vedere, 450 00:19:31,330 --> 00:19:34,360 come si avvia il software di scrittura, un breve riassunto della 451 00:19:34,360 --> 00:19:36,350 programma che abbiamo scritto in alto a sinistra. 452 00:19:36,350 --> 00:19:38,360 Ma vedremo di nuovo in breve tempo. 453 00:19:38,360 --> 00:19:40,050 >> Quindi cerchiamo di fare qualcosa di abbastanza semplice qui. 454 00:19:40,050 --> 00:19:43,440 Permettetemi innanzitutto di andare avanti e andare su File, Salva, e io sono solo 455 00:19:43,440 --> 00:19:45,970 andando a cliccare su jharvard qui, sopra a sinistra, e 456 00:19:45,970 --> 00:19:48,930 jharvard è, ancora una volta, il nome della cartella per la mia casa, il mio 457 00:19:48,930 --> 00:19:52,110 file personali, io, attualmente in fase di John Harvard, come tutti voi 458 00:19:52,110 --> 00:19:54,230 sarà presto John Harvard in questo ambiente. 459 00:19:54,230 --> 00:19:57,360 Ha questa home directory, i miei documenti e così via, 460 00:19:57,360 --> 00:19:58,900 che voglio salvare, ora, questo file trovi 461 00:19:58,900 --> 00:20:01,520 Quindi ho intenzione di chiamarlo hello.c. Poi ho intenzione di andare 462 00:20:01,520 --> 00:20:05,770 avanti e fare clic su Salva, e ora quello che ho qui è una scheda 463 00:20:05,770 --> 00:20:09,440 chiamato hello.c, così come un altro tipo di editor. 464 00:20:09,440 --> 00:20:11,760 >> Così ora lasciami andare avanti e iniziare a scrivere un programma. 465 00:20:11,760 --> 00:20:14,440 int main (void). 466 00:20:14,440 --> 00:20:18,150 E poi ho fatto l'ultima volta, printf, formattato per la stampa, 467 00:20:18,150 --> 00:20:22,120 ("Ciao, mondo!" 468 00:20:22,120 --> 00:20:24,500 ). 469 00:20:24,500 --> 00:20:25,630 Quasi completo. 470 00:20:25,630 --> 00:20:27,130 Ma mi manca un paio di dettagli. 471 00:20:27,130 --> 00:20:30,210 Ciò che manca da questo programma che ho davvero bisogno di 472 00:20:30,210 --> 00:20:31,890 per compilare effettivamente? 473 00:20:31,890 --> 00:20:32,130 Gia '. 474 00:20:32,130 --> 00:20:33,980 [Incomprensibile]? 475 00:20:33,980 --> 00:20:35,770 >> DAVID J. MALAN: Sì, quindi ho bisogno di comprende la norma 476 00:20:35,770 --> 00:20:36,700 I / O library. 477 00:20:36,700 --> 00:20:39,470 Quindi questo ha bisogno di andare al di sopra principale, quindi sono solo andando a 478 00:20:39,470 --> 00:20:40,790 fare un po 'spazio per lì. 479 00:20:40,790 --> 00:20:44,420 E ho intenzione di fare # include. 480 00:20:44,420 --> 00:20:46,570 E notare le parentesi angolari lì. 481 00:20:46,570 --> 00:20:49,410 E per inciso, gedit è un utente poco cordiale, se 482 00:20:49,410 --> 00:20:52,420 a volte un po 'di confusione, nel senso che cerca di aiutare il vostro 483 00:20:52,420 --> 00:20:54,770 occhi notare ciò che si allinea con quello. 484 00:20:54,770 --> 00:20:57,760 Quindi il fatto che il mio cursore si trova proprio accanto a questo angolo 485 00:20:57,760 --> 00:21:00,600 staffa, si noti come è evidenziando l'altro ad angolo 486 00:21:00,600 --> 00:21:01,920 Staffa di più questo. 487 00:21:01,920 --> 00:21:03,770 E questo è solo per attirare la mia attenzione sul fatto che 488 00:21:03,770 --> 00:21:04,460 hanno simmetria. 489 00:21:04,460 --> 00:21:07,010 E la simmetria nella programmazione è generalmente una buona cosa. 490 00:21:07,010 --> 00:21:10,270 Allo stesso modo, se sposto il mio cursore alla fine, si noti come la 491 00:21:10,270 --> 00:21:13,630 le parentesi graffe in fila per dimostrare che, sì, ho aperto uno 492 00:21:13,630 --> 00:21:15,160 e una chiusa, per così dire. 493 00:21:15,160 --> 00:21:16,640 >> Va bene, e posso fare un'altra cosa. 494 00:21:16,640 --> 00:21:20,090 Non è strettamente necessario, ma buone pratiche, a dire 495 00:21:20,090 --> 00:21:21,250 restituire 0. 496 00:21:21,250 --> 00:21:24,140 E 0 ritorno fa che cosa per noi qui? 497 00:21:24,140 --> 00:21:25,584 O significa che cosa? 498 00:21:25,584 --> 00:21:27,480 [Incomprensibile] 499 00:21:27,480 --> 00:21:28,300 DAVID J. MALAN: Ma non c'è niente di sbagliato. 500 00:21:28,300 --> 00:21:30,280 E francamente è difficile per la maggior parte ad andare male in un 501 00:21:30,280 --> 00:21:31,250 programmare questo breve. 502 00:21:31,250 --> 00:21:33,930 Quindi sono solo essere super esplicito che tutto va bene. 503 00:21:33,930 --> 00:21:36,740 Io, l'umano, quando si esegue il programma, sarà probabilmente mai 504 00:21:36,740 --> 00:21:38,150 vedere che 0. 505 00:21:38,150 --> 00:21:41,070 In genere, questi numeri che vengono restituiti dal principale 506 00:21:41,070 --> 00:21:43,540 solo allevare i loro teste per gli esseri umani, quando 507 00:21:43,540 --> 00:21:44,360 qualcosa va storto. 508 00:21:44,360 --> 00:21:46,640 E si ottiene un po 'pop up di errore di sistema dicendo: uno, 509 00:21:46,640 --> 00:21:48,760 due, tre, o qualunque sia il numero era che 510 00:21:48,760 --> 00:21:50,100 è stato effettivamente restituito. 511 00:21:50,100 --> 00:21:52,870 Quindi, qualsiasi altra cosa di sbagliato in questo? 512 00:21:52,870 --> 00:21:55,300 [Incomprensibile] 513 00:21:55,300 --> 00:21:58,100 >> DAVID J. MALAN: Quindi questo non è tanto un errore funzionale 514 00:21:58,100 --> 00:21:59,240 ma una estetica. 515 00:21:59,240 --> 00:22:02,340 Probabilmente dovrei mettere in un carattere di nuova riga lì al 516 00:22:02,340 --> 00:22:05,240 fine di questa stringa in modo che in realtà spostare il cursore 517 00:22:05,240 --> 00:22:08,340 la riga successiva, e il programma sembra solo un po 'più bella. 518 00:22:08,340 --> 00:22:10,340 >> Così ora lasciami andare verso la mia finestra di terminale 519 00:22:10,340 --> 00:22:11,490 e, Save money 520 00:22:11,490 --> 00:22:13,390 E questa cosa qui, si chiama prompt. 521 00:22:13,390 --> 00:22:16,760 E 'solo che mi ricorda chi sono, jharvard @ apparecchio, dove 522 00:22:16,760 --> 00:22:18,850 apparecchio è il nome del computer sono in. 523 00:22:18,850 --> 00:22:22,380 In parentesi è questo tilde, il simbolo di scarabocchio, che 524 00:22:22,380 --> 00:22:24,160 rappresenta ciò? 525 00:22:24,160 --> 00:22:25,590 PUBBLICO: Home directory. 526 00:22:25,590 --> 00:22:26,350 DAVID J. MALAN: Home directory. 527 00:22:26,350 --> 00:22:29,350 Ecco, questo è solo una notazione abbreviata per dire ci si trova in 528 00:22:29,350 --> 00:22:32,780 la cartella personale in cui tutti i file andare per impostazione predefinita. 529 00:22:32,780 --> 00:22:36,080 Quindi, adesso, qui, posso digitare ls per la lista. 530 00:22:36,080 --> 00:22:40,020 E l'unica cosa che vedo qui in questo momento è hello.c. 531 00:22:40,020 --> 00:22:41,770 E questo è un bene perché ho scritto questo. 532 00:22:41,770 --> 00:22:44,380 >> Permettetemi quindi di andare avanti e fanno ciao. 533 00:22:44,380 --> 00:22:46,830 E notate non sto digitando make hello.c. 534 00:22:46,830 --> 00:22:50,300 Invece, sto solo scrivendo il nome di base del file, ciao. 535 00:22:50,300 --> 00:22:53,690 E fare, come abbiamo visto il Lunedi, sarà solo dedurre che voglio 536 00:22:53,690 --> 00:22:54,920 il file. c. 537 00:22:54,920 --> 00:22:56,820 Così ora che ho scritto fanno ciao. 538 00:22:56,820 --> 00:22:59,280 Ora vedo questo comando piuttosto lungo e continuerà 539 00:22:59,280 --> 00:23:00,480 vedendo questo ancora e ancora. 540 00:23:00,480 --> 00:23:03,620 Ma per essere chiari, clang, la parola che appena apparso, 541 00:23:03,620 --> 00:23:05,340 questo è il compilatore vero e proprio. 542 00:23:05,340 --> 00:23:08,200 Fare è solo un programma di utilità di generazione. 543 00:23:08,200 --> 00:23:11,900 E 'solo un programma più user friendly che mi salva, in 544 00:23:11,900 --> 00:23:15,310 lungo periodo, di dover digitare fuori incredibilmente noioso a lungo 545 00:23:15,310 --> 00:23:17,020 comandi come quello. 546 00:23:17,020 --> 00:23:18,950 Quindi, è possibile eseguire manualmente Clang. 547 00:23:18,950 --> 00:23:20,530 È possibile digitare tutto questo manualmente. 548 00:23:20,530 --> 00:23:21,580 Appena diventa molto noioso. 549 00:23:21,580 --> 00:23:24,720 E, per questo è solo un programma che semplifica la nostra vita e 550 00:23:24,720 --> 00:23:27,120 esegue i comandi più complessi per noi. 551 00:23:27,120 --> 00:23:29,410 >> Va bene, quindi ora quale file devo avere 552 00:23:29,410 --> 00:23:31,540 nella mia directory corrente? 553 00:23:31,540 --> 00:23:36,310 Non solo hello.c, ma anche ciao. 554 00:23:36,310 --> 00:23:39,710 Quindi, se voglio correre ciao, ricordo che io dico dot barra, 555 00:23:39,710 --> 00:23:42,220 dove i mezzi dot andare nella cartella corrente, ovunque tu 556 00:23:42,220 --> 00:23:46,060 sono, e quindi eseguire il programma chiamato ciao, e anzi, ora, 557 00:23:46,060 --> 00:23:48,080 Ho ciao mondo. 558 00:23:48,080 --> 00:23:51,640 Va bene, eventuali questioni relative al flusso di lavoro o la sintassi di 559 00:23:51,640 --> 00:23:52,890 quello che abbiamo appena fatto? 560 00:23:55,380 --> 00:23:57,040 >> Va bene, quindi cerchiamo di prendere le cose su una tacca di nuovo. 561 00:23:57,040 --> 00:24:00,430 Quindi questo è stato deludente per scrivere solo un programma che solo 562 00:24:00,430 --> 00:24:01,790 dice sempre ciao, mondo. 563 00:24:01,790 --> 00:24:03,920 Quindi abbiamo cambiato, il Lunedi, per dire, ciao, David. 564 00:24:03,920 --> 00:24:06,560 E 'un po' più personale, ma altrettanto difficile codificato come il 565 00:24:06,560 --> 00:24:07,410 prima versione. 566 00:24:07,410 --> 00:24:08,780 Quindi non è poi così avvincente. 567 00:24:08,780 --> 00:24:13,120 Ma esiste, in C, funzioni certamente oltre 568 00:24:13,120 --> 00:24:15,700 stampa, le funzioni che consentono di ottenere l'input dell'utente. 569 00:24:15,700 --> 00:24:17,990 E il modo in cui abbiamo fatto questo, l'altro giorno, è stato il seguente. 570 00:24:17,990 --> 00:24:21,440 Prima di stampare effettivamente qualcosa, ho preso 571 00:24:21,440 --> 00:24:22,410 qualcosa dall'utente. 572 00:24:22,410 --> 00:24:23,370 Quindi lasciatemi farlo di nuovo. 573 00:24:23,370 --> 00:24:26,580 >> String s, dove s è solo un nome arbitrario, qui, per un 574 00:24:26,580 --> 00:24:30,600 stringa, è uguale a GetString. 575 00:24:30,600 --> 00:24:32,070 Quindi, ciò che è stato GetString? 576 00:24:32,070 --> 00:24:34,630 E 'ovviamente diventa una stringa, in base al suo nome. 577 00:24:34,630 --> 00:24:37,560 Ma quello che è, più tecnicamente? 578 00:24:37,560 --> 00:24:38,440 Si tratta di una funzione. 579 00:24:38,440 --> 00:24:41,790 Quindi è una funzione che non viene fornito con C di per sé. 580 00:24:41,790 --> 00:24:43,660 CS50 personale scritto questo. 581 00:24:43,660 --> 00:24:46,940 E così di utilizzare questo, non si può certo includere stdio.h, 582 00:24:46,940 --> 00:24:49,630 È inoltre necessario comprendere che cosa? 583 00:24:49,630 --> 00:24:50,060 Gia '. 584 00:24:50,060 --> 00:24:54,210 Così cs50.h, che è solo un file che abbiamo scritto qualche anno fa. 585 00:24:54,210 --> 00:24:57,130 Abbiamo installato sull'apparecchio per voi a fianco 586 00:24:57,130 --> 00:24:58,490 tutti i file standard. 587 00:24:58,490 --> 00:25:00,500 E così in queste prime settimane della classe, useremo 588 00:25:00,500 --> 00:25:02,820 questo solo per semplificare il processo di fare molto di base 589 00:25:02,820 --> 00:25:04,600 cose come input dell'utente ottenere. 590 00:25:04,600 --> 00:25:07,370 Perché, come vedremo tra un paio di settimane, l'input dell'utente entrare in un 591 00:25:07,370 --> 00:25:10,180 linguaggio come il C è in realtà sorprendentemente complesso, 592 00:25:10,180 --> 00:25:14,360 in particolare perché non si conosce in anticipo, di solito, come 593 00:25:14,360 --> 00:25:17,030 tanta roba che l'utente sta per digitare trovi 594 00:25:17,030 --> 00:25:20,340 E quando non si conosce la quantità di dati da aspettarsi, non si 595 00:25:20,340 --> 00:25:22,380 sapere quanta memoria allocare. 596 00:25:22,380 --> 00:25:25,480 E se in realtà hanno un utente contraddittorio che sta cercando 597 00:25:25,480 --> 00:25:28,180 di incidere nel vostro sistema, crash il computer, beh, 598 00:25:28,180 --> 00:25:31,600 in genere il primo metodo di attacco è, proprio come ho fatto in 599 00:25:31,600 --> 00:25:34,950 Lunedi, digitare una sequenza lunga serie di caratteri casuali, 600 00:25:34,950 --> 00:25:37,020 premere Invio, e vedere che cosa si rompe. 601 00:25:37,020 --> 00:25:40,800 Perché in generale, se si rompe un programma, che allude a 602 00:25:40,800 --> 00:25:42,650 una falla di sicurezza, potenzialmente. 603 00:25:42,650 --> 00:25:45,250 Si allude certamente a voi, il programmatore, dopo aver fatto un 604 00:25:45,250 --> 00:25:49,050 errore, ma più pericolosamente, si potrebbe avere fatto un 605 00:25:49,050 --> 00:25:52,430 relativi alla sicurezza errore, e in generale vedremo che 606 00:25:52,430 --> 00:25:54,840 è così che le macchine sono compromessi fino ad oggi, sia 607 00:25:54,840 --> 00:25:56,620 nel mondo del web e programmi al 608 00:25:56,620 --> 00:25:58,070 riga di comando, in questo modo. 609 00:25:58,070 --> 00:25:58,350 >> Bene. 610 00:25:58,350 --> 00:26:00,460 Quindi la stringa s è uguale a GetString. 611 00:26:00,460 --> 00:26:03,380 Quindi, ora più concretamente, che cosa fa la linea 6 fare qui? 612 00:26:03,380 --> 00:26:05,640 Quindi la funzione di destra si stringa, 613 00:26:05,640 --> 00:26:06,890 prende il numero di argomenti? 614 00:26:09,458 --> 00:26:09,900 Va bene. 615 00:26:09,900 --> 00:26:10,400 Così nessuno. 616 00:26:10,400 --> 00:26:11,360 Un po 'di sanità mentale controllare. 617 00:26:11,360 --> 00:26:15,380 Un argomento, di nuovo, è solo un input ad una funzione di modificare 618 00:26:15,380 --> 00:26:17,250 il suo comportamento di default in qualche modo. 619 00:26:17,250 --> 00:26:19,540 Ma in questo caso, non voglio alterare 620 00:26:19,540 --> 00:26:20,650 il comportamento di GetString. 621 00:26:20,650 --> 00:26:22,430 Volevo solo per ottenere una stringa. 622 00:26:22,430 --> 00:26:25,190 Così ho messo nulla nelle parentesi, e poi ho messo un 623 00:26:25,190 --> 00:26:27,550 virgola demarking fine della riga di codice. 624 00:26:27,550 --> 00:26:29,840 Ora, il segno di uguale non significa uguale, di per sé. 625 00:26:29,840 --> 00:26:32,690 Significa assegnazione, il che significa mettere qualunque ottiene 626 00:26:32,690 --> 00:26:36,060 emesso sul lato destro all'interno di ciò che è sulla sinistra. 627 00:26:36,060 --> 00:26:39,400 >> Quindi, sulla sinistra, diciamo che hanno dichiarato una 628 00:26:39,400 --> 00:26:41,630 stringa denominata s. 629 00:26:41,630 --> 00:26:44,240 E più in particolare, abbiamo assegnato la memoria interna del 630 00:26:44,240 --> 00:26:46,340 che metteremo i bit che rappresenta una sequenza di 631 00:26:46,340 --> 00:26:46,850 caratteri. 632 00:26:46,850 --> 00:26:49,400 Ma per oggi, abbiamo stanziato 633 00:26:49,400 --> 00:26:51,450 o dichiarata una stringa. 634 00:26:51,450 --> 00:26:51,790 Bene. 635 00:26:51,790 --> 00:26:54,760 Così ora una volta che ho fatto questo, voglio collegare il valore di 636 00:26:54,760 --> 00:26:56,535 s non, il valore di David. 637 00:26:56,535 --> 00:27:00,200 Quindi questo è sbagliato perché? 638 00:27:03,060 --> 00:27:04,870 Quindi questo è solo letteralmente il hardcoded s. 639 00:27:04,870 --> 00:27:06,870 E 'per dire "ciao, s," che non è quello che voglio. 640 00:27:06,870 --> 00:27:07,790 Così posso fare questo. 641 00:27:07,790 --> 00:27:10,330 Il segno di percentuale è un segnaposto, ma ora ho bisogno di 642 00:27:10,330 --> 00:27:12,520 passare in stampa un secondo argomento. 643 00:27:12,520 --> 00:27:15,160 Ricordiamo che gli argomenti a funzioni sono separati da 644 00:27:15,160 --> 00:27:20,300 virgole, così la prossima virgola qui ho messo dopo la lettera s. 645 00:27:20,300 --> 00:27:23,740 E in questo contesto oggi, s è la variabile, e printf, 646 00:27:23,740 --> 00:27:25,550 alla ricezione di questi due ingressi - 647 00:27:25,550 --> 00:27:29,440 la stringa sulla sinistra e il nome della variabile s destra - 648 00:27:29,440 --> 00:27:32,750 sarà collegare il secondo nel primo per noi, e 649 00:27:32,750 --> 00:27:34,600 basta stampare una stringa contenente bella bella 650 00:27:34,600 --> 00:27:36,770 qualunque cosa sia che abbiamo digitato trovi 651 00:27:36,770 --> 00:27:37,560 >> Quindi cerchiamo di provare questo. 652 00:27:37,560 --> 00:27:38,860 Andando di andare avanti e lo zoom indietro, indietro 653 00:27:38,860 --> 00:27:40,250 alla mia finestra di terminale. 654 00:27:40,250 --> 00:27:41,840 Zoom in fondo qui. 655 00:27:41,840 --> 00:27:44,070 Digitare nuovamente fare ciao. 656 00:27:44,070 --> 00:27:45,870 Clang sembra essere stato eseguire nuovamente. 657 00:27:45,870 --> 00:27:49,280 Io vado a digitare. / Ciao, Invio. 658 00:27:49,280 --> 00:27:52,145 Nulla sembra accadere ancora, ma è a questo prompt 659 00:27:52,145 --> 00:27:55,700 che io possa scrivere qualcosa di simile a Nate, Enter, e ora abbiamo 660 00:27:55,700 --> 00:27:56,380 Ciao, Nate. 661 00:27:56,380 --> 00:27:59,600 E posso farlo di nuovo con Rob, e così via. 662 00:27:59,600 --> 00:28:03,410 Quindi spero che ora questo programma si comporta come intendo. 663 00:28:03,410 --> 00:28:05,720 >> Ora, non tutto ciò che facile da usare. 664 00:28:05,720 --> 00:28:07,930 Non ho idea di quello che è stato si aspettava da me. 665 00:28:07,930 --> 00:28:09,620 Quindi possiamo certamente pulire questo un po '. 666 00:28:09,620 --> 00:28:13,270 Torniamo qui, e invece di immersioni e 667 00:28:13,270 --> 00:28:16,480 chiede all'utente una stringa, lasciatemi in modo esplicito il 668 00:28:16,480 --> 00:28:17,750 uso quello che mi aspetto. 669 00:28:17,750 --> 00:28:21,610 So printf ("Inserire una stringa:" 670 00:28:21,610 --> 00:28:24,080 ); 671 00:28:24,080 --> 00:28:25,510 Quindi nessuna variabile qui. 672 00:28:25,510 --> 00:28:26,750 Non ci sono segni di percentuale. 673 00:28:26,750 --> 00:28:28,550 Proprio la semplice frase inglese. 674 00:28:28,550 --> 00:28:34,030 Lasciami andare a fondo ed eseguire di nuovo qui il mio programma. 675 00:28:34,030 --> 00:28:35,380 Ma nulla sembra essere cambiato. 676 00:28:35,380 --> 00:28:37,350 Perché? 677 00:28:37,350 --> 00:28:38,380 Devo ricompilarlo. 678 00:28:38,380 --> 00:28:39,570 Quindi errore facile da commettere. 679 00:28:39,570 --> 00:28:41,700 Ma si deve salvare non solo il file, ma 680 00:28:41,700 --> 00:28:43,260 ricompilare il programma. 681 00:28:43,260 --> 00:28:46,640 E così se ho ri-eseguire make ciao, ora corre Clang. 682 00:28:46,640 --> 00:28:51,800 Ora posso correre. / Ciao. E ora vedo "Inserire una stringa:". 683 00:28:51,800 --> 00:28:52,050 Va bene. 684 00:28:52,050 --> 00:28:53,440 Ora è un po 'più user-friendly. 685 00:28:53,440 --> 00:28:55,850 Nate, Invio, ciao, Nate. 686 00:28:55,850 --> 00:28:57,310 >> Bene, proviamo di nuovo e cominciare a pensare 687 00:28:57,310 --> 00:28:58,080 sui casi d'angolo. 688 00:28:58,080 --> 00:29:00,520 Quindi, proprio come in Scratch, si incoraggia o sono in corso 689 00:29:00,520 --> 00:29:03,180 incoraggiato nelle specifiche di pensare tipo di cosa potrebbe andare 690 00:29:03,180 --> 00:29:06,610 male se non si prevede di tutto ciò che l'utente può fare. 691 00:29:06,610 --> 00:29:08,050 Bugs, quindi, potrebbe derivarne. 692 00:29:08,050 --> 00:29:09,710 Quindi, immettere una stringa - 693 00:29:09,710 --> 00:29:11,130 che cosa è un caso d'angolo qui? 694 00:29:11,130 --> 00:29:13,320 Cos'è uno scenario che io, il programmatore, potrebbe non avere 695 00:29:13,320 --> 00:29:16,070 previsto? 696 00:29:16,070 --> 00:29:17,600 Gia '. 697 00:29:17,600 --> 00:29:17,920 Va bene. 698 00:29:17,920 --> 00:29:22,060 Che importa se digito un numero come questo? 699 00:29:22,060 --> 00:29:22,500 Bene. 700 00:29:22,500 --> 00:29:24,490 Così funziona ancora. 701 00:29:24,490 --> 00:29:25,880 Fa Gramatically non ha senso. 702 00:29:25,880 --> 00:29:27,180 Ma almeno il programma funziona. 703 00:29:27,180 --> 00:29:28,650 >> Cosa c'è di un altro caso d'angolo? 704 00:29:28,650 --> 00:29:29,610 Qualcosa che non mi aspettavo. 705 00:29:29,610 --> 00:29:31,590 Si '? 706 00:29:31,590 --> 00:29:31,940 Va bene. 707 00:29:31,940 --> 00:29:34,950 Così abbiamo potuto fare qualcosa di simile a un numero molto, molto grande. 708 00:29:34,950 --> 00:29:37,270 Quindi cerchiamo di farlo qui. 709 00:29:37,270 --> 00:29:40,880 Fammi lo zoom indietro per un secondo, fammi evidenziare. 710 00:29:40,880 --> 00:29:42,250 Non è possibile copiare e incollare qui. 711 00:29:42,250 --> 00:29:42,470 Bene. 712 00:29:42,470 --> 00:29:44,440 Quindi non è possibile copiare e incollare in questa finestra di terminale, quindi ci 713 00:29:44,440 --> 00:29:46,950 basta simulare. 714 00:29:46,950 --> 00:29:51,340 Vorrei diminuire, sta per avvolgere. 715 00:29:51,340 --> 00:29:52,700 Non ho intenzione di fare questo per troppo tempo, perché non lo farà 716 00:29:52,700 --> 00:29:54,440 effettivamente rompere in questo programma. 717 00:29:54,440 --> 00:29:55,260 Ma potrebbe. 718 00:29:55,260 --> 00:29:55,830 Invio. 719 00:29:55,830 --> 00:29:56,580 Ma non fu così. 720 00:29:56,580 --> 00:29:57,050 Bene. 721 00:29:57,050 --> 00:29:58,440 Ma è un caso vero e proprio angolo. 722 00:29:58,440 --> 00:30:01,610 E l'unico motivo per cui si comportava correttamente, in modo da 723 00:30:01,610 --> 00:30:05,820 parlare, perché il CS50 GetString funzione è in realtà 724 00:30:05,820 --> 00:30:08,040 progettato sotto il cofano, come vedremo tra qualche settimana, 725 00:30:08,040 --> 00:30:11,570 assegnare automaticamente RAM sempre più, sempre più 726 00:30:11,570 --> 00:30:14,330 memoria dal sistema operativo, quando si realizza, wow, 727 00:30:14,330 --> 00:30:16,670 hai davvero scritto in qualcosa di piuttosto lungo. 728 00:30:16,670 --> 00:30:18,500 Ora, questo è un po 'una bugia. 729 00:30:18,500 --> 00:30:22,020 Se abbiamo effettivamente messo in pausa per un bel po 'e ho digitato 730 00:30:22,020 --> 00:30:24,640 qualcosa come 5 miliardi di caratteri sulla tastiera 731 00:30:24,640 --> 00:30:28,060 qui, o davvero colpito copia-incolla di un bel po ', noi molto probabilmente 732 00:30:28,060 --> 00:30:29,730 potrebbe causare il crash del programma. 733 00:30:29,730 --> 00:30:32,130 Solo un po 'più difficile da simulare che con un numero finito 734 00:30:32,130 --> 00:30:33,740 quantità di tempo. 735 00:30:33,740 --> 00:30:37,320 >> Cosa c'è di un altro caso d'angolo si potrebbe provare? 736 00:30:37,320 --> 00:30:38,730 Si '? 737 00:30:38,730 --> 00:30:39,020 Gia '. 738 00:30:39,020 --> 00:30:40,360 Allora perché non rispondiamo nulla? 739 00:30:40,360 --> 00:30:43,130 Così abbiamo fatto prendere un po 'di azione, perché altrimenti 740 00:30:43,130 --> 00:30:45,060 il programma sta andando a stare lì tutto il giorno a lampeggiare. 741 00:30:45,060 --> 00:30:46,860 Ma se mi limito a premere Invio - 742 00:30:46,860 --> 00:30:48,780 OK, ora, sembra ancora sbagliato. 743 00:30:48,780 --> 00:30:51,670 Non in crash, ma forse c'è ora la possibilità di 744 00:30:51,670 --> 00:30:54,190 avviare l'attuazione di un programma più rigoroso 745 00:30:54,190 --> 00:30:55,290 che verifichi effettivamente. 746 00:30:55,290 --> 00:30:57,640 E se la stringa, la frase, la parola che ho 747 00:30:57,640 --> 00:31:00,890 digitato ha lunghezza 0, beh, forse dovrei urlare al 748 00:31:00,890 --> 00:31:03,770 utente, o digli o lei a inserire una stringa di nuovo, in modo che 749 00:31:03,770 --> 00:31:06,560 abbiamo effettivamente ottenere quello che sembra un comportamento corretto e non 750 00:31:06,560 --> 00:31:08,570 solo controllo completo da parte mia. 751 00:31:08,570 --> 00:31:11,130 >> Domanda sul retro? 752 00:31:11,130 --> 00:31:11,970 Numero decimale. 753 00:31:11,970 --> 00:31:13,120 Così abbiamo potuto provare anche questo. 754 00:31:13,120 --> 00:31:16,840 1,10000005. 755 00:31:16,840 --> 00:31:19,470 Sembra che sta per funzionare realmente bene. 756 00:31:19,470 --> 00:31:21,160 E che in realtà ci si aspetta. 757 00:31:21,160 --> 00:31:24,550 Anche se si potrebbe aver digitato quel numero lì, o un 758 00:31:24,550 --> 00:31:28,200 più grande numero in precedenza, si rende conto che quando si sta digitando utente 759 00:31:28,200 --> 00:31:31,070 ingresso e stiamo usando la funzione GetString, non 760 00:31:31,070 --> 00:31:34,380 importa se quello che sto scrivendo si presenta come un numero. 761 00:31:34,380 --> 00:31:36,720 Ricordiamo che secondo ASCII, tutto sul vostro 762 00:31:36,720 --> 00:31:39,920 tastiera ha un valore numerico che può essere associata a una 763 00:31:39,920 --> 00:31:41,480 carattere, un char. 764 00:31:41,480 --> 00:31:44,490 Quindi, in questo caso, anche se potrei digitare un numero, il 765 00:31:44,490 --> 00:31:48,190 computer sta a pensarci bene, per così dire, come una stringa - 766 00:31:48,190 --> 00:31:49,870 qualcosa che assomiglia a un numero, ma è 767 00:31:49,870 --> 00:31:51,090 in realtà non è un numero. 768 00:31:51,090 --> 00:31:53,450 Ma che in realtà è un segue perfetta, perché ora possiamo 769 00:31:53,450 --> 00:31:55,450 effettivamente transizione a programmi di scrittura che 770 00:31:55,450 --> 00:31:56,730 utilizzare altri tipi di dati. 771 00:31:56,730 --> 00:32:01,840 >> Quindi, oltre ad utilizzare i caratteri, o meglio, oltre ad utilizzare le stringhe, 772 00:32:01,840 --> 00:32:04,510 conto che abbiamo altri tipi di dati in C e in 773 00:32:04,510 --> 00:32:05,230 altre lingue. 774 00:32:05,230 --> 00:32:08,480 Un char, come suggerisce il nome, è solo un singolo carattere. 775 00:32:08,480 --> 00:32:12,150 Un galleggiante è un valore in virgola mobile, e questo è solo una fantasia 776 00:32:12,150 --> 00:32:14,470 modo di dire un numero reale - qualcosa che ha un decimale 777 00:32:14,470 --> 00:32:17,410 punto con alcuni numeri a sinistra e / oa destra. 778 00:32:17,410 --> 00:32:21,370 Un int è un intero, che è solo un numero come 123. 779 00:32:21,370 --> 00:32:24,170 E ora più interessante sono cose come doppio. 780 00:32:24,170 --> 00:32:28,540 Che cosa si dice una doppia era l'ultima volta? 781 00:32:28,540 --> 00:32:30,050 E '64, a destra. 782 00:32:30,050 --> 00:32:33,560 Così, mentre in genere un galleggiante è a 32 bit - 783 00:32:33,560 --> 00:32:37,340 quindi è questo lungo nella memoria, si utilizza 32 zero e uno a 784 00:32:37,340 --> 00:32:40,530 rappresentano valori - una doppia è letteralmente il doppio di quello che 785 00:32:40,530 --> 00:32:43,810 significa che è possibile rappresentare numeri più grandi, o 786 00:32:43,810 --> 00:32:45,810 è possibile rappresentare i numeri più precisi. 787 00:32:45,810 --> 00:32:48,690 Così si può avere più numeri dopo la virgola, ma 788 00:32:48,690 --> 00:32:51,520 come ha detto il tizio nel video, anche qualcosa di semplice 789 00:32:51,520 --> 00:32:55,360 concettualmente come 1/3 non può essere rappresentato da un proprio 790 00:32:55,360 --> 00:32:58,330 computer, perché alla fine si esaurisce di bit, e 791 00:32:58,330 --> 00:33:02,510 quindi si può fare solo .33333333 tante volte, a 792 00:33:02,510 --> 00:33:05,050 questo punto non resta che dire che sono fuori della rappresentazione 793 00:33:05,050 --> 00:33:08,120 spazio, devo chiamare solo un giorno e rappresentarla 794 00:33:08,120 --> 00:33:10,200 un po 'impreciso così. 795 00:33:10,200 --> 00:33:11,110 E un lungo lungo - 796 00:33:11,110 --> 00:33:13,880 nome stupido, ma è perché c'è un tipo di dati conosciuto come un 797 00:33:13,880 --> 00:33:19,350 lungo in C che è guarda caso spesso 32 bit, proprio come un 798 00:33:19,350 --> 00:33:21,670 int è 32 bit, ma un lungo tempo è 799 00:33:21,670 --> 00:33:23,560 in genere 64 bit. 800 00:33:23,560 --> 00:33:25,740 Quindi significa che per te può rappresentare più grande 801 00:33:25,740 --> 00:33:26,990 numeri di questo. 802 00:33:26,990 --> 00:33:27,410 >> Bene. 803 00:33:27,410 --> 00:33:29,390 Quindi, se si vuole realmente iniziare a rappresentare le cose, abbiamo 804 00:33:29,390 --> 00:33:31,030 Potrebbe essere necessario più tipi sofisticati, e 805 00:33:31,030 --> 00:33:32,340 è per questo che abbiamo stringa. 806 00:33:32,340 --> 00:33:36,450 Così nella libreria CS50, che file chiamato cs50.h, abbiamo 807 00:33:36,450 --> 00:33:41,110 effettivamente dichiarato un tipo di dati, per così dire, chiamato stringa, 808 00:33:41,110 --> 00:33:42,710 stringa ma in realtà non esiste. 809 00:33:42,710 --> 00:33:44,780 Si tratta, ancora una volta, uno di questi strati che andremo a buccia 810 00:33:44,780 --> 00:33:47,490 indietro in una settimana o due e buttarla via, e in realtà 811 00:33:47,490 --> 00:33:49,640 guardare sotto il cofano a ciò che una stringa è in realtà, e 812 00:33:49,640 --> 00:33:50,840 come è rappresentato. 813 00:33:50,840 --> 00:33:53,520 Stiamo anche andando a guardare i valori booleani. 814 00:33:53,520 --> 00:33:56,040 >> Così quello che era un bool nel contesto di Scratch? 815 00:33:59,154 --> 00:34:00,300 E 'vero o falso. 816 00:34:00,300 --> 00:34:03,900 Quindi è solo un valore vero o falso, acceso o spento, 1 o 817 00:34:03,900 --> 00:34:06,140 0, comunque lo si voglia vedere il mondo. 818 00:34:06,140 --> 00:34:09,739 Quindi in C, grazie alla libreria CS50, che a sua volta 819 00:34:09,739 --> 00:34:12,179 comprende un'altra libreria sotto la cappa, abbiamo 820 00:34:12,179 --> 00:34:14,909 l'accesso a un tipo di dati che si chiama bool, che sarà 821 00:34:14,909 --> 00:34:18,730 letteralmente ci permettono di assegnare i valori true o false a 822 00:34:18,730 --> 00:34:20,219 cose in un programma. 823 00:34:20,219 --> 00:34:23,880 >> Quindi cerchiamo di andare avanti qui e scrivere un piccolo programma che 824 00:34:23,880 --> 00:34:26,330 fa qualcosa di implicare un numero, invece. 825 00:34:26,330 --> 00:34:29,840 Quindi fammi tornare alla Appliance CS50, lasciami andare avanti e 826 00:34:29,840 --> 00:34:32,770 creare un nuovo file chiamato qui - 827 00:34:32,770 --> 00:34:35,460 diciamo solo che qualcosa di semplice, come math.c. 828 00:34:38,270 --> 00:34:38,710 Bene. 829 00:34:38,710 --> 00:34:41,600 Ed ora andate fino alla cima del mio programma, sono 830 00:34:41,600 --> 00:34:42,510 intenzione di fare il solito - 831 00:34:42,510 --> 00:34:44,780 # Include, in modo che posso usare 832 00:34:44,780 --> 00:34:46,860 printf, int main (void) - 833 00:34:46,860 --> 00:34:49,270 torneremo a, alla fine, che cosa significa int 834 00:34:49,270 --> 00:34:52,389 qui, che qui significa nulla, ma per il momento, è sufficiente sapere che 835 00:34:52,389 --> 00:34:54,270 è necessario avviare programmi di questo tipo. 836 00:34:54,270 --> 00:34:56,280 Ora ho intenzione di andare avanti e dire qualcosa di un po 'di 837 00:34:56,280 --> 00:35:02,110 diverso - printf ("Dammi un numero:" 838 00:35:02,110 --> 00:35:03,570 ). 839 00:35:03,570 --> 00:35:09,220 Poi ho intenzione di fare int n = GetInt, perché 840 00:35:09,220 --> 00:35:12,770 E 'venuto fuori GetInt è un'altra funzione nella libreria CS50 841 00:35:12,770 --> 00:35:14,060 oltre GetString. 842 00:35:14,060 --> 00:35:17,340 E adesso ho intenzione di fare qualcosa di stupido, come "grazie 843 00:35:17,340 --> 00:35:25,760 per il% d ", per intero decimale, e poi virgola n, e 844 00:35:25,760 --> 00:35:26,620 poi tornare 0. 845 00:35:26,620 --> 00:35:28,940 Quindi, di nuovo, restituire 0 non ha nulla a che fare con il numero sono 846 00:35:28,940 --> 00:35:30,080 chiede all'utente. 847 00:35:30,080 --> 00:35:33,620 Significa solo alla fine che tutti, probabilmente, sta bene. 848 00:35:33,620 --> 00:35:36,290 >> Quindi fammi scendere nella finestra del terminale qui. 849 00:35:36,290 --> 00:35:39,590 Vorrei digitare rendere la matematica, entrare. 850 00:35:39,590 --> 00:35:41,360 E qualcosa che non va. 851 00:35:41,360 --> 00:35:44,620 Fare la matematica non ha funzionato. 852 00:35:44,620 --> 00:35:46,170 Ecco il primo dei nostri messaggi di errore. 853 00:35:46,170 --> 00:35:46,570 Perché? 854 00:35:46,570 --> 00:35:49,720 Un enigmatico, ma - 855 00:35:49,720 --> 00:35:50,060 Gia '. 856 00:35:50,060 --> 00:35:51,240 Così cs50.h. 857 00:35:51,240 --> 00:35:53,900 Quindi, di nuovo, soprattutto nella fase iniziale, potrai scrivere la tua prima 858 00:35:53,900 --> 00:35:56,590 programma per pset 1 in sezioni, in orario di ufficio, e 859 00:35:56,590 --> 00:35:59,050 francamente, sarà schiacciante a volte ciò che queste cose 860 00:35:59,050 --> 00:36:00,000 sono in realtà dicendo. 861 00:36:00,000 --> 00:36:01,890 Ma vi renderete conto ben presto cominciano a cadere 862 00:36:01,890 --> 00:36:06,120 in segmenti in cui questo significa che hai lasciato fuori uno 863 00:36:06,120 --> 00:36:08,290 del # include all'inizio del file. 864 00:36:08,290 --> 00:36:10,960 E Clang, il compilatore, vi informa di questo 865 00:36:10,960 --> 00:36:14,090 dicendo, piuttosto fantasiosamente, dichiarazione implicita di 866 00:36:14,090 --> 00:36:15,990 GetInt funzione non è valida. 867 00:36:15,990 --> 00:36:16,310 >> Bene. 868 00:36:16,310 --> 00:36:17,520 Che cosa vuol dire? 869 00:36:17,520 --> 00:36:22,080 Significa solo che hai dichiarato in modo implicito in GetInt 870 00:36:22,080 --> 00:36:24,850 senso che non si è esplicitamente dichiarato. 871 00:36:24,850 --> 00:36:27,300 Per dichiarare esplicitamente int, si deve insegnare 872 00:36:27,300 --> 00:36:28,740 Clang che esiste. 873 00:36:28,740 --> 00:36:32,020 E la soluzione molto semplice che è quello di insegnare dal 874 00:36:32,020 --> 00:36:34,780 tra cui questo altro file, cs50.h, a 875 00:36:34,780 --> 00:36:35,850 la parte superiore del file. 876 00:36:35,850 --> 00:36:40,380 Perché letteralmente, ciò che fa è # include racconta Clang 877 00:36:40,380 --> 00:36:44,030 più o meno di andare a cercare il file denominato cs50.h, copia, 878 00:36:44,030 --> 00:36:48,150 incollarlo automaticamente nella parte superiore del mio programma per me, 879 00:36:48,150 --> 00:36:50,850 e poi convertire il codice sorgente di zero e uno. 880 00:36:50,850 --> 00:36:52,850 Ma questo sarebbe ovviamente molto noioso se noi umani ha avuto 881 00:36:52,850 --> 00:36:55,370 andare copiare e incollare questi file di grandi dimensioni per tutto il tempo, 882 00:36:55,370 --> 00:36:58,540 così # include fa proprio tutto ciò che automaticamente senza 883 00:36:58,540 --> 00:37:01,550 infangando il mio codice con qualcun altro biblioteca. 884 00:37:01,550 --> 00:37:06,370 E una libreria è solo un altro file che contiene funzioni e 885 00:37:06,370 --> 00:37:08,340 altre cose che qualcun altro ha scritto, che siamo 886 00:37:08,340 --> 00:37:10,270 leva per il nostro bene. 887 00:37:10,270 --> 00:37:10,580 >> Bene. 888 00:37:10,580 --> 00:37:11,200 Proviamo di nuovo. 889 00:37:11,200 --> 00:37:12,250 Fare matematica. 890 00:37:12,250 --> 00:37:13,120 Invio. 891 00:37:13,120 --> 00:37:13,530 Buona. 892 00:37:13,530 --> 00:37:14,880 In modo che sembra aver funzionato. 893 00:37:14,880 --> 00:37:18,330 Quindi lasciate che ora eseguire la matematica,. / Matematica. 894 00:37:18,330 --> 00:37:21,100 Inserisci mi dà un numero, 123. 895 00:37:21,100 --> 00:37:22,620 Grazie per la 123. 896 00:37:22,620 --> 00:37:24,490 Ora proviamo un altro caso d'angolo. 897 00:37:24,490 --> 00:37:26,530 Una stringa è piuttosto generosa, perché un 898 00:37:26,530 --> 00:37:27,620 stringa può essere qualsiasi cosa. 899 00:37:27,620 --> 00:37:28,910 Può sembrare numeri, simile a 900 00:37:28,910 --> 00:37:30,600 personaggi, guarda come le parole. 901 00:37:30,600 --> 00:37:31,900 Ma un int è un int. 902 00:37:31,900 --> 00:37:34,370 Così ora se io sono l'utente difficile, e sta dicendo: "Dammi 903 00:37:34,370 --> 00:37:38,730 un numero, "cosa succede se cerco di fare qualcosa di simile a 0,1? 904 00:37:38,730 --> 00:37:41,510 Beh, e 'un numero, ed è coerente con la 905 00:37:41,510 --> 00:37:44,180 grammatica che ho usato qui, ma sotto il cofano, io sono di 906 00:37:44,180 --> 00:37:45,610 Naturalmente usando la funzione GetInt. 907 00:37:45,610 --> 00:37:46,610 >> Quindi cerchiamo di vedere cosa succede. 908 00:37:46,610 --> 00:37:48,250 Invio, riprovare. 909 00:37:48,250 --> 00:37:48,560 Bene. 910 00:37:48,560 --> 00:37:50,570 Permettetemi di essere difficile e basta premere di nuovo Invio. 911 00:37:50,570 --> 00:37:51,700 Enter, Invio. 912 00:37:51,700 --> 00:37:53,890 Così ora sembra che GetInt è un po 'più 913 00:37:53,890 --> 00:37:55,240 potente di GetString. 914 00:37:55,240 --> 00:37:58,540 Noi, il personale, attuata in modo tale che se notiamo 915 00:37:58,540 --> 00:38:02,100 non ci hanno dato un int - e un int è un numero decimale 916 00:38:02,100 --> 00:38:04,785 zeri, quelli contenenti, due, tre, quattro, cinque, sei, 917 00:38:04,785 --> 00:38:05,540 sette, otto, o nove. 918 00:38:05,540 --> 00:38:06,310 E questo è tutto. 919 00:38:06,310 --> 00:38:08,810 Nessun punto decimale, senza caratteri, senza segni di punteggiatura. 920 00:38:08,810 --> 00:38:10,390 Sembra che dobbiamo collaborare. 921 00:38:10,390 --> 00:38:13,680 Quindi, mi permetta di provare quattro, cinque, sei, e che mi passa attraverso. 922 00:38:13,680 --> 00:38:16,760 Quindi, veramente, di essere anale qui, forse dovrei dire "Dammi 923 00:38:16,760 --> 00:38:20,310 un intero "per trasmettere all'utente 924 00:38:20,310 --> 00:38:22,620 esattamente quello che intendo. 925 00:38:22,620 --> 00:38:24,090 >> Ora pensiamo sotto la cappa. 926 00:38:24,090 --> 00:38:27,930 Non stiamo andando a guardare il modo in cui è implementato cs50.h oggi, 927 00:38:27,930 --> 00:38:29,080 quella libreria. 928 00:38:29,080 --> 00:38:33,600 Ma se si continua a dire riprovare, riprovare, riprovare, cosa di programmazione 929 00:38:33,600 --> 00:38:36,970 costruire sto usando presumibilmente sotto la cappa di 930 00:38:36,970 --> 00:38:39,000 attuare tale? 931 00:38:39,000 --> 00:38:39,980 Quindi, solo un ciclo, giusto? 932 00:38:39,980 --> 00:38:41,930 Una delle idee più semplici che abbiamo visto su Scratch. 933 00:38:41,930 --> 00:38:45,050 The Forever costruire, la ripetizione costruire. 934 00:38:45,050 --> 00:38:47,320 Presumibilmente, in questo programma, sotto la cappa, anche 935 00:38:47,320 --> 00:38:49,470 anche se è scritto in C e non zero, che sta facendo 936 00:38:49,470 --> 00:38:54,300 qualcosa chiamato equivalente per sempre se l'utente non ha 937 00:38:54,300 --> 00:38:58,710 digitato un numero intero, ad esempio riprovare, riprovare, riprovare, riprovare, così 938 00:38:58,710 --> 00:39:01,220 poi finalmente, quando otteniamo un numero intero, allora si 939 00:39:01,220 --> 00:39:02,970 uscire di quel ciclo. 940 00:39:02,970 --> 00:39:05,610 >> Quindi, quali altri funzioni che usiamo qui in biblioteca CS50 è? 941 00:39:05,610 --> 00:39:07,880 Ebbene, specie di quelli ovvi, almeno sulla base del 942 00:39:07,880 --> 00:39:09,570 tipi di dati che noi sappiamo esistere. 943 00:39:09,570 --> 00:39:12,900 Abbiamo implementato GetString, GetInt, ma in tutto il 944 00:39:12,900 --> 00:39:15,680 prime settimane del termine, è anche possibile utilizzare getFloat e 945 00:39:15,680 --> 00:39:18,870 GetDouble e GetLongLong per ottenere con precisione il 946 00:39:18,870 --> 00:39:20,030 i tipi di dati che si desidera. 947 00:39:20,030 --> 00:39:24,030 Poiché il dettaglio chiave qui è che a differenza di alcune lingue, 948 00:39:24,030 --> 00:39:26,630 come Python e Ruby, in cui non si devono necessariamente 949 00:39:26,630 --> 00:39:29,730 dichiarare il tipo di dati di una variabile - 950 00:39:29,730 --> 00:39:32,390 non è per dire al computer che tipo di roba 951 00:39:32,390 --> 00:39:34,000 si sta andando a mettere nella variabile - 952 00:39:34,000 --> 00:39:36,640 in C, devi essere sempre così precisi. 953 00:39:36,640 --> 00:39:40,060 Quindi, se volete una variabile chiamata n, un pezzo di memoria 954 00:39:40,060 --> 00:39:42,900 che in questo caso risulta essere di 32 bit per convenzione, si 955 00:39:42,900 --> 00:39:45,660 dire al computer che questi bit sono 956 00:39:45,660 --> 00:39:47,840 andando a memorizzare un numero - 957 00:39:47,840 --> 00:39:50,630 Non un personaggio, non una stringa, non un float. 958 00:39:50,630 --> 00:39:52,620 E questo risolve il problema che effettivamente 959 00:39:52,620 --> 00:39:53,760 incontrato la settimana scorsa. 960 00:39:53,760 --> 00:39:57,050 Se stiamo usando gli zeri e numeri di quelli di rappresentare non solo 961 00:39:57,050 --> 00:40:00,770 numeri, ma come e B e C, come nel mondo è un 962 00:40:00,770 --> 00:40:03,460 computer di andare a sapere che questo modello di bit effettivamente 963 00:40:03,460 --> 00:40:07,650 rappresenta il numero 65, al contrario di rappresentare la 964 00:40:07,650 --> 00:40:09,860 lettera A, che per coincidenza, secondo 965 00:40:09,860 --> 00:40:13,440 ASCII, ricordiamo, era equivalente a 65? 966 00:40:13,440 --> 00:40:16,550 >> Quindi questi tipi di dati forniscono un contesto al computer, in modo da 967 00:40:16,550 --> 00:40:18,810 che sa se questi bit deve essere interpretato come un 968 00:40:18,810 --> 00:40:23,660 int o come una stringa. 969 00:40:23,660 --> 00:40:26,500 Tutte le domande, quindi, su questo? 970 00:40:26,500 --> 00:40:28,149 Si '? 971 00:40:34,780 --> 00:40:35,270 DAVID J. MALAN: Bella domanda. 972 00:40:35,270 --> 00:40:39,140 Se prendiamo in stdio.h, salviamo il file - 973 00:40:39,140 --> 00:40:44,360 lasciami andare verso la finestra del terminale ed eseguire rendere la matematica, zoom 974 00:40:44,360 --> 00:40:45,530 ed entrare - 975 00:40:45,530 --> 00:40:47,700 ora ho un errore diverso, perché sono implicitamente 976 00:40:47,700 --> 00:40:49,650 dichiarando quale funzione ora? 977 00:40:49,650 --> 00:40:50,700 Printf. 978 00:40:50,700 --> 00:40:52,970 Così ora ho creato un nuovo problema, la cui soluzione è 979 00:40:52,970 --> 00:40:53,890 essenzialmente la stessa. 980 00:40:53,890 --> 00:40:55,365 Ho bisogno di mettere quella posteriore. 981 00:40:55,365 --> 00:40:56,615 PUBBLICO: [incomprensibile] 982 00:41:03,534 --> 00:41:04,030 DAVID J. MALAN: Oh. 983 00:41:04,030 --> 00:41:04,850 Quindi, se prendo fuori - 984 00:41:04,850 --> 00:41:05,360 Ok, si '. 985 00:41:05,360 --> 00:41:08,960 Quindi, se tolgo l'inclusione standard di I / O biblioteca up 986 00:41:08,960 --> 00:41:12,020 qui, e poi stai dicendo che se mi libero di printf, ottenere 987 00:41:12,020 --> 00:41:13,450 liberarsi di printf? 988 00:41:13,450 --> 00:41:13,810 Sì. 989 00:41:13,810 --> 00:41:18,450 Questo dovrebbe funzionare, perché non sono più con qualsiasi - whoops. 990 00:41:18,450 --> 00:41:20,110 Ho solo prendere il sole? 991 00:41:20,110 --> 00:41:21,650 Oh, va bene. 992 00:41:21,650 --> 00:41:25,640 Questo non funziona a causa di un nuovo errore che abbiamo appena introdotto. 993 00:41:25,640 --> 00:41:28,390 E questo è un po 'più evidente. 994 00:41:28,390 --> 00:41:29,440 >> Qual è il problema? 995 00:41:29,440 --> 00:41:30,680 Inutilizzati variabile n. 996 00:41:30,680 --> 00:41:34,040 Quindi questo errore è il risultato del nostro configurato il 997 00:41:34,040 --> 00:41:36,640 apparecchio particolarmente pedante, a gridare veramente a 998 00:41:36,640 --> 00:41:39,060 per ogni errore possibile, anche se è una specie di 999 00:41:39,060 --> 00:41:41,950 un non-fatale errore come questo - è davvero un grande 1000 00:41:41,950 --> 00:41:44,820 affrontare che ha stanziato un int, mettere un numero in esso, e poi 1001 00:41:44,820 --> 00:41:46,030 solo non ha fatto nulla con esso? 1002 00:41:46,030 --> 00:41:47,020 Quindi funzionalmente, no. 1003 00:41:47,020 --> 00:41:50,410 Questo non sta andando a rompere il programma. 1004 00:41:50,410 --> 00:41:51,490 E 'solo un po' stupido, no? 1005 00:41:51,490 --> 00:41:54,220 Non vi è alcun valore per aver chiesto per quel numero, memorizzato 1006 00:41:54,220 --> 00:41:56,370 in una variabile, se non hai mai intenzione di fare nulla 1007 00:41:56,370 --> 00:41:58,000 con esso, se stampare o salvare. 1008 00:41:58,000 --> 00:42:00,270 Quindi, in questo caso, Clang è riconoscere tanto, e 1009 00:42:00,270 --> 00:42:02,010 sta dicendo non utilizzati variabile n. 1010 00:42:02,010 --> 00:42:05,380 >> Così siamo in grado di risolvere questo problema, se si vuole veramente. 1011 00:42:05,380 --> 00:42:07,250 Ma ancora una volta, questa non è una buona programmazione ora. 1012 00:42:07,250 --> 00:42:09,310 Così ho potuto fare questo - 1013 00:42:09,310 --> 00:42:12,060 scendere qui, vorrei cancellare lo schermo, rendere la matematica. 1014 00:42:12,060 --> 00:42:13,090 Che funziona. 1015 00:42:13,090 --> 00:42:18,110 Ora posso eseguire il mio programma di matematica, riceve l'input - 1016 00:42:18,110 --> 00:42:18,700 bene, che è stato male. 1017 00:42:18,700 --> 00:42:23,450 Riceve l'input, e questo è tutto ciò che fa, in questo caso. 1018 00:42:23,450 --> 00:42:25,220 >> Quindi, in realtà, proviamo un altro caso d'angolo che abbiamo 1019 00:42:25,220 --> 00:42:26,300 non pensare prima. 1020 00:42:26,300 --> 00:42:28,220 In questo caso - qui, torniamo a quello che è un 1021 00:42:28,220 --> 00:42:29,500 po 'più user-friendly. 1022 00:42:29,500 --> 00:42:32,580 Torniamo qui e correre di nuovo rendere la matematica. 1023 00:42:32,580 --> 00:42:34,190 Ops, che cosa ho fatto di sbagliato? 1024 00:42:34,190 --> 00:42:35,400 Devo ripristinare ulteriormente. 1025 00:42:35,400 --> 00:42:36,390 Va bene. 1026 00:42:36,390 --> 00:42:38,490 Ora siamo di nuovo in stato originale, in cui tutti 1027 00:42:38,490 --> 00:42:39,990 si spera bene. 1028 00:42:39,990 --> 00:42:43,360 E ora se corro la matematica, 123 sembra funzionare. 1029 00:42:43,360 --> 00:42:46,010 Ma questo non è davvero una prova efficace, per dire basta 1030 00:42:46,010 --> 00:42:47,930 va bene, che funziona. 1031 00:42:47,930 --> 00:42:49,120 789, che funziona. 1032 00:42:49,120 --> 00:42:50,100 Tempo di presentare. 1033 00:42:50,100 --> 00:42:51,870 Perche 'c'e' casi particolari altri qui. 1034 00:42:51,870 --> 00:42:55,040 Una stringa in realtà non ci danno molti problemi digitando in un 1035 00:42:55,040 --> 00:42:56,510 bel po 'di personaggi. 1036 00:42:56,510 --> 00:42:59,580 Ma cosa succede se scrivo in questo? 1037 00:42:59,580 --> 00:43:04,850 Colpire il numero 1 un bel po ', molto di qui - 1038 00:43:04,850 --> 00:43:06,300 va bene, si sta facendo un po 'noioso, quindi ho intenzione di 1039 00:43:06,300 --> 00:43:10,040 si fermano qui, e ho intenzione di premere Invio. 1040 00:43:10,040 --> 00:43:11,290 >> Che diavolo e 'successo? 1041 00:43:14,110 --> 00:43:17,680 Quindi questo può effettivamente essere spiegato. 1042 00:43:17,680 --> 00:43:18,920 Così ha fatto la prenda binario? 1043 00:43:18,920 --> 00:43:21,130 Un buon pensiero, ma no, non è il fatto che ci sono voluti 1044 00:43:21,130 --> 00:43:22,815 in formato binario, perché in effetti, che era solo una specie di 1045 00:43:22,815 --> 00:43:23,080 coincidenza. 1046 00:43:23,080 --> 00:43:23,930 Siamo in grado di farlo di nuovo. 1047 00:43:23,930 --> 00:43:26,530 Quindi non c'è 2 nel sistema binario, che è 1048 00:43:26,530 --> 00:43:27,420 probabilmente sufficiente comunque. 1049 00:43:27,420 --> 00:43:28,780 Invio. 1050 00:43:28,780 --> 00:43:30,140 In modo che non era il problema. 1051 00:43:30,140 --> 00:43:31,390 Che altro? 1052 00:43:34,650 --> 00:43:35,400 Esattamente. 1053 00:43:35,400 --> 00:43:37,830 >> Così ripenso a quello che è in realtà un int. 1054 00:43:37,830 --> 00:43:40,970 Si tratta di 32 bit che collettivamente vengono interpretati 1055 00:43:40,970 --> 00:43:42,090 come numero. 1056 00:43:42,090 --> 00:43:44,730 Se si dispone di 32 bit, questo significa che ciascuno dei bit può essere 1057 00:43:44,730 --> 00:43:46,690 uno 0 o un 1., 0 o 1 1058 00:43:46,690 --> 00:43:49,090 Questo significa che ci sono due possibilità per questo bit, 1059 00:43:49,090 --> 00:43:51,140 due possibilità per questo, due possibilità per questo 1060 00:43:51,140 --> 00:43:52,570 po '- in modo che sia 2 volte 2 volte - 1061 00:43:52,570 --> 00:43:55,480 così che è 2 potenza 32 è il numero totale di 1062 00:43:55,480 --> 00:43:58,960 permutazioni di zero e uno, se si hanno 32 1063 00:43:58,960 --> 00:44:01,400 segnaposto, zeri o quelli, di fronte a voi. 1064 00:44:01,400 --> 00:44:04,250 Quindi, se ho 2 al 32, matematicamente, che cosa? 1065 00:44:07,080 --> 00:44:07,840 Quindi è molto. 1066 00:44:07,840 --> 00:44:09,910 Sono le 4 miliardi di euro, prendere o lasciare. 1067 00:44:09,910 --> 00:44:13,510 E 4 miliardi non sembra essere ciò che è stato stampato qui. 1068 00:44:13,510 --> 00:44:16,290 In realtà, questo sembra più vicino a 2 miliardi. 1069 00:44:16,290 --> 00:44:17,970 Ma questa non è una coincidenza. 1070 00:44:17,970 --> 00:44:21,590 Il fatto che il computer ha mal interpretato il mio numero enorme, 1071 00:44:21,590 --> 00:44:24,260 la mia sequenza enorme di quelli e poi la mia sequenza enorme di due a due, 1072 00:44:24,260 --> 00:44:26,880 a circa 2 miliardi di euro, è spiegato in che modo? 1073 00:44:30,250 --> 00:44:32,180 C'è un limite al int. 1074 00:44:32,180 --> 00:44:34,970 C'è un certamente un valore massimo che è possibile rappresentare. 1075 00:44:34,970 --> 00:44:36,370 Ma di solito è 4 miliardi, giusto? 1076 00:44:36,370 --> 00:44:39,100 Se 2 a 32 è di circa 4 miliardi di euro, che sembra 1077 00:44:39,100 --> 00:44:40,350 che è il più grande numero. 1078 00:44:42,420 --> 00:44:45,240 Quindi non un resto, ma un buon pensiero. 1079 00:44:45,240 --> 00:44:46,340 I numeri negativi. 1080 00:44:46,340 --> 00:44:49,570 Quindi, se avete 4000000000 cose possibili che potete 1081 00:44:49,570 --> 00:44:52,970 rappresentare con queste varie permutazioni di 32 0 e 1082 00:44:52,970 --> 00:44:55,600 1s, beh, è ​​ovvio che noi umani potrebbe desiderare di 1083 00:44:55,600 --> 00:44:57,110 rappresentano non solo i numeri interi positivi 1084 00:44:57,110 --> 00:44:58,240 ma interi negativi. 1085 00:44:58,240 --> 00:45:00,410 E in effetti, questa è l'ipotesi che C fa. 1086 00:45:00,410 --> 00:45:03,550 Quindi, con 32 bit, è possibile rappresentare circa il negativo 2 1087 00:45:03,550 --> 00:45:06,630 miliardi di tutta la strada fino a positivo 2 miliardi. 1088 00:45:06,630 --> 00:45:08,750 E così in questo caso, quello che stiamo vedendo in realtà è solo 1089 00:45:08,750 --> 00:45:13,600 ai margini della capacità del nostro intero, e abbiamo, quindi 1090 00:45:13,600 --> 00:45:15,860 di parlare, traboccava un numero intero. 1091 00:45:15,860 --> 00:45:19,180 Abbiamo cercato di stipare più bit in esso che si adatti. 1092 00:45:19,180 --> 00:45:22,960 Così il risultato finale è che hanno essenzialmente tutti i 1 bit. 1093 00:45:22,960 --> 00:45:25,280 Abbiamo girato tutti i nostri pezzi in poi, abbiamo cercato di rappresentare 1094 00:45:25,280 --> 00:45:27,630 il maggior numero possibile, ma non è chiaro quasi 1095 00:45:27,630 --> 00:45:30,960 abbastanza grande per rappresentare le due cose che ho appena scritto trovi 1096 00:45:30,960 --> 00:45:31,730 Si '? 1097 00:45:31,730 --> 00:45:32,980 PUBBLICO: [incomprensibile] 1098 00:45:37,230 --> 00:45:37,830 >> DAVID J. MALAN: Bella domanda. 1099 00:45:37,830 --> 00:45:40,080 Perché non possiamo solo rappresentare che negativo 1100 00:45:40,080 --> 00:45:41,500 firmare solo come un personaggio? 1101 00:45:41,500 --> 00:45:44,200 Così abbiamo assolutamente possibile, e si potrebbe quindi salvare 1102 00:45:44,200 --> 00:45:45,470 un bit supplementare. 1103 00:45:45,470 --> 00:45:49,100 Ma si sta ancora andando ad avere per rappresentare il trattino e 1104 00:45:49,100 --> 00:45:50,700 che sta andando a costare almeno qualcosa, 1105 00:45:50,700 --> 00:45:52,220 presumibilmente un po '. 1106 00:45:52,220 --> 00:45:55,610 Quindi sì, potremmo avere 32 bit utilizzati per il nostro numero, ma ora 1107 00:45:55,610 --> 00:45:57,610 abbiamo bisogno di un altro po 'usata per il nostro cruscotto 1108 00:45:57,610 --> 00:45:58,810 simbolo, il segno meno. 1109 00:45:58,810 --> 00:46:01,470 Così ora abbiamo 33 valori di bit, che potremmo fare, ma è 1110 00:46:01,470 --> 00:46:02,570 non è solo il modo in cui è fatto. 1111 00:46:02,570 --> 00:46:05,140 Abbiamo fatto una sentenza anni fa chiamata, 32 bit è una sorta di 1112 00:46:05,140 --> 00:46:06,170 unità di misura qui. 1113 00:46:06,170 --> 00:46:08,120 Così abbiamo intenzione di utilizzare uno di questi bit efficacemente 1114 00:46:08,120 --> 00:46:12,950 rappresentano negatività, e 31 bit per rappresentare il numero. 1115 00:46:12,950 --> 00:46:15,550 Altre domande? 1116 00:46:15,550 --> 00:46:15,670 Bene. 1117 00:46:15,670 --> 00:46:16,030 Questo è un sacco. 1118 00:46:16,030 --> 00:46:17,930 Perché non andare avanti e prendere la nostra pausa di cinque minuti qui? 1119 00:46:23,580 --> 00:46:24,270 >> Bene. 1120 00:46:24,270 --> 00:46:31,250 Quindi, di nuovo, di non sopravvalutare le applicazioni matematiche 1121 00:46:31,250 --> 00:46:33,840 della programmazione, facciamo solo strappate questo un esempio 1122 00:46:33,840 --> 00:46:36,590 prima di entrare in altri costrutti, proprio perché 1123 00:46:36,590 --> 00:46:39,430 illustrerà alcuni punti comuni inciampo su alcuni dei 1124 00:46:39,430 --> 00:46:41,520 le nozioni di base quando si tratta di programmi di scrittura. 1125 00:46:41,520 --> 00:46:44,360 In questo caso, facendo espressioni aritmetiche che hanno qualche 1126 00:46:44,360 --> 00:46:48,010 rilevanza interessante alla sintassi. 1127 00:46:48,010 --> 00:46:50,430 >> Quindi questo è solo una formula con la quale siamo in grado di convertire 1128 00:46:50,430 --> 00:46:52,690 temperature da Fahrenheit a Celsius. 1129 00:46:52,690 --> 00:46:54,600 Se non mi ricordo, questo è solo la formula. 1130 00:46:54,600 --> 00:46:58,870 Quindi, se si collega in Fahrenheit valore di 32 gradi, che è 1131 00:46:58,870 --> 00:47:02,850 congelamento, che sta per essere 32 meno 32 è 0, e, infatti, 1132 00:47:02,850 --> 00:47:05,130 0 in Celsius è anche il congelamento. 1133 00:47:05,130 --> 00:47:08,210 Così la sanità mentale rapido controllo c'è - questa è la formula familiare. 1134 00:47:08,210 --> 00:47:10,880 Lasciami andare verso l'apparecchio, però, e iniziare a 1135 00:47:10,880 --> 00:47:13,920 la scrittura di un programma chiamato, come, f2c, "Fahrenheit a 1136 00:47:13,920 --> 00:47:15,920 Celsius punto c ". 1137 00:47:15,920 --> 00:47:18,930 E in cima qui, ho intenzione iniziare con # include 1138 00:47:18,930 --> 00:47:22,190 stdio.h, e ho intenzione di fare int main (void), e 1139 00:47:22,190 --> 00:47:24,680 ancora una volta, torneremo in futuro su ciò che significa int 1140 00:47:24,680 --> 00:47:26,820 ci sono e che nulla significa che c'è. 1141 00:47:26,820 --> 00:47:28,770 E ora lasciami andare avanti e realizzare un programma che 1142 00:47:28,770 --> 00:47:31,170 essenzialmente fa questa conversione per noi. 1143 00:47:31,170 --> 00:47:36,830 >> Così printf, diciamo, temperatura in gradi Fahrenheit. 1144 00:47:36,830 --> 00:47:40,140 E poi mi lasci andare avanti e ottenere il valore da parte dell'utente. 1145 00:47:40,140 --> 00:47:43,120 Che tipo di valore devo ottenere da parte dell'utente, se voglio 1146 00:47:43,120 --> 00:47:45,620 loro di darmi una temperatura in gradi Fahrenheit? 1147 00:47:45,620 --> 00:47:48,090 Si '? 1148 00:47:48,090 --> 00:47:50,090 Che cosa proponete? 1149 00:47:50,090 --> 00:47:50,410 Gia '. 1150 00:47:50,410 --> 00:47:51,960 Così galleggiante sembra abbastanza ragionevole. 1151 00:47:51,960 --> 00:47:53,950 Abbiamo, ancora una volta, solo alcune opzioni che 1152 00:47:53,950 --> 00:47:55,310 che abbiamo visto finora. 1153 00:47:55,310 --> 00:48:00,100 Abbiamo cose come char, double, float, int, long long, 1154 00:48:00,100 --> 00:48:01,150 bool, string. 1155 00:48:01,150 --> 00:48:03,510 Quindi di questi, galleggiante si sente abbastanza ragionevole. 1156 00:48:03,510 --> 00:48:06,340 Potremmo usare una doppia, a destra, perché se vogliamo davvero 1157 00:48:06,340 --> 00:48:07,580 rappresentano la temperatura di un umano - 1158 00:48:07,580 --> 00:48:10,730 98,60000 - 1159 00:48:10,730 --> 00:48:12,990 potremmo usare 64 bit per farlo, ma ci si sente come 1160 00:48:12,990 --> 00:48:14,200 eccessivo per la temperatura. 1161 00:48:14,200 --> 00:48:16,380 Così facciamo solo andare con galleggiante. 1162 00:48:16,380 --> 00:48:18,100 Ora ho bisogno di una variabile. 1163 00:48:18,100 --> 00:48:20,500 Giusto per semplificare le cose, ho intenzione di chiamare f, ma 1164 00:48:20,500 --> 00:48:23,370 potrebbe semplicemente come giustamente chiamano temperatura, 1165 00:48:23,370 --> 00:48:24,600 ma è o bene. 1166 00:48:24,600 --> 00:48:27,610 Così float f = getFloat. 1167 00:48:27,610 --> 00:48:30,220 Appena ho ora hanno deciso di utilizzare getFloat, però, mi 1168 00:48:30,220 --> 00:48:33,340 bisogno di fare una rettifica. 1169 00:48:33,340 --> 00:48:33,720 Gia '. 1170 00:48:33,720 --> 00:48:37,460 Quindi abbiamo bisogno di includere # , altrimenti il ​​compilatore è 1171 00:48:37,460 --> 00:48:39,000 andando a urlare contro di noi. 1172 00:48:39,000 --> 00:48:41,720 Ora che ho un galleggiante, lasciami andare avanti e fare il 1173 00:48:41,720 --> 00:48:42,460 conversione. 1174 00:48:42,460 --> 00:48:44,980 >> Quindi, prima, mi permetto anche di prendere l'abitudine qui di 1175 00:48:44,980 --> 00:48:46,310 commentando il mio codice. 1176 00:48:46,310 --> 00:48:49,820 Quindi, di nuovo, un commento è solo una notazione per l'umano che è 1177 00:48:49,820 --> 00:48:52,600 non parte del programma per sé, ma uno, aiuta 1178 00:48:52,600 --> 00:48:55,010 capire quello che hai fatto la mattina dopo, o la prossima 1179 00:48:55,010 --> 00:48:57,570 mese, aiuta il vostro compagno di insegnamento capire quello che hai fatto 1180 00:48:57,570 --> 00:48:59,230 o quello che si intende fare, quindi è 1181 00:48:59,230 --> 00:49:00,950 prassi generalmente molto buono. 1182 00:49:00,950 --> 00:49:02,940 Ogni poche righe di codice, scrivere un commento a 1183 00:49:02,940 --> 00:49:04,490 te o del tuo collega. 1184 00:49:04,490 --> 00:49:08,460 Così qui, ho intenzione di dire: "Chiedi a utente per la temperatura." 1185 00:49:08,460 --> 00:49:10,890 Non deve essere una frase completa, solo una breve frase. 1186 00:49:10,890 --> 00:49:14,270 Ma l'idea che sta dietro commentando in C è che ognuno di vostra 1187 00:49:14,270 --> 00:49:17,980 commenti si dovrebbe potenziare - o, diciamo, un TF o un collega - 1188 00:49:17,980 --> 00:49:21,290 di scremare il programma e sapere esattamente ciò che fa, non 1189 00:49:21,290 --> 00:49:24,650 tanto la lettura del codice, ma leggendo i commenti, che 1190 00:49:24,650 --> 00:49:26,220 dovrebbe essere succinta e chiara. 1191 00:49:26,220 --> 00:49:29,030 Va bene, quindi ora lasciami andare avanti e dire: "Spese 1192 00:49:29,030 --> 00:49:32,660 Fahrenheit a Celsius. "Così ho intenzione di andare avanti e fare, 1193 00:49:32,660 --> 00:49:34,340 diciamo, float c. 1194 00:49:34,340 --> 00:49:36,610 Terremo Celsius come un valore in virgola mobile. 1195 00:49:36,610 --> 00:49:37,630 >> E mi permetta di prendere una pugnalata a questo. 1196 00:49:37,630 --> 00:49:40,350 La formula è, di nuovo, qui. 1197 00:49:40,350 --> 00:49:45,510 Come 5 / F 9 volte meno 32. 1198 00:49:45,510 --> 00:49:46,360 Allora, facciamo questo. 1199 00:49:46,360 --> 00:49:50,450 Quindi 5 diviso 9, meno - 1200 00:49:50,450 --> 00:49:52,330 oops, ho già incasinato. 1201 00:49:52,330 --> 00:49:53,070 Times. 1202 00:49:53,070 --> 00:49:56,550 Quindi 5/9 volte F meno 32. 1203 00:49:56,550 --> 00:49:59,650 Quindi F meno 32, punto e virgola. 1204 00:49:59,650 --> 00:50:02,000 Ed ora, qui, ho intenzione di andare avanti 1205 00:50:02,000 --> 00:50:03,220 e dire, stampare risultato. 1206 00:50:03,220 --> 00:50:05,160 E questa parte è facile. Printf. 1207 00:50:05,160 --> 00:50:07,980 Come posso fare per stampare questa? 1208 00:50:07,980 --> 00:50:16,890 Beh, potrei dire "Questo numero in gradi Celsius è% f \ n", 1209 00:50:16,890 --> 00:50:18,060 solo per alcune estetica. 1210 00:50:18,060 --> 00:50:20,450 E poi che valore voglio inserire qui come di printf 1211 00:50:20,450 --> 00:50:21,360 secondo argomento? 1212 00:50:21,360 --> 00:50:21,650 Va bene. 1213 00:50:21,650 --> 00:50:22,540 Quindi c. 1214 00:50:22,540 --> 00:50:24,760 Quindi dovremo iniziare con questo e poi basta restituire 0. 1215 00:50:24,760 --> 00:50:25,960 Anche in questo caso, non ha nulla a che fare con la matematica. 1216 00:50:25,960 --> 00:50:27,610 Significa solo che tutto va bene. 1217 00:50:27,610 --> 00:50:31,210 >> Ora, questo è corretto, questo programma? 1218 00:50:31,210 --> 00:50:31,520 Bene. 1219 00:50:31,520 --> 00:50:33,630 Così ho fatto degli errori. 1220 00:50:33,630 --> 00:50:35,980 Anche se non avete idea di cosa sia la programmazione, è possibile ordinare 1221 00:50:35,980 --> 00:50:37,120 di back inferire a quello che la scuola elementare 1222 00:50:37,120 --> 00:50:38,740 errori qui potrebbe essere. 1223 00:50:38,740 --> 00:50:40,050 Che uno dei primi? 1224 00:50:40,050 --> 00:50:41,256 PUBBLICO: [incomprensibile] 1225 00:50:41,256 --> 00:50:41,660 DAVID J. MALAN: Già. 1226 00:50:41,660 --> 00:50:42,940 Quindi ci manca parentesi. 1227 00:50:42,940 --> 00:50:45,420 E 'stato deliberato che ho fatto parentesi nel keynote 1228 00:50:45,420 --> 00:50:48,130 scorrere qui, perché c'è in realtà questa nozione di ordine 1229 00:50:48,130 --> 00:50:51,590 delle operazioni, o di precedenza, in base al quale alcune operazioni - 1230 00:50:51,590 --> 00:50:52,890 moltiplicazione - 1231 00:50:52,890 --> 00:50:56,000 hanno una maggiore vincolante, hanno la precedenza, che le cose 1232 00:50:56,000 --> 00:50:58,050 come addizione o sottrazione. 1233 00:50:58,050 --> 00:51:00,550 Così abbiamo fatto questo per anni solo per chiarire esattamente 1234 00:51:00,550 --> 00:51:02,840 quale operazione matematica dovrebbe essere fatto prima. 1235 00:51:02,840 --> 00:51:05,010 Quindi dovrei probabilmente imitare esattamente questo. 1236 00:51:05,010 --> 00:51:08,990 In caso contrario, il computer è probabilmente intenzione di provare a fare 1237 00:51:08,990 --> 00:51:13,090 qualcosa di simile a dividere 5 di 9, quindi moltiplicare F, quindi sottrarre 1238 00:51:13,090 --> 00:51:14,850 32 dal tutto. 1239 00:51:14,850 --> 00:51:16,480 Il che non è, infatti, quello che vogliamo fare. 1240 00:51:16,480 --> 00:51:17,340 Quindi cerchiamo di parentesi. 1241 00:51:17,340 --> 00:51:20,860 Lasciatemi aggiungere le mie parentesi qui, parentesi qui. 1242 00:51:20,860 --> 00:51:22,670 Mettiamo questo qui. 1243 00:51:22,670 --> 00:51:25,130 Ecco, ho appena notato un altro errore che ho fatto lungo la strada. 1244 00:51:25,130 --> 00:51:25,680 Si '? 1245 00:51:25,680 --> 00:51:26,930 PUBBLICO: [incomprensibile] 1246 00:51:29,632 --> 00:51:30,130 >> DAVID J. MALAN: Ah. 1247 00:51:30,130 --> 00:51:30,470 Buona. 1248 00:51:30,470 --> 00:51:32,400 Quindi, in realtà hanno la stesso numero intero 1249 00:51:32,400 --> 00:51:34,020 problema di prima divisione. 1250 00:51:34,020 --> 00:51:35,800 Io che correggere, vediamo cosa è il sintomo. 1251 00:51:35,800 --> 00:51:36,990 Ma stiamo andando ad avere per correggere un 1252 00:51:36,990 --> 00:51:37,680 altro errore qui. 1253 00:51:37,680 --> 00:51:38,015 Si '? 1254 00:51:38,015 --> 00:51:39,540 PUBBLICO: [incomprensibile] 1255 00:51:39,540 --> 00:51:40,070 DAVID J. MALAN: sì. 1256 00:51:40,070 --> 00:51:43,130 Quindi, stupido errore che ho fatto, ma incredibilmente importante. 1257 00:51:43,130 --> 00:51:45,870 Il computer non ha intenzione di girare solo un occhio e lasciare 1258 00:51:45,870 --> 00:51:48,770 usarmi F maiuscola, quando ho dichiarato la variabile 1259 00:51:48,770 --> 00:51:51,360 come una f minuscola qui, in linea 8. 1260 00:51:51,360 --> 00:51:54,470 Quindi ho bisogno di correggere in linea 11 mio di capitalizzazione, che un 1261 00:51:54,470 --> 00:51:56,820 Poco fa è stato un F maiuscola per errore. 1262 00:51:56,820 --> 00:51:57,610 Che dire qui? 1263 00:51:57,610 --> 00:51:59,980 Se questo dovesse essere in minuscolo, come bene? 1264 00:51:59,980 --> 00:52:02,260 Dovrebbe essere, ma questa è una coincidenza. 1265 00:52:02,260 --> 00:52:05,070 Che f% non ha nulla a che fare con la variabile. 1266 00:52:05,070 --> 00:52:07,980 Quindi, solo per essere super chiaro qui, lasciami andare avanti e 1267 00:52:07,980 --> 00:52:10,710 rinominare questo, brevemente "la temperatura." Vorrei rinominare 1268 00:52:10,710 --> 00:52:15,050 questa "temperatura". Che io non rinominare questo. 1269 00:52:15,050 --> 00:52:18,180 Perché, ancora una volta, f% significa a livello globale, "valore in virgola mobile." 1270 00:52:18,180 --> 00:52:19,950 Non ha nulla a che fare con la mia variabile. 1271 00:52:19,950 --> 00:52:23,080 Ma "temperatura" in tutto il posto è un po 'prolisso, 1272 00:52:23,080 --> 00:52:25,370 così ho intenzione di tornare al mio minuscolo s "f". 1273 00:52:25,370 --> 00:52:27,890 >> Ora, lasciatemi andare avanti fino alla mia finestra qui. 1274 00:52:27,890 --> 00:52:29,190 Fai f2c - 1275 00:52:29,190 --> 00:52:31,200 che è stato, ancora una volta, il nome arbitrario che 1276 00:52:31,200 --> 00:52:32,590 ha dato a questo file. 1277 00:52:32,590 --> 00:52:33,690 Sembra aver compilato. 1278 00:52:33,690 --> 00:52:35,080 Vorrei correre f2c. 1279 00:52:35,080 --> 00:52:35,780 Invio. 1280 00:52:35,780 --> 00:52:37,786 Temperatura in gradi Fahrenheit - facciamo facile. 1281 00:52:37,786 --> 00:52:39,370 32. 1282 00:52:39,370 --> 00:52:40,910 OK, correggere. 1283 00:52:40,910 --> 00:52:45,910 Ma, se io ora fare 212 per ebollizione - 1284 00:52:45,910 --> 00:52:46,630 maledetto. 1285 00:52:46,630 --> 00:52:47,030 Bene. 1286 00:52:47,030 --> 00:52:50,780 Quindi, chiaramente non correggere, se il TF prova 1287 00:52:50,780 --> 00:52:51,800 almeno due valori. 1288 00:52:51,800 --> 00:52:53,340 Allora qual è il problema? 1289 00:52:53,340 --> 00:52:55,970 Beh, è ​​già messo il dito su ciò che il problema è. 1290 00:52:55,970 --> 00:52:57,600 Ma perché è così? 1291 00:52:57,600 --> 00:53:00,630 Fino qui, quando sto facendo i conti su 5 diviso 9. 1292 00:53:00,630 --> 00:53:02,190 Quindi concettualmente, che è perfettamente corretto. 1293 00:53:02,190 --> 00:53:03,690 Totalmente in linea con la formula. 1294 00:53:03,690 --> 00:53:05,940 Ma i computer solo fare esattamente quello che 1295 00:53:05,940 --> 00:53:06,760 dire loro di fare. 1296 00:53:06,760 --> 00:53:08,940 E quello che sta effettivamente dire al computer: ecco 1297 00:53:08,940 --> 00:53:12,320 dividere il numero intero 5 dal numero intero 9 1298 00:53:12,320 --> 00:53:13,670 e mi danno il risultato. 1299 00:53:13,670 --> 00:53:16,230 Il problema è, però, quando si fa la divisione utilizzando i dati 1300 00:53:16,230 --> 00:53:20,220 tipi, l'uscita è lo stesso tipo di dati come ingressi. 1301 00:53:20,220 --> 00:53:23,670 E così se i due ingressi sono entrambi interi, l'uscita va 1302 00:53:23,670 --> 00:53:25,110 per essere un int. 1303 00:53:25,110 --> 00:53:28,770 E così 5 diviso 9 è qualcosa di punto. 1304 00:53:28,770 --> 00:53:32,320 Ma qual è il numero intero più vicino al punto qualcosa? 1305 00:53:32,320 --> 00:53:33,630 Quindi, in realtà è 0. 1306 00:53:33,630 --> 00:53:36,620 Così come abbiamo discusso il Lunedi, tutto dopo la virgola 1307 00:53:36,620 --> 00:53:37,940 punto viene troncato. 1308 00:53:37,940 --> 00:53:39,495 E 'appena si butta via. 1309 00:53:39,495 --> 00:53:42,760 Quindi questo è un errore completo, perché potrei anche semplicemente 1310 00:53:42,760 --> 00:53:44,700 moltiplicare tutto da 0 qui. 1311 00:53:44,700 --> 00:53:46,550 >> Ora, posso risolvere questo problema in un paio di modi. 1312 00:53:46,550 --> 00:53:48,080 Potrei farlo. 1313 00:53:48,080 --> 00:53:50,490 5,0 diviso per 9,0. 1314 00:53:50,490 --> 00:53:52,110 Tecnicamente, non ho nemmeno bisogno di farlo. 1315 00:53:52,110 --> 00:53:55,780 Si è sufficiente per fare solo uno dei numeri di un galleggiante - 1316 00:53:55,780 --> 00:53:58,290 o doppio - mettendo il punto decimale qui. 1317 00:53:58,290 --> 00:54:01,740 Perché quello che succede ora è quando si divide un numero intero di 1318 00:54:01,740 --> 00:54:04,670 un galleggiante, o un doppio, il computer sta per realizzare 1319 00:54:04,670 --> 00:54:06,830 oh, uno di quelli è più precisa. 1320 00:54:06,830 --> 00:54:09,420 Vorrei peccare per eccesso di dare una più precisione rispetto 1321 00:54:09,420 --> 00:54:10,310 desiderato. 1322 00:54:10,310 --> 00:54:12,700 Così sarà convertire il risultato - 1323 00:54:12,700 --> 00:54:16,240 verrà restituito il risultato come valore in virgola mobile come bene. 1324 00:54:16,240 --> 00:54:17,330 In modo che avrebbe funzionato. 1325 00:54:17,330 --> 00:54:18,060 Questo potrebbe funzionare. 1326 00:54:18,060 --> 00:54:20,010 E c'è un altro meccanismo che vedremo in 1327 00:54:20,010 --> 00:54:21,390 Più in dettaglio la prossima settimana. 1328 00:54:21,390 --> 00:54:24,690 Si può effettivamente, come il programmatore, dire al computer 1329 00:54:24,690 --> 00:54:27,930 per il trattamento in realtà un tipo di dati 1330 00:54:27,930 --> 00:54:29,260 se si trattasse di un altro. 1331 00:54:29,260 --> 00:54:30,990 >> Così ho potuto effettivamente fare questo. 1332 00:54:30,990 --> 00:54:35,280 Tra parentesi, posso dire una cosa del genere (float), aperto 1333 00:54:35,280 --> 00:54:36,350 parentesi, parentesi vicino. 1334 00:54:36,350 --> 00:54:39,050 E questo è ciò che si chiama "fusione". Di nuovo, più 1335 00:54:39,050 --> 00:54:39,940 su questo la prossima settimana. 1336 00:54:39,940 --> 00:54:42,280 Ma questo è solo il modo di raccontare programmatico 1337 00:54:42,280 --> 00:54:45,910 il computer, si 'lo so 9 è un numero intero o un lungo. 1338 00:54:45,910 --> 00:54:47,700 Io so che non è un valore in virgola mobile. 1339 00:54:47,700 --> 00:54:49,420 Ma trattare come tale in ogni caso. 1340 00:54:49,420 --> 00:54:52,000 Quindi, per lanciare un tipo di dati significa convertire 1341 00:54:52,000 --> 00:54:53,310 da uno all'altro. 1342 00:54:53,310 --> 00:54:55,790 Francamente, questo è solo un po 'brutta, quindi mi propongo di andare 1343 00:54:55,790 --> 00:54:58,830 tornare alla proposta originale di una semplice conversione 1344 00:54:58,830 --> 00:55:00,770 queste cose a valori in virgola mobile manualmente. 1345 00:55:00,770 --> 00:55:02,890 Perché ora è solo super chiaro cosa sta succedendo, e 1346 00:55:02,890 --> 00:55:04,280 non è tutto ciò che distrae. 1347 00:55:04,280 --> 00:55:06,710 >> Quindi cerchiamo di ora tornare nella mia finestra di terminale. 1348 00:55:06,710 --> 00:55:07,990 Fai f2c. 1349 00:55:07,990 --> 00:55:09,430 Lasciami andare avanti ed eseguire questo. 1350 00:55:09,430 --> 00:55:12,340 E, per inciso, ci si annoia a digitare i seguenti comandi 1351 00:55:12,340 --> 00:55:14,910 più e più volte, rendersi conto che i computer, come Linux qui, 1352 00:55:14,910 --> 00:55:16,010 tendono ad essere piuttosto intelligente. 1353 00:55:16,010 --> 00:55:18,890 E se mi ha colpito in alto, siamo in grado di passare attraverso la mia intera storia della 1354 00:55:18,890 --> 00:55:20,380 comandi, su e giù. 1355 00:55:20,380 --> 00:55:23,840 Quindi, in questo caso qui, posso solo andare fino a eseguire make f2c. 1356 00:55:23,840 --> 00:55:25,830 Sto essere sgridato, perché ho appena fatto un secondo fa. 1357 00:55:25,830 --> 00:55:27,030 E 'già aggiornata. 1358 00:55:27,030 --> 00:55:30,720 Così ora posso correre f2c nuovo. 1359 00:55:30,720 --> 00:55:33,260 Proviamo 32 Fahrenheit. 1360 00:55:33,260 --> 00:55:36,720 Ora proviamo 212 Fahrenheit. 1361 00:55:36,720 --> 00:55:37,250 >> Uff. 1362 00:55:37,250 --> 00:55:38,250 Sembra funzionare. 1363 00:55:38,250 --> 00:55:41,760 Ora, questo è buono, ma ci si sente un po 'arbitrario che 1364 00:55:41,760 --> 00:55:44,890 Sto mostrando sei numeri dopo il punto decimale. 1365 00:55:44,890 --> 00:55:45,070 Giusto? 1366 00:55:45,070 --> 00:55:47,830 Se sei la persona meteo in TV, sei una specie di doofus 1367 00:55:47,830 --> 00:55:49,150 se stai leggendo la temperatura 1368 00:55:49,150 --> 00:55:50,070 questo grado di precisione. 1369 00:55:50,070 --> 00:55:51,270 Quindi cerchiamo di semplificare questo. 1370 00:55:51,270 --> 00:55:53,880 Quindi cerchiamo di andare in realtà qui, al mio printf. 1371 00:55:53,880 --> 00:55:55,490 E sì, io voglio stare a galla. 1372 00:55:55,490 --> 00:55:57,570 Ma voglio specificare ora la precisione. 1373 00:55:57,570 --> 00:55:59,070 E ho intenzione di essere un po 'succinta. 1374 00:55:59,070 --> 00:56:03,090 Sto per dire, dammi un punto dopo il punto decimale. 1375 00:56:03,090 --> 00:56:07,590 Quindi, piuttosto che dire% f, ho intenzione di dire% .1 f. 1376 00:56:07,590 --> 00:56:09,760 E questo significa solo darmi una posizione 1377 00:56:09,760 --> 00:56:11,410 dopo la virgola. 1378 00:56:11,410 --> 00:56:11,700 Bene. 1379 00:56:11,700 --> 00:56:12,570 Proviamo di nuovo. 1380 00:56:12,570 --> 00:56:15,590 Vorrei eseguire nuovamente dopo la compilazione. 1381 00:56:15,590 --> 00:56:18,160 E ora mi digitare 32, e torno a 1382 00:56:18,160 --> 00:56:19,310 valore più succinta. 1383 00:56:19,310 --> 00:56:22,480 E posso digitare, ora, 212, e ricevere una più sintetica 1384 00:56:22,480 --> 00:56:23,260 valore pure. 1385 00:56:23,260 --> 00:56:25,190 E ci sono altre cose che puoi fare con printf. 1386 00:56:25,190 --> 00:56:27,950 Si può effettivamente specificare la larghezza del numero dovrebbe essere. 1387 00:56:27,950 --> 00:56:30,900 Se si desidera avere imbottitura su di esso, in modo da poter allineare a destra o 1388 00:56:30,900 --> 00:56:32,360 left-align tutti i numeri o 1389 00:56:32,360 --> 00:56:33,400 cercare di cose centro. 1390 00:56:33,400 --> 00:56:35,340 Quindi conto che ci sono piccoli trucchi che si possono fare lì. 1391 00:56:35,340 --> 00:56:38,420 Ma hanno appena riducono a codici di formato, 1392 00:56:38,420 --> 00:56:39,600 come abbiamo lì. 1393 00:56:39,600 --> 00:56:41,090 >> Quindi, in termini di questa questione di precedenza. 1394 00:56:41,090 --> 00:56:43,820 Questa è una tabella molto noioso passare attraverso metodicamente. 1395 00:56:43,820 --> 00:56:46,780 Ma si rendono conto che gli autori di C hanno creato il 1396 00:56:46,780 --> 00:56:50,190 regole che specificano quale gli operatori hanno una maggiore 1397 00:56:50,190 --> 00:56:53,680 precedenza, il potere più vincolante, di altri. 1398 00:56:53,680 --> 00:56:55,890 Così, mentre nella scuola elementare, in genere sapeva che era 1399 00:56:55,890 --> 00:56:58,930 moltiplicazione e divisione, quindi addizione e sottrazione, 1400 00:56:58,930 --> 00:56:59,950 poi un po 'di altre cose. 1401 00:56:59,950 --> 00:57:01,720 In un mondo di programmazione, c'è una molto 1402 00:57:01,720 --> 00:57:03,360 lungo elenco di cose. 1403 00:57:03,360 --> 00:57:05,150 E questo non è qualcosa che vale la pena memorizzare ora. 1404 00:57:05,150 --> 00:57:07,310 Ti abituarsi ad esso in breve tempo. 1405 00:57:07,310 --> 00:57:10,690 Ma proprio come in grado di scuola, parentesi generalmente risolvere 1406 00:57:10,690 --> 00:57:12,990 le questioni di precedenza, rendendo chiaro super per la 1407 00:57:12,990 --> 00:57:15,620 computer e umana sia quello destinato. 1408 00:57:15,620 --> 00:57:17,770 Quindi, considerare questo solo un piccolo foglio trucco c'è. 1409 00:57:17,770 --> 00:57:21,690 Ma la maggior parte di quei dettagli che non si arriva a per qualche tempo. 1410 00:57:21,690 --> 00:57:21,900 >> Bene. 1411 00:57:21,900 --> 00:57:24,120 Ora, cerchiamo di costruire e allontanarsi da questi poco stupido 1412 00:57:24,120 --> 00:57:25,460 esempi matematici. 1413 00:57:25,460 --> 00:57:27,500 Usano ancora i fondamenti stessi, ma si inizia 1414 00:57:27,500 --> 00:57:29,960 esprimerci un po 'più simile a Scratch. 1415 00:57:29,960 --> 00:57:31,660 Quindi, in Scratch, abbiamo avuto queste espressioni booleane. 1416 00:57:31,660 --> 00:57:34,890 E in inglese, una espressione booleana è che cosa? 1417 00:57:34,890 --> 00:57:35,580 Vero o falso. 1418 00:57:35,580 --> 00:57:38,300 E 'qualcosa che restituisce true o false. 1419 00:57:38,300 --> 00:57:39,060 1 o 0. 1420 00:57:39,060 --> 00:57:39,870 Acceso o spento. 1421 00:57:39,870 --> 00:57:41,000 Qualunque cosa si voglia chiamare. 1422 00:57:41,000 --> 00:57:43,210 Ora in Scratch, i pezzi del puzzle si presentava così. 1423 00:57:43,210 --> 00:57:45,850 E questa è la combinazione, sul fondo lì, di tre 1424 00:57:45,850 --> 00:57:47,980 puzzle di pezzi. 1425 00:57:47,980 --> 00:57:48,980 Una congiunzione - 1426 00:57:48,980 --> 00:57:51,710 qualcosa che è vuoto e vuoto. 1427 00:57:51,710 --> 00:57:53,970 E poi due espressioni booleane all'interno di esso. 1428 00:57:53,970 --> 00:57:56,460 Così si può annidare le espressioni booleane per ottenere più 1429 00:57:56,460 --> 00:57:59,360 complicato espressioni booleane. 1430 00:57:59,360 --> 00:58:03,930 Per esempio, se si tratta di Sabato, ed è bello 1431 00:58:03,930 --> 00:58:06,180 tempo, quindi uscire. 1432 00:58:06,180 --> 00:58:07,500 O qualcosa del genere arbitrario. 1433 00:58:07,500 --> 00:58:10,090 Così si può unire espressioni booleane per trovare una 1434 00:58:10,090 --> 00:58:12,780 valore di verità più grande, la cui risposta si basa 1435 00:58:12,780 --> 00:58:13,800 su quelli più piccoli. 1436 00:58:13,800 --> 00:58:15,770 >> Ora, in C, per fortuna, questa mappatura è 1437 00:58:15,770 --> 00:58:16,720 in realtà piuttosto semplice. 1438 00:58:16,720 --> 00:58:18,820 Parentesi contribuire a rendere le cose chiaro qui. 1439 00:58:18,820 --> 00:58:21,700 && È ciò che significa "e". Ecco, questo è il modo 1440 00:58:21,700 --> 00:58:24,700 stiamo andando a convertire i blocchi da zero a C. 1441 00:58:24,700 --> 00:58:27,590 E per le condizioni che abbiamo visto in Scratch, sulla mano sinistra 1442 00:58:27,590 --> 00:58:31,150 parte c'è, posso impilare in modo simile in C. Se x è minore 1443 00:58:31,150 --> 00:58:32,970 di y, poi fare questo. 1444 00:58:32,970 --> 00:58:35,100 Altrimenti se x è maggiore di y, poi fare questo. 1445 00:58:35,100 --> 00:58:38,030 Altrimenti logicamente devono essere uguali, così dicono 1446 00:58:38,030 --> 00:58:39,140 che sono uguali. 1447 00:58:39,140 --> 00:58:41,210 Così possiamo ora iniziare a costruire queste cose. 1448 00:58:41,210 --> 00:58:42,170 >> Allora, facciamo un esempio. 1449 00:58:42,170 --> 00:58:45,550 Permettetemi di aprire un file che è sul sito web del corso che 1450 00:58:45,550 --> 00:58:47,270 Ho scritto in anticipo. 1451 00:58:47,270 --> 00:58:50,540 Questo si chiama nonswitch.c. 1452 00:58:50,540 --> 00:58:52,270 E vedremo perché in un attimo. 1453 00:58:52,270 --> 00:58:54,770 Quindi, in questo file - nonswitch.c-- 1454 00:58:54,770 --> 00:58:56,830 prima rendersi conto che ci sono un sacco di 1455 00:58:56,830 --> 00:58:58,460 commenti in cima. 1456 00:58:58,460 --> 00:59:00,110 Questo è solo spiegando il nome del file, cosa 1457 00:59:00,110 --> 00:59:01,260 fa, e così via. 1458 00:59:01,260 --> 00:59:04,390 E dimostra quanto pare l'utilizzo di Boolean AND-ing - 1459 00:59:04,390 --> 00:59:06,220 congiungere due espressioni. 1460 00:59:06,220 --> 00:59:07,670 >> Vediamo quindi come funziona questo programma. 1461 00:59:07,670 --> 00:59:10,840 Io sono i miei due file, cs50.h e stdio.h. 1462 00:59:10,840 --> 00:59:13,180 Se scorrere verso il basso, ora, per il programma, è un po 'più a lungo 1463 00:59:13,180 --> 00:59:15,730 di quanto abbiamo scritto prima, ma abbastanza leggibile. 1464 00:59:15,730 --> 00:59:18,360 Così ho stampato per l'utente, sulla linea 18, 1465 00:59:18,360 --> 00:59:20,460 "Dammi un numero intero compreso tra 1 e 10." Così 1466 00:59:20,460 --> 00:59:21,530 che è proprio lì. 1467 00:59:21,530 --> 00:59:23,410 Ora ho il numero intero. 1468 00:59:23,410 --> 00:59:25,380 Ma si rendono conto che GetInt - piuttosto semplice. 1469 00:59:25,380 --> 00:59:26,510 E 'solo andando ottenere un int. 1470 00:59:26,510 --> 00:59:28,830 E 'intenzione di garantire che lo fa arrivare un int e non un 1471 00:59:28,830 --> 00:59:30,060 stringa o un galleggiante. 1472 00:59:30,060 --> 00:59:32,390 Ma non ha intenzione di fare qualsiasi tipo di controllo di confine. 1473 00:59:32,390 --> 00:59:34,750 Non sta andando a filtrare i numeri per essere tra un 1474 00:59:34,750 --> 00:59:35,630 certo range. 1475 00:59:35,630 --> 00:59:37,730 Quindi dobbiamo realizzare che noi stessi. 1476 00:59:37,730 --> 00:59:40,680 Quindi, proprio come in Scratch, dove ho potuto fare una congiunzione di 1477 00:59:40,680 --> 00:59:43,560 due espressioni, posso farlo in C come segue. 1478 00:59:43,560 --> 00:59:48,660 Se n è maggiore o uguale a 1, e n è minore e 1479 00:59:48,660 --> 00:59:52,220 o uguale a 3, sto per molto arbitrariamente decreto che 1480 00:59:52,220 --> 00:59:53,830 numero sia un numero piccolo. 1481 00:59:53,830 --> 00:59:56,730 Solo per il gusto di una dichiarazione. 1482 00:59:56,730 --> 01:00:00,210 Altrimenti, se n è compreso tra 4 e 6, print "Hai scelto un mezzo 1483 01:00:00,210 --> 01:00:03,440 numero. "Altrimenti, se n è compreso tra 7 e 10, print" Hai scelto un 1484 01:00:03,440 --> 01:00:06,390 gran numero. "else print" Si sceglie un numero non valido. " 1485 01:00:06,390 --> 01:00:07,900 Perché logicamente, che segue, se abbiamo 1486 01:00:07,900 --> 01:00:09,230 esaurito la nostra gamma. 1487 01:00:09,230 --> 01:00:12,400 >> Quindi rendo conto che questo non è proprio il modo in cui scrivere o superiore 1488 01:00:12,400 --> 01:00:15,000 pari ad una classe di matematica. 1489 01:00:15,000 --> 01:00:15,160 Giusto? 1490 01:00:15,160 --> 01:00:17,430 Di solito lo rappresentiamo così, con la linea di sotto di essa. 1491 01:00:17,430 --> 01:00:19,250 Ma non c'è una chiave del genere sulla mia tastiera. 1492 01:00:19,250 --> 01:00:22,390 Così il simbolo in C per esprimere maggiore o 1493 01:00:22,390 --> 01:00:25,770 è pari a due caratteri, e il simbolo per meno di 1494 01:00:25,770 --> 01:00:29,100 o è uguale a due caratteri pure. 1495 01:00:29,100 --> 01:00:29,330 Bene. 1496 01:00:29,330 --> 01:00:31,910 Quindi, se ho eseguito questo programma, si può intuire che cosa è 1497 01:00:31,910 --> 01:00:32,650 intenzione di fare. 1498 01:00:32,650 --> 01:00:36,180 Se vado avanti e fare nonswitch, Invio. 1499 01:00:36,180 --> 01:00:38,130 E quindi eseguire nonswitch. 1500 01:00:38,130 --> 01:00:39,530 Dammi un numero compreso tra 1 e 10. 1501 01:00:39,530 --> 01:00:40,870 Ho intenzione di dare 11. 1502 01:00:40,870 --> 01:00:42,280 Ho scelto un numero non valido. 1503 01:00:42,280 --> 01:00:44,090 Fammi provare il numero 3. 1504 01:00:44,090 --> 01:00:45,990 Ho scelto un piccolo numero. 1505 01:00:45,990 --> 01:00:48,360 Quindi abbastanza semplice lì. 1506 01:00:48,360 --> 01:00:52,230 >> Che cosa devo fare per modificare il comportamento di questo programma e 1507 01:00:52,230 --> 01:00:54,250 fare qualcosa di un po 'diverso, invece? 1508 01:00:54,250 --> 01:00:57,620 Lasciatemi andare avanti e dire questo. 1509 01:00:57,620 --> 01:00:59,480 Vorrei sbarazzarsi di tutto questo. 1510 01:00:59,480 --> 01:01:03,780 E lasciatemi dire if (n == 42). 1511 01:01:03,780 --> 01:01:08,730 E poi ho intenzione di andare avanti e dire: print "Hai scelto la 1512 01:01:08,730 --> 01:01:16,340 risposta giusta. "Altrimenti andremo a andare avanti e dire: 1513 01:01:16,340 --> 01:01:18,460 printf ("Hai scelto la 1514 01:01:18,460 --> 01:01:21,170 risposta errata "). Okay. 1515 01:01:21,170 --> 01:01:22,040 Solo perché. 1516 01:01:22,040 --> 01:01:23,890 >> Ora, alcuni punti che possiamo fare qui. 1517 01:01:23,890 --> 01:01:26,570 Uno, non ho digitare il simbolo che si potrebbe pensare è il 1518 01:01:26,570 --> 01:01:27,390 più ragionevole. 1519 01:01:27,390 --> 01:01:30,110 Quando ho voglia di controllare l'uguaglianza, scopre che non si utilizza il 1520 01:01:30,110 --> 01:01:30,910 segno di uguale. 1521 01:01:30,910 --> 01:01:34,000 È invece utilizzare il segno di uguale uguale. 1522 01:01:34,000 --> 01:01:36,440 E perché potrebbe essere che, solo intuitivamente? 1523 01:01:36,440 --> 01:01:37,030 Gia '. 1524 01:01:37,030 --> 01:01:39,330 PUBBLICO: [incomprensibile] 1525 01:01:39,330 --> 01:01:39,615 DAVID J. MALAN: Corretto. 1526 01:01:39,615 --> 01:01:41,630 Il segno di uguale è già utilizzato per l'assegnazione. 1527 01:01:41,630 --> 01:01:43,020 Qualcuno non ha davvero riflettere. 1528 01:01:43,020 --> 01:01:45,820 E così ora, quando si tratta di test di uguaglianza, dobbiamo 1529 01:01:45,820 --> 01:01:48,850 essere più espliciti, e dire uguale uguale. 1530 01:01:48,850 --> 01:01:52,110 Un errore molto comune è quello di fare questo. 1531 01:01:52,110 --> 01:01:54,800 E, se in orario di ufficio o settimane a volte prossimo o nel 1532 01:01:54,800 --> 01:01:58,340 prossime due settimane si fa una cosa del genere e poi 1533 01:01:58,340 --> 01:02:00,920 lotta con esso per 10, 20 minuti cercando di capire 1534 01:02:00,920 --> 01:02:03,330 ciò che il bug è maledetto, si rende conto che tu sei uno di quelli 1535 01:02:03,330 --> 01:02:04,470 persone che hanno fatto questo errore. 1536 01:02:04,470 --> 01:02:06,030 Quindi, super facile da fare. 1537 01:02:06,030 --> 01:02:08,240 Ma l'obiettivo è ora quello di scongiurare questo errore. 1538 01:02:08,240 --> 01:02:11,840 Ciò potrebbe valutare, perché ciò che è davvero dicendo? 1539 01:02:11,840 --> 01:02:15,010 Se n diventa 42. 1540 01:02:15,010 --> 01:02:18,250 Così il popolo verbo usare, verbalmente, per esprimere la 1541 01:02:18,250 --> 01:02:21,800 nozione di assegnazione è "si". Quindi, se n diventa 42. 1542 01:02:21,800 --> 01:02:24,060 Quindi questo significa assegnare 42 a n. 1543 01:02:24,060 --> 01:02:26,250 Ora ho un'espressione booleana tra parentesi, 1544 01:02:26,250 --> 01:02:30,230 all'interno di tale condizione, il cui valore è 42. 1545 01:02:30,230 --> 01:02:30,390 Giusto? 1546 01:02:30,390 --> 01:02:32,690 Perché se lo si valuta dall'interno verso l'esterno, il totale 1547 01:02:32,690 --> 01:02:34,100 risposta, ora, è 42. 1548 01:02:34,100 --> 01:02:37,360 >> Quindi, se ho fatto la domanda, "se (42)," ciò che è 1549 01:02:37,360 --> 01:02:38,410 che davvero dicendo? 1550 01:02:38,410 --> 01:02:40,990 Beh, espressioni booleane può essere solo vero o falso. 1551 01:02:40,990 --> 01:02:42,010 1 o 0. 1552 01:02:42,010 --> 01:02:43,010 Acceso o spento. 1553 01:02:43,010 --> 01:02:45,240 Così ci sembra di avere un caso d'angolo qui, per cui tutto ad un 1554 01:02:45,240 --> 01:02:50,060 improvvisa, sto dicendo "se (42)". Questo non è un valore booleano. 1555 01:02:50,060 --> 01:02:54,500 Quindi, ciò che i computer fanno, però, è sostanzialmente equipara 1556 01:02:54,500 --> 01:02:58,620 tutto ciò che non è 0 viene interpretato per essere vero. 1557 01:02:58,620 --> 01:02:59,340 1. 1558 01:02:59,340 --> 01:02:59,690 On. 1559 01:02:59,690 --> 01:03:01,510 Sono tutti funzionalmente equivalente. 1560 01:03:01,510 --> 01:03:05,070 Solo il valore 0, o la parola chiave falsa, come faremo 1561 01:03:05,070 --> 01:03:07,860 finalmente vedere, è in realtà falso. 1562 01:03:07,860 --> 01:03:15,040 Quindi "se (42)" sarebbe effettivamente vero, perché è non-zero. 1563 01:03:15,040 --> 01:03:18,620 Quindi, per essere più precisi qui, un valore booleano è veramente così 1564 01:03:18,620 --> 01:03:20,680 molto vero o falso, ma per questo 1565 01:03:20,680 --> 01:03:24,650 caso, se è 0 o non-zero. 1566 01:03:24,650 --> 01:03:26,330 Quindi, false o non false. 1567 01:03:26,330 --> 01:03:28,640 E che ci permette di comprendere ancora più 1568 01:03:28,640 --> 01:03:30,980 possibilità nel l'espressione tra parentesi. 1569 01:03:30,980 --> 01:03:33,840 Quindi abbiamo bisogno di, sempre con tanta cura, dire questo - 1570 01:03:33,840 --> 01:03:35,620 if (n == 42). 1571 01:03:35,620 --> 01:03:39,100 Semplicemente perché abbiamo bisogno di specificare un test di uguaglianza, 1572 01:03:39,100 --> 01:03:40,930 Non un'assegnazione di un valore. 1573 01:03:40,930 --> 01:03:42,830 >> Che altro la pena di notare qui? 1574 01:03:42,830 --> 01:03:46,030 Le parentesi graffe non sono effettivamente necessarie. 1575 01:03:46,030 --> 01:03:48,650 Li ho fatto solo per essere nit-schizzinosi qui. 1576 01:03:48,650 --> 01:03:51,350 Ma quando si ha una condizione che ha una sola linea di 1577 01:03:51,350 --> 01:03:55,100 codice, come vantaggio, i programmatori non hanno bisogno di usare 1578 01:03:55,100 --> 01:03:56,030 le parentesi graffe. 1579 01:03:56,030 --> 01:03:59,370 Basta solo trattino, per ragioni estetiche, e 1580 01:03:59,370 --> 01:04:01,050 quindi scrivere la riga di codice. 1581 01:04:01,050 --> 01:04:04,160 Solo quando si vuole scrivere due righe di codice - per 1582 01:04:04,160 --> 01:04:08,230 esempio, else printf ("Ciao!"). Se si vuole fare 1583 01:04:08,230 --> 01:04:09,540 che, questo è rotto. 1584 01:04:09,540 --> 01:04:11,700 È possibile far rientrare tutto quello che volete, ma il fatto che si ha 1585 01:04:11,700 --> 01:04:14,600 scritto due righe di codice senza usare le parentesi graffe 1586 01:04:14,600 --> 01:04:16,860 significa che questo programma non eseguite correttamente o potrebbe 1587 01:04:16,860 --> 01:04:18,530 nemmeno compila correttamente. 1588 01:04:18,530 --> 01:04:21,040 Quindi, per ora, a dire il vero, credo che la migliore abitudine è solo 1589 01:04:21,040 --> 01:04:24,460 utilizzare le parentesi graffe, e troverete che fanno 1590 01:04:24,460 --> 01:04:25,750 super chiaro quello che sta succedendo. 1591 01:04:25,750 --> 01:04:29,410 >> Inoltre, per inciso - soprattutto se siete tra coloro che fanno uso di 1592 01:04:29,410 --> 01:04:31,700 i libri consigliati o le risorse on-line - 1593 01:04:31,700 --> 01:04:33,480 si rendono conto che c'è questa nozione di stile in 1594 01:04:33,480 --> 01:04:34,130 programmazione. 1595 01:04:34,130 --> 01:04:37,280 E alcune persone preferiscono mettere le parentesi graffa 1596 01:04:37,280 --> 01:04:38,720 qui su una linea. 1597 01:04:38,720 --> 01:04:41,520 Alcune persone preferiscono fare cose ridicole, 1598 01:04:41,520 --> 01:04:43,830 come metterle qui. 1599 01:04:43,830 --> 01:04:45,140 Non c'è una risposta sbagliata quando si tratta di 1600 01:04:45,140 --> 01:04:46,710 stile, ma questo è sbagliato. 1601 01:04:46,710 --> 01:04:47,700 Ma alcune persone lo fanno. 1602 01:04:47,700 --> 01:04:49,160 [Risate] 1603 01:04:49,160 --> 01:04:51,760 DAVID J. MALAN: Così Lo dico ora, semplicemente perché, come 1604 01:04:51,760 --> 01:04:54,400 si leggere su cose in libri o on-line, si sta andando ad ottenere 1605 01:04:54,400 --> 01:04:55,990 messaggi diversi da diversi insegnanti e 1606 01:04:55,990 --> 01:04:56,730 diversi autori. 1607 01:04:56,730 --> 01:04:58,640 E proprio conto che, funzionalmente, sono 1608 01:04:58,640 --> 01:05:00,740 generalmente equivalente, ma essere coerenti. 1609 01:05:00,740 --> 01:05:02,850 Quindi, in questo caso, ci standardizzare il riccio 1610 01:05:02,850 --> 01:05:04,650 bretelle in fila qui a sinistra. 1611 01:05:04,650 --> 01:05:04,910 >> Bene. 1612 01:05:04,910 --> 01:05:07,040 Quindi cerchiamo di andare avanti e ora eseguire questo, e vedere cosa succede 1613 01:05:07,040 --> 01:05:07,780 con questo programma. 1614 01:05:07,780 --> 01:05:09,970 Fai nonswitch. 1615 01:05:09,970 --> 01:05:11,040 Quindi eseguire nonswitch. 1616 01:05:11,040 --> 01:05:13,900 Dammi un intero compreso tra 0 e - in modo che non è rilevante 1617 01:05:13,900 --> 01:05:16,480 più, ma io sono solo per dire arbitrariamente 42. 1618 01:05:16,480 --> 01:05:17,850 E ho scelto la risposta giusta. 1619 01:05:17,850 --> 01:05:20,430 Bene, ora, andiamo a prendere questo in realtà in una direzione diversa. 1620 01:05:20,430 --> 01:05:22,070 Sembra che vi sia qualche altra sintassi abbiamo 1621 01:05:22,070 --> 01:05:23,480 può utilizzare in un programma. 1622 01:05:23,480 --> 01:05:27,310 Ecco un nuovo pezzo di sintassi che è funzionalmente lo stesso, 1623 01:05:27,310 --> 01:05:30,680 ma solo introduce un altro modo di esprimere se stessi. 1624 01:05:30,680 --> 01:05:32,830 Quindi questo è quello che è chiamato "switch". E un 1625 01:05:32,830 --> 01:05:34,820 istruzione switch funziona come segue. 1626 01:05:34,820 --> 01:05:37,580 Ci vuole, tra parentesi, un valore che si desidera 1627 01:05:37,580 --> 01:05:38,860 "Switch" a. 1628 01:05:38,860 --> 01:05:41,490 Si desidera comportarsi in modo diverso in base al suo valore. 1629 01:05:41,490 --> 01:05:44,360 Quindi questo significa interruttore sul valore di n. 1630 01:05:44,360 --> 01:05:45,480 E che cosa significa? 1631 01:05:45,480 --> 01:05:50,530 Beh, se n è 1 o 2 o 3, andare avanti e stampare "Tu 1632 01:05:50,530 --> 01:05:52,680 raccolse un gran numero "e poi rompersi. 1633 01:05:52,680 --> 01:05:55,720 La ragione per la rottura è che il modo C funziona come 1634 01:05:55,720 --> 01:05:59,790 appena si trova un caso che corrisponde, si avvia l'esecuzione 1635 01:05:59,790 --> 01:06:01,610 tutto il codice sottostante. 1636 01:06:01,610 --> 01:06:04,580 Quindi, se ho una riga di codice, come faccio io qui sulla linea 27, si 1637 01:06:04,580 --> 01:06:05,360 viene eseguito. 1638 01:06:05,360 --> 01:06:07,520 Se posso aggiungere un'altra linea qui, viene eseguito. 1639 01:06:07,520 --> 01:06:09,350 Un'altra linea qui, viene eseguito. 1640 01:06:09,350 --> 01:06:12,460 Il programma si arresta solo l'esecuzione di ciò che è al di sotto del 1641 01:06:12,460 --> 01:06:14,680 istruzione case applicabile quando ho esplicitamente 1642 01:06:14,680 --> 01:06:17,210 dire "rompere". Così non va. 1643 01:06:17,210 --> 01:06:19,220 Destra, in questo caso, come risultato. 1644 01:06:19,220 --> 01:06:22,130 Caso 4 o 5 o 6, analogamente, sta 1645 01:06:22,130 --> 01:06:23,160 per stampare un messaggio. 1646 01:06:23,160 --> 01:06:24,410 In questo caso, il numero medio. 1647 01:06:24,410 --> 01:06:25,200 Interruzione. 1648 01:06:25,200 --> 01:06:28,160 Caso 7, 8, 9, 10, sta andando a stampare "Hai scelto un grande 1649 01:06:28,160 --> 01:06:28,950 numero. "Break. 1650 01:06:28,950 --> 01:06:31,290 E poi c'è letteralmente una parola chiave chiamato "default" 1651 01:06:31,290 --> 01:06:34,090 che è efficace come il "else" costruire. 1652 01:06:34,090 --> 01:06:36,010 Quindi nuova sintassi, ma intellettualmente, 1653 01:06:36,010 --> 01:06:37,060 niente qui di nuovo. 1654 01:06:37,060 --> 01:06:38,280 E 'proprio come il Gratta e Vinci. 1655 01:06:38,280 --> 01:06:41,040 Se, altrimenti se, else if, una sorta di blocco. 1656 01:06:41,040 --> 01:06:44,560 >> Ecco, questo è la versione attiva di questo programma. 1657 01:06:44,560 --> 01:06:46,280 Ma nota che abbiamo fatto con i numeri qui. 1658 01:06:46,280 --> 01:06:49,040 Permettetemi di aprire una seconda versione, solo per mostrare 1659 01:06:49,040 --> 01:06:50,670 qualcosa di un po 'più concreto. 1660 01:06:50,670 --> 01:06:52,840 Quindi qui abbiamo invece gradi. 1661 01:06:52,840 --> 01:06:55,540 Si scopre che è possibile utilizzare opzioni non solo su numeri interi, ma su 1662 01:06:55,540 --> 01:06:56,340 caratteri. 1663 01:06:56,340 --> 01:06:58,930 Non in tutti i tipi di dati, ma almeno su caratteri. 1664 01:06:58,930 --> 01:07:02,670 Ecco, si potrebbe fare qualcosa di simile se il valore di C che 1665 01:07:02,670 --> 01:07:06,230 l'utente ha digitato, nella riga 19, utilizzando la funzione GetChar, 1666 01:07:06,230 --> 01:07:09,410 è maiuscola o minuscola a, diciamo la interpretano come un grado, 1667 01:07:09,410 --> 01:07:11,340 e dire hanno scelto un grado eccellente. 1668 01:07:11,340 --> 01:07:14,690 E giù lungo l'istruzione switch, abbiamo altre 1669 01:07:14,690 --> 01:07:17,950 casi di "B" s e "C" s, e così via. 1670 01:07:17,950 --> 01:07:19,780 Ma ora completare un'altra cosa. 1671 01:07:19,780 --> 01:07:21,130 E ancora, un po 'volando attraverso 1672 01:07:21,130 --> 01:07:22,200 alcuni di questi esempi. 1673 01:07:22,200 --> 01:07:26,990 Ma è davvero così che possiamo applicare, ora - 1674 01:07:26,990 --> 01:07:28,880 o in realtà, basta tradurre ora - 1675 01:07:28,880 --> 01:07:32,220 a C. 1676 01:07:32,220 --> 01:07:33,310 >> Permettetemi quindi di andare avanti e farlo. 1677 01:07:33,310 --> 01:07:34,830 Sto per aprire un nuovo file. 1678 01:07:34,830 --> 01:07:39,430 E ho intenzione di fare include . 1679 01:07:39,430 --> 01:07:42,770 E poi ho intenzione di fare int main (void). 1680 01:07:42,770 --> 01:07:46,390 Vorrei salvare il file come un loop.c. 1681 01:07:46,390 --> 01:07:48,280 Proprio come un esempio. 1682 01:07:48,280 --> 01:07:49,910 E ho intenzione di andare avanti e procedere nel modo seguente. 1683 01:07:49,910 --> 01:07:54,180 Voglio scrivere un programma molto noioso. 1684 01:07:54,180 --> 01:07:56,170 Così 10. 1685 01:07:56,170 --> 01:07:58,862 Facciamolo. 1686 01:07:58,862 --> 01:07:59,320 9. 1687 01:07:59,320 --> 01:08:00,360 Bene. 1688 01:08:00,360 --> 01:08:02,120 Non appena si inizia a fare questo in programmazione, si è 1689 01:08:02,120 --> 01:08:03,490 probabilmente facendo qualcosa di sbagliato. 1690 01:08:03,490 --> 01:08:04,950 Ma inizieremo comunque. 1691 01:08:04,950 --> 01:08:05,430 Oops. 1692 01:08:05,430 --> 01:08:06,950 Questo è effettivamente sbagliato. 1693 01:08:06,950 --> 01:08:08,230 7. 1694 01:08:08,230 --> 01:08:09,440 6. 1695 01:08:09,440 --> 01:08:10,750 5. 1696 01:08:10,750 --> 01:08:11,200 4. 1697 01:08:11,200 --> 01:08:12,450 Nulla succederà quando arriveremo a 0. 1698 01:08:12,450 --> 01:08:13,290 3. 1699 01:08:13,290 --> 01:08:14,590 2. 1700 01:08:14,590 --> 01:08:15,630 1. 1701 01:08:15,630 --> 01:08:16,020 Va bene. 1702 01:08:16,020 --> 01:08:17,560 0. 1703 01:08:17,560 --> 01:08:18,689 Elimina. 1704 01:08:18,689 --> 01:08:19,029 >> Bene. 1705 01:08:19,029 --> 01:08:20,029 Quindi restituire 0. 1706 01:08:20,029 --> 01:08:22,010 Quindi questo programma è ovviamente intenzione di fare ciò che molto 1707 01:08:22,010 --> 01:08:23,310 dice noiosamente sta andando a fare. 1708 01:08:23,310 --> 01:08:24,060 E 'intenzione di stampare tutti coloro 1709 01:08:24,060 --> 01:08:25,290 valori, dall'alto verso il basso. 1710 01:08:25,290 --> 01:08:27,140 Quindi lasciate che fanno fare loop. 1711 01:08:27,140 --> 01:08:28,640 E poi - whoops. 1712 01:08:28,640 --> 01:08:29,700 Fai loop. 1713 01:08:29,700 --> 01:08:31,479 Ero nella directory sbagliata. 1714 01:08:31,479 --> 01:08:33,300 E adesso lasciatemi correre loop. 1715 01:08:33,300 --> 01:08:34,140 Invio. 1716 01:08:34,140 --> 01:08:34,620 Woohoo. 1717 01:08:34,620 --> 01:08:35,270 Very nice. 1718 01:08:35,270 --> 01:08:36,279 Nizza, programma lungo. 1719 01:08:36,279 --> 01:08:38,109 >> Va bene, ma adesso cerchiamo di farlo meglio. 1720 01:08:38,109 --> 01:08:40,810 Proprio come in Scratch, quando hai iniziato con un ciclo 1721 01:08:40,810 --> 01:08:43,149 costruire, invece di copiare e incollare tutto il 1722 01:08:43,149 --> 01:08:45,580 pezzi del puzzle, mi permetta di introdurre questa cosa. 1723 01:08:45,580 --> 01:08:48,609 Quindi, in C, ci sono vari costrutti di loop, 1724 01:08:48,609 --> 01:08:50,540 uno dei quali assomiglia a questo. 1725 01:08:50,540 --> 01:08:55,069 Un ciclo "for" ha tre cose, separati da due punti e virgola. 1726 01:08:55,069 --> 01:08:57,770 E poi, all'interno del corpo del ciclo, per così dire - l' 1727 01:08:57,770 --> 01:08:59,390 all'interno roba delle parentesi graffe - 1728 01:08:59,390 --> 01:09:01,010 siamo in grado di fare qualcosa di nuovo e di nuovo. 1729 01:09:01,010 --> 01:09:02,310 Quindi quello che ho qui sullo schermo, si tratta di 1730 01:09:02,310 --> 01:09:03,300 letteralmente un commento. 1731 01:09:03,300 --> 01:09:05,380 Il / / qui significa arriva un commento. 1732 01:09:05,380 --> 01:09:06,180 Questo non è il codice. 1733 01:09:06,180 --> 01:09:08,890 Questo è solo descrizione in inglese, per me, l'umano. 1734 01:09:08,890 --> 01:09:11,300 >> Inizializzazioni Quindi, le condizioni, e gli aggiornamenti. 1735 01:09:11,300 --> 01:09:12,770 Bene, vediamo come funziona. 1736 01:09:12,770 --> 01:09:15,520 Questo mi permette di riscrivere il programma come segue. 1737 01:09:15,520 --> 01:09:16,399 Per - 1738 01:09:16,399 --> 01:09:18,029 Così ecco che arriva mio ciclo - 1739 01:09:18,029 --> 01:09:19,439 INT - 1740 01:09:19,439 --> 01:09:21,330 ecco che arriva una variabile chiamata "i" - 1741 01:09:21,330 --> 01:09:23,140 viene inizializzato a 10. 1742 01:09:23,140 --> 01:09:25,260 Quindi c'è la mia inizializzazione. 1743 01:09:25,260 --> 01:09:29,450 Io voglio fare questo ciclo fino a quando "i" è maggiore o 1744 01:09:29,450 --> 01:09:30,899 uguale a 0. 1745 01:09:30,899 --> 01:09:32,880 E su ogni iterazione di questo ciclo, voglio 1746 01:09:32,880 --> 01:09:34,979 fare i -. 1747 01:09:34,979 --> 01:09:36,310 Così abbiamo visto + + il Lunedi. 1748 01:09:36,310 --> 01:09:37,660 - È l'opposto. 1749 01:09:37,660 --> 01:09:39,410 E diminuisce il valore di 1. 1750 01:09:39,410 --> 01:09:43,319 All'interno di questo ciclo, voglio fare effettivamente qualcosa. 1751 01:09:43,319 --> 01:09:46,390 Quindi ho intenzione di dire qualcosa di simile a printf. 1752 01:09:46,390 --> 01:09:48,939 Non voglio che a dire il 10 adesso, perché questo è ovviamente solo 1753 01:09:48,939 --> 01:09:50,000 intenzione di stampare lo stesso valore. 1754 01:09:50,000 --> 01:09:52,246 Che cosa desidera stampare, invece, probabilmente? 1755 01:09:52,246 --> 01:09:52,590 Gia '. 1756 01:09:52,590 --> 01:09:55,270 Così "i". Così% d, i. 1757 01:09:55,270 --> 01:09:57,340 >> Quindi ho intenzione di rubare una di quelle idee da prima - 1758 01:09:57,340 --> 01:09:59,640 questa sostituzione per i codici di formato - 1759 01:09:59,640 --> 01:10:01,620 e poi qui, in fondo, tornerò 0, solo 1760 01:10:01,620 --> 01:10:02,710 per buona misura. 1761 01:10:02,710 --> 01:10:04,740 Ma ora, ho un programma più sintetica. 1762 01:10:04,740 --> 01:10:07,490 Sono solo poche righe, e non circa 10 o 11 linee. 1763 01:10:07,490 --> 01:10:09,440 Lasciatemi andare alla mia richiesta qui. 1764 01:10:09,440 --> 01:10:10,630 Remake loop. 1765 01:10:10,630 --> 01:10:12,140 Eseguire di nuovo loop. 1766 01:10:12,140 --> 01:10:13,570 E sembra essere la stessa. 1767 01:10:13,570 --> 01:10:15,550 Ora, il programma non è più interessante. 1768 01:10:15,550 --> 01:10:17,180 Ma ora posso scrivere una cosa del genere. 1769 01:10:17,180 --> 01:10:18,970 Posso cambiare questo a 100. 1770 01:10:18,970 --> 01:10:21,400 Posso quindi ricompilare il mio programma. 1771 01:10:21,400 --> 01:10:23,360 E poi posso eseguire nuovamente il mio programma. 1772 01:10:23,360 --> 01:10:26,390 E ora si va super-veloce sui computer di oggi. 1773 01:10:26,390 --> 01:10:27,820 Ma ci ho - 1774 01:10:27,820 --> 01:10:29,620 e in realtà, il mio buffer di scrollback non 1775 01:10:29,620 --> 01:10:30,890 anche andare così lontano. 1776 01:10:30,890 --> 01:10:31,680 Ecco fatto. 1777 01:10:31,680 --> 01:10:34,090 Così ci abbiamo tutto 100. 1778 01:10:34,090 --> 01:10:35,880 Ma è facile commettere errori qui. 1779 01:10:35,880 --> 01:10:37,920 Che cosa sarà il comportamento previsto se 1780 01:10:37,920 --> 01:10:41,150 accidentalmente farlo? 1781 01:10:41,150 --> 01:10:42,550 Così ci si sente come infinito. 1782 01:10:42,550 --> 01:10:44,670 Quindi cerchiamo di vedere se il computer si comporta. 1783 01:10:44,670 --> 01:10:47,020 >> Permettetemi quindi di andare avanti e fare loop. 1784 01:10:47,020 --> 01:10:48,355 E lasciate che l'esecuzione del ciclo. 1785 01:10:53,590 --> 01:10:55,210 Quindi, torniamo a quello di un attimo. 1786 01:10:55,210 --> 01:10:56,720 Lasceremo che corrono. 1787 01:10:56,720 --> 01:10:59,520 Perché quello che dovremmo contare fino a, minimo? 1788 01:10:59,520 --> 01:11:02,200 Probabilmente almeno 2 miliardi di euro, se abbiamo il numero di bit, e 1789 01:11:02,200 --> 01:11:03,660 stiamo usando valori positivi. 1790 01:11:03,660 --> 01:11:04,890 Quindi cerchiamo di tornare qui. 1791 01:11:04,890 --> 01:11:07,810 Oltre a questi tipi di cicli, abbiamo quelli che vengono chiamati mentre 1792 01:11:07,810 --> 01:11:09,430 loop. Così, proprio come in Scratch, hai avuto sempre 1793 01:11:09,430 --> 01:11:11,240 blocchi, e hai avuto blocchi ripetizione. 1794 01:11:11,240 --> 01:11:13,270 Allo stesso modo, in C, è sufficiente altri modi 1795 01:11:13,270 --> 01:11:14,260 di esprimere se stessi. 1796 01:11:14,260 --> 01:11:17,110 In modo da avere questa nozione di un ciclo while che permette di 1797 01:11:17,110 --> 01:11:18,860 esprimere se stessi un po 'diverso. 1798 01:11:18,860 --> 01:11:21,490 E poi hai qualcosa chiamato un ciclo do-while, 1799 01:11:21,490 --> 01:11:24,200 che opera in modo leggermente diverso pure. 1800 01:11:24,200 --> 01:11:25,320 E noi provvederemo a prendere in giro questi pezzi nel corso del tempo. 1801 01:11:25,320 --> 01:11:28,630 >> Ma diamo uno sguardo a questo ultimo qui. 1802 01:11:28,630 --> 01:11:30,160 Se andiamo in - 1803 01:11:30,160 --> 01:11:31,466 ancora in esecuzione. 1804 01:11:31,466 --> 01:11:32,770 E 'piuttosto infinita. 1805 01:11:32,770 --> 01:11:36,870 Permettetemi quindi di andare in positivo, e mostrare come si può effettivamente 1806 01:11:36,870 --> 01:11:39,410 governare input dell'utente un po 'più efficace. 1807 01:11:39,410 --> 01:11:40,910 Si tratta di un programma piuttosto breve. 1808 01:11:40,910 --> 01:11:43,730 E qui abbiamo, in principale, un int n dichiarazione. 1809 01:11:43,730 --> 01:11:46,570 Allora dammi una variabile denominata n. Ora, io dico letteralmente 1810 01:11:46,570 --> 01:11:48,340 "Fare". E poi ho aperto ricci 1811 01:11:48,340 --> 01:11:49,630 brace, vicino parentesi graffa. 1812 01:11:49,630 --> 01:11:52,000 E poi notare, subito dopo, si dice mentre n 1813 01:11:52,000 --> 01:11:53,790 è minore di 1. 1814 01:11:53,790 --> 01:11:55,300 Quindi notare che queste linee - 1815 01:11:55,300 --> 01:11:56,740 19-24 - 1816 01:11:56,740 --> 01:11:59,450 comporre collettivamente un ciclo do-while. 1817 01:11:59,450 --> 01:12:01,280 E ancora, non nuova sintassi, una nuova idea. 1818 01:12:01,280 --> 01:12:03,740 E 'solo un altro modo di looping, sintatticamente. 1819 01:12:03,740 --> 01:12:04,890 Che cosa significa questo? 1820 01:12:04,890 --> 01:12:08,000 Effettuare le seguenti operazioni mentre n è minore di 1. 1821 01:12:08,000 --> 01:12:09,080 Allora, cosa voglio fare? 1822 01:12:09,080 --> 01:12:11,390 Esigo che tu mi dia un numero intero positivo. 1823 01:12:11,390 --> 01:12:14,110 Poi io in realtà cercare di ottenere un numero intero da parte dell'utente. 1824 01:12:14,110 --> 01:12:16,740 Ma in termini di ordine delle operazioni qui, perché l' 1825 01:12:16,740 --> 01:12:21,850 finché la condizione è qui, io poi andare a controllare, è n 1826 01:12:21,850 --> 01:12:23,100 meno di 1? 1827 01:12:23,100 --> 01:12:24,600 Supponiamo che l'utente - 1828 01:12:24,600 --> 01:12:26,450 dopo essere stato richiesto in questo modo - 1829 01:12:26,450 --> 01:12:29,190 tipi il valore 0. 1830 01:12:29,190 --> 01:12:34,510 Questa condizione sarà vero o falso? 1831 01:12:34,510 --> 01:12:35,820 Beh, in realtà sta per essere vero. 1832 01:12:35,820 --> 01:12:38,700 Poiché n è 0, e 0 è minore di 1. 1833 01:12:38,700 --> 01:12:40,140 Che cosa implica? 1834 01:12:40,140 --> 01:12:41,160 Fallo di nuovo. 1835 01:12:41,160 --> 01:12:41,990 Fallo di nuovo. 1836 01:12:41,990 --> 01:12:42,640 Fallo di nuovo. 1837 01:12:42,640 --> 01:12:46,080 Solo una volta che la condizione restituisce false. 1838 01:12:46,080 --> 01:12:47,510 Se digito 42. 1839 01:12:47,510 --> 01:12:49,690 Ebbene no, 42 non è minore di 1. 1840 01:12:49,690 --> 01:12:52,320 Pertanto questo loop è fatto esecuzione. 1841 01:12:52,320 --> 01:12:54,650 E così a quel punto, il programma dirà, grazie per 1842 01:12:54,650 --> 01:12:57,530 il 42, in questo caso. 1843 01:12:57,530 --> 01:13:00,320 Ora che avete questo modo di esprimere se stessi - 1844 01:13:00,320 --> 01:13:02,360 Non dobbiamo aspettare che questo alla fine. 1845 01:13:02,360 --> 01:13:03,620 Sta andando a prendere un po 'di tempo. 1846 01:13:03,620 --> 01:13:04,990 To be continued la prossima volta, forse. 1847 01:13:04,990 --> 01:13:08,050 >> Ma ora, si ha la possibilità di spera di comprendere un 1848 01:13:08,050 --> 01:13:09,060 po 'di umorismo geek. 1849 01:13:09,060 --> 01:13:11,560 Apologies. 1850 01:13:11,560 --> 01:13:13,620 Questo non è rappresentativo dell 'umorismo in computer science 1851 01:13:13,620 --> 01:13:14,870 mondo, ma è carino. 1852 01:13:21,020 --> 01:13:23,890 Fine [RIDE] Andiamo su questa nota. 1853 01:13:23,890 --> 01:13:25,750 E ci vedremo il Lunedi. 1854 01:13:25,750 --> 01:13:31,629 [Applausi]