1 00:00:08,119 --> 00:00:11,630 [Powered by Google Translate] DAVID J. MALAN: Va bene, questo è CS50, e questo è il 2 00:00:11,630 --> 00:00:14,790 inizio della seconda settimana. 3 00:00:14,790 --> 00:00:16,300 Grazie. 4 00:00:16,300 --> 00:00:19,000 Cominciamo qui con una telefonata. 5 00:00:19,000 --> 00:00:30,005 Sto per chiamare 617-BUG-CS50. 6 00:00:30,005 --> 00:00:31,230 CS50: Questo è CS50. 7 00:00:31,230 --> 00:00:33,930 Per Ragazzo Shuttle, premere 1. 8 00:00:33,930 --> 00:00:36,660 Per ricominciare, premere 9. 9 00:00:36,660 --> 00:00:38,180 DAVID J. MALAN: Così ha detto per Boy Shuttle, premere 1. 10 00:00:38,180 --> 00:00:41,560 Quindi stiamo andando a premere 1. 11 00:00:41,560 --> 00:00:43,230 CS50: Qual è la tua origine? 12 00:00:43,230 --> 00:00:45,340 Per i quad, premere 1. 13 00:00:45,340 --> 00:00:47,080 Mather, premere 2. 14 00:00:47,080 --> 00:00:49,240 Boylston, premere 3. 15 00:00:49,240 --> 00:00:51,280 Lamont, premere 4. 16 00:00:51,280 --> 00:00:53,210 Mem Hall, premere 5. 17 00:00:53,210 --> 00:00:55,660 Per ricominciare, premere 0. 18 00:00:55,660 --> 00:00:59,590 DAVID J. MALAN: Ci premere 1 per il quad. 19 00:00:59,590 --> 00:01:03,610 CS50: navetta successiva lascia in questo preciso istante alle ore 1:10, e 20 00:01:03,610 --> 00:01:09,820 poi a 1:20, 1:30, 1:40 PM. 21 00:01:09,820 --> 00:01:12,030 Questo è CS50. 22 00:01:12,030 --> 00:01:15,570 >> DAVID J. MALAN: Quindi questa è la voce del CS50. 23 00:01:15,570 --> 00:01:18,030 Ed è un esempio dei tipi di progetti definitivi, per 24 00:01:18,030 --> 00:01:19,500 esempio, si può mordere via verso 25 00:01:19,500 --> 00:01:20,600 alla fine del semestre. 26 00:01:20,600 --> 00:01:23,840 Ad esempio, che shuttleboy.cs50.net esiste - 27 00:01:23,840 --> 00:01:28,200 in realtà un progetto che ho scritto dopo aver preso CS51 28 00:01:28,200 --> 00:01:29,740 quando ero uno studente universitario. 29 00:01:29,740 --> 00:01:32,250 E l'ispirazione qui era allora, tutto quello che avevo era 30 00:01:32,250 --> 00:01:34,320 gli stampati orari degli autobus navetta, e non c'era 31 00:01:34,320 --> 00:01:35,970 nozione di guardare le cose on-line. 32 00:01:35,970 --> 00:01:38,730 E così una sorta di colomba in un fine settimana, versato attraverso il 33 00:01:38,730 --> 00:01:41,460 stampato il calendario, e lo ha portato a un programma per computer. 34 00:01:41,460 --> 00:01:43,790 Al momento, il programma informatico successo da scrivere 35 00:01:43,790 --> 00:01:47,110 in C. E in realtà ha funzionato da Boy Shuttle digitando in un 36 00:01:47,110 --> 00:01:48,600 lampeggiante chiederà come abbiamo fatto finora. 37 00:01:48,600 --> 00:01:50,450 Ma nel corso degli anni, si è evoluto in un istante 38 00:01:50,450 --> 00:01:51,390 messaggistica bot. 39 00:01:51,390 --> 00:01:53,970 Si è evoluto più recentemente in questo sito web, in un 40 00:01:53,970 --> 00:01:57,720 SMS-based, così come in questa voce strumento basato. 41 00:01:57,720 --> 00:02:00,170 E questo è quello di suggerire il genere di cose che si possono 42 00:02:00,170 --> 00:02:02,380 fare per voi stessi entro la fine del semestre. 43 00:02:02,380 --> 00:02:05,490 >> Per esempio, c'è la versione SMS di Boy Shuttle accade 44 00:02:05,490 --> 00:02:06,510 operare come segue. 45 00:02:06,510 --> 00:02:10,880 Se, sul tuo telefono cellulare, si invia un messaggio di testo a 41.411 e 46 00:02:10,880 --> 00:02:14,300 quindi inviare il sboy simbolo speciale, per Boy Shuttle, 47 00:02:14,300 --> 00:02:18,350 seguito da A e B, dove A è una origine e B è un 48 00:02:18,350 --> 00:02:19,070 destinazione - 49 00:02:19,070 --> 00:02:21,030 per esempio, Boylston Spazio Quad - 50 00:02:21,030 --> 00:02:23,330 ciò che si dovrebbe tornare nel giro di pochi secondi è un testo 51 00:02:23,330 --> 00:02:25,820 messaggio da Boy Shuttle vi dico esattamente quando il 52 00:02:25,820 --> 00:02:28,990 prossimi navette sono pochi, da quel punto Un andare in quella 53 00:02:28,990 --> 00:02:29,640 punto B. 54 00:02:29,640 --> 00:02:32,510 E questo è un esempio più generale di ciò che è noto come 55 00:02:32,510 --> 00:02:33,920 utilizzando un API. 56 00:02:33,920 --> 00:02:36,930 >> Così, per esempio, questo qui è solo shuttleboy.cs50.net, il 57 00:02:36,930 --> 00:02:39,300 attuale web-based incarnazione di questo. 58 00:02:39,300 --> 00:02:42,480 Ma i dati che sottolinea le applicazioni questo e altri che CS50 59 00:02:42,480 --> 00:02:45,560 ha sviluppato tutti esposti a tutti qui nella forma 60 00:02:45,560 --> 00:02:49,340 di API, interfacce di programmazione delle applicazioni. 61 00:02:49,340 --> 00:02:52,220 E questo è solo un modo elegante per dire che la gente ci piace il 62 00:02:52,220 --> 00:02:56,010 Internet e altri hanno speso un po 'di tempo la creazione di 63 00:02:56,010 --> 00:02:59,970 Il software che è possibile utilizzare, al fine di catturare i dati da noi e 64 00:02:59,970 --> 00:03:02,510 quindi creare le proprie applicazioni sulla parte superiore 65 00:03:02,510 --> 00:03:03,840 di tale insieme di dati. 66 00:03:03,840 --> 00:03:06,610 Così, per esempio, questa pagina Ragazzo navetta API qui, che 67 00:03:06,610 --> 00:03:09,390 sembra essere nel manuale CS50, essenzialmente documenti 68 00:03:09,390 --> 00:03:13,080 come si può fare per chiedere CS50 server per i dati. 69 00:03:13,080 --> 00:03:16,240 Per esempio, se si ha familiarità con i file CSV, comma 70 00:03:16,240 --> 00:03:18,940 valori separati, questi sono solo una sorta di veloce e sporco 71 00:03:18,940 --> 00:03:20,310 Excel come file. 72 00:03:20,310 --> 00:03:23,110 Così si può chiedere Boy navetta per tutti i dati su tutte le 73 00:03:23,110 --> 00:03:25,090 le case e le loro coordinate GPS, e si otterrà 74 00:03:25,090 --> 00:03:27,300 indietro, essenzialmente, un foglio di calcolo come quello che 75 00:03:27,300 --> 00:03:30,820 è possibile leggere in un programma di tua scelta e poi 76 00:03:30,820 --> 00:03:33,250 generare i risultati, come Boy navetta stessa 77 00:03:33,250 --> 00:03:34,160 capita di fare. 78 00:03:34,160 --> 00:03:37,030 Per i più familiari, rappresentazioni più moderne dati 79 00:03:37,030 --> 00:03:39,420 includono JSON, JavaScript Object Notation. 80 00:03:39,420 --> 00:03:40,620 Qualcosa tornerà a verso di sé 81 00:03:40,620 --> 00:03:41,720 alla fine del semestre. 82 00:03:41,720 --> 00:03:45,440 >> Ma ancora una volta, questa è solo una delle tante di API proprio di CS50. 83 00:03:45,440 --> 00:03:48,320 E la cosa interessante è ora, in questi giorni, Facebook e 84 00:03:48,320 --> 00:03:51,110 Twitter e Google e praticamente ogni sito web popolare fuori 85 00:03:51,110 --> 00:03:54,130 non ha una sorta di API, che significa che se si legge il 86 00:03:54,130 --> 00:03:56,620 documentazione sul loro sito, ti iscrivi per un 87 00:03:56,620 --> 00:03:59,980 account, è possibile quindi iniziare a scrivere software in cima 88 00:03:59,980 --> 00:04:03,680 qualsiasi strumento o dati che società ci fornisce. 89 00:04:03,680 --> 00:04:06,210 E così uno dei nostri compagni di insegnamento di un paio di anni fa 90 00:04:06,210 --> 00:04:07,620 ha scritto una versione per Mac di questo. 91 00:04:07,620 --> 00:04:10,990 Così al link intitolato Mac qui in alto a sinistra, si può effettivamente 92 00:04:10,990 --> 00:04:13,940 scaricare un widget per Mac OS che gira sul proprio Mac per fare il 93 00:04:13,940 --> 00:04:15,040 stesso tipo di cose. 94 00:04:15,040 --> 00:04:17,970 Quindi è tutta una questione di costruire in cima al set di dati come questi. 95 00:04:17,970 --> 00:04:21,839 Ma più in che verso la fine del semestre. 96 00:04:21,839 --> 00:04:25,780 >> Quindi cerchiamo di immergersi in rapido reale di un bug, solo per tipo di ottenere 97 00:04:25,780 --> 00:04:27,990 cose riscaldato fino ad oggi, e ripenso su alcune delle 98 00:04:27,990 --> 00:04:29,660 cose che abbiamo visto la scorsa settimana. 99 00:04:29,660 --> 00:04:32,840 In particolare, vorrei andare avanti e tirare su, diciamo, 100 00:04:32,840 --> 00:04:34,080 questo esempio qui. 101 00:04:34,080 --> 00:04:37,500 Buggy1.c, questo è disponibile sul sito web del corso, se lo 102 00:04:37,500 --> 00:04:40,250 piace scaricarlo e curiosare intorno a voi. 103 00:04:40,250 --> 00:04:43,520 Ma andiamo ingrandire in questo programma abbastanza breve, e solo 104 00:04:43,520 --> 00:04:46,550 un super-veloce riassunto di alcune delle componenti di base che 105 00:04:46,550 --> 00:04:48,880 davvero stanno per iniziare solo prendendo per scontato. 106 00:04:48,880 --> 00:04:51,860 >> Così la roba blu, nelle linee da 1 a 9, sono solo 107 00:04:51,860 --> 00:04:53,670 softball domande. 108 00:04:53,670 --> 00:04:54,590 Quindi questi sono solo commenti. 109 00:04:54,590 --> 00:04:56,230 Essi non hanno alcun significato funzionale. 110 00:04:56,230 --> 00:04:58,460 Ma sono i commenti, nel senso che sono le note 111 00:04:58,460 --> 00:05:02,010 Io, l'uomo, fatto a me stesso in modo che in conferenza e dopo 112 00:05:02,010 --> 00:05:04,340 lezione, posso effettivamente ricordare quello che questo programma 113 00:05:04,340 --> 00:05:07,120 fa senza dover leggere riga per riga e 114 00:05:07,120 --> 00:05:08,990 ricreando la storia nella mia mente. 115 00:05:08,990 --> 00:05:11,000 Inoltre, se questo programma mano a qualcun altro, come 116 00:05:11,000 --> 00:05:14,420 te, molto più chiaro a voi, a causa di commenti come questo, 117 00:05:14,420 --> 00:05:16,680 quello che il programma sta in realtà facendo, o almeno quello che il 118 00:05:16,680 --> 00:05:18,210 programma si suppone di fare. 119 00:05:18,210 --> 00:05:20,760 O se non è corretto è un altro paio di maniche. 120 00:05:20,760 --> 00:05:25,040 Ora, in C, con commenti su più righe, ricordare che, in linea 121 00:05:25,040 --> 00:05:27,880 uno è qui il simbolo magico, / *. 122 00:05:27,880 --> 00:05:30,380 Significa qui l'inizio di un commento. 123 00:05:30,380 --> 00:05:34,560 E nient'altro ha importanza fino a raggiungere la fine di terminazione, 124 00:05:34,560 --> 00:05:36,700 che è * /, il contrario. 125 00:05:36,700 --> 00:05:39,120 Quindi il fatto che io ho 80-alcune stelle dispari qui da 126 00:05:39,120 --> 00:05:41,550 da sinistra a destra è in realtà solo un dettaglio estetico. 127 00:05:41,550 --> 00:05:43,370 Non ha un significato funzionale. 128 00:05:43,370 --> 00:05:44,490 >> Ora, come su linea 11? 129 00:05:44,490 --> 00:05:46,940 Che cosa significa questo in parole povere? 130 00:05:51,560 --> 00:05:52,540 Che cos'è? 131 00:05:52,540 --> 00:05:54,280 PUBBLICO: include lo standard. 132 00:05:54,280 --> 00:05:54,740 DAVID J. MALAN: OK, bene. 133 00:05:54,740 --> 00:05:57,500 Quindi include la libreria stdio.h. 134 00:05:57,500 --> 00:05:58,230 Che cosa vuol dire? 135 00:05:58,230 --> 00:06:01,570 Ebbene, all'interno di quel file, stdio.h, sono un sacco di 136 00:06:01,570 --> 00:06:03,320 funzione dichiarazioni - 137 00:06:03,320 --> 00:06:05,290 vale a dire, il codice che qualcun altro ha scritto. 138 00:06:05,290 --> 00:06:08,160 E un perfetto esempio di una funzione che è dichiarata in 139 00:06:08,160 --> 00:06:10,250 stdio.h è - 140 00:06:10,250 --> 00:06:11,980 preferito che ormai? 141 00:06:11,980 --> 00:06:14,300 Quindi printf, uno dei più comuni da usare, certamente 142 00:06:14,300 --> 00:06:15,840 presto, da quella libreria è lì. 143 00:06:15,840 --> 00:06:19,290 Se escludo che riga di codice, Clang sta per urlare 144 00:06:19,290 --> 00:06:22,550 a me qualcosa ricorrendo a un simbolo non dichiarato. 145 00:06:22,550 --> 00:06:24,930 Qualcosa di sommerso è probabilmente la parola chiave, perché 146 00:06:24,930 --> 00:06:27,770 non abbiamo informato il compilatore quello che sembra printf 147 00:06:27,770 --> 00:06:29,230 come se non includono quella linea. 148 00:06:29,230 --> 00:06:31,830 E più giù sulla Terra, in realtà, ciò che sta dicendo è la linea 149 00:06:31,830 --> 00:06:34,890 aprire quel file, stdio.h, ovunque sia sul quella del server 150 00:06:34,890 --> 00:06:38,200 disco rigido o dal disco rigido dell'apparecchio, e copia-incolla è 151 00:06:38,200 --> 00:06:40,240 proprio lì nel mio file, senza la mia 152 00:06:40,240 --> 00:06:41,730 dover farlo manualmente. 153 00:06:41,730 --> 00:06:44,420 >> Ora, una volta scendiamo qui per principale, non molto inizieremo 154 00:06:44,420 --> 00:06:46,900 prendere in giro a parte ciò che int e ciò che è nulla. 155 00:06:46,900 --> 00:06:48,430 Ma per ora, diamo un'occhiata a tre linee 156 00:06:48,430 --> 00:06:50,350 nel raggio di 15 a 17. 157 00:06:50,350 --> 00:06:52,250 Questo qui rivendicare come buggy. 158 00:06:52,250 --> 00:06:54,900 Linea 7 nei miei commenti dice "dovrebbe stampare 10 159 00:06:54,900 --> 00:06:59,410 asterischi ma non. "Perché non stampare, infatti, 160 00:06:59,410 --> 00:07:01,097 10 stelle del genere? 161 00:07:01,097 --> 00:07:02,347 PUBBLICO: [incomprensibile]. 162 00:07:05,210 --> 00:07:05,800 DAVID J. MALAN: Esattamente. 163 00:07:05,800 --> 00:07:08,720 Quindi notare che stiamo cominciando a contare da 0. 164 00:07:08,720 --> 00:07:10,780 E questo è in realtà una convenzione nella programmazione e 165 00:07:10,780 --> 00:07:13,230 informatica più in generale, iniziando a contare 166 00:07:13,230 --> 00:07:14,610 da 0 al posto di 1. 167 00:07:14,610 --> 00:07:16,690 E questo davvero deriva proprio dal fatto che, per 168 00:07:16,690 --> 00:07:18,940 esempio, quando abbiamo avuto otto persone sul palco, quando 169 00:07:18,940 --> 00:07:20,680 nessuno è stato alzare la mano, erano 170 00:07:20,680 --> 00:07:22,340 tutti gli zeri in modo efficace. 171 00:07:22,340 --> 00:07:24,260 E quindi è solo una specie di convenzione computer in modo, 172 00:07:24,260 --> 00:07:26,030 pertanto, iniziare a contare da 0. 173 00:07:26,030 --> 00:07:29,130 Se questo è il numero più basso è possibile rappresentare in formato binario. 174 00:07:29,130 --> 00:07:32,270 >> Quindi qui abbiamo iniziato l'inizializzazione i per 0. 175 00:07:32,270 --> 00:07:34,230 Abbiamo impostato i uguale a 0. 176 00:07:34,230 --> 00:07:37,780 Ma poi ho fatto questo errore qui, dicendo che i è minore o 177 00:07:37,780 --> 00:07:38,820 pari a 10. 178 00:07:38,820 --> 00:07:41,700 Ma se si pensa che attraverso, se mi metto a 0 e poi vado 179 00:07:41,700 --> 00:07:46,410 fino a 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, sto andando 180 00:07:46,410 --> 00:07:49,980 stampare le 11 stelle allo schermo, perché ho salito 181 00:07:49,980 --> 00:07:52,410 a e pari a 10. 182 00:07:52,410 --> 00:07:55,090 Quindi, la soluzione semplice: ecco allora che cosa? 183 00:07:55,090 --> 00:07:56,070 PUBBLICO: [incomprensibile]. 184 00:07:56,070 --> 00:07:57,350 DAVID J. MALAN: Basta cambiare a meno. 185 00:07:57,350 --> 00:07:59,700 Se si vuole veramente, si potrebbe fare questo. 186 00:07:59,700 --> 00:08:01,370 Ma in generale, che è visto di buon occhio. 187 00:08:01,370 --> 00:08:04,020 E così inizia a contare da 0 è solo qualcosa che deve 188 00:08:04,020 --> 00:08:05,510 in genere abituarsi. 189 00:08:05,510 --> 00:08:07,810 Ora, che dire di questo costrutto tutto in sé e per sé? 190 00:08:07,810 --> 00:08:10,640 Secondo questa linea, 15 demarks un ciclo for. 191 00:08:10,640 --> 00:08:12,510 Così, per non è una funzione. 192 00:08:12,510 --> 00:08:13,640 E 'solo una dichiarazione. 193 00:08:13,640 --> 00:08:16,180 E 'un costrutto di ciclo, come abbiamo visto in Scratch. 194 00:08:16,180 --> 00:08:17,600 E ha tre parti. 195 00:08:17,600 --> 00:08:19,740 Si noti che vi è la prima parte di 196 00:08:19,740 --> 00:08:21,350 sinistra della virgola. 197 00:08:21,350 --> 00:08:24,200 C'è la parte centrale tra i due punti e virgola. 198 00:08:24,200 --> 00:08:26,250 E poi c'è la parte della mano destra a destra 199 00:08:26,250 --> 00:08:27,640 della virgola secondi. 200 00:08:27,640 --> 00:08:31,822 Ora, il primo di questi fa cosa? 201 00:08:31,822 --> 00:08:33,679 PUBBLICO: [incomprensibile]. 202 00:08:33,679 --> 00:08:34,270 DAVID J. MALAN: Laggiù? 203 00:08:34,270 --> 00:08:34,816 Si '? 204 00:08:34,816 --> 00:08:35,980 PUBBLICO: inizializzazione. 205 00:08:35,980 --> 00:08:36,850 >> DAVID J. MALAN: Inizializzazione. 206 00:08:36,850 --> 00:08:37,840 Che cosa significa questo? 207 00:08:37,840 --> 00:08:40,690 Abbiamo dichiarato una variabile denominata i. 208 00:08:40,690 --> 00:08:43,840 E 'di tipo int, perché ho specificato int i. 209 00:08:43,840 --> 00:08:46,470 E io ho l'inizializzazione al valore 0. 210 00:08:46,470 --> 00:08:47,730 Così che cosa sta davvero dicendo? 211 00:08:47,730 --> 00:08:50,680 E 'effettivamente dire al computer hey, dammi abbastanza 212 00:08:50,680 --> 00:08:53,660 memoria, RAM sufficiente, per adattarsi a un numero, e quindi inserire il 213 00:08:53,660 --> 00:08:56,130 numero 0 in quel pezzo di RAM. 214 00:08:56,130 --> 00:08:59,100 E per inciso, quanto grande è un int in genere, almeno all'interno 215 00:08:59,100 --> 00:09:00,280 dell'apparecchio? 216 00:09:00,280 --> 00:09:01,000 PUBBLICO: 32 bit. 217 00:09:01,000 --> 00:09:01,670 DAVID J. MALAN: 32 bit. 218 00:09:01,670 --> 00:09:04,890 Questo significa che mi danno 32 bit, altrimenti noto come 4 byte, 219 00:09:04,890 --> 00:09:07,250 e mettere il valore 0 in essa, che è abbastanza facile perché 220 00:09:07,250 --> 00:09:09,110 Significa solo impostare tutti i bit a 0. 221 00:09:09,110 --> 00:09:11,690 >> Così ora, la seconda parte qui è la condizione. 222 00:09:11,690 --> 00:09:14,590 E la condizione, come suggerisce il nome, è quello che viene controllato 223 00:09:14,590 --> 00:09:18,100 ancora e ancora e ancora come se è vero o falso. 224 00:09:18,100 --> 00:09:21,410 Quindi questo è solo per dire che fare le seguenti righe di codice - 225 00:09:21,410 --> 00:09:23,950 vale a dire la linea 16, perché questo è l'unico rientrato 226 00:09:23,950 --> 00:09:24,820 sotto - 227 00:09:24,820 --> 00:09:26,980 fintanto che i è inferiore a 10. 228 00:09:26,980 --> 00:09:30,520 E dopo ogni iterazione attraverso questo ciclo, fare il 229 00:09:30,520 --> 00:09:33,840 incremento, che in questo caso è i + +. 230 00:09:33,840 --> 00:09:35,580 Ora, non deve essere i + +. 231 00:09:35,580 --> 00:09:37,610 Potrebbe essere i -. 232 00:09:37,610 --> 00:09:39,860 Ma se ho fatto questo, quello che sta succedendo il comportamento 233 00:09:39,860 --> 00:09:41,370 di essere di questo programma? 234 00:09:41,370 --> 00:09:42,290 PUBBLICO: E 'intenzione di essere un ciclo infinito. 235 00:09:42,290 --> 00:09:44,060 DAVID J. MALAN: E 'intenzione di essere una specie di loop infinito, 236 00:09:44,060 --> 00:09:47,720 a meno che non siamo fortunati negativo dopo 2 miliardi o giù di lì. 237 00:09:47,720 --> 00:09:51,320 Forse le cose si avvolgono intorno, giusto per natura del finito 238 00:09:51,320 --> 00:09:53,930 numero di bit che sono assegnate per un int. 239 00:09:53,930 --> 00:09:56,270 Ma è certamente andando a scorrere molto più di 10 e 240 00:09:56,270 --> 00:09:58,630 certamente più di 11 volte qui. 241 00:09:58,630 --> 00:10:02,240 >> Ed ora, per inciso, si rendono conto che i + + e i - 242 00:10:02,240 --> 00:10:04,420 sono in realtà solo zucchero sintattico. 243 00:10:04,420 --> 00:10:07,210 E 'solo notazione abbreviata per quello che è un po' più 244 00:10:07,210 --> 00:10:08,720 esplicitamente scritto come segue: 245 00:10:08,720 --> 00:10:11,200 i = i + 1. 246 00:10:11,200 --> 00:10:13,460 Che è identico a i + +. 247 00:10:13,460 --> 00:10:15,860 E 'solo un po' sembra più bello da dire i + +. 248 00:10:15,860 --> 00:10:17,490 E 'più concisa, più leggibile. 249 00:10:17,490 --> 00:10:19,030 E così maggior parte della gente che, invece. 250 00:10:19,030 --> 00:10:21,840 Ma questo è funzionalmente identica alla 251 00:10:21,840 --> 00:10:22,900 quello che abbiamo appena visto. 252 00:10:22,900 --> 00:10:27,770 Così, in breve, la soluzione rapida qui è solo per dire scorrere i 253 00:10:27,770 --> 00:10:30,690 da 0 fino a meno di 10. 254 00:10:30,690 --> 00:10:32,700 E poi ci giunga 10 stelle. 255 00:10:32,700 --> 00:10:33,430 >> Quindi cerchiamo di provare questo. 256 00:10:33,430 --> 00:10:35,310 Permettetemi di aprire il terminale nella parte inferiore. 257 00:10:35,310 --> 00:10:37,420 Lasciami andare nella directory che si è dentro 258 00:10:37,420 --> 00:10:40,030 E ho intenzione di compilarlo manualmente con Clang per ora. 259 00:10:40,030 --> 00:10:44,880 E ho intenzione di compilare questo come buggy1.c, Invio. 260 00:10:44,880 --> 00:10:50,280 E ora buggy1, perché non c'è nessun file o directory 261 00:10:50,280 --> 00:10:52,026 buggy1 chiamato? 262 00:10:52,026 --> 00:10:53,850 PUBBLICO: [incomprensibile]. 263 00:10:53,850 --> 00:10:54,240 DAVID J. MALAN: Già. 264 00:10:54,240 --> 00:10:55,420 Quindi in realtà è chiamato a.out. 265 00:10:55,420 --> 00:10:57,480 Quindi ricordo se eseguite soltanto Clang, dove Clang è il 266 00:10:57,480 --> 00:11:00,420 compilatore, e non si specifica il nome che si desidera 267 00:11:00,420 --> 00:11:03,550 dare al vostro programma, sta andando per difetto ad a.out. 268 00:11:03,550 --> 00:11:05,030 Così infatti se faccio ls - 269 00:11:05,030 --> 00:11:05,510 oops. 270 00:11:05,510 --> 00:11:07,680 E io didn't - nero-bianco e numero alcune delle 271 00:11:07,680 --> 00:11:08,840 avete dovuto affrontare è stato risolto. 272 00:11:08,840 --> 00:11:10,670 Ma lasciatemi fare questo. 273 00:11:10,670 --> 00:11:14,570 Ci abbiamo a.out sulla sinistra lì. 274 00:11:14,570 --> 00:11:17,360 Quindi dobbiamo correre invece di a.out buggy1. 275 00:11:17,360 --> 00:11:19,140 >> Permettetemi quindi di andare avanti e farlo. 276 00:11:19,140 --> 00:11:22,840 . / A.out, Invio. 277 00:11:22,840 --> 00:11:26,160 E a quanto pare non ha fatto che cosa? 278 00:11:26,160 --> 00:11:26,620 PUBBLICO: Salva. 279 00:11:26,620 --> 00:11:27,390 DAVID J. MALAN: Salva il mio file. 280 00:11:27,390 --> 00:11:31,520 In modo che si risolve facilmente colpendo S di controllo, o di andare a 281 00:11:31,520 --> 00:11:33,450 File, Salva, come nella maggior parte dei programmi. 282 00:11:33,450 --> 00:11:36,360 Lasciami andare qui, cancellare lo schermo, eseguire di nuovo. 283 00:11:36,360 --> 00:11:37,960 E c'è ancora un bug. 284 00:11:37,960 --> 00:11:41,618 Quindi quello che sta succedendo - 285 00:11:41,618 --> 00:11:42,980 PUBBLICO: Non hai compilato. 286 00:11:42,980 --> 00:11:44,040 DAVID J. MALAN: Ah, bene. 287 00:11:44,040 --> 00:11:45,010 Io non l'ho compilato. 288 00:11:45,010 --> 00:11:47,250 Come un idiota, sto guardando il codice per vedere cosa c'è che non va. 289 00:11:47,250 --> 00:11:51,275 Così buggy1.c clang, ora a.out. 290 00:11:51,275 --> 00:11:52,640 E phew, salvato. 291 00:11:52,640 --> 00:11:55,090 >> Quindi sembra un po 'brutto perché non c'è nuova linea 292 00:11:55,090 --> 00:11:55,970 ovunque nel programma. 293 00:11:55,970 --> 00:11:57,390 Ma ancora una volta, questo è solo un dettaglio estetico. 294 00:11:57,390 --> 00:11:59,430 E almeno se contiamo quelli fuori, dovremmo 295 00:11:59,430 --> 00:12:01,160 ora vedere 10 stelle del genere. 296 00:12:01,160 --> 00:12:03,260 Beh, che dire di questo secondo warm-up esempio? 297 00:12:03,260 --> 00:12:07,750 Quindi, in buggy2, sostengo che questa versione, anche, provvederà a stampare 298 00:12:07,750 --> 00:12:10,110 10 stelle, una per riga. 299 00:12:10,110 --> 00:12:12,340 Così questa volta, ho un carattere di nuova riga, solo per fare 300 00:12:12,340 --> 00:12:13,520 cose un po 'più bella. 301 00:12:13,520 --> 00:12:15,410 Ma invece ciò che ottengo è questo. 302 00:12:15,410 --> 00:12:19,590 Quindi vorrei fare buggy2.c clang, Invio. 303 00:12:19,590 --> 00:12:21,790 Ora è di nuovo chiamato a.out. 304 00:12:21,790 --> 00:12:23,130 Invio. 305 00:12:23,130 --> 00:12:26,900 Vedo solo una nuova linea, solo l'ultima riga nuova 306 00:12:26,900 --> 00:12:29,370 muove la mia richiesta alla riga successiva. 307 00:12:29,370 --> 00:12:32,660 E ancora chiaramente ho la stampa *, quindi una nuova linea, 308 00:12:32,660 --> 00:12:33,990 *, Poi una nuova linea. 309 00:12:33,990 --> 00:12:35,490 Ma qual è il problema qui? 310 00:12:35,490 --> 00:12:35,974 Si '? 311 00:12:35,974 --> 00:12:37,224 PUBBLICO: [incomprensibile]. 312 00:12:39,850 --> 00:12:40,470 >> DAVID J. MALAN: Esattamente. 313 00:12:40,470 --> 00:12:44,110 Quindi, a differenza di altri linguaggi, come Python, dove il rientro 314 00:12:44,110 --> 00:12:46,030 realtà ha significato funzionale, in una 315 00:12:46,030 --> 00:12:47,150 linguaggio come il C - 316 00:12:47,150 --> 00:12:49,140 come vedremo, PHP, JavaScript - 317 00:12:49,140 --> 00:12:51,940 il rientro è in realtà solo a beneficio degli umani. 318 00:12:51,940 --> 00:12:55,690 Quindi il fatto che ho rientrato linea 16 e 17 sembra grande, 319 00:12:55,690 --> 00:12:57,530 ma non ha alcun significato funzionale qui. 320 00:12:57,530 --> 00:13:00,700 Se voglio entrambe le linee da eseguire come parte del per 321 00:13:00,700 --> 00:13:05,140 ciclo, allora devo racchiuderli tra parentesi graffe in questo modo. 322 00:13:05,140 --> 00:13:08,540 Si può solo tagliare l'angolo e omettere le parentesi graffe se 323 00:13:08,540 --> 00:13:10,036 qual e 'il caso? 324 00:13:10,036 --> 00:13:10,410 PUBBLICO: Solo una riga. 325 00:13:10,410 --> 00:13:11,130 DAVID J. MALAN: Solo una riga. 326 00:13:11,130 --> 00:13:15,280 Ecco, questo è solo una sorta di una sorta di piacevole dettaglio la sintassi in modo che 327 00:13:15,280 --> 00:13:17,900 non perdete tempo a scrivere tre linee, due delle quali sono 328 00:13:17,900 --> 00:13:20,040 parentesi graffe, solo per scrivere una sola riga di codice. 329 00:13:20,040 --> 00:13:21,650 Ma se si hanno due o più linee, si 330 00:13:21,650 --> 00:13:22,860 davvero bisogno di fare questo. 331 00:13:22,860 --> 00:13:24,210 >> Così ora lasciami salvare questo. 332 00:13:24,210 --> 00:13:27,140 Lasciatemi andare avanti e rieseguire Clang. 333 00:13:27,140 --> 00:13:31,375 Allora lascia che eseguire nuovamente a.out, e ora li faccio uno per riga. 334 00:13:31,375 --> 00:13:33,670 Ora, a.out è di nuovo genere di un nome stupido per un programma. 335 00:13:33,670 --> 00:13:37,500 Come posso dire Clang realmente darmi un nome di file 336 00:13:37,500 --> 00:13:39,820 che è più facile da usare, come buggy2 stessa? 337 00:13:43,200 --> 00:13:44,466 Un po 'più chiaro? 338 00:13:44,466 --> 00:13:45,220 PUBBLICO: [incomprensibile]. 339 00:13:45,220 --> 00:13:47,810 DAVID J. MALAN: OK, in modo che possa effettivamente prendere il molto 340 00:13:47,810 --> 00:13:51,000 facile collegamento e scrivere semplicemente fare buggy2. 341 00:13:51,000 --> 00:13:53,840 Non si specifica. C, in questo caso, e premere Invio. 342 00:13:53,840 --> 00:13:58,530 E ciò che rende non fa altro che compila buggy2.c per me da 343 00:13:58,530 --> 00:14:00,260 Clang chiedendo di farlo. 344 00:14:00,260 --> 00:14:05,100 In particolare, lo chiama Clang, viene eseguito utilizzando Clang modo più 345 00:14:05,100 --> 00:14:08,540 argomenti della riga di comando o interruttori di quello che in realtà bisogno. 346 00:14:08,540 --> 00:14:11,270 Col tempo, torneremo a quello che tutti questi vari 347 00:14:11,270 --> 00:14:13,810 criptiche espressioni sillabazione mezzi. 348 00:14:13,810 --> 00:14:16,910 Ma per ora, che sono solo io risparmio la fatica di 349 00:14:16,910 --> 00:14:19,600 dover ricordare e dover digitare su tutti coloro 350 00:14:19,600 --> 00:14:21,150 varie espressioni separate da un trattino. 351 00:14:21,150 --> 00:14:23,240 E il lato positivo di esso è in ultima analisi, 352 00:14:23,240 --> 00:14:25,900 che ora ho buggy2. 353 00:14:25,900 --> 00:14:27,480 Se voglio fare questa operazione manualmente, però, mi 354 00:14:27,480 --> 00:14:28,775 può invece fare questo - 355 00:14:28,775 --> 00:14:34,110 clang-o buggy2 e poi buggy2.c. 356 00:14:34,110 --> 00:14:37,980 E che allo stesso modo mi dà un file chiamato buggy2. 357 00:14:37,980 --> 00:14:39,710 >> Così, in breve, è il compilatore Clang. 358 00:14:39,710 --> 00:14:43,080 Fare è solo un facile strumento che useremo più 359 00:14:43,080 --> 00:14:44,420 e più, perché inizia appena a 360 00:14:44,420 --> 00:14:47,330 semplificare le cose per noi. 361 00:14:47,330 --> 00:14:49,430 E torniamo 0, infine. 362 00:14:49,430 --> 00:14:51,890 Per ora, solo perché, ma inizieremo a prendere in giro quella parte 363 00:14:51,890 --> 00:14:52,930 oggi e il Mercoledì. 364 00:14:52,930 --> 00:14:55,560 Hai domande su tutto questo? 365 00:14:55,560 --> 00:14:56,450 Si '? 366 00:14:56,450 --> 00:14:58,234 PUBBLICO: [incomprensibile] 367 00:14:58,234 --> 00:15:00,020 ls tra virgolette lì? 368 00:15:00,020 --> 00:15:01,710 DAVID J. MALAN: OK. 369 00:15:01,710 --> 00:15:05,880 Quando ho digitato ls tra virgolette, che mi stava facendo un po 'di magia 370 00:15:05,880 --> 00:15:07,160 dietro le quinte per correggere un bug. 371 00:15:07,160 --> 00:15:09,370 Ho dimenticato, come abbiamo detto a molti di voi sul 372 00:15:09,370 --> 00:15:11,600 forum di discussione, da fare - 373 00:15:11,600 --> 00:15:17,220 lo faremo ora - sudo yum-y update appliance50. 374 00:15:17,220 --> 00:15:19,790 Ops, che questo è scritto giusto. 375 00:15:19,790 --> 00:15:23,240 Quindi l'apparecchio è come un sistema operativo. 376 00:15:23,240 --> 00:15:25,650 E 'in esecuzione il sistema operativo chiamato Fedora. 377 00:15:25,650 --> 00:15:27,450 Ed ora a causa della mia connessione a Internet lenta, ho 378 00:15:27,450 --> 00:15:28,260 davvero incasinato. 379 00:15:28,260 --> 00:15:31,620 Quindi esegue sudo yum update, come vi abbiamo detto di fare in 380 00:15:31,620 --> 00:15:34,080 set di problema, in sostanza, come in esecuzione degli aggiornamenti automatici 381 00:15:34,080 --> 00:15:35,420 in Mac OS o Windows. 382 00:15:35,420 --> 00:15:37,280 E il motivo di questa esecuzione all'inizio stesso della 383 00:15:37,280 --> 00:15:39,640 set problema è perché quando abbiamo creato la macchina, ho 384 00:15:39,640 --> 00:15:42,480 incasinato, e per sbaglio ho fatto tutti i programmi guardare 385 00:15:42,480 --> 00:15:45,210 nero su uno schermo nero, ed è per questo che non li stai vedendo 386 00:15:45,210 --> 00:15:45,860 per impostazione predefinita. 387 00:15:45,860 --> 00:15:48,020 Ma l'ultima versione dell'apparecchio risolve il problema. 388 00:15:48,020 --> 00:15:50,500 E io che durante le vacanze di risolvere una volta che ho Internet 389 00:15:50,500 --> 00:15:51,280 connettività. 390 00:15:51,280 --> 00:15:54,630 >> Così le virgolette solo nasconde il mio errore, con molta discrezione, 391 00:15:54,630 --> 00:15:55,730 a quanto pare. 392 00:15:55,730 --> 00:15:56,980 Altre domande? 393 00:15:59,750 --> 00:16:00,668 Sì? 394 00:16:00,668 --> 00:16:02,012 PUBBLICO: Dove fa viene? 395 00:16:02,012 --> 00:16:03,810 [Incomprensibile] 396 00:16:03,810 --> 00:16:04,280 DAVID J. MALAN: Bella domanda. 397 00:16:04,280 --> 00:16:05,460 Da dove fa viene? 398 00:16:05,460 --> 00:16:09,390 Si tratta di un programma Linux che esiste da molti anni, a lungo 399 00:16:09,390 --> 00:16:10,570 prima CS50. 400 00:16:10,570 --> 00:16:12,930 E viene fornito con un sistema operativo come Fedora. 401 00:16:12,930 --> 00:16:14,830 Non viene dalla libreria CS50. 402 00:16:14,830 --> 00:16:17,560 In realtà, le uniche cose che vengono dalla libreria CS50 403 00:16:17,560 --> 00:16:20,470 fino ad ora, che abbiamo visto, sono GetString, GetInt, tutti 404 00:16:20,470 --> 00:16:25,550 Prendi quelle funzioni, e la stringa parola, e in una certa 405 00:16:25,550 --> 00:16:26,575 misura, la parola bool. 406 00:16:26,575 --> 00:16:29,180 Ma ci prendono in giro che, a parte quando ci immergiamo nella CS50 407 00:16:29,180 --> 00:16:30,580 apparecchio stesso. 408 00:16:30,580 --> 00:16:32,820 >> Quindi sì, ancora una domanda qui. 409 00:16:32,820 --> 00:16:36,636 PUBBLICO: Quando hai detto e poi fare buggy, come fa il 410 00:16:36,636 --> 00:16:39,980 computer a sapere [incomprensibile]? 411 00:16:39,980 --> 00:16:40,520 DAVID J. MALAN: Bella domanda. 412 00:16:40,520 --> 00:16:43,830 Quindi, quando si fanno solo correre o fare buggy1 buggy2, come 413 00:16:43,830 --> 00:16:45,220 fa sapere? 414 00:16:45,220 --> 00:16:49,900 Quindi per impostazione predefinita, se si digita make buggy1, fare per un look 415 00:16:49,900 --> 00:16:52,330 file chiamato buggy1.c. 416 00:16:52,330 --> 00:16:55,570 E poi esegue i comandi appropriati clang, 417 00:16:55,570 --> 00:17:00,380 sovrapponendosi quindi il file di output predefinito chiamato a.out. 418 00:17:00,380 --> 00:17:03,670 Infatti, se guardiamo a quello che fanno, che cosa - 419 00:17:03,670 --> 00:17:04,839 cerchiamo di uscire da questo. 420 00:17:04,839 --> 00:17:09,530 Se guardiamo a quello che fanno è stato effettivamente facendo, fare buggy2, 421 00:17:09,530 --> 00:17:10,470 è già aggiornato. 422 00:17:10,470 --> 00:17:13,020 Permettetemi quindi di rimuovere il comando rm, il 423 00:17:13,020 --> 00:17:14,319 programma che ho scritto prima. 424 00:17:14,319 --> 00:17:17,319 Digitando Y-E-S per confermare che voglio rimuoverlo. 425 00:17:17,319 --> 00:17:20,480 Se ora fanno fare, notare che in questa linea molto lunga, 426 00:17:20,480 --> 00:17:22,980 c'è questa cosa qui l'ultima volta,-o buggy2. 427 00:17:22,980 --> 00:17:26,959 Tutto marca sta facendo sta passando tale argomento, per così dire, a 428 00:17:26,959 --> 00:17:29,665 Clang, in modo che non c'è bisogno di scrivere io stesso. 429 00:17:29,665 --> 00:17:32,660 >> Va bene, quindi un paio di rapida amministrativa 430 00:17:32,660 --> 00:17:33,470 annunci. 431 00:17:33,470 --> 00:17:36,940 Così, per sezioni, che iniziò ufficialmente il prossimo 432 00:17:36,940 --> 00:17:38,970 Domenica, ti vuole sempre portare, se 433 00:17:38,970 --> 00:17:40,120 ne hai uno, un computer portatile. 434 00:17:40,120 --> 00:17:42,570 Se non si dispone di un computer portatile, non entrare in contatto con me 435 00:17:42,570 --> 00:17:43,580 cadere una email. 436 00:17:43,580 --> 00:17:44,810 E faremo capire un flusso di lavoro. 437 00:17:44,810 --> 00:17:47,100 Che in genere si trova nella sezione è che sono parte 438 00:17:47,100 --> 00:17:48,770 concettuale, parte hands-on. 439 00:17:48,770 --> 00:17:52,190 Ci specifico utilizzare la sezione di domande, una parte della 440 00:17:52,190 --> 00:17:54,110 della settimana impostato problema, a piedi attraverso alcuni dei 441 00:17:54,110 --> 00:17:55,820 materiale concettuale da lezione. 442 00:17:55,820 --> 00:17:57,480 E questo è tutto nel set problema attuale. 443 00:17:57,480 --> 00:18:00,010 E faremo anche tuffarsi in alcune attività pratiche, a volte 444 00:18:00,010 --> 00:18:02,190 dei quali sarà necessario presentare, a volte di 445 00:18:02,190 --> 00:18:02,830 che non lo faranno. 446 00:18:02,830 --> 00:18:04,630 Per esempio, questa prima settimana, sono da intendersi come un 447 00:18:04,630 --> 00:18:05,780 esercizio di riscaldamento. 448 00:18:05,780 --> 00:18:07,800 E vi accorgerete che questi problemi sono in realtà solo questo. 449 00:18:07,800 --> 00:18:10,220 Sono destinate ad essere abbastanza piccole, ma non necessariamente 450 00:18:10,220 --> 00:18:13,100 programmi banali da scrivere, che non sono necessariamente 451 00:18:13,100 --> 00:18:16,230 buone opportunità interessanti in sé e per sé, ma sono a 452 00:18:16,230 --> 00:18:19,620 pratica con la sintassi, con nuove funzioni, nel comfort di un 453 00:18:19,620 --> 00:18:21,900 sezione in cui si dispone di alcuni dei tuoi compagni di classe presenti come 454 00:18:21,900 --> 00:18:22,870 così come il vostro TF. 455 00:18:22,870 --> 00:18:26,210 >> E cosa faremo nel corso del tempo è utilizzare uno strumento chiamato CS50 Spaces, 456 00:18:26,210 --> 00:18:28,940 per cui invece di utilizzare il CS50 Appliance, avrai 457 00:18:28,940 --> 00:18:32,450 invece andare a una pagina Web in un browser, in cui sarete in grado 458 00:18:32,450 --> 00:18:35,610 scrivere il codice in una finestra del browser durante il taglio. 459 00:18:35,610 --> 00:18:38,240 E poi se si opta, il tuo compagno di insegnamento può quindi mostrare 460 00:18:38,240 --> 00:18:40,980 qualunque cosa tu stai digitando sullo schermo nel tuo browser 461 00:18:40,980 --> 00:18:43,930 finestra fino al fronte della classe, se anonima o 462 00:18:43,930 --> 00:18:47,250 pubblicamente, in modo che lui o lei può poi a piedi fino in fondo 463 00:18:47,250 --> 00:18:50,080 tuoi compagni di classe quello che hai fatto bene, quello che non ha fatto bene. 464 00:18:50,080 --> 00:18:52,750 E ancora, vi assicuriamo tutto questo può essere ben anonimi. 465 00:18:52,750 --> 00:18:54,410 Ma sarà una bella occasione per molto di più 466 00:18:54,410 --> 00:18:56,810 interattività che qualcosa di simile conferenza consente. 467 00:18:56,810 --> 00:18:58,910 >> Nel frattempo, avremo queste cose come super 468 00:18:58,910 --> 00:19:01,610 sezioni, che sono facoltativi, ma sono aperti a tutti in 469 00:19:01,610 --> 00:19:04,030 la classe, in modo che si può fare questo più collettivamente per 470 00:19:04,030 --> 00:19:05,190 impostare un problema. 471 00:19:05,190 --> 00:19:06,010 Ecco il programma. 472 00:19:06,010 --> 00:19:08,870 Questo è anche pubblicato sul sito di cs50.net. 473 00:19:08,870 --> 00:19:10,850 Si noti che ci sarà un hacker-specifica 474 00:19:10,850 --> 00:19:12,430 uno domani pomeriggio. 475 00:19:12,430 --> 00:19:15,460 E noi filmare uno oggi e uno domani e postare quelle 476 00:19:15,460 --> 00:19:16,720 on-line entro 24 ore. 477 00:19:16,720 --> 00:19:19,370 Quindi non se non si può fare qualsiasi di questi tempi, di cui preoccuparsi. 478 00:19:19,370 --> 00:19:22,720 E ancora, il programma non è in linea a cs50.net. 479 00:19:22,720 --> 00:19:25,350 >> In termini di sezionamento stesso, dovreste aver ottenuto un 480 00:19:25,350 --> 00:19:28,520 e-mail che richiede di andare alla homepage del corso per trovare 481 00:19:28,520 --> 00:19:29,610 la tua sezione. 482 00:19:29,610 --> 00:19:32,890 Se la vita è cambiata e hai bisogno di cambiare la sezione, 483 00:19:32,890 --> 00:19:33,560 non è un problema. 484 00:19:33,560 --> 00:19:37,900 Torna lo stesso URL, cs50.net/section, singolare, 485 00:19:37,900 --> 00:19:40,090 e potrai compilare il modulo simile in modo da poter 486 00:19:40,090 --> 00:19:41,260 poi ci danno le vostre preferenze. 487 00:19:41,260 --> 00:19:43,360 E noi seguirà entro la fine della settimana per quello che possiamo 488 00:19:43,360 --> 00:19:44,240 ospitare. 489 00:19:44,240 --> 00:19:49,530 La scorsa settimana, ricordiamo che abbiamo proposto con CS50 discutere, 490 00:19:49,530 --> 00:19:51,370 il corso di strumento di discussione, nella lezione. 491 00:19:51,370 --> 00:19:53,680 Così abbiamo avuto 40 domande che sono state poste e 492 00:19:53,680 --> 00:19:54,720 ha risposto durante la lezione. 493 00:19:54,720 --> 00:19:56,280 Così sembrava funzionare bene, quindi dovremo continuare 494 00:19:56,280 --> 00:19:57,180 cercando di fare questo. 495 00:19:57,180 --> 00:19:59,600 Se, durante la lezione, non ti sento tranquillo raccolta 496 00:19:59,600 --> 00:20:00,780 la tua mano, non è un problema. 497 00:20:00,780 --> 00:20:04,640 Vai a cs50.net/discuss, postare lì, e uno del nostro insegnamento 498 00:20:04,640 --> 00:20:07,270 borsisti o rispondere elettronica o aumentare la loro 499 00:20:07,270 --> 00:20:10,620 mano a vostro nome anonimo per chiedere, a seconda 500 00:20:10,620 --> 00:20:12,470 sulla natura della domanda. 501 00:20:12,470 --> 00:20:15,000 E in termini di feedback, in generale pset sarà 502 00:20:15,000 --> 00:20:16,760 restituito entro una settimana. 503 00:20:16,760 --> 00:20:19,080 Perché ci vuole un po 'di tempo per le sezioni per ottenere 504 00:20:19,080 --> 00:20:22,430 equilibrio, il primo pset, 0 e 1, sarà un po ' 505 00:20:22,430 --> 00:20:24,130 ritardato le cose stabilirsi. 506 00:20:24,130 --> 00:20:27,130 Ma rimanete sintonizzati per che nelle settimane a venire. 507 00:20:27,130 --> 00:20:29,750 >> Va bene, allora mi permetta di mettere il mio grave 508 00:20:29,750 --> 00:20:31,040 voce solo per un momento. 509 00:20:31,040 --> 00:20:32,690 Quindi questo è in realtà un clima interessante essere 510 00:20:32,690 --> 00:20:35,210 avendo questa discussione, quello con tutte le altre cose 511 00:20:35,210 --> 00:20:37,310 in corso il campus ad esso correlati. 512 00:20:37,310 --> 00:20:40,220 Ma CS50 ha certamente avuto la sua storia di questo particolare 513 00:20:40,220 --> 00:20:43,360 argomento, in quanto ogni anno, questo corso, per molti 514 00:20:43,360 --> 00:20:46,910 anni, ad-Boards circa il 3% della classe. 515 00:20:46,910 --> 00:20:51,620 Quest'anno più recente, 2011, Ad-CS50 Imbarcato 35 studenti. 516 00:20:51,620 --> 00:20:54,120 Questo non è, credo, a causa della mancanza di chiarezza. 517 00:20:54,120 --> 00:20:56,760 Rendetevi conto che nel programma del corso, c'è una pagina di 518 00:20:56,760 --> 00:20:59,020 spiegazione di dove le linee sono. 519 00:20:59,020 --> 00:21:01,350 Tale affermazione si ripete in ognuno dei 520 00:21:01,350 --> 00:21:03,070 problema pone in prima pagina. 521 00:21:03,070 --> 00:21:05,760 >> Così ho detto questo oggi davvero solo per fare 522 00:21:05,760 --> 00:21:07,030 persone ben consapevoli. 523 00:21:07,030 --> 00:21:08,080 E abbiamo provato cose diverse. 524 00:21:08,080 --> 00:21:10,630 E quello che ho pensato che avremmo oggi è solo un momento per 525 00:21:10,630 --> 00:21:13,830 effettivamente un'occhiata ad alcuni dei casi passati che hanno creato. 526 00:21:13,830 --> 00:21:16,160 Piuttosto che tenere questi segreti come piccoli sporchi, in realtà 527 00:21:16,160 --> 00:21:19,170 sottolineare ciò che gli studenti hanno fatto e come abbiamo rilevato 528 00:21:19,170 --> 00:21:21,630 e davvero quello che la motivazione generale è per 529 00:21:21,630 --> 00:21:23,950 pur avendo questa conversazione. 530 00:21:23,950 --> 00:21:27,060 Quindi, con questo detto, la linea è essenzialmente questo - 531 00:21:27,060 --> 00:21:29,200 secondo il programma, sei il benvenuto, si consiglia, a 532 00:21:29,200 --> 00:21:30,210 parlare con i compagni di classe. 533 00:21:30,210 --> 00:21:31,910 Questo è l'intero scopo di avere questi collaborativo 534 00:21:31,910 --> 00:21:34,470 orari d'ufficio in Annenberg e persone incoraggianti per il 535 00:21:34,470 --> 00:21:35,755 finale del progetto di lavorare insieme. 536 00:21:35,755 --> 00:21:38,590 Ma la linea è tracciata, quando arriva il momento di scrivere effettivamente 537 00:21:38,590 --> 00:21:39,790 la soluzione finale. 538 00:21:39,790 --> 00:21:42,590 Parlando in inglese, tutto bene, parlando in pseudo codice, 539 00:21:42,590 --> 00:21:43,400 tutto bene. 540 00:21:43,400 --> 00:21:46,340 Emailing un compagno di classe tua pset, permettendo loro di guardare oltre 541 00:21:46,340 --> 00:21:48,610 lo schermo come le mani continuare a digitare, 542 00:21:48,610 --> 00:21:50,110 sulla linea pure. 543 00:21:50,110 --> 00:21:52,250 Non guardare al programma per le linee particolari. 544 00:21:52,250 --> 00:21:55,850 >> Ma solo per dipingere un quadro di come questo è, purtroppo, un 545 00:21:55,850 --> 00:21:58,370 realtà, si rendono conto che ci sono siti web là fuori che 546 00:21:58,370 --> 00:22:01,490 disporre di soluzioni di questa classe e molte altre classi. 547 00:22:01,490 --> 00:22:04,940 Il fatto che tu o circa il 3% di voi sanno che questo esiste 548 00:22:04,940 --> 00:22:07,240 significa che noi sappiamo che esiste. 549 00:22:07,240 --> 00:22:09,340 Il fatto che ci sono siti come questo, dove si 550 00:22:09,340 --> 00:22:11,540 può pagare qualcuno per fare effettivamente le serie di problemi - questo è stato 551 00:22:11,540 --> 00:22:13,450 un caso reale che è venuto l'anno scorso. 552 00:22:13,450 --> 00:22:15,790 Si tratta di un sito web chiamato odesk.com. 553 00:22:15,790 --> 00:22:20,090 E Tim era il nome della persona che è stata qui la pubblicazione sul 554 00:22:20,090 --> 00:22:24,580 questo sito web e chiesto a qualcuno di fare il suo pset 7 555 00:22:24,580 --> 00:22:25,570 questo caso particolare. 556 00:22:25,570 --> 00:22:28,350 Beh, è ​​molto odesk.com Google-in grado, e anche noi siamo 557 00:22:28,350 --> 00:22:30,310 molto bravo a usare Google. 558 00:22:30,310 --> 00:22:32,360 Anche qui, ci sono siti - e questo è piuttosto 559 00:22:32,360 --> 00:22:34,234 atroce, francamente. 560 00:22:34,234 --> 00:22:38,050 [Risate] 561 00:22:38,050 --> 00:22:39,610 DAVID J. MALAN: La cosa divertente di questo sito è che se 562 00:22:39,610 --> 00:22:41,970 di leggere la pagina Informazioni su, che parlano della loro impresa 563 00:22:41,970 --> 00:22:44,390 cliente cultura e come servizio è il loro numero uno 564 00:22:44,390 --> 00:22:46,190 priorità, per assicurarsi che le assegnazioni ottenere 565 00:22:46,190 --> 00:22:47,890 trasformato in in tempo. 566 00:22:47,890 --> 00:22:50,580 >> Ma in tutta serietà, ancora una volta, il fatto che questi siti 567 00:22:50,580 --> 00:22:52,910 esistono, ci rendiamo conto, anche, sono consapevoli del 568 00:22:52,910 --> 00:22:53,730 questi tipi di siti. 569 00:22:53,730 --> 00:22:55,890 E per dare un senso di ciò che costituisce questo genere 570 00:22:55,890 --> 00:22:58,570 prende, noi in genere non hanno grandi scandali in cui le persone 571 00:22:58,570 --> 00:23:01,080 stanno collaborando su qualsiasi tipo di scala, ma piuttosto 572 00:23:01,080 --> 00:23:04,540 sono queste a tarda notte momenti di debolezza, in cui si hanno così 573 00:23:04,540 --> 00:23:07,550 molto da fare, e '04:00, sei esausto, e si 574 00:23:07,550 --> 00:23:09,770 pensare a te stesso, beh, vorrei solo dare un'occhiata al mio 575 00:23:09,770 --> 00:23:11,770 compagno di stanza o il codice del mio amico o simili. 576 00:23:11,770 --> 00:23:14,800 E le manifestazioni di questo, purtroppo, coinvolgono gli studenti 577 00:23:14,800 --> 00:23:17,640 Un qualcosa di presentazione come questa e B sommettersi Studente 578 00:23:17,640 --> 00:23:20,370 qualcosa di simile, che certamente, in un computer 579 00:23:20,370 --> 00:23:23,830 classe di scienze, è molto facile per gli informatici 580 00:23:23,830 --> 00:23:25,690 per rilevare con il software. 581 00:23:25,690 --> 00:23:28,410 Questo è un altro paradigma comune, dove avete una sorta di 582 00:23:28,410 --> 00:23:31,010 lavorato al fianco di qualcuno, magari parlando in 583 00:23:31,010 --> 00:23:32,360 Inglese, bene, pseudocodice. 584 00:23:32,360 --> 00:23:35,080 Ma poi arriva il momento di presentare in realtà, e le pset 585 00:23:35,080 --> 00:23:37,910 solo ottenere scambiati tramite e-mail o Dropbox o simili. 586 00:23:37,910 --> 00:23:41,120 Ma nel tentativo di rendere meno evidente che questo è 587 00:23:41,120 --> 00:23:44,830 quanto è successo, allora questo è ciò che è presentato. 588 00:23:44,830 --> 00:23:47,880 Anche questo, non inciampare ben scritti pezzi di 589 00:23:47,880 --> 00:23:50,360 software come dobbiamo rilevare effettivamente 590 00:23:50,360 --> 00:23:51,280 questo tipo di cose. 591 00:23:51,280 --> 00:23:53,760 E infatti quello che facciamo è un software che mette a confronto tutti i run di 592 00:23:53,760 --> 00:23:55,540 quest'anno osservazioni nei confronti di tutti, l'anno scorso 593 00:23:55,540 --> 00:23:57,380 osservazioni, contro tutto ciò che abbiamo trovato sulla 594 00:23:57,380 --> 00:24:00,060 Internet, contro ogni sito di posti di lavoro là fuori. 595 00:24:00,060 --> 00:24:01,710 E 'tutto molto automatizzato. 596 00:24:01,710 --> 00:24:05,665 E così lo facciamo davvero in grande correttezza il 97% che 597 00:24:05,665 --> 00:24:07,760 stanno dando buoni risultati il ​​culo fuori in questo e in altri 598 00:24:07,760 --> 00:24:11,530 classi e mettendo in tutto questo sforzo in modo che il lavoro 599 00:24:11,530 --> 00:24:13,030 in ultima analisi, è presentare loro. 600 00:24:13,030 --> 00:24:14,220 E posso andare avanti per secoli. 601 00:24:14,220 --> 00:24:16,030 >> Queste sono solo una manciata di casi dello scorso anno. 602 00:24:16,030 --> 00:24:19,350 Alcuni studenti ha presentato questi file in modo identico per pset 2, 603 00:24:19,350 --> 00:24:22,460 pset 3, pset 4, pset 5, pset 6, pset 9. 604 00:24:22,460 --> 00:24:26,360 In questo caso, questo era quiz 0 e in anno, dove due 605 00:24:26,360 --> 00:24:29,570 studenti ha presentato identico questa frase tra le tante 606 00:24:29,570 --> 00:24:32,210 gli altri, "La richiesta del tipo -" punto, punto, punto. 607 00:24:32,210 --> 00:24:34,530 Quindi, anche in una classe di 600 abbiamo rilevare questo 608 00:24:34,530 --> 00:24:36,310 presentato il quiz. 609 00:24:36,310 --> 00:24:39,080 Così, in breve, questo - francamente, io odio avere questo tipo di 610 00:24:39,080 --> 00:24:41,300 conversazione - ma questo è davvero uno sforzo deliberato 611 00:24:41,300 --> 00:24:43,540 quest'anno per cercare di ridurre tale numero. 612 00:24:43,540 --> 00:24:45,650 Perché anche se diciamo che questo tipo di cose ogni 613 00:24:45,650 --> 00:24:48,100 anno, credo che la realtà di aver soffermato su di esso per pochi 614 00:24:48,100 --> 00:24:50,800 Ancora secondi del solito e in realtà solo sottolineando 615 00:24:50,800 --> 00:24:53,600 che ciò che può sembrare, eh, non è un grosso problema, almeno 616 00:24:53,600 --> 00:24:56,390 ripensare a questo particolare momento, sia in equità di 617 00:24:56,390 --> 00:25:00,100 voi stessi e ai vostri compagni di classe qui. 618 00:25:00,100 --> 00:25:02,480 Quindi, se avete qualsiasi domanda per quanto riguarda dove la linea 619 00:25:02,480 --> 00:25:04,290 è, per favore, entrare in contatto con me personalmente. 620 00:25:04,290 --> 00:25:07,190 Ma la risposta è sempre, completamente sottolineato in 621 00:25:07,190 --> 00:25:09,090 last minute, denaro in un giorno di ritardo. 622 00:25:09,090 --> 00:25:11,080 Oppure, se si tratta di una questione di non avere giorni di ritardo, 623 00:25:11,080 --> 00:25:12,900 onestamente, mi e-mail personale. 624 00:25:12,900 --> 00:25:14,110 Ci inventeremo qualcosa. 625 00:25:14,110 --> 00:25:17,480 Si prega di non mettere il vostro tempo qui a Harvard a rischio. 626 00:25:17,480 --> 00:25:18,570 >> Ora, ho pensato che dovrebbe alleggerire l'atmosfera, così ho 627 00:25:18,570 --> 00:25:20,264 incluso questo come la diapositiva successiva. 628 00:25:20,264 --> 00:25:22,770 [Risate] 629 00:25:22,770 --> 00:25:23,630 DAVID J. MALAN: Questo sito è stato grande. 630 00:25:23,630 --> 00:25:24,820 Io in realtà sono un po 'distratto. 631 00:25:24,820 --> 00:25:26,330 C'e 'questo. 632 00:25:26,330 --> 00:25:29,590 E poi questo era incredibile. 633 00:25:29,590 --> 00:25:35,190 Ok, quindi pensare a quel gattino a tarda notte al momento della 634 00:25:35,190 --> 00:25:36,040 tali decisioni. 635 00:25:36,040 --> 00:25:40,110 Va bene, roba così torna più divertente e meno gravi, come 636 00:25:40,110 --> 00:25:40,780 condizioni. 637 00:25:40,780 --> 00:25:43,900 >> Va bene, così abbiamo parlato brevemente di questi. 638 00:25:43,900 --> 00:25:46,080 Questo è qualcosa che probabilmente è abbastanza familiare da 639 00:25:46,080 --> 00:25:47,260 il mondo di Scratch. 640 00:25:47,260 --> 00:25:49,860 E nel mondo di Scratch, abbiamo questa necessità a volte di 641 00:25:49,860 --> 00:25:51,110 vai a fare le forche in mezzo alla strada. 642 00:25:51,110 --> 00:25:54,840 O fare questo o quello o questa cosa qui. 643 00:25:54,840 --> 00:25:58,990 E quando si vuole fare questo, possiamo usare, in C ora, questo se 644 00:25:58,990 --> 00:26:00,860 else. 645 00:26:00,860 --> 00:26:06,420 E poi qui abbiamo espressioni booleane. 646 00:26:06,420 --> 00:26:09,260 Per esempio, le espressioni booleane qui, possiamo o 647 00:26:09,260 --> 00:26:12,260 insieme, nel senso che abbiamo questa condizione OR 648 00:26:12,260 --> 00:26:13,200 tale condizione. 649 00:26:13,200 --> 00:26:15,100 Possiamo e insieme, nel senso che vogliamo 650 00:26:15,100 --> 00:26:17,710 verificare questa condizione e questa condizione. 651 00:26:17,710 --> 00:26:22,440 E qui abbiamo una istruzione switch ora, che non è così 652 00:26:22,440 --> 00:26:26,040 sintatticamente simile a questo tipo di condizioni, ma 653 00:26:26,040 --> 00:26:30,160 ci permette di fare l'equivalente di if, else if, else if, else 654 00:26:30,160 --> 00:26:34,990 se, e simili mediante semplice enumerazione caso per caso 655 00:26:34,990 --> 00:26:36,670 da caso per caso. 656 00:26:36,670 --> 00:26:38,370 Così abbiamo visto quelle ultima volta. 657 00:26:38,370 --> 00:26:40,430 E poi abbiamo iniziato toccando le cose come i cicli. 658 00:26:40,430 --> 00:26:42,070 Abbiamo visto uno di questi solo un momento fa. 659 00:26:42,070 --> 00:26:44,180 Ma ci sono questi altri costrutti di loop. 660 00:26:44,180 --> 00:26:46,370 >> Per esempio, questo qui. 661 00:26:46,370 --> 00:26:50,140 Così, mentre (condizione), fare questa cosa ancora e ancora. 662 00:26:50,140 --> 00:26:53,070 Quindi, fondamentalmente, quello che sembra essere diverso tra questa 663 00:26:53,070 --> 00:26:55,760 per il ciclo e questo ciclo while qui? 664 00:27:00,810 --> 00:27:05,045 Questo per ciclo e questo ciclo while. 665 00:27:05,045 --> 00:27:07,840 Si '? 666 00:27:07,840 --> 00:27:08,800 Che cos'è? 667 00:27:08,800 --> 00:27:10,050 PUBBLICO: [incomprensibile]. 668 00:27:14,632 --> 00:27:15,120 DAVID J. MALAN: Good. 669 00:27:15,120 --> 00:27:17,130 Quindi, mentre nella condizione del ciclo di, c'è chiaramente 670 00:27:17,130 --> 00:27:17,940 più sintassi. 671 00:27:17,940 --> 00:27:20,560 C'è questa inizializzazione, c'è questo aggiornamento. 672 00:27:20,560 --> 00:27:23,820 In un ciclo while, c'è solo questa condizione. 673 00:27:23,820 --> 00:27:26,630 Così sembra che sia un po 'di rispetto verso il basso rispetto al per 674 00:27:26,630 --> 00:27:28,770 ciclo, il che significa che se vogliamo avere variabili e vogliamo 675 00:27:28,770 --> 00:27:30,800 Incremento di avere, in realtà abbiamo a 676 00:27:30,800 --> 00:27:32,500 fare questa cosa noi stessi. 677 00:27:32,500 --> 00:27:34,420 >> Permettetemi quindi di andare avanti e aprire gedit. 678 00:27:34,420 --> 00:27:36,320 Vorrei passare alla macchina. 679 00:27:36,320 --> 00:27:38,110 E facciamo solo fare un esempio piccolo e veloce che 680 00:27:38,110 --> 00:27:40,550 distingue una di queste dall'altra. 681 00:27:40,550 --> 00:27:42,490 E nella parte posteriore della mia mente qui, devo dire una cosa. 682 00:27:42,490 --> 00:27:44,120 In particolare mi ha fatto il nome Tim. 683 00:27:44,120 --> 00:27:47,740 Tim era in realtà qualcuno che uno studente ha cercato di trovare da fare 684 00:27:47,740 --> 00:27:48,680 i compiti per loro. 685 00:27:48,680 --> 00:27:51,280 Non avevamo Tim in quella particolare sezione. 686 00:27:51,280 --> 00:27:53,690 Quindi rendersi conto, perché io non rivelato uno studente, non era uno studente. 687 00:27:53,690 --> 00:27:55,720 E 'stata una persona a caso su Internet fare le cose 688 00:27:55,720 --> 00:27:57,180 per delega dello scorso anno. 689 00:27:57,180 --> 00:27:58,670 Così scopriamo che, anche. 690 00:27:58,670 --> 00:28:00,630 Quindi, in questo caso qui, lasciami andare avanti e 691 00:28:00,630 --> 00:28:02,810 aprire un nuovo file. 692 00:28:02,810 --> 00:28:04,800 File, Nuovo. 693 00:28:04,800 --> 00:28:06,050 Questo mi dà una scheda qui. 694 00:28:06,050 --> 00:28:09,940 Lasciatemi andare avanti e salvarlo come loop.c. 695 00:28:09,940 --> 00:28:11,810 Lasciami andare e fare clic su Salva. 696 00:28:11,810 --> 00:28:15,340 E poi qui, andiamo avanti e iniziare a scrivere 697 00:28:15,340 --> 00:28:16,605 # Include. 698 00:28:19,116 --> 00:28:20,520 Fammi Immagine 699 00:28:20,520 --> 00:28:23,410 Ora faremo int main (void). 700 00:28:23,410 --> 00:28:30,020 Ora lasciami andare avanti e fare for (int i = 0; i < 701 00:28:30,020 --> 00:28:33,480 oh, 10, i + +). 702 00:28:33,480 --> 00:28:36,620 E adesso ho intenzione di andare avanti e fare stampare la stella che mi 703 00:28:36,620 --> 00:28:37,890 fatto in precedenza. 704 00:28:37,890 --> 00:28:39,390 E poi alla fine di questo programma, stiamo solo andando a 705 00:28:39,390 --> 00:28:41,130 stampare una nuova linea, così che la mia richiesta 706 00:28:41,130 --> 00:28:42,470 non guardare tutto disordinato. 707 00:28:42,470 --> 00:28:45,170 restituire 0. 708 00:28:45,170 --> 00:28:47,610 Sembra sintatticamente corretto? 709 00:28:47,610 --> 00:28:48,040 Fino ad ora. 710 00:28:48,040 --> 00:28:48,560 Quindi cerchiamo di vedere. 711 00:28:48,560 --> 00:28:51,290 >> Permettetemi quindi di eseguire lo zoom indietro, andate nella mia finestra di terminale. 712 00:28:51,290 --> 00:28:54,570 E lasciatemi andare avanti ed eseguire loop, perché ho chiamato questo 713 00:28:54,570 --> 00:28:55,690 cosa loop.c. 714 00:28:55,690 --> 00:28:56,780 Quindi, fare loop. 715 00:28:56,780 --> 00:28:57,840 Sembra compilare OK. 716 00:28:57,840 --> 00:29:00,210 Vorrei correre ad anello, e ora Invio. 717 00:29:00,210 --> 00:29:01,820 E sembra aver stampato 10 stelle. 718 00:29:01,820 --> 00:29:03,780 Così facciamo solo convertire ad un ciclo while e vedere che cosa 719 00:29:03,780 --> 00:29:05,220 i tipi di problemi che inciampare. 720 00:29:05,220 --> 00:29:11,290 Così, invece di questo, lasciami andare qui e dire quando i è 721 00:29:11,290 --> 00:29:12,760 inferiore a 10 - 722 00:29:12,760 --> 00:29:14,910 mi permetta di ottenere liberarsi del ciclo for. 723 00:29:14,910 --> 00:29:17,170 OK, quindi abbiamo un paio di problemi già. 724 00:29:17,170 --> 00:29:21,110 Quindi la condizione è la stessa, ma mi manca, ovviamente, la 725 00:29:21,110 --> 00:29:21,680 inizializzazione. 726 00:29:21,680 --> 00:29:23,840 Mi manca l'Incremento. 727 00:29:23,840 --> 00:29:28,020 Che cosa si deve probabilmente il compilatore mi dice quando cerco di 728 00:29:28,020 --> 00:29:29,170 compilare questo programma? 729 00:29:29,170 --> 00:29:29,666 Si '? 730 00:29:29,666 --> 00:29:31,154 PUBBLICO: [incomprensibile]. 731 00:29:31,154 --> 00:29:31,650 >> DAVID J. MALAN: Good. 732 00:29:31,650 --> 00:29:34,180 Quindi sta per dire una cosa del genere non dichiarato - in questo 733 00:29:34,180 --> 00:29:35,280 caso, variabile i. 734 00:29:35,280 --> 00:29:37,980 E in effetti, l'uso di identificatore non dichiarato i. 735 00:29:37,980 --> 00:29:40,960 E così questo è in contrasto con linguaggi come PHP e 736 00:29:40,960 --> 00:29:43,120 Python e Ruby, con la quale alcuni di voi potrebbero avere familiarità, 737 00:29:43,120 --> 00:29:44,820 dove si può solo tipo di avvio utilizzando variabili 738 00:29:44,820 --> 00:29:47,420 volenti o nolenti e non devono preoccuparsi di dichiararle 739 00:29:47,420 --> 00:29:48,560 sempre in modo esplicito. 740 00:29:48,560 --> 00:29:51,770 In C e in linguaggi come Java e C + +, devi essere 741 00:29:51,770 --> 00:29:53,020 Super esplicito. 742 00:29:53,020 --> 00:29:55,760 E se volete una variabile chiamata i, devi dirmi 743 00:29:55,760 --> 00:29:57,360 che tipo di variabile è. 744 00:29:57,360 --> 00:29:59,360 Quindi stiamo andando ad avere per risolvere il problema nel modo seguente. 745 00:29:59,360 --> 00:30:05,510 Ho intenzione di andare qui e digitare int i, quindi, 746 00:30:05,510 --> 00:30:07,860 Ho dichiarato una variabile denominata i. 747 00:30:07,860 --> 00:30:09,180 Ora, ho saltato un passo. 748 00:30:09,180 --> 00:30:11,340 Ho, ovviamente, non è inizializzata, ma vediamo se che a 749 00:30:11,340 --> 00:30:13,650 almeno Clang marche smettere di lamentarsi. 750 00:30:13,650 --> 00:30:15,770 Quindi fammi rifare questo programma. 751 00:30:15,770 --> 00:30:16,770 >> Va bene, ora è solo lamentarsi 752 00:30:16,770 --> 00:30:17,870 per un motivo diverso. 753 00:30:17,870 --> 00:30:21,130 "La variabile 'i' viene inizializzato quando viene utilizzato qui." Va bene, allora 754 00:30:21,130 --> 00:30:22,340 che è abbastanza esplicito. 755 00:30:22,340 --> 00:30:25,510 Inizializzato significa semplicemente impostandolo uguale a un valore. 756 00:30:25,510 --> 00:30:30,820 E non abbiamo fatto, per cui vorrei provare è uguale a 0. 757 00:30:30,820 --> 00:30:35,030 Ora proviamo di nuovo e ri-eseguire Clang. 758 00:30:35,030 --> 00:30:36,140 Compilato questa volta. 759 00:30:36,140 --> 00:30:37,210 E sto per eseguirlo. 760 00:30:37,210 --> 00:30:43,120 Ma grande vecchio ciclo infinito, perché ho fatto la 761 00:30:43,120 --> 00:30:45,530 inizializzazione, ho fatto la condizione, ma non ho mai fatto 762 00:30:45,530 --> 00:30:47,030 qualsiasi tipo di Incremento. 763 00:30:47,030 --> 00:30:48,780 Allora, come posso fare il Incremento? 764 00:30:48,780 --> 00:30:51,170 Be ', in un ciclo while, ci si sente come ho intenzione di avere 765 00:30:51,170 --> 00:30:54,180 farlo all'interno del loop, perché molto simile al primo 766 00:30:54,180 --> 00:30:56,570 settimana facendo esempi di costrutti iterativi, come con 767 00:30:56,570 --> 00:30:59,040 le calze e con l'auto-conteggio, abbiamo dovuto fare 768 00:30:59,040 --> 00:31:01,550 qualcosa che alla fine, come tornare alla riga successiva. 769 00:31:01,550 --> 00:31:05,040 Cosa succede se andare avanti e fare questo i + + qui? 770 00:31:05,040 --> 00:31:06,030 Non dobbiamo nemmeno compilare questo. 771 00:31:06,030 --> 00:31:06,890 Catch me già. 772 00:31:06,890 --> 00:31:09,704 Cosa c'è di sbagliato? 773 00:31:09,704 --> 00:31:10,690 PUBBLICO: [incomprensibile]. 774 00:31:10,690 --> 00:31:11,770 >> DAVID J. MALAN: Quindi sicuramente non int. 775 00:31:11,770 --> 00:31:13,080 Sono io. 776 00:31:13,080 --> 00:31:15,110 E le parentesi graffe, come prima, 777 00:31:15,110 --> 00:31:16,800 rientro non è sufficiente. 778 00:31:16,800 --> 00:31:18,410 Così ora ho questo costrutto. 779 00:31:18,410 --> 00:31:21,780 Così, mentre i è inferiore a 10, stampare una stella, 780 00:31:21,780 --> 00:31:23,220 poi ho incrementare. 781 00:31:23,220 --> 00:31:25,680 E il modo in cui un po 'di opere ciclo è che non appena si preme il 782 00:31:25,680 --> 00:31:29,630 inferiore del ciclo, che in questo caso si presenta come linea 10, 783 00:31:29,630 --> 00:31:32,880 che sta per tornare in linea 6, a questo punto il 784 00:31:32,880 --> 00:31:34,400 condizione sarà verificato ancora. 785 00:31:34,400 --> 00:31:37,500 E se i è ancora inferiore a 10, faremo le linee 8 e 786 00:31:37,500 --> 00:31:41,250 poi 9, poi ci ha colpito 10, e tornare a 6, ancora una volta e 787 00:31:41,250 --> 00:31:45,580 ancora e ancora e ancora, finché i è inferiore a 10. 788 00:31:45,580 --> 00:31:47,860 Quindi cerchiamo di ri-eseguire make qui. 789 00:31:47,860 --> 00:31:48,940 >> Ok, abbiamo compilato bene. 790 00:31:48,940 --> 00:31:50,300 Permettetemi di re-run loop. 791 00:31:50,300 --> 00:31:52,620 E ora sembra effettivamente funzionare. 792 00:31:52,620 --> 00:31:55,100 Quindi, vantaggi e svantaggi qui? 793 00:31:55,100 --> 00:31:58,910 Beh, finora non c'è in realtà un insieme di plo - 794 00:31:58,910 --> 00:31:59,420 così carino. 795 00:31:59,420 --> 00:32:01,870 Va bene, che era un - ah, che è stato un incidente. 796 00:32:01,870 --> 00:32:05,200 Va bene, torniamo al ciclo for. 797 00:32:05,200 --> 00:32:07,530 Così, per cicli sono belli perché sono super esplicito. 798 00:32:07,530 --> 00:32:09,720 E anche se sono un po 'goffo di scrivere, è 799 00:32:09,720 --> 00:32:11,500 molto potente e ti permette di fare 800 00:32:11,500 --> 00:32:12,980 cose contemporaneamente. 801 00:32:12,980 --> 00:32:16,240 Mentre loop non sembrano avere una quantità enorme di giusto valore 802 00:32:16,240 --> 00:32:18,500 ancora, perché ci si sente come ci resta che lavorare di più. 803 00:32:18,500 --> 00:32:20,670 Dobbiamo mettere l'inizializzazione qui, il 804 00:32:20,670 --> 00:32:23,480 aggiornare qui, e dobbiamo ricordare di fare tutto questo. 805 00:32:23,480 --> 00:32:26,260 Così vedremo nel tempo che i cicli, mentre in realtà prestano 806 00:32:26,260 --> 00:32:29,380 si a solo diversi contesti, diversi dati 807 00:32:29,380 --> 00:32:33,900 strutture come liste e tabelle hash, le cose ci arriveremo 808 00:32:33,900 --> 00:32:34,970 di metà semestre. 809 00:32:34,970 --> 00:32:37,900 Ma per ora, so che c'è questo terzo tipo conosciuto come un do- 810 00:32:37,900 --> 00:32:38,480 ciclo while. 811 00:32:38,480 --> 00:32:39,540 E abbiamo visto brevemente. 812 00:32:39,540 --> 00:32:41,830 E questo potrebbe essere utile super con pset 1. 813 00:32:41,830 --> 00:32:45,570 Ogni volta che si vuole fare qualcosa e poi verificare se 814 00:32:45,570 --> 00:32:48,940 l'utente ha collaborato, e se non l'hanno fatto, di nuovo, un do- 815 00:32:48,940 --> 00:32:51,460 ciclo while si presta a questo tipo di logica. 816 00:32:51,460 --> 00:32:55,640 Poiché l'ordine da cima a fondo qui suggerisce, 817 00:32:55,640 --> 00:32:57,750 non significa letteralmente fare questo. 818 00:32:57,750 --> 00:32:59,830 E farlo ancora e ancora, cosa potrebbe essere? 819 00:32:59,830 --> 00:33:03,000 Forse significa GetInt chiamando o GetString e poi 820 00:33:03,000 --> 00:33:05,830 controllando il valore della GetInt o GetString e poi urla 821 00:33:05,830 --> 00:33:08,260 presso l'utente, se non hanno cooperato, chiedendo loro 822 00:33:08,260 --> 00:33:10,100 ancora e ancora e ancora. 823 00:33:10,100 --> 00:33:11,730 Dove si vuole fare qualcosa una volta, 824 00:33:11,730 --> 00:33:13,210 quindi controllare alcune condizioni. 825 00:33:13,210 --> 00:33:14,110 >> Quindi cerchiamo di provare questo. 826 00:33:14,110 --> 00:33:17,130 Vorrei cambiare questa realtà ora a un ciclo do-while. 827 00:33:17,130 --> 00:33:18,830 E ho intenzione di andare avanti e procedere nel modo seguente. 828 00:33:18,830 --> 00:33:21,830 Quindi, effettuare le seguenti operazioni. 829 00:33:21,830 --> 00:33:26,870 Facciamo int i = GetInt (), ma si deve prima informare l'utente 830 00:33:26,870 --> 00:33:27,410 cosa fare. 831 00:33:27,410 --> 00:33:29,050 Quindi, un po 'diverso questa volta. 832 00:33:29,050 --> 00:33:31,270 "Dammi un int". 833 00:33:31,270 --> 00:33:32,910 Quindi userò printf per questo. 834 00:33:32,910 --> 00:33:35,740 E adesso ho intenzione di andare qui, e ho intenzione di fare questo 835 00:33:35,740 --> 00:33:41,520 mentre i è, diciamo, più grande di - 836 00:33:41,520 --> 00:33:47,540 vediamo, i è, diciamo, inferiore a 0, o i è 837 00:33:47,540 --> 00:33:48,730 maggiore di 10. 838 00:33:48,730 --> 00:33:51,810 In altre parole, voglio un numero da 1 a 9, basta 839 00:33:51,810 --> 00:33:52,720 arbitrariamente. 840 00:33:52,720 --> 00:33:55,290 Quindi sto usando una espressione booleana combinato qui per 841 00:33:55,290 --> 00:33:59,930 assicurarsi che i è minore di 0 o maggiore di 10, in cui 842 00:33:59,930 --> 00:34:02,530 caso farò questo ciclo di nuovo qui. 843 00:34:02,530 --> 00:34:04,400 Quindi, di nuovo, fare questo - 844 00:34:04,400 --> 00:34:08,480 quando i è minore di 0 o i è maggiore di 10. 845 00:34:08,480 --> 00:34:11,440 >> Così ora andiamo avanti e fare una volta che abbiamo fatto. 846 00:34:11,440 --> 00:34:13,270 Diciamo solo fare un rapido controllo sanità mentale. 847 00:34:13,270 --> 00:34:18,929 printf ("Grazie, i è% d", i). 848 00:34:18,929 --> 00:34:21,350 Quindi questo semplice programma chiede all'utente di un int, 849 00:34:21,350 --> 00:34:24,000 fa in modo che sia all'interno di alcuni range da 1 a 9, 850 00:34:24,000 --> 00:34:26,280 e poi ringrazia l'utente, ricordando loro quello che hanno appena 851 00:34:26,280 --> 00:34:27,940 digitato, così come un controllo di integrità po '. 852 00:34:27,940 --> 00:34:30,659 Ma vediamo se questo funziona come previsto. 853 00:34:30,659 --> 00:34:34,533 Lasciami andare a testa in giù qui e ri-eseguire make loop. 854 00:34:34,533 --> 00:34:35,350 Hmm. 855 00:34:35,350 --> 00:34:38,600 "L'uso di identificatore non dichiarato 'i'". Che strano. 856 00:34:38,600 --> 00:34:41,509 Pensavo che deliberato che. 857 00:34:45,489 --> 00:34:47,560 Stesso sintomo ma codice diverso. 858 00:34:47,560 --> 00:34:47,899 Si '? 859 00:34:47,899 --> 00:34:50,191 PUBBLICO: [incomprensibile] all'interno dei due, dobbiamo 860 00:34:50,191 --> 00:34:52,639 [Incomprensibile]. 861 00:34:52,639 --> 00:34:53,260 >> DAVID J. MALAN: Esattamente. 862 00:34:53,260 --> 00:34:55,989 Quindi questo in realtà ci porta ad un argomento noto come campo di applicazione. 863 00:34:55,989 --> 00:34:59,350 Si scopre che C, ancora una volta, ci vuole davvero alla lettera. 864 00:34:59,350 --> 00:35:02,970 E se si fa qualcosa come questo, dove si dichiara un int 865 00:35:02,970 --> 00:35:06,120 e poi assegnare un valore, ma si che all'interno di un 866 00:35:06,120 --> 00:35:09,840 coppia di parentesi graffe, che C non fa altro che presuppone che si 867 00:35:09,840 --> 00:35:14,800 vogliono solo i 32 bit noti come i per esistere all'interno della 868 00:35:14,800 --> 00:35:18,200 nell'ambito di tali parentesi graffe, nel contesto delle linee di 869 00:35:18,200 --> 00:35:22,420 Da 6 a 9. Così i è dichiarata, e gli viene assegnato un 870 00:35:22,420 --> 00:35:26,530 valore in linea 8, ma non appena si arriva al di fuori di 871 00:35:26,530 --> 00:35:30,270 linea 9 sotto la parentesi graffa, i non è più in 872 00:35:30,270 --> 00:35:31,910 campo di applicazione, per così dire. 873 00:35:31,910 --> 00:35:35,030 S-C-O-P-E. Non è più nel giusto contesto. 874 00:35:35,030 --> 00:35:37,940 Così ora non ci sono i, quindi è come se non avesse nemmeno 875 00:35:37,940 --> 00:35:38,770 dichiarato affatto. 876 00:35:38,770 --> 00:35:41,520 >> Così che cosa è una soluzione allora per una cosa del genere, se il 877 00:35:41,520 --> 00:35:44,300 ragione è che i è dichiarata all'interno delle parentesi graffe, che 878 00:35:44,300 --> 00:35:45,120 è apparentemente male? 879 00:35:45,120 --> 00:35:45,410 Qui? 880 00:35:45,410 --> 00:35:46,820 PUBBLICO: [incomprensibile]. 881 00:35:46,820 --> 00:35:47,150 DAVID J. MALAN: Già. 882 00:35:47,150 --> 00:35:48,710 Così possiamo inizializzarlo fuori. 883 00:35:48,710 --> 00:35:53,530 Permettetemi quindi di andare avanti ed eliminare le parti dichiarazione con la quale 884 00:35:53,530 --> 00:35:55,820 A specificare il tipo, e lasciate fare a me qui. 885 00:35:55,820 --> 00:36:00,220 Quindi, in linea 5, che ora dice: "Dammi un int." Chiamatela i. 886 00:36:00,220 --> 00:36:03,400 Si noti che in linea 9, non voglio farlo, perché io 887 00:36:03,400 --> 00:36:04,830 già i 32 bit. 888 00:36:04,830 --> 00:36:06,140 Non voglio chiedere al computer per un 889 00:36:06,140 --> 00:36:07,630 diversi bit 32. 890 00:36:07,630 --> 00:36:09,850 Voglio usare quegli stessi 32 bit. 891 00:36:09,850 --> 00:36:13,190 E adesso perché mi è dichiarato nella riga 5, è ancora legit 892 00:36:13,190 --> 00:36:16,550 utilizzare in linea 11 e la linea 12. 893 00:36:16,550 --> 00:36:19,310 >> Quindi vorrei provare a ricompilare questo e vedere 894 00:36:19,310 --> 00:36:20,490 se smette di urlare Clang. 895 00:36:20,490 --> 00:36:22,380 fare loop. 896 00:36:22,380 --> 00:36:25,470 Così ora è "dichiarazione implicita di funzione 897 00:36:25,470 --> 00:36:29,880 'GetInt' non è valido in C99. "Che cosa è questo? 898 00:36:29,880 --> 00:36:30,400 Si '? 899 00:36:30,400 --> 00:36:32,330 PUBBLICO: [incomprensibile]. 900 00:36:32,330 --> 00:36:32,690 DAVID J. MALAN: Già. 901 00:36:32,690 --> 00:36:35,520 Quindi, ora che sto effettivamente utilizzando GetInt, questo non è qualcosa 902 00:36:35,520 --> 00:36:38,190 che viene fornito solo con C. Questo viene da CS50. 903 00:36:38,190 --> 00:36:39,890 Quindi abbiamo bisogno di questo qui. 904 00:36:39,890 --> 00:36:41,450 E lasciami tornare al prompt di giù 905 00:36:41,450 --> 00:36:43,500 qui e rieseguire fare. 906 00:36:43,500 --> 00:36:44,160 Ok, finalmente. 907 00:36:44,160 --> 00:36:46,270 Ora abbiamo risolto questo e l'altro errore. 908 00:36:46,270 --> 00:36:48,930 Permettetemi ora di correre ad anello e vedere cosa succede. 909 00:36:48,930 --> 00:36:51,740 "Dammi un int." Darò 11. 910 00:36:51,740 --> 00:36:53,100 Darò -1. 911 00:36:53,100 --> 00:36:54,470 Darò foo. 912 00:36:54,470 --> 00:36:56,080 Darò 5. 913 00:36:56,080 --> 00:36:57,450 E ora funziona davvero. 914 00:36:57,450 --> 00:36:59,410 Ma la richiesta cambiato per un motivo qui. 915 00:36:59,410 --> 00:37:02,800 Perché dire ripetere una di queste volte, ma mi danno un 916 00:37:02,800 --> 00:37:03,920 int le altre tre volte? 917 00:37:03,920 --> 00:37:05,500 Perché è che il comportamento diverso? 918 00:37:05,500 --> 00:37:06,980 PUBBLICO: Ha dato una stringa. 919 00:37:06,980 --> 00:37:07,830 DAVID J. MALAN: Scusa? 920 00:37:07,830 --> 00:37:08,570 PUBBLICO: Hai dato una stringa. 921 00:37:08,570 --> 00:37:08,990 DAVID J. MALAN: Già. 922 00:37:08,990 --> 00:37:11,450 Così abbiamo dato una stringa in questo terzo tentativo, 923 00:37:11,450 --> 00:37:12,490 quando ho scritto foo. 924 00:37:12,490 --> 00:37:13,200 Foo è una stringa. 925 00:37:13,200 --> 00:37:14,340 Non è ovviamente un int. 926 00:37:14,340 --> 00:37:17,500 E il modo in cui ha implementato GetInt CS50 è che noi 927 00:37:17,500 --> 00:37:20,330 non controllare se qualcosa è minore di 0 o maggiore di 10 928 00:37:20,330 --> 00:37:22,260 per voi, perché come si fa a sapere in anticipo che tipo di 929 00:37:22,260 --> 00:37:23,130 int vuoi? 930 00:37:23,130 --> 00:37:25,880 Ma possiamo minimamente controllare per voi, l'utente ha almeno 931 00:37:25,880 --> 00:37:26,730 digitare un numero intero? 932 00:37:26,730 --> 00:37:30,500 E se non lo facessero, gridiamo a l'utente digitando "retry" su 933 00:37:30,500 --> 00:37:31,440 lo schermo. 934 00:37:31,440 --> 00:37:34,210 >> Così ora abbiamo un programma che è il ciclo. Va bene. 935 00:37:34,210 --> 00:37:37,070 Ora, quale di questi è una sorta di costrutto migliore? 936 00:37:37,070 --> 00:37:39,060 Quindi questo è dove le cose cominciano a farsi un po 'disordinato, il 937 00:37:39,060 --> 00:37:42,360 fatto che si deve ricordare di dichiarare una variabile qui 938 00:37:42,360 --> 00:37:44,630 se si desidera utilizzare all'interno di alcune 939 00:37:44,630 --> 00:37:46,460 parentesi graffe e al di fuori. 940 00:37:46,460 --> 00:37:48,490 Ma anche se questo sembra un po 'criptico in un primo momento 941 00:37:48,490 --> 00:37:50,750 colpo d'occhio, solo ancora una volta, ricordare la semplice logica. 942 00:37:50,750 --> 00:37:54,630 Per poter utilizzare qualsiasi cosa in C, che si tratti di una funzione o 943 00:37:54,630 --> 00:37:57,680 si tratta di una variabile, è necessario includere, se si tratta di una funzione di 944 00:37:57,680 --> 00:37:59,770 in qualche biblioteca, o avete bisogno di dichiararla. 945 00:37:59,770 --> 00:38:02,405 Ma ora è necessario prestare attenzione in più del fatto che 946 00:38:02,405 --> 00:38:04,940 si sta dichiarando nel campo a destra. 947 00:38:04,940 --> 00:38:08,150 Non lo stai mettendo troppo stretto all'interno delle parentesi. 948 00:38:08,150 --> 00:38:09,410 >> Quindi lasciate che effettivamente il rollback. 949 00:38:09,410 --> 00:38:12,660 Se torniamo al nostro esempio di prima, e me ne vado 950 00:38:12,660 --> 00:38:19,245 per tornare a int, int i = 0; i <10, i + +, e io 951 00:38:19,245 --> 00:38:26,370 do stelle printf, come questo, e poi paren vicino, e ora 952 00:38:26,370 --> 00:38:30,410 printf i è ora - 953 00:38:30,410 --> 00:38:33,500 secondo la stessa logica, che cosa accadrà quando si tenta di 954 00:38:33,500 --> 00:38:35,500 compilare questo programma? 955 00:38:35,500 --> 00:38:36,790 PUBBLICO: identificatore non valido. 956 00:38:36,790 --> 00:38:38,560 DAVID J. MALAN: Quindi è un altro identificatore valido, 957 00:38:38,560 --> 00:38:39,470 identificatore non dichiarato. 958 00:38:39,470 --> 00:38:41,810 Ora, la ragione è un po 'diverso. 959 00:38:41,810 --> 00:38:44,370 Non c'è ovviamente nessuna parentesi graffa qui, ma lo stesso 960 00:38:44,370 --> 00:38:46,790 idea, la stessa storia del campo di applicazione si applica. 961 00:38:46,790 --> 00:38:50,340 Se sono state dichiarate una variabile come i all'interno di una 962 00:38:50,340 --> 00:38:53,960 per il ciclo, anche se non esplicitamente scritto il riccio 963 00:38:53,960 --> 00:38:56,980 bretelle, pensare a loro mentalmente ancora essere lì, in cui 964 00:38:56,980 --> 00:39:00,310 caso i è valida solo all'interno del ciclo for. 965 00:39:00,310 --> 00:39:03,080 Non è valida una volta arrivati ​​alla riga successiva, che in 966 00:39:03,080 --> 00:39:05,090 questo caso è ora 10. 967 00:39:05,090 --> 00:39:09,060 Quindi, solo alcune questioni di portata e simili. 968 00:39:09,060 --> 00:39:12,620 Va bene, qualche domanda? 969 00:39:12,620 --> 00:39:15,310 >> Va bene, quindi questo è una specie di piccolo programma banale, 970 00:39:15,310 --> 00:39:17,450 stampa solo piccole stelle. 971 00:39:17,450 --> 00:39:20,400 Ma vediamo se vi ricordate questa canzone qui. 972 00:39:20,400 --> 00:39:22,530 Questa è una canzone incredibilmente fastidioso i bambini cantavano su 973 00:39:22,530 --> 00:39:23,550 lo scuolabus e simili. 974 00:39:23,550 --> 00:39:25,990 Ma cosa bella è che ha questa ciclicità, 975 00:39:25,990 --> 00:39:27,910 per cui si tratta di "99 bottiglie di birra sul muro, 976 00:39:27,910 --> 00:39:28,520 99 bottiglie di birra. 977 00:39:28,520 --> 00:39:31,030 Prendete una, passala intorno, 98 bottiglie di birra sul 978 00:39:31,030 --> 00:39:34,330 muro. "E poi la canzone ripete il 97, poi 96, poi 979 00:39:34,330 --> 00:39:38,040 95, poi 94, tutta la strada fino a 0 se effettivamente ottenuto che 980 00:39:38,040 --> 00:39:38,920 molto sul bus. 981 00:39:38,920 --> 00:39:41,960 Quindi questo è un bel programma per ordinare di attrezzo, perché il mio 982 00:39:41,960 --> 00:39:43,650 Dio, se si può solo perseguire questo obiettivo con pochi 983 00:39:43,650 --> 00:39:46,660 righe di codice, è possibile sputare il testo intero del presente 984 00:39:46,660 --> 00:39:48,240 canzone abbastanza rapidamente. 985 00:39:48,240 --> 00:39:50,420 Ma lungo la strada, possiamo cominciare a prendere in giro ora a parte un po 'di 986 00:39:50,420 --> 00:39:52,460 di questi costrutti di base di loop e ora anche 987 00:39:52,460 --> 00:39:55,830 introdurre funzioni che noi stessi scrivere, restituire valori 988 00:39:55,830 --> 00:39:57,020 che si passa in giro. 989 00:39:57,020 --> 00:39:58,910 Ma in primo luogo, perché non andare avanti e prendere il nostro cinque minuti 990 00:39:58,910 --> 00:39:59,320 rompere qui? 991 00:39:59,320 --> 00:40:01,480 E quando torniamo, noi cantare questa canzone. 992 00:40:05,680 --> 00:40:08,760 >> Va bene, allora siamo tornati. 993 00:40:08,760 --> 00:40:11,850 E quando dico noi ora cantare questa canzone, voglio dire 994 00:40:11,850 --> 00:40:13,250 livello di programmazione, non verbalmente. 995 00:40:13,250 --> 00:40:19,370 Quindi qui abbiamo beer1.c, che è una implementazione di questo 996 00:40:19,370 --> 00:40:20,580 particolare canzone. 997 00:40:20,580 --> 00:40:23,110 E tanto per essere chiari, per chi non conosce quello che 998 00:40:23,110 --> 00:40:24,460 questa cosa assomiglia, lasciami andare avanti 999 00:40:24,460 --> 00:40:27,070 e fare beer1, Invio. 1000 00:40:27,070 --> 00:40:30,400 Ora vorrei correre beer1, e quello che vedremo - quante bottiglie 1001 00:40:30,400 --> 00:40:31,140 di birra ci saranno? 1002 00:40:31,140 --> 00:40:33,240 Io digitare 99, come dice la canzone. 1003 00:40:33,240 --> 00:40:34,040 Invio. 1004 00:40:34,040 --> 00:40:35,650 E ora se noi scorrere - 1005 00:40:35,650 --> 00:40:38,280 oops - se scorrere tutto questo, vedremo che 1006 00:40:38,280 --> 00:40:41,350 questo ha effettivamente cantare tutta la canzone. 1007 00:40:44,050 --> 00:40:44,540 Aspetta un attimo. 1008 00:40:44,540 --> 00:40:46,240 La mia barra di scorrimento è un po 'incasinato. 1009 00:40:46,240 --> 00:40:47,940 Usiamo la finestra più grande. 1010 00:40:47,940 --> 00:40:53,500 Così beer1, 99, ci siamo. 1011 00:40:53,500 --> 00:40:56,420 Ecco quindi l'intero brano, cantato molto più velocemente dal 1012 00:40:56,420 --> 00:40:58,450 computer che avrebbe potuto essere da noi. 1013 00:40:58,450 --> 00:41:00,340 Quindi notare, però, la natura ciclica qui. 1014 00:41:00,340 --> 00:41:03,380 Si dice 99, poi 99, poi "prendere uno giù, passare 1015 00:41:03,380 --> 00:41:04,740 intorno ", quindi 98. 1016 00:41:04,740 --> 00:41:06,640 E ora lo ripete ancora e ancora. 1017 00:41:06,640 --> 00:41:08,840 >> Quindi, questo è in realtà una perfetta opportunità per un qualche tipo di 1018 00:41:08,840 --> 00:41:10,400 looping costruire. 1019 00:41:10,400 --> 00:41:12,950 Si noti che io sono una specie di taglio di un angolo qui. 1020 00:41:12,950 --> 00:41:15,960 Si noti che sto dicendo "98 bottiglie di birra sul muro, 1021 00:41:15,960 --> 00:41:19,010 97 bottiglie di birra sul muro, "e che era proprio così 1022 00:41:19,010 --> 00:41:21,640 che quando si arriva a uno bottiglie di birra, non ho 1023 00:41:21,640 --> 00:41:23,300 preoccuparsi della grammatica inglese. 1024 00:41:23,300 --> 00:41:25,790 Ma possiamo anche risolvere questo problema con un po 'di se 1025 00:41:25,790 --> 00:41:26,910 condizione, forse. 1026 00:41:26,910 --> 00:41:30,110 Se questo numero è singolare, andare avanti e dire "bottiglia", 1027 00:41:30,110 --> 00:41:31,840 altrimenti se è plurale, ad esempio "bottiglie". 1028 00:41:31,840 --> 00:41:34,150 Ma per ora, sto tagliando completamente l'angolo. 1029 00:41:34,150 --> 00:41:35,520 Quindi cerchiamo di vedere quello che abbiamo qui. 1030 00:41:35,520 --> 00:41:37,150 Così abbiamo alcuni commenti in alto. 1031 00:41:37,150 --> 00:41:39,450 Sono compresi questi due biblioteche, come 1032 00:41:39,450 --> 00:41:41,140 siamo stati comunemente. 1033 00:41:41,140 --> 00:41:43,610 E ora lasciami scorrere fino alla prima 1034 00:41:43,610 --> 00:41:44,990 attuali linee di codice. 1035 00:41:44,990 --> 00:41:47,020 Linea 17 prende il via principale. 1036 00:41:47,020 --> 00:41:50,610 Linea 21 e 20 è il numero di bottiglie di birra ci saranno? 1037 00:41:50,610 --> 00:41:52,060 E poi io chiamo GetInt. 1038 00:41:52,060 --> 00:41:53,800 E ora ho un po 'di un controllo di integrità. 1039 00:41:53,800 --> 00:41:57,030 >> Quindi questa è una convenzione che faremo ora iniziare l'adozione di 1040 00:41:57,030 --> 00:41:59,620 più rigoroso verificare l'input dell'utente. 1041 00:41:59,620 --> 00:42:01,710 A volte proprio non si desidera richiedere di nuovo 1042 00:42:01,710 --> 00:42:02,630 e ancora e ancora. 1043 00:42:02,630 --> 00:42:05,620 Se l'utente viti e non collabora, bene. 1044 00:42:05,620 --> 00:42:07,430 Chiudere e semplicemente non trattare con loro. 1045 00:42:07,430 --> 00:42:08,990 E quindi questo è quello che sto facendo qui. 1046 00:42:08,990 --> 00:42:12,520 Se n è minore di 1, sto solo andando a gridare l'utente, 1047 00:42:12,520 --> 00:42:14,330 "Mi dispiace, che non ha senso." E poi ho intenzione di 1048 00:42:14,330 --> 00:42:16,650 arbitrariamente restituire 1. 1049 00:42:16,650 --> 00:42:18,550 Quindi, di nuovo, questo è solo una convenzione per abituarsi. 1050 00:42:18,550 --> 00:42:19,850 Per il momento, fidatevi. 1051 00:42:19,850 --> 00:42:22,700 Ma fino ad ora, abbiamo sempre restituendo 0, perché 1052 00:42:22,700 --> 00:42:25,204 abbiamo detto restituendo 0 indica che cosa? 1053 00:42:25,204 --> 00:42:26,000 PUBBLICO: il successo. 1054 00:42:26,000 --> 00:42:27,320 DAVID J. MALAN: Successo, questo è tutto. 1055 00:42:27,320 --> 00:42:29,740 Quindi, ora che stiamo finalmente iniziando a pensare 1056 00:42:29,740 --> 00:42:31,330 non successi - 1057 00:42:31,330 --> 00:42:33,760 in altre parole, casi angolo, condizioni di errore - 1058 00:42:33,760 --> 00:42:37,520 ora ho una scorta infinita, o almeno quattro miliardi di 1059 00:42:37,520 --> 00:42:39,790 cose che possono andare male nei miei programmi. 1060 00:42:39,790 --> 00:42:42,300 E posso iniziare ad assegnare loro i singoli numeri. 1061 00:42:42,300 --> 00:42:44,340 Ora, in genere è sufficiente per restituire solo 1062 00:42:44,340 --> 00:42:45,730 qualcosa di diverso da 0. 1063 00:42:45,730 --> 00:42:48,040 Quindi stiamo andando a tornare semplicemente 1 per ora. 1064 00:42:48,040 --> 00:42:51,440 Ma il motivo per il ritorno 1 è che non appena si torna 1065 00:42:51,440 --> 00:42:55,110 1, indovinate cosa succede al resto del programma? 1066 00:42:55,110 --> 00:42:55,720 Si ferma. 1067 00:42:55,720 --> 00:42:56,560 Tutto qui. 1068 00:42:56,560 --> 00:42:59,150 Quindi il fatto che sto tornando 1 è efficace 1069 00:42:59,150 --> 00:43:02,950 cortocircuitando esecuzione di questo programma in modo che 1070 00:43:02,950 --> 00:43:06,780 niente sotto la linea 27 sarà continuare l'esecuzione. 1071 00:43:06,780 --> 00:43:09,210 Appena torna principali, che è. 1072 00:43:09,210 --> 00:43:13,160 >> Va bene, quindi se l'utente non cooperare e si raggiunge la linea 30 1073 00:43:13,160 --> 00:43:15,680 poiché avevano scritto in un numero legittimo, qui è la mia 1074 00:43:15,680 --> 00:43:16,990 l'attuazione di questa canzone. 1075 00:43:16,990 --> 00:43:19,050 Così ho stampare un carattere di nuova riga, solo per 1076 00:43:19,050 --> 00:43:19,880 estetica. 1077 00:43:19,880 --> 00:43:21,500 Ora ho un ciclo for. 1078 00:43:21,500 --> 00:43:22,930 E notate che sto facendo le cose in un po ' 1079 00:43:22,930 --> 00:43:23,880 di una direzione diversa. 1080 00:43:23,880 --> 00:43:26,210 Non c'è bisogno di fare a meno, non devo fare + +. 1081 00:43:26,210 --> 00:43:30,660 Posso invece dire inizializzare una variabile i, impostarlo uguale a 1082 00:43:30,660 --> 00:43:35,080 n, il numero l'utente ha digitato, quindi effettuare le seguenti operazioni, in modo da 1083 00:43:35,080 --> 00:43:39,590 fino a quando i è maggiore di 0, allora i - 1084 00:43:39,590 --> 00:43:42,070 una volta che hai finito di una iterazione di questo ciclo. 1085 00:43:42,070 --> 00:43:44,310 Così possiamo contare verso il basso con un ciclo for come bene. 1086 00:43:44,310 --> 00:43:47,520 Ora, questa è la settimana più o meno uno roba adesso, con printf. 1087 00:43:47,520 --> 00:43:51,770 So di stampa "d% bottiglie di birra sul muro." Stampa "% d 1088 00:43:51,770 --> 00:43:54,990 bottiglie di birra. "Stampa" Prendete una, passala in giro. " 1089 00:43:54,990 --> 00:43:58,880 "% D bottiglie di birra sul muro." Quindi è ancora d%, ma 1090 00:43:58,880 --> 00:44:02,770 notare che l'argomento di printf sta cambiando. 1091 00:44:02,770 --> 00:44:05,840 Dopo la virgola, io ho, perché voglio dire 99. 1092 00:44:05,840 --> 00:44:08,590 Dopo questa virgola, io ho, perché voglio dire 99. 1093 00:44:08,590 --> 00:44:14,030 Dopo questa virgola, io ho - 1, perché voglio dire 98 in 1094 00:44:14,030 --> 00:44:16,260 questa prima iterazione, e così via. 1095 00:44:16,260 --> 00:44:18,520 Ed ora qui, devo solo qualche battuta stupida. 1096 00:44:18,520 --> 00:44:22,270 E poi linea 42, mi restituisce 0 per convenzione, a significare che 1097 00:44:22,270 --> 00:44:23,650 va tutto bene. 1098 00:44:23,650 --> 00:44:24,490 >> E se ho preso una cantonata? 1099 00:44:24,490 --> 00:44:26,350 Che cosa potrebbe un errore comune qui essere? 1100 00:44:26,350 --> 00:44:29,200 Beh, e se per sbaglio ho detto bene, io voglio contare 1101 00:44:29,200 --> 00:44:31,640 fino a 0, voglio 0 bottiglie di birra sul muro? 1102 00:44:31,640 --> 00:44:34,620 Allora io dico, i è maggiore o uguale a 0. 1103 00:44:34,620 --> 00:44:38,920 Che cosa sarà il sintomo che ora vedere se ricompilare 1104 00:44:38,920 --> 00:44:41,173 beer1 ed eseguirlo? 1105 00:44:41,173 --> 00:44:42,120 PUBBLICO: Negativo. 1106 00:44:42,120 --> 00:44:43,590 DAVID J. MALAN: Sì, è andra 'negativo. 1107 00:44:43,590 --> 00:44:45,950 Questo è un off-by-one error, incredibilmente 1108 00:44:45,950 --> 00:44:47,270 errore comune a fare. 1109 00:44:47,270 --> 00:44:48,960 Andiamo in realtà tornare alla finestra di terminale e farlo 1110 00:44:48,960 --> 00:44:50,620 qui, in modo che possiamo vedere più alla volta. 1111 00:44:50,620 --> 00:44:53,280 Invio, 99 bottiglie di birra. 1112 00:44:53,280 --> 00:44:56,580 Chiudi, ma siamo andati sempre leggermente troppo. 1113 00:44:56,580 --> 00:45:00,500 Abbiamo cantato la canzone troppo in basso, in modo tale che ora ha colpito il 1114 00:45:00,500 --> 00:45:01,510 numero negativo. 1115 00:45:01,510 --> 00:45:03,680 Quindi non va a buon fine. 1116 00:45:03,680 --> 00:45:06,450 >> Va bene, in modo che possiamo facilmente risolvere che, tornando al 1117 00:45:06,450 --> 00:45:07,650 modo di una volta. 1118 00:45:07,650 --> 00:45:10,360 Ma quali sono alcune opportunità ora 1119 00:45:10,360 --> 00:45:11,190 miglioramento? 1120 00:45:11,190 --> 00:45:17,200 Beh, lasciatemi aprire beer2.c e scorrere verso il basso qui e prendere un 1121 00:45:17,200 --> 00:45:19,310 guardate questa versione. 1122 00:45:19,310 --> 00:45:21,370 Qual è la prima cosa che salta fuori a voi come diverso 1123 00:45:21,370 --> 00:45:23,715 in questa versione qui? 1124 00:45:23,715 --> 00:45:24,190 PUBBLICO: [incomprensibile]. 1125 00:45:24,190 --> 00:45:26,510 DAVID J. MALAN: Sì, così non sono più io, perché mi venne in 1126 00:45:26,510 --> 00:45:29,350 Mi sai una cosa, sto chiedendo all'utente di n, e poi sono 1127 00:45:29,350 --> 00:45:33,580 impostando i uguale a n, e poi ho i cambiando, ma non sono mai 1128 00:45:33,580 --> 00:45:34,590 toccare di nuovo n. 1129 00:45:34,590 --> 00:45:37,390 Quindi, cosa diavolo è stato il punto di voi allocare altri 32 1130 00:45:37,390 --> 00:45:45,210 bit ho chiamato solo in modo che io possa avere una variabile diversa? 1131 00:45:45,210 --> 00:45:47,960 Quindi, in questo caso, una sorta di riconosciuto che inutili 1132 00:45:47,960 --> 00:45:49,190 un design. 1133 00:45:49,190 --> 00:45:52,730 E ora sto per dire, mentre n è maggiore di 0, andare 1134 00:45:52,730 --> 00:45:56,180 avanti e stampare la stessa canzone, passando un n per printf come 1135 00:45:56,180 --> 00:46:00,210 secondo argomento, e n - 1 come secondo argomento qui. 1136 00:46:00,210 --> 00:46:02,930 E poi ad ogni iterazione di questo ciclo, andare avanti e basta 1137 00:46:02,930 --> 00:46:05,080 n decrementare stessa. 1138 00:46:05,080 --> 00:46:06,960 Ora, funzionalmente, il programma 1139 00:46:06,960 --> 00:46:08,010 sta per essere identici. 1140 00:46:08,010 --> 00:46:10,730 Se digito 99, n inizia alle 99. 1141 00:46:10,730 --> 00:46:12,890 I decremento, decremento, diminuzione, decremento. 1142 00:46:12,890 --> 00:46:15,875 Io vado a prendere tutta la strada fino a "Una bottiglia di birra 1143 00:46:15,875 --> 00:46:16,740 il muro, una bottiglia di birra. 1144 00:46:16,740 --> 00:46:18,020 Prendete una, passala intorno. 1145 00:46:18,020 --> 00:46:21,480 0 bottiglie di birra sul muro. "La fine, perché ho fatto 1146 00:46:21,480 --> 00:46:23,200 ottenere la condizione corretta. 1147 00:46:23,200 --> 00:46:24,280 È maggiore di 0. 1148 00:46:24,280 --> 00:46:26,220 Non ho fatto questo errore. 1149 00:46:26,220 --> 00:46:28,470 >> Così che è meglio, la versione o quella versione due? 1150 00:46:31,380 --> 00:46:33,480 Ho sentito un sacco di mormorazioni per due. 1151 00:46:33,480 --> 00:46:34,730 Perché due? 1152 00:46:37,210 --> 00:46:38,225 Che cos'è? 1153 00:46:38,225 --> 00:46:39,215 PUBBLICO: [incomprensibile]. 1154 00:46:39,215 --> 00:46:40,070 DAVID J. MALAN: Oh, va bene. 1155 00:46:40,070 --> 00:46:42,870 Così non si va al di sotto di 0, ma ricorda, in versione uno, il 1156 00:46:42,870 --> 00:46:45,870 originale versione corretta non è andato al di sotto di 0 indifferente. 1157 00:46:45,870 --> 00:46:48,340 Quindi ricorda che questa è la versione corretta. 1158 00:46:48,340 --> 00:46:51,630 Quindi cerchiamo di almeno confrontare le due versioni corrette. 1159 00:46:51,630 --> 00:46:53,300 Che cosa è un argomento a favore della versione 1160 00:46:53,300 --> 00:46:55,146 due che sono, mmm, meglio? 1161 00:46:55,146 --> 00:46:55,642 Si '? 1162 00:46:55,642 --> 00:46:57,630 PUBBLICO: Utilizza meno spazio. 1163 00:46:57,630 --> 00:46:59,530 DAVID J. MALAN: Okay, in modo che utilizza meno spazio, giusto? 1164 00:46:59,530 --> 00:47:02,900 Considerando che una versione usata 32 bit per n, e poi un altro 1165 00:47:02,900 --> 00:47:07,680 32 bit per i. 1166 00:47:07,680 --> 00:47:10,060 Versione due utilizza solo 32 bit per n, in modo che 1167 00:47:10,060 --> 00:47:11,700 sembra essere un vantaggio. 1168 00:47:11,700 --> 00:47:12,950 Altri pensieri? 1169 00:47:18,070 --> 00:47:21,520 Qualcuno ha voglia di argomentare a favore di uno? 1170 00:47:21,520 --> 00:47:22,070 Si '? 1171 00:47:22,070 --> 00:47:25,240 PUBBLICO: Devi usare riga di codice per n -. 1172 00:47:25,240 --> 00:47:26,090 >> DAVID J. MALAN: Va bene, certo. 1173 00:47:26,090 --> 00:47:26,960 Ecco, questo è giusto. 1174 00:47:26,960 --> 00:47:29,040 Quindi questo giusto, almeno per me - 1175 00:47:29,040 --> 00:47:31,940 Voglio dire, questo si sente in realtà un po 'disordinato, il fatto che 1176 00:47:31,940 --> 00:47:35,120 Non posso ordinare di incapsulare tutto il mio in una logica 1177 00:47:35,120 --> 00:47:38,030 bella linea, il ciclo for, il ciclo for può. 1178 00:47:38,030 --> 00:47:40,240 Ecco, io tipo di dover virare su questo n - 1179 00:47:40,240 --> 00:47:41,120 alla fine del ciclo, perché 1180 00:47:41,120 --> 00:47:42,550 è logicamente necessario. 1181 00:47:42,550 --> 00:47:45,190 Ma che tipo di me strofina nel modo sbagliato, proprio perché 1182 00:47:45,190 --> 00:47:48,260 sembra separata dalla logica di qui, anche se, 1183 00:47:48,260 --> 00:47:49,430 ancora una volta, è necessario. 1184 00:47:49,430 --> 00:47:50,990 Altri pensieri? 1185 00:47:50,990 --> 00:47:51,490 Si '? 1186 00:47:51,490 --> 00:47:52,740 PUBBLICO: [incomprensibile]. 1187 00:47:57,990 --> 00:47:58,350 >> DAVID J. MALAN: Già. 1188 00:47:58,350 --> 00:48:00,730 Così che cosa se, invece, alla fine della canzone, ha voluto 1189 00:48:00,730 --> 00:48:02,950 stampare di nuovo il nome della canzone? 1190 00:48:02,950 --> 00:48:05,660 Mi piace "Grazie per aver giocato 99 bottiglie di birra", o qualcosa del genere 1191 00:48:05,660 --> 00:48:06,690 sciocco come questo? 1192 00:48:06,690 --> 00:48:09,750 Ma il punto è, che chiedeva di poter accedere al valore originale. 1193 00:48:09,750 --> 00:48:13,180 Il fatto che hai mutato o modificato in ogni n 1194 00:48:13,180 --> 00:48:16,330 iterazione e quindi hanno distrutto il suo valore originale 1195 00:48:16,330 --> 00:48:18,650 significa che non si può fare che alla fine. 1196 00:48:18,650 --> 00:48:20,660 Ora, forse, è evidente che non si vuole fare 1197 00:48:20,660 --> 00:48:21,450 che in questo programma. 1198 00:48:21,450 --> 00:48:22,350 Quindi, chi se ne frega? 1199 00:48:22,350 --> 00:48:23,630 Ma questo è un punto molto valido. 1200 00:48:23,630 --> 00:48:25,520 E ad essere onesti, non c'è davvero nessuno 1201 00:48:25,520 --> 00:48:26,630 proprio rispondere qui. 1202 00:48:26,630 --> 00:48:28,740 Sono entrambi ugualmente corrette. 1203 00:48:28,740 --> 00:48:30,210 Potrei essere convinto in entrambi i modi. 1204 00:48:30,210 --> 00:48:33,310 Devo dire che, in generale, è un buon principio se si 1205 00:48:33,310 --> 00:48:36,030 ha chiesto l'utente un certo valore e si è memorizzato in una variabile 1206 00:48:36,030 --> 00:48:38,730 come n, solo una sorta di in linea di principio, è probabilmente una buona 1207 00:48:38,730 --> 00:48:40,160 tenere che circa. 1208 00:48:40,160 --> 00:48:43,400 E tutti i dati che si desidera mutare ancora e ancora, solo 1209 00:48:43,400 --> 00:48:46,030 dare una copia di tale variabile, solo così che si 1210 00:48:46,030 --> 00:48:47,830 hanno accesso all'originale. 1211 00:48:47,830 --> 00:48:51,040 Si stanno spendendo 32 bit in più, ma la realtà è questa 1212 00:48:51,040 --> 00:48:53,490 computer è, come, due gigabyte di RAM in questi giorni, 1213 00:48:53,490 --> 00:48:55,310 e stiamo cavilli su 32 bit? 1214 00:48:55,310 --> 00:48:56,320 Davvero non è un grosso problema. 1215 00:48:56,320 --> 00:48:58,550 E anche su questo dispositivo qui, con un mezzo un concerto o di un 1216 00:48:58,550 --> 00:49:01,700 gigabyte di RAM, 32 bit contro i 64 bit, 1217 00:49:01,700 --> 00:49:02,920 non è un grosso problema. 1218 00:49:02,920 --> 00:49:05,890 Certamente oggi, sta andando essere il modo sopraffatti dalla dimensione 1219 00:49:05,890 --> 00:49:08,400 del programma stesso, che sta per essere diverse centinaia di 1220 00:49:08,400 --> 00:49:10,890 kilobyte, se non pochi megabyte, in questi giorni. 1221 00:49:10,890 --> 00:49:13,550 >> Preoccupazioni così ragionevole, una risposta giusta. 1222 00:49:13,550 --> 00:49:15,490 Ma almeno questi sono i pensieri che dovrebbero contribuire alla 1223 00:49:15,490 --> 00:49:16,790 passare attraverso la vostra mente? 1224 00:49:16,790 --> 00:49:19,600 Perché in pset 0, anche se abbiamo davvero solo previsto 1225 00:49:19,600 --> 00:49:22,340 correttezza, o almeno rinuncia vari bug che 1226 00:49:22,340 --> 00:49:25,440 si potrebbe avere incontrato, come andare avanti, il design è 1227 00:49:25,440 --> 00:49:27,910 sarà un altro aspetto fondamentale, sia di scrittura del codice 1228 00:49:27,910 --> 00:49:29,770 e anche la nostra valutazione di codice. 1229 00:49:29,770 --> 00:49:32,310 E così almeno dare pensato di cose come questa. 1230 00:49:32,310 --> 00:49:35,590 E solo perché qualcosa funziona non significa che sia buono, 1231 00:49:35,590 --> 00:49:37,130 non significa che è ben progettato. 1232 00:49:37,130 --> 00:49:38,820 E questa è una delle cose che i compagni di insegnamento e di 1233 00:49:38,820 --> 00:49:41,990 serie di problemi ci aiuterà a prendere in giro una parte nel corso del tempo. 1234 00:49:41,990 --> 00:49:45,020 >> Beh, che dire, diciamo, questa versione qui? 1235 00:49:45,020 --> 00:49:49,090 Vorrei fare qualcosa di un po 'sexy qui in un attimo. 1236 00:49:49,090 --> 00:49:50,740 Prima di tutto lasciatemi sbarazzarsi di questo. 1237 00:49:50,740 --> 00:49:54,120 E ora cerchiamo di risolvere il problema grammaticale. 1238 00:49:54,120 --> 00:49:58,780 Quindi, in questa versione, voglio correggere la grammatica in modo che, 1239 00:49:58,780 --> 00:50:02,460 piuttosto che dire s tra parentesi, come "bottiglia" 1240 00:50:02,460 --> 00:50:03,360 o "bottiglie" - 1241 00:50:03,360 --> 00:50:04,900 Io non voglio tagliare l'angolo - 1242 00:50:04,900 --> 00:50:08,350 Voglio anche stampare in modo dinamico le "bottiglie" parola 1243 00:50:08,350 --> 00:50:12,820 o "biberon", usando così questi segnaposto% s oggi. 1244 00:50:12,820 --> 00:50:16,550 Quindi ho bisogno di controllare in modo condizionale qual è il valore di i. 1245 00:50:16,550 --> 00:50:19,590 E se è 1, che voglio dire "bottiglia", e se si tratta di qualcosa 1246 00:50:19,590 --> 00:50:23,115 altra cosa, voglio dire "bottiglie". Quindi cerchiamo di fare questo. 1247 00:50:23,115 --> 00:50:31,340 Quindi, se i == 1, allora lasciatemi andare avanti e dichiarare - 1248 00:50:31,340 --> 00:50:34,080 Ho bisogno di una stringa, per cui vorrei fare stringa s1, perché è la 1249 00:50:34,080 --> 00:50:36,070 prima stringa che mi interessa in questo momento. 1250 00:50:36,070 --> 00:50:40,980 Sto per dire "bottiglia". E poi, vediamo, stringa 1251 00:50:40,980 --> 00:50:43,110 s2 - e ti spiego dove sto andando in un momento - 1252 00:50:43,110 --> 00:50:47,650 "Bottiglie". Quindi ricordare che, in questa canzone, occorre essere in grado 1253 00:50:47,650 --> 00:50:50,580 di stampare le cose, due parole diverse potenzialmente. 1254 00:50:50,580 --> 00:50:53,590 Quindi, se guardiamo indietro qui, si noti che, quando si arriva a 1255 00:50:53,590 --> 00:50:56,440 questo esempio qui ", due bottiglie di birra sul muro, 1256 00:50:56,440 --> 00:50:59,490 due bottiglie di birra, prendere uno verso il basso, passa in giro ", voglio 1257 00:50:59,490 --> 00:51:02,380 questa quarta riga per dire ora "una bottiglia di birra sul 1258 00:51:02,380 --> 00:51:04,900 muro ". Così ho bisogno di decidere, voglio dire" bottiglie "o 1259 00:51:04,900 --> 00:51:07,780 "Bottiglia"? Quindi ho intenzione di dire arbitrariamente, va bene, 1260 00:51:07,780 --> 00:51:10,530 Ho intenzione di dichiarare una variabile chiamata ora s1, stringa 1261 00:51:10,530 --> 00:51:13,830 uno, che sta per arrivare collegato qui e anche qui, 1262 00:51:13,830 --> 00:51:16,070 perché quelle parole sono sempre identici, proprio a causa del 1263 00:51:16,070 --> 00:51:17,290 natura del brano. 1264 00:51:17,290 --> 00:51:20,100 E ho intenzione di chiamare s2 qualunque parola che voglio 1265 00:51:20,100 --> 00:51:21,560 infine appaiono qui. 1266 00:51:21,560 --> 00:51:25,530 Ora, letteralmente, 99 volte su 100, sta andando essere il 1267 00:51:25,530 --> 00:51:28,820 stessa in entrambi i casi, perché 3 è plurale, 2 è 1268 00:51:28,820 --> 00:51:30,200 plurale, 4 è plurale. 1269 00:51:30,200 --> 00:51:34,640 Ma in questo caso angolo, dove si arriva a 2 e poi 1, o 1270 00:51:34,640 --> 00:51:37,250 ancora 1 e poi 0, ho bisogno di questa logica. 1271 00:51:37,250 --> 00:51:41,020 Quindi devo passare un po 'di tempo nel mio codice ottenere tale diritto. 1272 00:51:41,020 --> 00:51:47,530 Quindi, se faccio questo, se i == 1, allora s1 posto uguale a "bottiglia" 1273 00:51:47,530 --> 00:51:52,010 e s2 pari a "bottiglie", perché questo sarà per 1 1274 00:51:52,010 --> 00:51:56,340 bottiglia, e questo sarà 0 per bottiglie. 1275 00:51:56,340 --> 00:51:58,250 E questo qui, che questo rappresenta? 1276 00:51:58,250 --> 00:51:59,780 Giusto per essere chiari. 1277 00:51:59,780 --> 00:52:00,620 Questo è solo un commento. 1278 00:52:00,620 --> 00:52:03,730 Quindi il fatto che si può avere commenti a riga singola che si intende 1279 00:52:03,730 --> 00:52:06,110 posso commentare il tuo codice come questo, ma un altro comune 1280 00:52:06,110 --> 00:52:09,050 paradigma, anche, è che se si dispone di un super-breve frase che 1281 00:52:09,050 --> 00:52:11,410 vuoi mettere se stessi ed è solo più leggibile per mettere 1282 00:52:11,410 --> 00:52:13,270 è proprio alla fine della riga di codice, è possibile 1283 00:52:13,270 --> 00:52:15,230 assolutamente fare una cosa del genere. 1284 00:52:15,230 --> 00:52:20,150 >> Così ora che cosa se faccio questo? Altrimenti se i non è uguale a 1. 1285 00:52:20,150 --> 00:52:21,620 Quindi è uguale a scoppio - 1286 00:52:21,620 --> 00:52:23,150 punto esclamativo è conosciuto come "bang". 1287 00:52:23,150 --> 00:52:25,080 Così botto = 1. 1288 00:52:25,080 --> 00:52:28,530 Quindi, se i non è uguale a 1, cosa che invece voglio fare? 1289 00:52:28,530 --> 00:52:31,700 Beh, la prima parola che voglio essere ciò? 1290 00:52:34,620 --> 00:52:40,030 Così stringa 1 dovrebbe essere "bottiglie" per bottiglie plurali, 1291 00:52:40,030 --> 00:52:42,440 e allora questo sarà plurale "bottiglie", così, per ora. 1292 00:52:42,440 --> 00:52:43,800 E vedremo se questo diventa effettivamente ci 1293 00:52:43,800 --> 00:52:44,870 dove vogliamo andare. 1294 00:52:44,870 --> 00:52:47,680 Così ora se scorrere verso il basso qui, si noti che sto collegando 1295 00:52:47,680 --> 00:52:50,170 Non solo io, ma s1. 1296 00:52:50,170 --> 00:52:51,860 Sto collegando i e s1. 1297 00:52:51,860 --> 00:52:54,440 E poi qui, sono meno 1, che è la stessa 1298 00:52:54,440 --> 00:52:55,920 prima, ma s2. 1299 00:52:55,920 --> 00:52:58,730 In altre parole, voglio che la parola inglese per cambiare in base 1300 00:52:58,730 --> 00:52:59,930 su questa logica. 1301 00:52:59,930 --> 00:53:03,310 Ora, ci sono già alcuni problemi in questo codice. 1302 00:53:03,310 --> 00:53:08,460 Che cosa è rotto già fuori dalla porta qui? 1303 00:53:08,460 --> 00:53:10,796 Si '? 1304 00:53:10,796 --> 00:53:13,210 PUBBLICO: [incomprensibile]. 1305 00:53:13,210 --> 00:53:13,800 >> DAVID J. MALAN: Esattamente. 1306 00:53:13,800 --> 00:53:16,030 Così ho già violato la lezione di portata. 1307 00:53:16,030 --> 00:53:19,610 Così ho dichiarato s1 e s2, ma l'ho fatto all'interno di 1308 00:53:19,610 --> 00:53:22,980 parentesi graffe, il che significa, sì, questo codice funziona fino 1309 00:53:22,980 --> 00:53:27,430 fino a riga 42, ma appena mi ha colpito linea 43, indovinate un po 'no 1310 00:53:27,430 --> 00:53:28,900 non esiste più? 1311 00:53:28,900 --> 00:53:32,600 Beh, indovinate un po 'non è più a portata - non s1 o s2. 1312 00:53:32,600 --> 00:53:33,780 Quindi dobbiamo risolvere questo problema. 1313 00:53:33,780 --> 00:53:36,180 Così mi permette di cancellare le dichiarazioni. 1314 00:53:36,180 --> 00:53:39,320 E lascio i nomi delle variabili e cancellare questo qui 1315 00:53:39,320 --> 00:53:40,120 ed eliminare questo qui. 1316 00:53:40,120 --> 00:53:43,557 E in che linee devo davvero dichiarare queste cose? 1317 00:53:43,557 --> 00:53:44,960 PUBBLICO: [incomprensibile]. 1318 00:53:44,960 --> 00:53:45,410 DAVID J. MALAN: Sì, quindi probabilmente 1319 00:53:45,410 --> 00:53:46,850 proprio qui, 33-ish. 1320 00:53:46,850 --> 00:53:50,670 Così stringa s1 e poi stringa s2. 1321 00:53:50,670 --> 00:53:51,950 E si scopre, posso farlo. 1322 00:53:51,950 --> 00:53:54,260 Se si dichiara due variabili dello stesso tipo, 1323 00:53:54,260 --> 00:53:57,420 si può effettivamente utilizzare solo una virgola e farlo in C. Tutti 1324 00:53:57,420 --> 00:53:58,970 a destra, così ora ho due variabili - 1325 00:53:58,970 --> 00:53:59,860 s1 e s2. 1326 00:53:59,860 --> 00:54:02,000 Li sto assegnando i valori in questi 1327 00:54:02,000 --> 00:54:04,210 condizioni qui, o qui. 1328 00:54:04,210 --> 00:54:06,690 E poi io li sto usando in basso. 1329 00:54:06,690 --> 00:54:10,960 Come bene è questo ora di andare a lavorare? 1330 00:54:10,960 --> 00:54:12,740 >> Beh, è ​​ancora un po 'buggy, ma cerchiamo di vedere almeno 1331 00:54:12,740 --> 00:54:13,730 quanto abbiamo ottenuto. 1332 00:54:13,730 --> 00:54:16,500 Permettetemi quindi di andare avanti e fare beer3. 1333 00:54:16,500 --> 00:54:17,695 E `la beer3? 1334 00:54:17,695 --> 00:54:19,410 Sì, questo è beer3. 1335 00:54:19,410 --> 00:54:21,510 E ora lasciatemi andare avanti ed eseguire beer3. 1336 00:54:21,510 --> 00:54:23,820 399 99. 1337 00:54:23,820 --> 00:54:25,840 Possiamo probabilmente saltare la maggior parte di loro. 1338 00:54:25,840 --> 00:54:29,100 E qui, guarda un po '. 1339 00:54:29,100 --> 00:54:31,110 "Una bottiglia di birra sul muro, una bottiglia di birra, prendere 1340 00:54:31,110 --> 00:54:34,306 uno giù, passare intorno, 0 bottiglie di birra sul muro. " 1341 00:54:34,306 --> 00:54:37,570 Ma sto attirando la vostra attenzione solo la metà della soluzione. 1342 00:54:37,570 --> 00:54:39,620 Tipo di fatto un casino qui. 1343 00:54:39,620 --> 00:54:43,030 Così sembra che i casi d'angolo sorgono quando i è uguale a quello che 1344 00:54:43,030 --> 00:54:44,030 due valori? 1345 00:54:44,030 --> 00:54:45,020 PUBBLICO: 2, 1. 1346 00:54:45,020 --> 00:54:46,190 David J. MALAN: 2 e 1. 1347 00:54:46,190 --> 00:54:48,180 Non è 1 e non 1. 1348 00:54:48,180 --> 00:54:51,890 E 'davvero solo queste ultime due strofe di questa canzone. 1349 00:54:51,890 --> 00:54:53,890 Quindi cosa devo invece voglio fare? 1350 00:54:53,890 --> 00:54:58,890 Così mi sembra di aver preso il caso in cui se i è == a 1, 1351 00:54:58,890 --> 00:55:02,240 allora la prima parola è "bottiglia", ma la seconda parola 1352 00:55:02,240 --> 00:55:07,230 è "bottiglie". Ma qui, voglio cambiare questo sia == 2. 1353 00:55:07,230 --> 00:55:08,570 E se questo è il caso, che cosa voglio l' 1354 00:55:08,570 --> 00:55:09,620 prima parola di essere? 1355 00:55:09,620 --> 00:55:10,430 PUBBLICO: "bottiglie". 1356 00:55:10,430 --> 00:55:12,890 DAVID J. MALAN: "Bottiglie", così per due bottiglie. 1357 00:55:12,890 --> 00:55:14,690 E poi questa parola qui dovrebbe essere - 1358 00:55:14,690 --> 00:55:15,340 PUBBLICO: "Bottiglia". 1359 00:55:15,340 --> 00:55:17,316 DAVID J. MALAN: "Bottiglia", singolare. 1360 00:55:20,430 --> 00:55:25,160 >> Va bene, cerchiamo di diminuire, torna qui, ri-eseguire make, 1361 00:55:25,160 --> 00:55:28,590 re-run beer3, digitare 99 di nuovo. 1362 00:55:28,590 --> 00:55:30,710 Okay, "Segmentation fault (core dumped)". 1363 00:55:30,710 --> 00:55:32,780 Che cosa ho fatto di male? 1364 00:55:36,050 --> 00:55:38,722 PUBBLICO: Non si dispone di un valore di [incomprensibile]. 1365 00:55:38,722 --> 00:55:40,480 DAVID J. MALAN: Ah, ottimo punto. 1366 00:55:40,480 --> 00:55:43,310 Va bene, allora cosa c'è di sbagliato? 1367 00:55:43,310 --> 00:55:45,450 Quindi errore di segmentazione, e stiamo effettivamente andando a vedere 1368 00:55:45,450 --> 00:55:49,020 questo bel paio di volte in futuro, deliberatamente. 1369 00:55:49,020 --> 00:55:51,030 Ma per ora, cosa significa questo in realtà significa? 1370 00:55:51,030 --> 00:55:53,620 Un errore di segmentazione quasi sempre significa che si deve 1371 00:55:53,620 --> 00:55:56,760 in qualche modo ha cercato di accedere alla memoria, RAM nel computer, 1372 00:55:56,760 --> 00:56:00,600 che non si è proprietari, che non hanno effettivamente chiesto alla 1373 00:56:00,600 --> 00:56:02,050 sistema operativo per. 1374 00:56:02,050 --> 00:56:04,440 Quindi, in questo caso, notare quello che ho fatto, che è 1375 00:56:04,440 --> 00:56:05,870 viziata nella mia logica. 1376 00:56:05,870 --> 00:56:09,500 Ho assegnato s1 e s2 un valore se i è uguale a 1. 1377 00:56:09,500 --> 00:56:11,590 Ho anche fatto che, se i è uguale a 2. 1378 00:56:11,590 --> 00:56:13,710 Ma non l'ho fatto nel numero infinito di altri 1379 00:56:13,710 --> 00:56:14,690 possibilità - 1380 00:56:14,690 --> 00:56:17,940 in particolare, 3 o 4 o dot, dot, dot, 99. 1381 00:56:17,940 --> 00:56:20,100 Quindi una correzione per questo potrebbe essere solo andiamo 1382 00:56:20,100 --> 00:56:22,190 hanno una condizione else. 1383 00:56:22,190 --> 00:56:26,780 E lasciami andare qui e dire s1 è uguale a - 1384 00:56:26,780 --> 00:56:28,180 che cosa dovrebbe essere qui? 1385 00:56:28,180 --> 00:56:28,750 PUBBLICO: [incomprensibile]. 1386 00:56:28,750 --> 00:56:30,460 >> DAVID J. MALAN: "Bottiglie", perché nel caso comune, 1387 00:56:30,460 --> 00:56:32,020 è proprio la stessa cosa. 1388 00:56:32,020 --> 00:56:35,580 Quindi è uguale a citazione, fine citazione, "bottiglie". Quindi, per il plurale 1389 00:56:35,580 --> 00:56:41,010 bottiglie, e poi qui, per bottiglie plurali. 1390 00:56:41,010 --> 00:56:44,580 Bene, ora lasciatemi tornare alla mia finestra di terminale, 1391 00:56:44,580 --> 00:56:47,200 ricompilazione, ri-correre. 1392 00:56:47,200 --> 00:56:48,440 99. 1393 00:56:48,440 --> 00:56:49,150 Whew. 1394 00:56:49,150 --> 00:56:50,610 E facciamo un rapido controllo sanità mentale. 1395 00:56:50,610 --> 00:56:52,400 Tecnicamente, si vorrebbe leggere tutti questi per assicurarsi 1396 00:56:52,400 --> 00:56:53,370 siano corrette, ma diamo un'occhiata a 1397 00:56:53,370 --> 00:56:54,640 meno i colpevoli noti. 1398 00:56:54,640 --> 00:56:57,370 3 bottiglie, 2 bottiglie, 2 bottiglie, 1 1399 00:56:57,370 --> 00:57:00,380 bottiglia, 1 bottiglia, 0 bottiglie. 1400 00:57:00,380 --> 00:57:03,080 Ci sembra di aver risolto almeno per ora. 1401 00:57:03,080 --> 00:57:06,010 Ma il fermo è che ciò che un pasticcio terribile dio questo è 1402 00:57:06,010 --> 00:57:07,470 solo per risolvere uno stupido 1403 00:57:07,470 --> 00:57:09,540 di un carattere particolare grammaticale. 1404 00:57:09,540 --> 00:57:11,150 Quindi c'è una specie di ragione che ho tagliato questo angolo 1405 00:57:11,150 --> 00:57:14,090 prima, perché è solo completamente fastidioso dover 1406 00:57:14,090 --> 00:57:15,020 scrivere questo codice molto. 1407 00:57:15,020 --> 00:57:17,530 Ma si scopre che ci sono modi un po 'più eleganti di 1408 00:57:17,530 --> 00:57:20,110 esprime esattamente la stessa cosa. 1409 00:57:20,110 --> 00:57:22,040 E possiamo farlo in questo modo. 1410 00:57:22,040 --> 00:57:23,890 >> Vorrei lasciare questo sullo schermo per un momento e 1411 00:57:23,890 --> 00:57:27,320 introdurre qualcosa di noto come un operatore ternario. 1412 00:57:27,320 --> 00:57:29,600 Questa è una specie di one-liner che è solo lo scopo di rendere il nostro 1413 00:57:29,600 --> 00:57:31,880 vive un po 'più sexy, come promesso. 1414 00:57:31,880 --> 00:57:33,130 E ho intenzione di fare questo nel modo seguente. 1415 00:57:33,130 --> 00:57:35,810 Dammi una stringa chiamata s1, e lasciami 1416 00:57:35,810 --> 00:57:37,200 assegnare come segue. 1417 00:57:37,200 --> 00:57:39,900 (I == 1)? 1418 00:57:39,900 --> 00:57:47,820 "Bottiglia", "bottiglie" altrimenti. String s2 gets (i == 2)? 1419 00:57:47,820 --> 00:57:52,670 "Bottiglia", "bottiglie" altrimenti. 1420 00:57:52,670 --> 00:57:57,050 Allora, qual è allora la differenza? 1421 00:57:57,050 --> 00:57:59,370 Queste due righe di codice, sostengo, può 1422 00:57:59,370 --> 00:58:02,200 sostituire tutto questo casino. 1423 00:58:02,200 --> 00:58:04,280 Così io lo chiamo un casino, proprio perché tipo di strofina me il 1424 00:58:04,280 --> 00:58:05,940 modo sbagliato che sia tante righe di codice. 1425 00:58:05,940 --> 00:58:06,650 Non male. 1426 00:58:06,650 --> 00:58:07,700 Non è cattivo design. 1427 00:58:07,700 --> 00:58:10,140 Come, questo è perfettamente corretto e perfettamente soddisfacente. 1428 00:58:10,140 --> 00:58:12,970 Ma la codifica diventa noioso se si deve esprimere se stessi in modo 1429 00:58:12,970 --> 00:58:15,530 accidenti specificamente ancora e ancora e ancora con un semplice 1430 00:58:15,530 --> 00:58:16,620 scenario come questo. 1431 00:58:16,620 --> 00:58:19,470 Quindi C ha alcuni tasti di scelta rapida, come questo. 1432 00:58:19,470 --> 00:58:24,270 Quindi questa sostanza sta dicendo dichiarare una stringa chiamata s1 e 1433 00:58:24,270 --> 00:58:32,610 assegnare sia questo valore o questo valore se i è == - 1434 00:58:32,610 --> 00:58:35,290 scusate, dovrei dire più chiaramente. 1435 00:58:35,290 --> 00:58:41,680 Dichiarare una variabile s1, si assegna il valore se questo è vero. 1436 00:58:41,680 --> 00:58:44,280 In caso contrario, assegnare questo valore. 1437 00:58:44,280 --> 00:58:47,220 In altre parole, questa è una sorta di una riga modo 1438 00:58:47,220 --> 00:58:51,490 dicendo che se altro che fare un incarico lungo la strada. 1439 00:58:51,490 --> 00:58:55,540 Quindi, se i è 1, poi andare avanti e chiamare questo "bottiglia". E 1440 00:58:55,540 --> 00:58:59,830 allora questo altro, lo chiamano "bottiglie". Nel frattempo, s2, l' 1441 00:58:59,830 --> 00:59:04,060 seconda parola che abbiamo bisogno di definire, se i è uguale a 2, faremo 1442 00:59:04,060 --> 00:59:08,350 impostato s2 a "bottiglia". In caso contrario, impostarlo su "bottiglie". E che cosa 1443 00:59:08,350 --> 00:59:11,460 questo significa che ora è che posso passare attraverso questa ed eliminare tutti 1444 00:59:11,460 --> 00:59:12,860 le righe di codice. 1445 00:59:12,860 --> 00:59:17,220 E quando dico, un po 'ridicolo, che questo è ora 1446 00:59:17,220 --> 00:59:20,060 più sexy, è sexy in una sorta di senso stilistico. 1447 00:59:20,060 --> 00:59:22,660 Il fatto che funzionalmente, questo codice è in realtà sta per 1448 00:59:22,660 --> 00:59:24,610 fare la stessa cosa. 1449 00:59:24,610 --> 00:59:26,890 E anche se potrebbe apparire un po 'criptico in un primo momento 1450 00:59:26,890 --> 00:59:29,250 sguardo, perché non ho visto questo costrutto prima, mi piacerebbe 1451 00:59:29,250 --> 00:59:31,850 sostengono che è in ultima analisi, sarà molto di più 1452 00:59:31,850 --> 00:59:34,820 leggibile e molto più facile per noi esseri umani per ordinare di 1453 00:59:34,820 --> 00:59:36,830 capire, perché ora si può solo leggere il 1454 00:59:36,830 --> 00:59:38,830 codice tutto su una riga. 1455 00:59:38,830 --> 00:59:41,550 E 'ancora simile nello spirito a un caso, in cui questo è il 1456 00:59:41,550 --> 00:59:44,920 condizione e allora questo è quello che c'è dentro il se e il 1457 00:59:44,920 --> 00:59:46,480 è quello che c'è dentro l'altro. 1458 00:59:46,480 --> 00:59:49,450 Ma possiamo farlo solo molto più elegante. 1459 00:59:49,450 --> 00:59:52,650 >> E se ora tornare al mio terminale, dopo aver cancellato tutti 1460 00:59:52,650 --> 00:59:55,530 di queste linee e li ha sostituiti con solo quei due, 1461 00:59:55,530 --> 01:00:00,150 ricompilare, re-run bottiglie di birra con 99, si noti che la mia 1462 01:00:00,150 --> 01:00:03,350 grammatica è, infatti, ancora corretta. 1463 01:00:03,350 --> 01:00:06,160 Quindi, di nuovo, qualcosa per iniziare. 1464 01:00:06,160 --> 01:00:08,840 2 bottiglie di birra, 1 bottiglia di birra. 1465 01:00:08,840 --> 01:00:09,370 Guarda a destra. 1466 01:00:09,370 --> 01:00:10,100 Gia '. 1467 01:00:10,100 --> 01:00:13,900 Quindi non abbiamo una soluzione molto più succinta. 1468 01:00:13,900 --> 01:00:16,020 Quindi anche questo, come si ottiene più a suo agio con la C, non 1469 01:00:16,020 --> 01:00:18,630 necessariamente con il pset primo o addirittura secondo, ma 1470 01:00:18,630 --> 01:00:21,170 si rendono conto che questi costrutti può permetterci di fare cose mai 1471 01:00:21,170 --> 01:00:22,810 più elegante. 1472 01:00:22,810 --> 01:00:25,200 Ora facciamo un'altra cosa qui. 1473 01:00:25,200 --> 01:00:31,460 Lasciatemi andare avanti e aprire return1.c. 1474 01:00:31,460 --> 01:00:34,340 Ora iniziamo a risolvere un altro problema in un modo che 1475 01:00:34,340 --> 01:00:37,140 ci permette di scrivere codice più sofisticato. 1476 01:00:37,140 --> 01:00:39,960 >> Quindi, ecco un semplice programmino il cui scopo nella vita 1477 01:00:39,960 --> 01:00:41,870 è quello di incrementare i valori. 1478 01:00:41,870 --> 01:00:43,100 E in realtà, facciamo un passo indietro. 1479 01:00:43,100 --> 01:00:44,400 Vorrei farlo manualmente. 1480 01:00:44,400 --> 01:00:52,200 Lasciami fare includere e int main (void). 1481 01:00:52,200 --> 01:00:53,450 E fammi chiamare questo increment.c. 1482 01:00:57,150 --> 01:00:58,570 E che cosa voglio fare? 1483 01:00:58,570 --> 01:01:02,240 Ho intenzione di andare avanti e dire qualcosa del tipo - 1484 01:01:02,240 --> 01:01:04,280 potremo chiamare i numeri lo stesso - 1485 01:01:04,280 --> 01:01:04,980 x int. 1486 01:01:04,980 --> 01:01:13,670 Quindi x int ottiene 2; printf x è% d, nuova linea, x. 1487 01:01:13,670 --> 01:01:16,780 Così sto scrivendo in fretta, ma una sorta di roba familiare ora. 1488 01:01:16,780 --> 01:01:18,830 Poi ho intenzione di fare x + +. 1489 01:01:18,830 --> 01:01:21,710 Poi ho intenzione di stampare la frase stessa. 1490 01:01:21,710 --> 01:01:24,550 E poi ho intenzione di restituire 0 solo per uscire dal programma. 1491 01:01:24,550 --> 01:01:25,960 Va bene, quindi questo è un programma che 1492 01:01:25,960 --> 01:01:26,960 incrementi di un numero. 1493 01:01:26,960 --> 01:01:29,830 E 'prima di andare a inizializzare qualcosa a 2, e poi è 1494 01:01:29,830 --> 01:01:33,470 intenzione di incrementarlo e stamparlo di nuovo. 1495 01:01:33,470 --> 01:01:36,930 >> Quindi cerchiamo di eseguire incremento, programma incredibilmente semplice. 1496 01:01:36,930 --> 01:01:40,940 Ma supponiamo ora che voglio cubo il valore, in modo da fare 1497 01:01:40,940 --> 01:01:42,490 qualcosa di un po 'arbitraria. 1498 01:01:42,490 --> 01:01:45,140 E io in realtà voglio fare x ottiene il cubo di esso. 1499 01:01:45,140 --> 01:01:47,570 Così ho potuto usare quello che ha chiamato la funzione pow, ma non lo faccio 1500 01:01:47,570 --> 01:01:48,650 davvero sapere dove si trova ancora. 1501 01:01:48,650 --> 01:01:50,580 Quindi ho intenzione di farlo alla vecchia maniera. 1502 01:01:50,580 --> 01:01:54,550 x volte che questo è uguale a x volte x volte x. 1503 01:01:54,550 --> 01:01:56,880 Così sto elevando al cubo il valore, moltiplicandolo per se stesso ancora una volta 1504 01:01:56,880 --> 01:02:00,440 e ancora e ancora, in modo da ottenere il potere 1505 01:02:00,440 --> 01:02:02,050 di 3 in questo caso. 1506 01:02:02,050 --> 01:02:06,000 Così ora i numeri che dovrei stampare dovrebbe essere, come vedremo 1507 01:02:06,000 --> 01:02:08,450 qui - fanno incremento, quindi in realtà non è davvero incrementare 1508 01:02:08,450 --> 01:02:10,260 più, ma lasceremo il nome da solo - 1509 01:02:10,260 --> 01:02:11,590 2 e poi 8. 1510 01:02:11,590 --> 01:02:17,670 Ora, abbiamo l'inizio di una opportunità per la raffinatezza 1511 01:02:17,670 --> 01:02:21,570 qui, per cui questa cosa cubatura di moltiplicare un numero 1512 01:02:21,570 --> 01:02:24,680 di per sé per sé per sé si sente come questo potrebbe essere solo 1513 01:02:24,680 --> 01:02:27,920 utile avere in funzione, proprio come qualcuno ha deciso 1514 01:02:27,920 --> 01:02:30,430 anni fa - sai, tipo di utile se uno di noi si siede 1515 01:02:30,430 --> 01:02:33,120 printf e scrive in modo che il resto del mondo può essere utilizzato, 1516 01:02:33,120 --> 01:02:36,160 perché non ci sediamo e scrivere una funzione chiamata cubo 1517 01:02:36,160 --> 01:02:39,250 che fa questo cubatura per noi, così non abbiamo manualmente 1518 01:02:39,250 --> 01:02:41,500 attuare il concetto di cubatura valori qui? 1519 01:02:41,500 --> 01:02:44,040 >> Quindi, un esempio semplice, ma andiamo avanti e utilizzare questo è come un 1520 01:02:44,040 --> 01:02:46,280 opportunità di scrivere la nostra funzione. 1521 01:02:46,280 --> 01:02:49,110 Quindi fino ad ora, abbiamo usato solo principale, e abbiamo usato altri 1522 01:02:49,110 --> 01:02:51,780 funzioni delle persone, ma non hanno scritto la nostra. 1523 01:02:51,780 --> 01:02:52,650 Quindi qui si va. 1524 01:02:52,650 --> 01:02:56,330 Ho intenzione di andare avanti e scrivere una funzione chiamata cubo. 1525 01:02:56,330 --> 01:02:58,490 E ho intenzione di farlo prendere un ingresso. 1526 01:02:58,490 --> 01:03:02,070 Quindi il suo contributo sta per essere un numero intero. 1527 01:03:02,070 --> 01:03:03,570 E che cosa sta andando a fare? 1528 01:03:03,570 --> 01:03:08,500 E 'intenzione di dichiarare uscita int = ingresso tempi di ingresso 1529 01:03:08,500 --> 01:03:09,880 tempi di ingresso. 1530 01:03:09,880 --> 01:03:12,190 E poi sta andando a restituire l'output. 1531 01:03:12,190 --> 01:03:14,500 E poi devo essere specifico momento. 1532 01:03:14,500 --> 01:03:16,820 Questa funzione sta per restituire un int. 1533 01:03:16,820 --> 01:03:19,130 Ecco allora come si sarebbe scrivere funzioni personalizzate. 1534 01:03:19,130 --> 01:03:20,850 Per prima cosa decidere ciò che è il nome del tuo 1535 01:03:20,850 --> 01:03:21,720 funzione sarà. 1536 01:03:21,720 --> 01:03:23,964 E, in generale, qualcosa di esplicativo è buono, quindi mi 1537 01:03:23,964 --> 01:03:25,060 chiamano cubo. 1538 01:03:25,060 --> 01:03:27,180 Poi è necessario specificare che cosa sta per tornare, che cosa è 1539 01:03:27,180 --> 01:03:28,240 la sua uscita sarà. 1540 01:03:28,240 --> 01:03:29,595 E non abbiamo opzioni che molti ancora. 1541 01:03:29,595 --> 01:03:32,260 Int, char, float, bool, string. 1542 01:03:32,260 --> 01:03:34,260 Per ora, ho intenzione di attaccare con un int, perché lo voglio 1543 01:03:34,260 --> 01:03:35,880 per restituire un numero intero. 1544 01:03:35,880 --> 01:03:38,770 Poi si deve specificare quali sono i suoi ingressi, se presenti, sono. 1545 01:03:38,770 --> 01:03:41,570 E se cubo prende un argomento, prende qualcosa tra 1546 01:03:41,570 --> 01:03:44,970 parentesi, si deve dare tale argomento un nome in modo che 1547 01:03:44,970 --> 01:03:47,860 si può chiamare qualcosa come si sta implementando o scrivendo 1548 01:03:47,860 --> 01:03:50,550 questa funzione, e bisogna dargli un tipo, che in questo 1549 01:03:50,550 --> 01:03:51,810 caso sta per essere int. 1550 01:03:51,810 --> 01:03:54,690 Così, in breve, il cubo è una funzione che prende un numero intero 1551 01:03:54,690 --> 01:03:57,560 come input e restituisce un intero come output. 1552 01:03:57,560 --> 01:03:59,240 >> Allora che cosa fare con questo ingresso? 1553 01:03:59,240 --> 01:04:03,710 Beh, in linea 14, dichiaro un'uscita variabile chiamata, e io 1554 01:04:03,710 --> 01:04:07,410 assegnarle il valore, Ingresso volte orari di ingresso. 1555 01:04:07,410 --> 01:04:11,490 E poi torno uscita. 1556 01:04:11,490 --> 01:04:14,890 Allora, come faccio a usare questo, allora? 1557 01:04:14,890 --> 01:04:19,210 Che cosa devo cambiare questi personaggi evidenziati on line 1558 01:04:19,210 --> 01:04:21,006 7 da, cosa ne pensi? 1559 01:04:21,006 --> 01:04:21,800 PUBBLICO: [incomprensibile]. 1560 01:04:21,800 --> 01:04:25,570 DAVID J. MALAN: Sì, così cubo di x. 1561 01:04:25,570 --> 01:04:28,290 Quindi x è una variabile, il che significa che contiene un valore. 1562 01:04:28,290 --> 01:04:30,190 Fortunatamente, è di tipo integer. 1563 01:04:30,190 --> 01:04:34,280 E poiché x è un int, che significa che può passare in cubo. 1564 01:04:34,280 --> 01:04:39,500 E anche se sto ignorando il valore di x con il valore 1565 01:04:39,500 --> 01:04:42,780 di x cubo, come è avvenuto fino ad ora, ogni volta che si 1566 01:04:42,780 --> 01:04:46,150 hanno segno uguale e una riga di codice, la roba a destra 1567 01:04:46,150 --> 01:04:49,090 viene eseguito e poi viene assegnato al 1568 01:04:49,090 --> 01:04:50,150 valore a sinistra. 1569 01:04:50,150 --> 01:04:52,950 Quindi, l'ordine delle operazioni è come noi ci auguriamo. 1570 01:04:52,950 --> 01:04:56,620 Così fa questo lavoro? 1571 01:04:56,620 --> 01:04:58,410 Beh, fammi scendere qui. 1572 01:04:58,410 --> 01:04:59,970 Vorrei aprire la mia finestra di terminale. 1573 01:04:59,970 --> 01:05:03,610 Vorrei fanno incremento, Invio. 1574 01:05:03,610 --> 01:05:07,140 "Dichiarazione implicita di 'cubo' funzione non è valida in 1575 01:05:07,140 --> 01:05:13,700 C99. "Per inciso, C99 si riferisce al linguaggio C come era 1576 01:05:13,700 --> 01:05:16,790 definito nel 1999, che era un aggiornamento rispetto alla versione da 1577 01:05:16,790 --> 01:05:19,360 1989, che è un aggiornamento rispetto all'originale. 1578 01:05:19,360 --> 01:05:21,740 Ecco, questo è tutto ciò che i mezzi. 1579 01:05:21,740 --> 01:05:24,250 >> Che cosa vuol dire che "la dichiarazione implicita di 1580 01:05:24,250 --> 01:05:26,790 'cubo' funzione non è valida? "E 'proprio qui. 1581 01:05:26,790 --> 01:05:28,430 E 'proprio lì, in linea 12. 1582 01:05:28,430 --> 01:05:30,460 PUBBLICO: [incomprensibile]. 1583 01:05:30,460 --> 01:05:30,730 DAVID J. MALAN: Che cos'è? 1584 01:05:30,730 --> 01:05:32,470 PUBBLICO: Non è prima. 1585 01:05:32,470 --> 01:05:33,540 DAVID J. MALAN: Non è prima. 1586 01:05:33,540 --> 01:05:34,740 Quindi questa è la cosa. 1587 01:05:34,740 --> 01:05:38,190 C è una specie di stupido, o compilatori C sono un po 'stupido. 1588 01:05:38,190 --> 01:05:41,060 Hanno davvero solo fare quello che dicono loro di fare. 1589 01:05:41,060 --> 01:05:44,770 E loro, in particolare, solo leggere il codice in alto verso il basso, 1590 01:05:44,770 --> 01:05:45,620 sinistra a destra. 1591 01:05:45,620 --> 01:05:49,140 Quindi, se il compilatore, Clang, sta leggendo il codice, la linea 1, 1592 01:05:49,140 --> 01:05:50,120 capisce come farlo. 1593 01:05:50,120 --> 01:05:50,940 Oh, ecco che arriva principale. 1594 01:05:50,940 --> 01:05:53,000 Ok, fammi andare avanti e dichiarare una variabile x. 1595 01:05:53,000 --> 01:05:54,160 Vorrei stampare qualcosa. 1596 01:05:54,160 --> 01:05:55,890 La linea 7, cosa diavolo è cubo? 1597 01:05:55,890 --> 01:05:58,230 Non è dichiarata in stdio.h. 1598 01:05:58,230 --> 01:06:00,950 Non viene con C. non ho idea di cosa fare. 1599 01:06:00,950 --> 01:06:03,960 E così Clang bails giusto e si chiude con questo messaggio di errore. 1600 01:06:03,960 --> 01:06:05,850 Così siamo in grado di risolvere questo problema in un paio di modi. 1601 01:06:05,850 --> 01:06:10,530 Siamo in grado di insegnare ciò che Clang cubo è semplicemente spostando dove il 1602 01:06:10,530 --> 01:06:11,820 dichiarazione. 1603 01:06:11,820 --> 01:06:14,640 Così ho tagliato e incollato in cima principale. 1604 01:06:14,640 --> 01:06:17,770 Ora si rendono conto che solo perché principale non è più in primo luogo, è 1605 01:06:17,770 --> 01:06:19,150 comunque eseguito per impostazione predefinita. 1606 01:06:19,150 --> 01:06:20,060 Principale è principale. 1607 01:06:20,060 --> 01:06:21,022 E 'il nome della funzione di default. 1608 01:06:21,022 --> 01:06:22,930 Non importa dove è in un file. 1609 01:06:22,930 --> 01:06:26,910 Ma almeno ora Clang ha visto cubo prima di usarlo. 1610 01:06:26,910 --> 01:06:28,500 Quindi cerchiamo di vedere se Clang è più felice ora. 1611 01:06:28,500 --> 01:06:31,410 Fai incremento, è stato compilato questa volta. 1612 01:06:31,410 --> 01:06:33,060 >> Vorrei correre incremento. 1613 01:06:33,060 --> 01:06:34,810 E in effetti, sembra funzionare. 1614 01:06:34,810 --> 01:06:36,810 Ora, si può trovare con scenari in cui alla fine 1615 01:06:36,810 --> 01:06:38,650 non è possibile mettere ogni funzione 1616 01:06:38,650 --> 01:06:39,740 di sopra di ogni altra funzione. 1617 01:06:39,740 --> 01:06:42,140 Ti trovi in ​​difficoltà in questo ciclo infinito, in realtà, 1618 01:06:42,140 --> 01:06:43,480 dove questo ragazzo vuole essere qui, ma questo 1619 01:06:43,480 --> 01:06:44,390 ragazzo ha bisogno di essere lì. 1620 01:06:44,390 --> 01:06:45,830 In modo che non sempre funziona. 1621 01:06:45,830 --> 01:06:49,020 Quindi per fortuna, C ha una soluzione più elegante. 1622 01:06:49,020 --> 01:06:50,790 Ho intenzione di mettere questo dov'era, solo perché mi 1623 01:06:50,790 --> 01:06:53,390 preferisce, per una questione di principio, che la principale sempre 1624 01:06:53,390 --> 01:06:55,550 nella parte superiore, perché è solo bello vedere quello che questo programma 1625 01:06:55,550 --> 01:06:56,920 avviene per impostazione predefinita. 1626 01:06:56,920 --> 01:06:58,950 E che cosa ho intenzione di fare qui è dichiarare quello che si chiama 1627 01:06:58,950 --> 01:07:00,250 un prototipo. 1628 01:07:00,250 --> 01:07:05,730 Ho intenzione di ri-dichiarare la mia funzione cubo letteralmente 1629 01:07:05,730 --> 01:07:07,180 copia e incolla. 1630 01:07:07,180 --> 01:07:08,290 In realtà, non è letteralmente. 1631 01:07:08,290 --> 01:07:13,060 Così letteralmente copia e incolla linea 15 1632 01:07:13,060 --> 01:07:15,160 sopra la linea 6. 1633 01:07:15,160 --> 01:07:17,010 Non importa quale linea questo finisce in. 1634 01:07:17,010 --> 01:07:18,380 Capita di essere sulla linea 4. 1635 01:07:18,380 --> 01:07:19,950 Ma deve essere per prima principale. 1636 01:07:19,950 --> 01:07:21,150 Ma notare la differenza. 1637 01:07:21,150 --> 01:07:24,100 Linea 4 finisce con un punto e virgola, il che significa ehi, 1638 01:07:24,100 --> 01:07:27,510 Clang, prendere la mia parola che esiste una funzione 1639 01:07:27,510 --> 01:07:31,350 chiamato cubo che prende un int e restituisce un int. 1640 01:07:31,350 --> 01:07:33,020 Ma non ho intenzione di dirvi cosa si tratta ancora. 1641 01:07:33,020 --> 01:07:35,180 E pensa che io prometto di dirvi alla fine. 1642 01:07:35,180 --> 01:07:38,490 E in effetti, ora va bene che questo è al di sotto. 1643 01:07:38,490 --> 01:07:41,275 >> Quindi questo è generalmente migliore, perché poi in cima 1644 01:07:41,275 --> 01:07:44,240 il file, si può semplicemente snocciolare, fuoco rapido, una linea 1645 01:07:44,240 --> 01:07:46,470 ciascuno, quali sono i nomi delle funzioni sono, quale sia il loro 1646 01:07:46,470 --> 01:07:49,120 ingressi sono, quali sono le loro uscite sono. 1647 01:07:49,120 --> 01:07:52,210 E per essere più chiaro, ingresso generalmente significa argomento o 1648 01:07:52,210 --> 01:07:54,110 parametro, sinonimi. 1649 01:07:54,110 --> 01:07:56,890 Uscita significa valore di ritorno, che cosa fa 1650 01:07:56,890 --> 01:07:58,700 mano verso di me. 1651 01:07:58,700 --> 01:08:03,420 Quindi, in questo caso di specie, il cubo è stato dichiarato in alto, ma 1652 01:08:03,420 --> 01:08:06,940 definito, altrimenti noto come attuato, in basso. 1653 01:08:06,940 --> 01:08:09,620 Così ora torniamo qui e ritornare al. 1654 01:08:09,620 --> 01:08:13,430 Così ora lasciami andare avanti ed eseguire di fare, eseguire di nuovo incremento. 1655 01:08:13,430 --> 01:08:16,500 Ed ora sembra funzionare bene. 1656 01:08:16,500 --> 01:08:19,450 Così ora siamo in grado di andare avanti e scomporre qualcosa di simile al 1657 01:08:19,450 --> 01:08:23,720 birra esempio in questa quarta versione. 1658 01:08:23,720 --> 01:08:25,590 Permettetemi quindi di scorrere verso il basso qui. 1659 01:08:25,590 --> 01:08:28,149 E notate che ho preso questo tipo di lezione a cuore in questo momento. 1660 01:08:28,149 --> 01:08:31,140 Il fatto che stavo cantando la stessa strofa di nuovo e 1661 01:08:31,140 --> 01:08:34,130 ancora e ancora, la linea stesso coro nella canzone, si sentiva 1662 01:08:34,130 --> 01:08:36,439 piace perché non faccio fattore che fuori in una funzione? 1663 01:08:36,439 --> 01:08:38,470 E in effetti, questo dovrebbe essere uno dei motivi. 1664 01:08:38,470 --> 01:08:40,960 Oltre al fatto che qualcun altro al mondo potrebbe desiderare 1665 01:08:40,960 --> 01:08:42,390 di utilizzare una funzione cubo - 1666 01:08:42,390 --> 01:08:44,560 questo è un buon motivo per fattore qualcosa e scrivi il tuo 1667 01:08:44,560 --> 01:08:45,720 propria funzione personalizzata - 1668 01:08:45,720 --> 01:08:48,720 se c'è un pezzo di codice in un programma che fa solo 1669 01:08:48,720 --> 01:08:51,370 senso concettuale, che tipo di vuole dare un 1670 01:08:51,370 --> 01:08:53,740 nome - come in questo caso, coro - 1671 01:08:53,740 --> 01:08:57,380 allora si può scrivere allo stesso modo che, come una funzione separata. 1672 01:08:57,380 --> 01:08:59,560 Non c'è bisogno di scrivere tutto in main se solo 1673 01:08:59,560 --> 01:09:02,609 si sente più pulito per separare fuori e dargli un nome. 1674 01:09:02,609 --> 01:09:05,529 >> Quindi, in questo caso qui, si noti che ho un commento in cima 1675 01:09:05,529 --> 01:09:06,859 questa funzione, che canta solo circa il 1676 01:09:06,859 --> 01:09:08,630 numeri specificati di bottiglie. 1677 01:09:08,630 --> 01:09:10,609 Si noti qui che non ho bisogno di chiamare questi 1678 01:09:10,609 --> 01:09:12,520 cose di ingresso e uscita. 1679 01:09:12,520 --> 01:09:16,090 In realtà, questa volta ho appena chiamato il mio b ingresso per bottiglia. 1680 01:09:16,090 --> 01:09:19,960 E notare qui, nulla suggerisce che cosa? 1681 01:09:19,960 --> 01:09:21,309 Questo coro - 1682 01:09:21,309 --> 01:09:22,660 PUBBLICO: Non restituirlo. 1683 01:09:22,660 --> 01:09:23,870 DAVID J. MALAN: non restituisce un valore. 1684 01:09:23,870 --> 01:09:26,800 E in effetti, le funzioni non è necessario restituire i valori. 1685 01:09:26,800 --> 01:09:28,060 Hanno appena può fare qualcosa. 1686 01:09:28,060 --> 01:09:30,270 Essi possono avere i cosiddetti effetti collaterali, che in questo 1687 01:09:30,270 --> 01:09:33,109 caso è solo un mucchio di stampa sullo schermo. 1688 01:09:33,109 --> 01:09:36,580 Quindi notare che questo codice qui, ho letteralmente appena rubato 1689 01:09:36,580 --> 01:09:37,680 l'esempio precedente. 1690 01:09:37,680 --> 01:09:39,930 L'unica differenza è invece di usare i come mio 1691 01:09:39,930 --> 01:09:42,890 variabile, ora sto usando b come la mia variabile. 1692 01:09:42,890 --> 01:09:45,880 Così ho b qui, ho b qui, ho b 1693 01:09:45,880 --> 01:09:47,109 meno 1 qui. 1694 01:09:47,109 --> 01:09:49,279 Ma il codice è esattamente lo stesso. 1695 01:09:49,279 --> 01:09:52,529 Ma solo per mostrarvi ora come possiamo usare questo, lasciami andare 1696 01:09:52,529 --> 01:09:56,780 avanti e cambia in realtà si tratta di un ciclo for. 1697 01:09:56,780 --> 01:10:03,850 for (int i = n, i> n, i -). 1698 01:10:03,850 --> 01:10:06,230 >> Così ho rubato che dal nostro esempio precedente. 1699 01:10:06,230 --> 01:10:08,970 In precedenza, è in linea 37 che avrei iniziato 1700 01:10:08,970 --> 01:10:10,640 cantare questa canzone fastidioso. 1701 01:10:10,640 --> 01:10:15,810 Ma invece, sto solo andando a call now coro di i. 1702 01:10:15,810 --> 01:10:16,870 Fatto. 1703 01:10:16,870 --> 01:10:20,260 Così ora in ogni iterazione di questo ciclo, io chiamo questo altro 1704 01:10:20,260 --> 01:10:22,220 funzione, coro, che mi è capitato di scrivere. 1705 01:10:22,220 --> 01:10:24,110 Non è stato scritto da qualcun altro anni fa. 1706 01:10:24,110 --> 01:10:27,930 Ma coro, nel frattempo, utilizza printf per la stampa 1707 01:10:27,930 --> 01:10:29,840 queste quattro linee. 1708 01:10:29,840 --> 01:10:32,720 Ma il fatto che sto chiamando coro più e più volte in una 1709 01:10:32,720 --> 01:10:35,900 ciclo vuol dire che ho intenzione di ottenere, alla fine, la 1710 01:10:35,900 --> 01:10:39,310 esatto stessa canzone, come ho finora. 1711 01:10:39,310 --> 01:10:42,130 Così, in breve, ora se mi guardo indietro al mio codice, anche se 1712 01:10:42,130 --> 01:10:44,240 funzionalmente questo è equivalente, notare che è 1713 01:10:44,240 --> 01:10:46,020 di partenza per ottenere ancora più leggibile. 1714 01:10:46,020 --> 01:10:48,410 Io non so esattamente come GetInt 1715 01:10:48,410 --> 01:10:49,250 è implementato. 1716 01:10:49,250 --> 01:10:52,050 Francamente, io non so come coro è implementato. 1717 01:10:52,050 --> 01:10:52,970 Ma non mi importa. 1718 01:10:52,970 --> 01:10:55,620 Non mi interessa, perché ora posso sorta di, come un essere umano, leggere 1719 01:10:55,620 --> 01:10:57,050 tale da cima a fondo. 1720 01:10:57,050 --> 01:10:59,950 E perché le funzioni sono denominati in base a quello che 1721 01:10:59,950 --> 01:11:02,910 do, il mio codice è sempre leggibile. 1722 01:11:02,910 --> 01:11:05,190 E come i nostri programmi ottenere molto più complesso - 1723 01:11:05,190 --> 01:11:07,220 entro la fine del semestre, è scriverò centinaia di linee 1724 01:11:07,220 --> 01:11:10,970 di codice in linguaggi come PHP e Javascript e simili - 1725 01:11:10,970 --> 01:11:13,550 vi accorgerete che è molto più facile che per tenere traccia di 1726 01:11:13,550 --> 01:11:14,080 quello che hai fatto. 1727 01:11:14,080 --> 01:11:15,810 E quando si inizia a collaborare con gli amici o 1728 01:11:15,810 --> 01:11:19,010 partner o colleghi, sarete in grado di scrivere molto di più 1729 01:11:19,010 --> 01:11:22,910 massicci programmi di iniziare l'allenamento di base questi 1730 01:11:22,910 --> 01:11:23,990 nei moduli. 1731 01:11:23,990 --> 01:11:25,550 >> Quindi, con questo detto, perché non si parla di un giorno? 1732 01:11:25,550 --> 01:11:27,190 E ci vedremo il Mercoledì. 1733 01:11:27,190 --> 01:11:33,611 [Applausi]