1 00:00:00,000 --> 00:00:11,280 2 00:00:11,280 --> 00:00:13,650 >> SPEAKER 1: Va bene. 3 00:00:13,650 --> 00:00:14,390 Bentornato. 4 00:00:14,390 --> 00:00:19,260 Questa è la settimana Due di CS50, e abbiamo finora state usando funzioni ma 5 00:00:19,260 --> 00:00:20,830 gran parte di loro dato per scontato. 6 00:00:20,830 --> 00:00:23,430 Abbiamo usato printf che ha il effetto collaterale di stampa 7 00:00:23,430 --> 00:00:24,110 le cose sullo schermo. 8 00:00:24,110 --> 00:00:25,790 Abbiamo utilizzato get-int, ottenere galleggiare. 9 00:00:25,790 --> 00:00:29,230 >> Ma cosa succede se si vuole realmente creare le proprie funzioni, alcuni dei 10 00:00:29,230 --> 00:00:31,740 si potrebbe avere già iniziato a fare per il Problem Set One, anche se 11 00:00:31,740 --> 00:00:33,140 non strettamente necessario? 12 00:00:33,140 --> 00:00:37,150 Bene, andiamo avanti e rivisitare quella problema del solo chiedendo all'utente di 13 00:00:37,150 --> 00:00:40,660 il loro nome e la stampa qualcosa sul schermo, ma cercare di scomporre alcune 14 00:00:40,660 --> 00:00:44,000 della comunanza che abbiamo visto nel nostro codice finora. 15 00:00:44,000 --> 00:00:45,120 Quindi con questo voglio dire quanto segue. 16 00:00:45,120 --> 00:00:47,315 >> Ho intenzione di andare avanti e creare un nuovo programma, basta chiamare 17 00:00:47,315 --> 00:00:49,320 esso ciao.c come al solito. 18 00:00:49,320 --> 00:00:53,730 Ho intenzione di andare avanti e dare a me stesso includere io.h standard al top. 19 00:00:53,730 --> 00:00:57,040 Ho intenzione di dare anche io preventivamente la libreria CS50 in modo che 20 00:00:57,040 --> 00:00:59,080 Io non vengo sgridato dal compilatore. 21 00:00:59,080 --> 00:01:02,400 E ora ho intenzione di andare avanti e dichiarare int main, vuoto. 22 00:01:02,400 --> 00:01:09,020 >> E poi qui dentro, questo è dove voglio per cominciare a esternalizzare la funzionalità di 23 00:01:09,020 --> 00:01:12,090 qualche altra funzione che io stesso sono intenzione di scrivere, ma che non 24 00:01:12,090 --> 00:01:13,820 attualmente esistono. 25 00:01:13,820 --> 00:01:19,210 Per esempio, supponiamo che volevo scrivere una funzione che mi permette di 26 00:01:19,210 --> 00:01:23,830 stampare ciao, virgola e poi il nome di qualche utente. 27 00:01:23,830 --> 00:01:29,010 Piuttosto che continuare a fare printf ciao,% s, non sarebbe bello se 28 00:01:29,010 --> 00:01:33,380 c'erano solo una funzione chiamata Non printf ma il nome di stampa? 29 00:01:33,380 --> 00:01:36,600 >> Quindi, in altre parole, voglio essere in grado di scrivere un programma che fa un po ' 30 00:01:36,600 --> 00:01:37,710 qualcosa di simile a questo. 31 00:01:37,710 --> 00:01:42,070 In primo luogo, ho intenzione di dire la tua printf nome, inducendo in tal modo all'utente di 32 00:01:42,070 --> 00:01:46,150 mi dia il suo nome, e poi io sono intenzione di utilizzare le s stringa familiari a 33 00:01:46,150 --> 00:01:47,290 dichiarare una stringa. 34 00:01:47,290 --> 00:01:50,420 Dammi una variabile di tipo stringa, chiamano s, e conservare in che il 35 00:01:50,420 --> 00:01:52,120 risultato della chiamata ottenere stringa. 36 00:01:52,120 --> 00:01:56,060 Ma ora nelle scorse settimane, avrei un po 'noiosamente fatto ciao,% s / n. 37 00:01:56,060 --> 00:01:58,630 38 00:01:58,630 --> 00:02:02,570 >> E in altre parole, che abbiamo visto questa esempio un mucchio di volte, ed è un 39 00:02:02,570 --> 00:02:05,280 esempio banale, perché c'è solo un riga di codice in modo che non è davvero un 40 00:02:05,280 --> 00:02:06,860 grosso problema per continuare a digitare di nuovo. 41 00:02:06,860 --> 00:02:09,990 Ma supponiamo che questa riga di codice in realtà stavano diventando un peso, e 42 00:02:09,990 --> 00:02:12,900 non è una riga di codice, ma è 10 righe di codice un paio di settimane da oggi, 43 00:02:12,900 --> 00:02:15,190 e si sta solo stancando di copia e incolla o 44 00:02:15,190 --> 00:02:17,180 ridigitare lo stesso codice. 45 00:02:17,180 --> 00:02:22,100 Non sarebbe bello invece di fare printf ciao,% s, e così via, 46 00:02:22,100 --> 00:02:26,500 Non sarebbe bello se ci fosse solo una funzione chiamata nome di stampa che 47 00:02:26,500 --> 00:02:27,560 prende un argomento - 48 00:02:27,560 --> 00:02:29,120 in altre parole, ci vuole ingresso - 49 00:02:29,120 --> 00:02:30,620 e poi virgola. 50 00:02:30,620 --> 00:02:33,240 In modo che la funzione, non è vero sarebbe bello se che esiste? 51 00:02:33,240 --> 00:02:36,690 Allora non avrei dovuto preoccuparsi cosa printf è, ciò che% s e tutti 52 00:02:36,690 --> 00:02:39,400 queste complessità che sono non tutto ciò che interessante. 53 00:02:39,400 --> 00:02:40,570 Sono utili. 54 00:02:40,570 --> 00:02:44,700 >> Così il nome di stampa, purtroppo, non è stato inventato un po 'di più 40 anni fa. 55 00:02:44,700 --> 00:02:45,980 Nessuno ha pensato di scriverlo. 56 00:02:45,980 --> 00:02:48,300 Ma questo è il bello di avere un linguaggio di programmazione, come in 57 00:02:48,300 --> 00:02:52,930 Scratch è possibile definire blocchi personalizzati, in modo da in C e la maggior parte qualsiasi lingua, vero 58 00:02:52,930 --> 00:02:57,260 definire la propria funzionalità, può di definire le proprie funzioni. 59 00:02:57,260 --> 00:03:01,710 Così, anche se otteniamo principale automaticamente e gratuitamente, possiamo dichiarare 60 00:03:01,710 --> 00:03:02,730 nostre funzioni. 61 00:03:02,730 --> 00:03:05,670 >> Quindi ho intenzione di fare un po 'di spazio qui fino in alto, e ho intenzione di dichiarare la mia 62 00:03:05,670 --> 00:03:08,210 propria funzione che sta andando a guardare un po 'strano all'inizio, ma verremo 63 00:03:08,210 --> 00:03:09,400 di nuovo a questo non molto. 64 00:03:09,400 --> 00:03:12,310 Ho intenzione di dire nulla, in tal modo indica che questa funzione fa 65 00:03:12,310 --> 00:03:16,040 qualcosa, ha un effetto collaterale, ma non restituisce qualcosa a me in 66 00:03:16,040 --> 00:03:18,810 stesso modo in cui ottenere int o ottenere stringa stessa fa. 67 00:03:18,810 --> 00:03:22,450 E ho intenzione di dare a questa funzione un nome del nome di stampa, e ho intenzione di 68 00:03:22,450 --> 00:03:26,470 specificare che questo ragazzo sta andando a prendere una stringa, e ho intenzione di chiamare quel 69 00:03:26,470 --> 00:03:27,600 nome di stringa. 70 00:03:27,600 --> 00:03:32,100 Potrei chiamare tutto quello che voglio, ma io voglio che il mio codice per essere auto-documentazione. 71 00:03:32,100 --> 00:03:34,770 In altre parole, se uno di voi dovesse aprire il file e leggerlo, si potrebbe 72 00:03:34,770 --> 00:03:39,020 sorta di dedurre dal nome che ingresso che ruolo che dovrebbe svolgere. 73 00:03:39,020 --> 00:03:42,270 >> E ora sotto quello, ho intenzione di aprire parentesi graffa e chiusa parentesi graffa, 74 00:03:42,270 --> 00:03:47,140 e così notato ho seguito lo stesso modello su quattro linee attraverso sette come 75 00:03:47,140 --> 00:03:51,622 Ho seguito per una buona settimana più ora tra, diciamo, le linee e le nove 76 00:03:51,622 --> 00:03:53,400 14 che compongono principale. 77 00:03:53,400 --> 00:03:56,160 In altre parole, stampare il nome è un'altra funzione. 78 00:03:56,160 --> 00:03:58,990 Ora, il compilatore non ha intenzione di conoscere per chiamare automaticamente questa cosa 79 00:03:58,990 --> 00:04:02,670 perché ho letteralmente appena inventato, ma si sa ancora a chiamare principale 80 00:04:02,670 --> 00:04:08,710 automaticamente, e poi, naturalmente in linea 13, che io chiamo la mia funzione. 81 00:04:08,710 --> 00:04:12,805 E perché ho dichiarato che la funzione sulla linea quattro prima principale, 82 00:04:12,805 --> 00:04:16,579 questo sta per insegnare il compilatore quello preventivo, chiuse virgolette, "nome di stampa" 83 00:04:16,579 --> 00:04:18,140 significa e cosa si dovrebbe fare. 84 00:04:18,140 --> 00:04:22,700 Quindi, io sono sorta di dargli una nuova abitudine bloccare nel contesto di, diciamo, Scratch. 85 00:04:22,700 --> 00:04:27,240 >> Così qui, posso mettere che molto comune o il motivo ricorrente di codice Continuo 86 00:04:27,240 --> 00:04:32,300 iscritto in classe, printf Ciao% s,% s / n ", - 87 00:04:32,300 --> 00:04:36,720 88 00:04:36,720 --> 00:04:37,590 quello che voglio mettere qui? 89 00:04:37,590 --> 00:04:39,200 S? 90 00:04:39,200 --> 00:04:41,420 Quindi voglio mettere il nome in questo contesto. 91 00:04:41,420 --> 00:04:43,440 Quindi notare un po 'di una dicotomia qui. 92 00:04:43,440 --> 00:04:47,680 Perché io dichiaro la mia funzione e io ho un po 'arbitrariamente chiamato 93 00:04:47,680 --> 00:04:50,880 si stampa il nome, e perché ho specificati in parentesi che questo 94 00:04:50,880 --> 00:04:55,035 funzione prende un argomento, il tipo di che è una stringa - quindi è una parola 95 00:04:55,035 --> 00:05:00,010 o una frase o qualcosa del genere - e Chiamo quel nome argomento, che 96 00:05:00,010 --> 00:05:04,770 significa l'unica variabile che è in campo di applicazione, per così dire, è il nome. 97 00:05:04,770 --> 00:05:07,780 >> S esiste solo tra ciò che due parentesi graffe, naturalmente? 98 00:05:07,780 --> 00:05:12,990 Beh in realtà, proprio come la linea 10 attraverso 14, così proprio come il Lunedi non può usare 99 00:05:12,990 --> 00:05:17,650 S, ma quello che posso fare è passare S in nome di stampa. 100 00:05:17,650 --> 00:05:21,030 Stampa nome così succede per dare un alias, un sinonimo, un soprannome, 101 00:05:21,030 --> 00:05:24,400 chiamandolo nome, e ora utilizzarlo in questa linea. 102 00:05:24,400 --> 00:05:26,840 Così ora mi permetta di salvare questo, ridurre. 103 00:05:26,840 --> 00:05:31,250 >> Lasciatemi andare avanti e fare ciao. 104 00:05:31,250 --> 00:05:32,400 Sembra buono. 105 00:05:32,400 --> 00:05:36,110 Non sputare eventuali errori. . / Ciao Invio. 106 00:05:36,110 --> 00:05:37,020 Qual è il mio nome? 107 00:05:37,020 --> 00:05:38,060 David. 108 00:05:38,060 --> 00:05:39,270 E ciao Davide. 109 00:05:39,270 --> 00:05:41,820 Quindi, non è tutto così eccitante, ma basta pensare adesso. 110 00:05:41,820 --> 00:05:44,310 Si dispone ora di quello stesso ingrediente come abbiamo fatto in Scratch per 111 00:05:44,310 --> 00:05:45,420 fare le nostre funzioni. 112 00:05:45,420 --> 00:05:46,770 >> Ma c'è un po 'di Gotcha. 113 00:05:46,770 --> 00:05:50,620 Suppongo che non avevo proprio pensato questo attraverso e io in realtà senza 114 00:05:50,620 --> 00:05:54,250 davvero pensarci scritto che la funzione di quaggiù. 115 00:05:54,250 --> 00:05:55,420 Si sente perfettamente ragionevole. 116 00:05:55,420 --> 00:05:58,440 In Scratch non vi è alcuna nozione di posizione nei vostri script. 117 00:05:58,440 --> 00:06:00,670 Si potrebbe mettere uno qui, uno qui, uno qui, e potrebbe iniziare 118 00:06:00,670 --> 00:06:03,310 a guardare un po 'disordinato, se non lo fai stenderlo ordinatamente, ma non lo fa 119 00:06:03,310 --> 00:06:05,910 importa dove fisicamente gli script erano sullo schermo. 120 00:06:05,910 --> 00:06:09,660 Purtroppo in C - e questa è la differenza linguaggi come Java e Python 121 00:06:09,660 --> 00:06:13,600 e altri che si potrebbe avere familiarità con - purtroppo in C, per non 122 00:06:13,600 --> 00:06:15,830 importa, perché vedere che cosa sta succederà adesso. 123 00:06:15,830 --> 00:06:19,010 >> La funzione di default che sta succedendo eseguire è, naturalmente, principale. 124 00:06:19,010 --> 00:06:22,290 Principale è andare a chiamare il nome di stampa su linea otto, ma purtroppo, il 125 00:06:22,290 --> 00:06:26,660 compilatore non sa nemmeno che nome di stampa esiste fino a quando si arriva alla linea 11, 126 00:06:26,660 --> 00:06:28,520 che purtroppo è sarà troppo tardi. 127 00:06:28,520 --> 00:06:30,660 Quindi facciamolo fare ciao. 128 00:06:30,660 --> 00:06:32,950 E ora maledetti, due errori generati. 129 00:06:32,950 --> 00:06:36,050 Così ora mi permetta di scorrere verso l'alto per il molto in primo luogo, come si dovrebbe sempre fare, e 130 00:06:36,050 --> 00:06:39,560 conto che sta urlando a me, "Dichiarazione implicita di funzione 131 00:06:39,560 --> 00:06:40,540 stampare il nome. " 132 00:06:40,540 --> 00:06:43,860 >> Così abbiamo visto questo messaggio prima, dichiarazione implicita di funzione. 133 00:06:43,860 --> 00:06:48,080 Quando abbiamo visto che tipo di errore? 134 00:06:48,080 --> 00:06:49,180 Quando non ho incluso una biblioteca. 135 00:06:49,180 --> 00:06:53,470 Se ho dimenticato cs50.h e vorrei avere sgridato per ottenere stringa o ottenere int. 136 00:06:53,470 --> 00:06:56,880 Ma in questo caso, questa funzione di stampa nome non è in una libreria, giusto? 137 00:06:56,880 --> 00:07:00,230 E 'letteralmente in questo file, in modo da ciò che è veramente il problema? 138 00:07:00,230 --> 00:07:04,660 >> Beh, purtroppo in C, ti porta così incredibilmente letteralmente che se si 139 00:07:04,660 --> 00:07:08,640 desiderare una funzione chiamata nome di stampa esiste, hai per implementare 140 00:07:08,640 --> 00:07:11,940 che la funzione in cima della vostra codice in modo che sia accessibile ad abbassare 141 00:07:11,940 --> 00:07:15,070 funzioni, ma, francamente, che diventa sciatta molto rapidamente. 142 00:07:15,070 --> 00:07:18,160 Personalmente, mi piace mettere principale prima perché poi è molto chiaro che cosa questo 143 00:07:18,160 --> 00:07:19,890 programma fa al primo sguardo. 144 00:07:19,890 --> 00:07:23,290 E in più, è possibile ottenere in angolo strano casi in cui se x vuole chiamare 145 00:07:23,290 --> 00:07:27,530 y ma y potrebbe chiamare x, basta fisicamente non si può effettivamente mettere una 146 00:07:27,530 --> 00:07:28,540 sopra l'altro. 147 00:07:28,540 --> 00:07:31,230 >> Ma si scopre in C, possiamo risolvere questo molto semplice. 148 00:07:31,230 --> 00:07:34,010 Ho intenzione di mettere un po 'di spazio qui, e sto solo andando a 149 00:07:34,010 --> 00:07:38,170 preventivamente, anche se un po ' ridondante, andando ad insegnare il 150 00:07:38,170 --> 00:07:42,320 compilatore che esiste una funzione chiamò il nome di stampa, ci vuole una stringa, 151 00:07:42,320 --> 00:07:46,330 e ho intenzione di chiamare il suo nome e virgola. 152 00:07:46,330 --> 00:07:50,220 >> Quindi questo ora in linea a quattro, che abbiamo non hanno visto prima, è una dichiarazione 153 00:07:50,220 --> 00:07:53,940 di un nome di funzione di stampa, ma è solo una promessa che questa funzione 154 00:07:53,940 --> 00:07:56,620 eventualmente definire, eventualmente essere attuato. 155 00:07:56,620 --> 00:08:00,180 Questo ora posso lasciare da solo perché ora questa è la definizione, la 156 00:08:00,180 --> 00:08:04,090 implementazione, una sorta di ultimo miglio di applicazione del presente 157 00:08:04,090 --> 00:08:05,130 particolare funzione. 158 00:08:05,130 --> 00:08:08,450 Quindi francamente che è stupido, è fastidioso, ma questo è il modo è C, ed è 159 00:08:08,450 --> 00:08:12,050 perché ti prende molto alla lettera e, come un computer francamente dovrebbe, 160 00:08:12,050 --> 00:08:16,020 solo fa esattamente quello che gli si dice di fare, e in modo che l'ordinamento è importante. 161 00:08:16,020 --> 00:08:18,940 >> Modo da tenere a mente e di nuovo, inizia a notare la ricorrenza di modelli. 162 00:08:18,940 --> 00:08:21,850 Le probabilità sono che sarà, se non si dispone di già, inizia a incontrare i messaggi 163 00:08:21,850 --> 00:08:24,700 come questo, che a prima vista sembrano completamente criptico, ma se si inizia 164 00:08:24,700 --> 00:08:29,000 alla ricerca di queste parole chiave, come "Dichiarazione implicita", parlare di un 165 00:08:29,000 --> 00:08:32,380 funzione in questo caso - e francamente, è a volte anche ottenere un po 'di verde 166 00:08:32,380 --> 00:08:35,010 simbolo carota che ti dice dove il problema probabilmente è - 167 00:08:35,010 --> 00:08:40,980 si può iniziare a lavorare il vostro senso attraverso ancora i messaggi di errore non visto. 168 00:08:40,980 --> 00:08:45,860 Tutte le domande su come scrivere le propria funzione in questo modo? 169 00:08:45,860 --> 00:08:47,540 >> Facciamo qualcosa che è un po 'più convincente. 170 00:08:47,540 --> 00:08:51,760 Invece di fare solo qualcosa che ha un effetto collaterale di stampa, lasciami andare 171 00:08:51,760 --> 00:08:55,340 avanti e salvare un nuovo file, e faremo chiamare questo positive.c, anche se è 172 00:08:55,340 --> 00:08:57,600 sarà un po 'diverso rispetto l'ultima volta. 173 00:08:57,600 --> 00:09:01,910 E questa volta, voglio re-implementare esempio positive.C della scorsa volta, che 174 00:09:01,910 --> 00:09:04,430 è costringere l'utente a dare me un numero intero positivo. 175 00:09:04,430 --> 00:09:07,280 Ma ho dovuto usare ottenere int ultima volta. 176 00:09:07,280 --> 00:09:10,780 Non sarebbe stato bello se ci fosse una funzione chiamata ottenere int positivo 177 00:09:10,780 --> 00:09:13,610 che ho potuto solo affidare questo pezzo di funzionalità? 178 00:09:13,610 --> 00:09:16,480 Quindi la differenza qui è faremo implementare ottenere int positivo, ma a differenza di 179 00:09:16,480 --> 00:09:20,330 Nome di stampa che ha avuto un effetto collaterale - è non ha prodotto qualcosa a me come 180 00:09:20,330 --> 00:09:21,710 un numero o una stringa - 181 00:09:21,710 --> 00:09:25,510 get int positivo è, ovviamente, sta per ritorno, si spera, un int positivo. 182 00:09:25,510 --> 00:09:26,170 >> Quindi cerchiamo di fare questo. 183 00:09:26,170 --> 00:09:30,840 Includi cs50.h, Include di serie io.h. 184 00:09:30,840 --> 00:09:33,520 Int. void main. 185 00:09:33,520 --> 00:09:42,160 E ora qui, ho intenzione di andare avanti e diciamo int, chiamano n, è uguale 186 00:09:42,160 --> 00:09:44,270 ottenere int positivo. 187 00:09:44,270 --> 00:09:49,080 E proprio come ottenere int esiste già perché il personale ha scritto, io vado 188 00:09:49,080 --> 00:09:53,950 di assumere per il momento che ottiene int positivo esiste, e ora sto andando 189 00:09:53,950 --> 00:09:57,730 di andare avanti e dire printf, grazie per l'% i / n ", n. 190 00:09:57,730 --> 00:10:02,940 191 00:10:02,940 --> 00:10:07,770 >> Così ora se compilo questo programma, che cosa che sta per accadere nel mio terminale 192 00:10:07,770 --> 00:10:09,075 finestra nella parte inferiore dello schermo? 193 00:10:09,075 --> 00:10:11,580 194 00:10:11,580 --> 00:10:13,900 Ho intenzione di ottenere che probabilmente stesso errore di prima. 195 00:10:13,900 --> 00:10:14,570 Quindi proviamo questo. 196 00:10:14,570 --> 00:10:16,450 Fai positivo. 197 00:10:16,450 --> 00:10:19,900 E ancora, dichiarazione implicita di funzione, ottenere int positivo. 198 00:10:19,900 --> 00:10:21,970 Così siamo in grado di risolvere questo in un paio di modi. 199 00:10:21,970 --> 00:10:27,310 Ho intenzione di fare cose semplici e poco mettere la mia dichiarazione su qui e ottenere 200 00:10:27,310 --> 00:10:28,120 int positivo. 201 00:10:28,120 --> 00:10:29,720 Ho bisogno della cosiddetta firma. 202 00:10:29,720 --> 00:10:32,410 La firma si riferisce solo per l'estetica del 203 00:10:32,410 --> 00:10:34,090 prima riga del programma. 204 00:10:34,090 --> 00:10:37,420 Così che cosa dovrebbe ottenere positivi int di ritorno? 205 00:10:37,420 --> 00:10:37,970 >> Quindi un int. 206 00:10:37,970 --> 00:10:41,540 Intendo idealmente, sarebbe tornare qualcosa come int positivo, ma che 207 00:10:41,540 --> 00:10:42,160 non esiste. 208 00:10:42,160 --> 00:10:45,280 Noi non abbiamo visto che tra i nostri dati tipi, quindi abbiamo a che fare con la 209 00:10:45,280 --> 00:10:47,170 fatto di avere ben pochi tipi di dati con cui lavorare. 210 00:10:47,170 --> 00:10:50,360 Ma siamo in grado di restituire un int e basta fiducia che sarà positivo. 211 00:10:50,360 --> 00:10:52,690 E 'intenzione di essere chiamato ottenere int positivo. 212 00:10:52,690 --> 00:10:55,122 >> E ora come circa i suoi argomenti? 213 00:10:55,122 --> 00:10:56,440 Ci vuole alcun input? 214 00:10:56,440 --> 00:10:58,280 Ha bisogno di alcun input? 215 00:10:58,280 --> 00:11:00,900 Quindi non ha bisogno di sapere in niente anticipo. 216 00:11:00,900 --> 00:11:03,220 Ricevi stringa non, ottiene int non lo fa. 217 00:11:03,220 --> 00:11:06,430 Printf fa - ha bisogno di avere un po 'di Ingresso passò in esso - e il nome di stampa 218 00:11:06,430 --> 00:11:09,020 necessari alcuni input, ma ottenere int positivo non lo fa. 219 00:11:09,020 --> 00:11:11,530 Quindi ho intenzione di esplicito raccontare il vuoto compilatore. 220 00:11:11,530 --> 00:11:13,470 Void è l'assenza di qualsiasi altra cosa. 221 00:11:13,470 --> 00:11:17,990 Quindi nulla significa nulla sta dentro di tali parentesi, virgola. 222 00:11:17,990 --> 00:11:20,840 >> E adesso in fondo il mio file - e ancora una volta, Sono solo tipo di anal 223 00:11:20,840 --> 00:11:23,640 qui mettendo principale nella parte superiore, che è buona pratica, perché in questo modo, 224 00:11:23,640 --> 00:11:26,220 in qualsiasi momento voi o qualcun altro apre il file, il 225 00:11:26,220 --> 00:11:27,400 funzionalità è proprio lì. 226 00:11:27,400 --> 00:11:29,660 È possibile immergersi in da zero. 227 00:11:29,660 --> 00:11:34,190 Così ora ho intenzione di duplicare questo, ottenere int vuoto positivo, ma non sono 228 00:11:34,190 --> 00:11:35,430 andando a colpire un punto e virgola ora. 229 00:11:35,430 --> 00:11:38,280 Ho intenzione di aprire parentesi graffe, e ora ho bisogno di prendere in prestito 230 00:11:38,280 --> 00:11:39,700 alcune idee da Lunedi. 231 00:11:39,700 --> 00:11:44,450 >> Quindi, come si ricorderà, abbiamo fatto qualcosa come eseguire le seguenti operazioni mentre 232 00:11:44,450 --> 00:11:45,830 una cosa era vera. 233 00:11:45,830 --> 00:11:46,630 E che cosa ho fatto? 234 00:11:46,630 --> 00:11:51,540 Ho fatto qualcosa di simile a dare me un numero intero positivo, 235 00:11:51,540 --> 00:11:52,430 po 'di un prompt. 236 00:11:52,430 --> 00:11:53,540 Potrei usare le parole che voglio. 237 00:11:53,540 --> 00:11:54,960 E poi ho usato quello? 238 00:11:54,960 --> 00:11:59,530 Int. n è uguale a ottenere int, Senza argomenti ad esso. 239 00:11:59,530 --> 00:12:00,550 >> E notare la differenza. 240 00:12:00,550 --> 00:12:04,680 Quando si chiama una funzione, quando si utilizza una funzione, non è messo in vuoto. 241 00:12:04,680 --> 00:12:08,570 Tu fai solo che quando si dichiara una funzione, insegnando il compilatore che cosa 242 00:12:08,570 --> 00:12:09,780 si dovrebbe aspettare. 243 00:12:09,780 --> 00:12:11,650 Quindi non c'è bisogno di mettere nulla lì da soli. 244 00:12:11,650 --> 00:12:12,940 >> E ora che cosa era la mia condizione? 245 00:12:12,940 --> 00:12:19,670 Ebbene, n non è uguale a positivo, ma questo è solo pseudo-codice. 246 00:12:19,670 --> 00:12:22,530 Così come esprimo questo modo più pulito? 247 00:12:22,530 --> 00:12:24,090 Così minore o uguale a zero. 248 00:12:24,090 --> 00:12:26,250 Quindi, di nuovo, nota che si può fare minore o uguale a. 249 00:12:26,250 --> 00:12:28,100 Anche se è due separati simboli, è possibile farlo su 250 00:12:28,100 --> 00:12:29,350 la tastiera in quanto tale. 251 00:12:29,350 --> 00:12:33,950 >> Ma c'è ancora un bug che Ho sbagliato l'ultima volta troppo. 252 00:12:33,950 --> 00:12:36,950 Devo dichiarare - 253 00:12:36,950 --> 00:12:37,460 esattamente. 254 00:12:37,460 --> 00:12:39,640 Devo dichiarare n fuori del ciclo. 255 00:12:39,640 --> 00:12:44,180 Quindi ho bisogno di mettere n fino qui, e non mi voglia di ri-dichiarare in qui 256 00:12:44,180 --> 00:12:46,480 perché ho una nuova variabile. 257 00:12:46,480 --> 00:12:48,860 Voglio solo assegnare un valore a qui. 258 00:12:48,860 --> 00:12:54,320 >> E ora non ho ancora finito qui. 259 00:12:54,320 --> 00:12:57,290 Permettetemi di andare avanti di me stesso e fingo ho finito. 260 00:12:57,290 --> 00:13:01,220 Fai positivo, ed ora c'è un nuovo errore. 261 00:13:01,220 --> 00:13:04,550 Controllo a fine- funzione non void. 262 00:13:04,550 --> 00:13:07,760 Quindi nuovo messaggio di errore, ma se tipo di prendere in giro a parte ciascuna delle parole, 263 00:13:07,760 --> 00:13:09,620 probabilmente accenna a ciò che è sbagliato. 264 00:13:09,620 --> 00:13:11,240 >> Controllare. 265 00:13:11,240 --> 00:13:14,250 Mezzi di controllo solo per l'ordine di operazioni in un programma. 266 00:13:14,250 --> 00:13:16,510 Il computer è in controllo e qualcosa è andato storto. 267 00:13:16,510 --> 00:13:18,510 Così raggiunge la fine del una funzione non nulla. 268 00:13:18,510 --> 00:13:21,760 Che funzione è apparentemente riferendo? 269 00:13:21,760 --> 00:13:24,790 Quale funzione è non-vuoto? 270 00:13:24,790 --> 00:13:27,400 Così ottenere int positivo, e un po ' confusione in quel pozzo, 271 00:13:27,400 --> 00:13:29,010 è una specie di vuoto. 272 00:13:29,010 --> 00:13:33,070 Ha una specificazione del vuoto per la sua argomenti, ma la sua produzione sta per 273 00:13:33,070 --> 00:13:34,540 essere di tipo n. 274 00:13:34,540 --> 00:13:37,260 Così la parola a sinistra è il tipo cosiddetto ritorno. 275 00:13:37,260 --> 00:13:40,320 La parola all'interno ecco le argomentazioni zero o più 276 00:13:40,320 --> 00:13:41,970 che una funzione prende. 277 00:13:41,970 --> 00:13:44,060 >> Quindi, che cosa devo fare? 278 00:13:44,060 --> 00:13:47,650 A questo punto del mio codice, riga 21 dove il prompt lampeggiante ora è, io 279 00:13:47,650 --> 00:13:51,430 avere un int positiva all'interno della variabile chiamata n. 280 00:13:51,430 --> 00:13:55,200 Come faccio a dare di nuovo al principale? 281 00:13:55,200 --> 00:13:55,960 Letteralmente. 282 00:13:55,960 --> 00:13:59,320 Rientro n virgola. 283 00:13:59,320 --> 00:14:04,090 >> Così come Colton tornato un pezzo di carta con una risposta a me facendo cadere 284 00:14:04,090 --> 00:14:07,020 quel pezzo di carta nel piccolo nero scatola sul tavolo, per farlo in 285 00:14:07,020 --> 00:14:10,100 codice, è letteralmente basta scrivere, tornare n, ed è come se fossero Colton 286 00:14:10,100 --> 00:14:12,140 porgendomi qualcosa fisica. 287 00:14:12,140 --> 00:14:15,870 In questo caso, ciò che sta accadendo è ottenere int positivo sta per riconsegnare 288 00:14:15,870 --> 00:14:19,220 ciò che è presumibilmente un positivo numero intero a chi? 289 00:14:19,220 --> 00:14:21,380 Da dove viene quel valore a finire? 290 00:14:21,380 --> 00:14:29,080 Che finisce in questa variabile, n, e poi si procede con la linea di nove. 291 00:14:29,080 --> 00:14:31,920 >> Quindi, in altre parole, al fine di operazioni, questo programma si avvia 292 00:14:31,920 --> 00:14:34,430 esecuzione, e il compilatore realizza, oh, si desidera che la biblioteca? 293 00:14:34,430 --> 00:14:36,310 Lasciami andare afferrare qualunque cosa c'è dentro che. 294 00:14:36,310 --> 00:14:37,750 Oh, vuoi la libreria IO standard? 295 00:14:37,750 --> 00:14:39,660 Lasciami andare afferrare qualunque cosa c'è dentro che. 296 00:14:39,660 --> 00:14:44,510 Che cosa fa il compilatore a dire a se stesso quando colpisce la linea a quattro? 297 00:14:44,510 --> 00:14:47,980 Oh, hai promesso di attuare il funzione chiamata ottenere positivo, ma 298 00:14:47,980 --> 00:14:50,820 torneremo a quella dopo, qualcosa del genere. 299 00:14:50,820 --> 00:14:53,450 >> Int. void main significa solo qui è il coraggio del mio programma. 300 00:14:53,450 --> 00:14:54,990 Linea sette è solo una parentesi graffa. 301 00:14:54,990 --> 00:14:59,540 Linea otto sta dicendo a sinistra, danno me 32 bit per un numero intero, la chiamano n. 302 00:14:59,540 --> 00:15:02,160 Sul lato destro, e ' dicendo ottenere int positivo. 303 00:15:02,160 --> 00:15:07,120 Ora Facciamo una pausa quella storia perché ora Non tengo in movimento il mio cursore verso il basso. 304 00:15:07,120 --> 00:15:11,720 Il mio cursore ora va giù qui perché ora ottenere int positivo esegue. 305 00:15:11,720 --> 00:15:13,100 Int n è dichiarata. 306 00:15:13,100 --> 00:15:14,040 Effettuare le seguenti operazioni. 307 00:15:14,040 --> 00:15:16,090 Printf mi dà un numero intero positivo. 308 00:15:16,090 --> 00:15:19,740 >> Prendi un int da parte dell'utente, conservarla in n, e magari farlo ancora e ancora. 309 00:15:19,740 --> 00:15:23,010 Questo ciclo significa che questo codice potrebbe eseguire su e giù come questo di nuovo 310 00:15:23,010 --> 00:15:25,810 e ancora, ma quando l'utente finalmente collabora e mi dà un positivo 311 00:15:25,810 --> 00:15:31,750 int, mi ha colpito la linea 21, a questo punto il numero viene restituito, e quale 312 00:15:31,750 --> 00:15:34,280 devo sottolineare adesso? 313 00:15:34,280 --> 00:15:35,070 Nove. 314 00:15:35,070 --> 00:15:39,010 Controllo, per così dire, ritorna alla linea nove. 315 00:15:39,010 --> 00:15:40,650 Questa è la linea che è ora in carica. 316 00:15:40,650 --> 00:15:43,250 >> Ecco, questo è quello che sta accadendo tutto questa volta sotto la cappa, ma 317 00:15:43,250 --> 00:15:46,480 quando abbiamo funzioni utilizzate come printf o persino ottenere stringa che qualcun altro 318 00:15:46,480 --> 00:15:50,600 ha scritto per voi, il controllo era stato consegnato off a qualcun altro la linea di codice 319 00:15:50,600 --> 00:15:51,290 per linea per linea. 320 00:15:51,290 --> 00:15:53,770 E 'solo che non poteva vederla e abbiamo non poteva davvero rappresentare in questo 321 00:15:53,770 --> 00:15:57,620 programma perché è in qualche altra file sul disco rigido 322 00:15:57,620 --> 00:16:00,000 a nostra insaputa. 323 00:16:00,000 --> 00:16:02,100 Quindi cerchiamo di fatto compilare ed eseguire questo momento. 324 00:16:02,100 --> 00:16:03,890 >> Fai positivo. 325 00:16:03,890 --> 00:16:05,260 Compilare, questo è il progresso. 326 00:16:05,260 --> 00:16:06,650 . / Positivo. 327 00:16:06,650 --> 00:16:08,020 Dammi un numero intero positivo. 328 00:16:08,020 --> 00:16:08,800 Cerchiamo di essere difficile. 329 00:16:08,800 --> 00:16:10,430 Negativa 1. 330 00:16:10,430 --> 00:16:11,360 Zero. 331 00:16:11,360 --> 00:16:13,370 Diamogli 50. 332 00:16:13,370 --> 00:16:18,100 Grazie per il 50, e così il controllo ora è tornato. 333 00:16:18,100 --> 00:16:21,750 Tutte le domande, poi, su quello? 334 00:16:21,750 --> 00:16:23,180 Sì? 335 00:16:23,180 --> 00:16:25,630 >> [Incomprensibile]. 336 00:16:25,630 --> 00:16:26,130 >> Dire di nuovo. 337 00:16:26,130 --> 00:16:27,860 Ah, bella domanda. 338 00:16:27,860 --> 00:16:31,100 Quindi, si potrebbe notare un parallelo che Sono una specie di taglio di un angolo su. 339 00:16:31,100 --> 00:16:35,420 In linea 12, che sto dicendo, ottenere int positivo restituisce un int, ma da quello stesso 340 00:16:35,420 --> 00:16:39,660 logica, ora ovvio che in linea sei, sto dicendo che ritorna principali 341 00:16:39,660 --> 00:16:44,040 un int, ma cosa abbiamo mai avuto in uno qualsiasi dei nostri programmi? 342 00:16:44,040 --> 00:16:46,470 Non abbiamo mai avuto menzione di questo ritorno parola chiave. 343 00:16:46,470 --> 00:16:49,970 >> Così si scopre che in C, almeno la versione di esso che stiamo usando 344 00:16:49,970 --> 00:16:55,750 realizzato nel 1999, tecnicamente, questo è accade per voi automaticamente. 345 00:16:55,750 --> 00:16:59,300 Ogni volta che si implementa un programma e si implementare una funzione chiamata main, 346 00:16:59,300 --> 00:17:04,230 che la funzione restituisce zero default se non si dice altrimenti, 347 00:17:04,230 --> 00:17:05,849 e zero è solo una convenzione. 348 00:17:05,849 --> 00:17:09,430 Il mondo restituisce zero in tal modo indicando che tutto va bene, 349 00:17:09,430 --> 00:17:13,040 efficacemente lasciandoci con quattro miliardi possibili cose che potrebbero andare 350 00:17:13,040 --> 00:17:17,530 sbagliato in modo che se torniamo uno, che potrebbe significare un codice che indica questa 351 00:17:17,530 --> 00:17:18,310 cosa è andato storto. 352 00:17:18,310 --> 00:17:20,589 Potremmo tornare due, il che significa quest'altra cosa è andato storto. 353 00:17:20,589 --> 00:17:23,440 Potremmo tornare quattro miliardi, che significa quest'altra cosa è andato storto. 354 00:17:23,440 --> 00:17:27,170 >> E se ora si pensa proprio PC o Mac, si potrebbe ricordare che 355 00:17:27,170 --> 00:17:29,610 a volte si ottiene messaggi d'errore criptici dal software che si sta 356 00:17:29,610 --> 00:17:32,650 utilizzando, e talvolta ha un umano descrizione di facile, ma c'è 357 00:17:32,650 --> 00:17:35,265 Spesso un codice o un numero sullo schermo? 358 00:17:35,265 --> 00:17:37,800 Se questo non viene a mente, basta tenere d'occhio per esso. 359 00:17:37,800 --> 00:17:40,790 Questo è in genere quello che questi i codici si riferiscono. 360 00:17:40,790 --> 00:17:44,200 Sono inclusi in Microsoft Word e altri programmi in modo che se si compila una 361 00:17:44,200 --> 00:17:48,850 bug report con la società, è possibile dite loro, oh, ho ottenuto il numero di errore 45. 362 00:17:48,850 --> 00:17:51,750 E alcuni indietro programmatore presso l'azienda può osservare che nel suo 363 00:17:51,750 --> 00:17:54,940 codice e dire, oh, ecco perché ho fatto questo bug ed è per questo che l'utente 364 00:17:54,940 --> 00:17:56,240 ottenuto questo messaggio. 365 00:17:56,240 --> 00:17:59,490 >> Ma, francamente, è solo un po ' distrazione e un po 'noioso per 366 00:17:59,490 --> 00:18:02,130 concludere che, almeno sulla nostra primi programmi, quindi abbiamo 367 00:18:02,130 --> 00:18:02,970 stato omettendo di esso. 368 00:18:02,970 --> 00:18:07,450 Ma tutto questo tempo ogni uno dei vostri funzioni di principale ha segretamente avuto questa 369 00:18:07,450 --> 00:18:11,600 linea aggiunta automaticamente per voi dal compilatore, solo per convenzione a 370 00:18:11,600 --> 00:18:13,172 risparmiare un po 'di tempo. 371 00:18:13,172 --> 00:18:14,620 >> [Incomprensibile]. 372 00:18:14,620 --> 00:18:16,250 >> Non è necessario includerlo nel principale. 373 00:18:16,250 --> 00:18:16,700 Questo va bene. 374 00:18:16,700 --> 00:18:20,260 Si ha bisogno di comprendere che se si dovesse implementazione di una funzione come questa. 375 00:18:20,260 --> 00:18:22,850 In caso contrario, l'appartamento funzione fuori non avrebbe funzionato. 376 00:18:22,850 --> 00:18:24,480 Ma nella principale, non è necessario. 377 00:18:24,480 --> 00:18:28,450 In una settimana o due, inizieremo ottenere in quella abitudine una volta vogliamo iniziare 378 00:18:28,450 --> 00:18:29,690 significare errori. 379 00:18:29,690 --> 00:18:32,550 Davvero buona domanda. 380 00:18:32,550 --> 00:18:36,880 >> Pausa verbale così veloce a dire che questo Venerdì, non saremo pranzando 381 00:18:36,880 --> 00:18:39,980 di per sé, ma saremo a cena con alcuni degli studenti e del personale. 382 00:18:39,980 --> 00:18:42,940 Se vuoi unirti a noi, si sentono libero di andare a cs50.net/rsvp. 383 00:18:42,940 --> 00:18:45,030 06:00 questo Venerdì. 384 00:18:45,030 --> 00:18:47,990 Lo spazio è, come sempre, limitato, ma ti continuare a fare questi su un quasi 385 00:18:47,990 --> 00:18:51,420 base settimanale se lo spazio esaurisce questa settimana. 386 00:18:51,420 --> 00:18:56,160 >> Quindi il colpo di scena che abbiamo lasciato su Lunedi è stato che le stringhe possono effettivamente 387 00:18:56,160 --> 00:19:00,520 essere indicizzato in, che solo voi significa può ottenere con il primo carattere, il 388 00:19:00,520 --> 00:19:03,770 secondo carattere, il terzo carattere e così via, perché è possibile 389 00:19:03,770 --> 00:19:07,860 effettivamente pensare a una stringa, come ciao, come in questo caso cinque 390 00:19:07,860 --> 00:19:09,670 lettere all'interno delle caselle. 391 00:19:09,670 --> 00:19:13,370 E si può ottenere in ciascuna di quelle scatole con quello che sintassi abbiamo 392 00:19:13,370 --> 00:19:15,230 introdurre il Lunedi? 393 00:19:15,230 --> 00:19:16,760 Quelle parentesi quadre sulla tastiera. 394 00:19:16,760 --> 00:19:18,980 Che appena significava andare in posizione zero. 395 00:19:18,980 --> 00:19:22,840 >> Si comincia a contare da zero, quindi staffa pari a zero significa h, una staffa 396 00:19:22,840 --> 00:19:25,170 significa e, e così via. 397 00:19:25,170 --> 00:19:28,490 E così per tutto il tempo in cui siamo stati utilizzando stringhe e digitando "ciao" 398 00:19:28,490 --> 00:19:31,250 e il "mondo" e altre cose su lo schermo, è stato memorizzato 399 00:19:31,250 --> 00:19:32,820 in scatole come questa. 400 00:19:32,820 --> 00:19:33,370 E prendere una supposizione. 401 00:19:33,370 --> 00:19:37,470 Che cosa significa ogni casella rappresenta fisicamente all'interno del vostro computer? 402 00:19:37,470 --> 00:19:38,250 >> [Incomprensibile]. 403 00:19:38,250 --> 00:19:39,150 >> Siamo spiacenti? 404 00:19:39,150 --> 00:19:39,580 >> Personaggi. 405 00:19:39,580 --> 00:19:44,760 >> Quindi un personaggio, sicuramente nel caso di stringhe, e un carattere è solo 406 00:19:44,760 --> 00:19:46,800 otto bit o un byte. 407 00:19:46,800 --> 00:19:49,550 Quindi probabilmente sono almeno vagamente a conoscenza del fatto che il vostro 408 00:19:49,550 --> 00:19:50,500 computer dispone di memoria. 409 00:19:50,500 --> 00:19:52,110 Ha due tipi di memoria, almeno. 410 00:19:52,110 --> 00:19:54,810 Uno è il disco rigido in cui si salva roba in modo permanente, e questo è 411 00:19:54,810 --> 00:19:57,400 tipicamente grande in modo da poter avere i filmati e musica e così via. 412 00:19:57,400 --> 00:20:04,010 >> Poi hai un altro tipo di memoria chiamato RAM, R-A-M, Accesso Casuale 413 00:20:04,010 --> 00:20:07,510 Memoria, e questo è il tipo di memoria che viene utilizzato quando il computer è 414 00:20:07,510 --> 00:20:11,520 esecuzione, ma se si perde il potere o il vostro batteria muore, tutto ciò che è memorizzato 415 00:20:11,520 --> 00:20:15,300 nella RAM scompare se si perde potenza tutto perché non è 416 00:20:15,300 --> 00:20:16,060 persistente. 417 00:20:16,060 --> 00:20:19,120 In genere si hanno, in questi giorni, una concerto di esso, due concerti, forse più. 418 00:20:19,120 --> 00:20:23,490 E la testa di RAM è che è molto più molto, molto più veloce rispetto ai dischi rigidi 419 00:20:23,490 --> 00:20:27,390 o anche drives allo stato solido in questi giorni, ma è in genere più costoso così 420 00:20:27,390 --> 00:20:28,480 hai meno di esso. 421 00:20:28,480 --> 00:20:32,400 >> Quindi la conversazione di oggi si riferisce in realtà in RAM, che tipo di memoria che 422 00:20:32,400 --> 00:20:35,270 esiste solo finché c'è potere essere alimentato nel computer. 423 00:20:35,270 --> 00:20:40,530 Così, quando si digita in H-E-L-L-O, immettere il la tastiera, la H sta andando in uno 424 00:20:40,530 --> 00:20:44,550 byte di RAM, la E sta andando in altro byte di RAM, come è 425 00:20:44,550 --> 00:20:45,800 il resto della parola. 426 00:20:45,800 --> 00:20:49,010 Quindi, ricordiamo quello che siamo stati in grado per fare l'ultima volta è stato questo. 427 00:20:49,010 --> 00:20:53,940 Lasciami andare avanti e aprire il file che abbiamo chiamato string.c, e ricordiamo 428 00:20:53,940 --> 00:20:56,860 che sembrava un po ' qualcosa di simile a questo. 429 00:20:56,860 --> 00:20:59,860 Lasciatemi effettivamente rotolare indietro e cambiare è esattamente quello che sembrava, 430 00:20:59,860 --> 00:21:02,654 lunghezza della stringa di s. 431 00:21:02,654 --> 00:21:04,560 >> Quindi, guardare il programma qui. 432 00:21:04,560 --> 00:21:08,530 Includiamo la libreria CS50 così che possiamo usare ottenere stringa. 433 00:21:08,530 --> 00:21:11,400 Includiamo io.h di serie in modo che possiamo usare printf. 434 00:21:11,400 --> 00:21:13,580 Perché abbiamo includiamo string.h? 435 00:21:13,580 --> 00:21:16,980 Questo era nuovo il Lunedi. 436 00:21:16,980 --> 00:21:18,230 Così abbiamo voluto lunghezza della stringa. 437 00:21:18,230 --> 00:21:19,090 Str. Lung. 438 00:21:19,090 --> 00:21:21,470 Le persone hanno deciso anni fa, cerchiamo di essere solo succinta. 439 00:21:21,470 --> 00:21:24,290 Invece di chiamarla "la lunghezza della stringa," chiamiamolo "str Lung" e lasciare che il 440 00:21:24,290 --> 00:21:28,540 figura mondo che fuori, e così che è ciò che si ottiene l'accesso a con string.h. 441 00:21:28,540 --> 00:21:29,390 >> Questo è familiare. 442 00:21:29,390 --> 00:21:30,320 Questo è familiare. 443 00:21:30,320 --> 00:21:31,450 Questo è familiare. 444 00:21:31,450 --> 00:21:32,370 Questo è un po nuovo. 445 00:21:32,370 --> 00:21:35,420 In linea 22 - e ci torneremo per questo, ma per ora sapere - 446 00:21:35,420 --> 00:21:37,880 e si sa solo questo da avere leggere la documentazione o se 447 00:21:37,880 --> 00:21:39,010 si sapeva già C - 448 00:21:39,010 --> 00:21:41,510 ottenere stringa a volte può rovinare. 449 00:21:41,510 --> 00:21:45,130 Se l'utente è davvero contraddittorio o poco collaborativo e lui o lei semplicemente 450 00:21:45,130 --> 00:21:49,450 non digitare nulla sulla tastiera o Tipi di tanto alla tastiera che 451 00:21:49,450 --> 00:21:53,760 travolge la memoria del computer, in teoria, ottenere stringa potrebbe tornare 452 00:21:53,760 --> 00:21:56,270 qualcosa di diverso da un stringa di caratteri. 453 00:21:56,270 --> 00:22:01,930 Si potrebbe restituire un valore speciale chiamato NULL in tutte le protezioni, N-U-L-L, e questo è 454 00:22:01,930 --> 00:22:03,390 solo un cosiddetto valore sentinella. 455 00:22:03,390 --> 00:22:08,010 E 'un valore speciale che indica qualcosa di brutto è accaduto in questo caso. 456 00:22:08,010 --> 00:22:10,520 È l'assenza di una stringa. 457 00:22:10,520 --> 00:22:16,190 >> Così NULL sto controllando per semplicemente in modo che, per farla breve, str Lung e 458 00:22:16,190 --> 00:22:20,230 altre funzioni che vengono con C, se si aspettano una stringa ma li passano 459 00:22:20,230 --> 00:22:23,630 l'assenza di una stringa, se si passa li NULL, il computer o il programma 460 00:22:23,630 --> 00:22:25,000 sarà solo crash a titolo definitivo. 461 00:22:25,000 --> 00:22:25,610 Esso si bloccherà. 462 00:22:25,610 --> 00:22:27,250 Sarà vomitare qualche messaggio di errore. 463 00:22:27,250 --> 00:22:28,690 Accadranno brutte cose. 464 00:22:28,690 --> 00:22:31,130 Così, anche se questo è ancora non ben definiti - 465 00:22:31,130 --> 00:22:33,730 questo renderà più senso in una settimana o due - in linea 22, questo è solo un 466 00:22:33,730 --> 00:22:38,790 esempio di controllo degli errori difensivi auto nel caso in cui una volta su 467 00:22:38,790 --> 00:22:42,040 un milione di qualcosa va male, a Almeno il mio programma non vada in crash. 468 00:22:42,040 --> 00:22:45,960 >> Quindi, se s non è uguale a qualcosa di brutto, Ho questo ciclo for, e questo è stato 469 00:22:45,960 --> 00:22:47,710 dove abbiamo fatto altro che nuovo pezzo di sintassi. 470 00:22:47,710 --> 00:22:51,580 Ho un ciclo for iterazione da zero fino alla lunghezza di s. 471 00:22:51,580 --> 00:22:56,140 E poi qui, ero una stampa fuori s Staffa i, ma perché ho usato% c tutti 472 00:22:56,140 --> 00:23:00,770 un improvviso invece di% s anche se s è una stringa? 473 00:23:00,770 --> 00:23:02,110 E 'un personaggio, giusto? 474 00:23:02,110 --> 00:23:06,560 S è una stringa, ma s staffa qualcosa, s staffa i dove i è pari a zero 475 00:23:06,560 --> 00:23:10,380 o uno o due, questo è un individuo carattere della stringa, e quindi per 476 00:23:10,380 --> 00:23:14,970 che, ha bisogno printf di essere informato che è davvero un personaggio di aspettarsi. 477 00:23:14,970 --> 00:23:18,096 >> E poi ricordare, che cosa ha fatto questo programma effettivamente fare? 478 00:23:18,096 --> 00:23:19,848 >> Stampato fuori in colonne. 479 00:23:19,848 --> 00:23:21,120 >> Sì, esattamente. 480 00:23:21,120 --> 00:23:24,990 E 'appena stampato la parola che digito una colonna, un carattere per riga. 481 00:23:24,990 --> 00:23:26,190 Quindi vediamo di nuovo. 482 00:23:26,190 --> 00:23:27,810 Quindi, fare stringa. 483 00:23:27,810 --> 00:23:30,200 Compilato OK. . / String. 484 00:23:30,200 --> 00:23:35,560 Permettetemi di digitare in H-E-L-L-O, INVIO, anzi ho capito, uno per riga. 485 00:23:35,560 --> 00:23:37,280 >> Quindi, mi permetta di fare una ottimizzazione qui. 486 00:23:37,280 --> 00:23:40,240 Se ci pensate, soprattutto se avete già programmato in precedenza, non c'è 487 00:23:40,240 --> 00:23:43,340 probabilmente una inefficienza in linea 24. 488 00:23:43,340 --> 00:23:46,160 In altre parole, non è necessariamente il miglior design. 489 00:23:46,160 --> 00:23:50,200 Semplice, almeno una volta ricordare quello str Lung è, ma è 490 00:23:50,200 --> 00:23:52,640 facendo qualcosa di stupido potenzialmente. 491 00:23:52,640 --> 00:23:54,863 Cosa potrebbe essere? 492 00:23:54,863 --> 00:23:56,280 >> [Incomprensibile]. 493 00:23:56,280 --> 00:23:56,800 >> Esattamente. 494 00:23:56,800 --> 00:24:00,340 Sta controllando la lunghezza s ogni volta anche se 495 00:24:00,340 --> 00:24:02,980 H-E-L-L-O sta andando sempre ad essere di cinque caratteri. 496 00:24:02,980 --> 00:24:05,490 Ogni volta con questo ciclo, il cinque non sta cambiando. 497 00:24:05,490 --> 00:24:08,750 Potrei essere incrementando i, ma ciò è la lunghezza di s su ogni 498 00:24:08,750 --> 00:24:09,690 iterazione di questo ciclo? 499 00:24:09,690 --> 00:24:15,810 Sono le cinque, è cinque, è cinque, e tuttavia sono comunque chiedo questo 500 00:24:15,810 --> 00:24:18,320 interrogare ancora e ancora e ancora. 501 00:24:18,320 --> 00:24:20,750 Ora, francamente, il computer è così dannatamente veloce, nessuno sta andando a notare un 502 00:24:20,750 --> 00:24:23,780 differenza in questo caso, ma questi tipi delle decisioni di progettazione poveri possono 503 00:24:23,780 --> 00:24:28,330 iniziare a sommare se il compilatore stesso non tentare di risolvere questo per voi che 504 00:24:28,330 --> 00:24:30,630 ma in genere non sarebbe, a almeno nell'apparecchio. 505 00:24:30,630 --> 00:24:31,540 >> Quindi ho intenzione di farlo. 506 00:24:31,540 --> 00:24:34,580 Ho intenzione di aggiungere una virgola dopo la mia prima variabile, i. 507 00:24:34,580 --> 00:24:37,310 Ho intenzione di darmi un altro variabile, definendolo n, semplicemente 508 00:24:37,310 --> 00:24:41,330 convenzione per i numeri, e poi io sono andando ad assegnare n il valore di stringa 509 00:24:41,330 --> 00:24:42,530 lunghezza di s. 510 00:24:42,530 --> 00:24:46,060 E poi ho intenzione di cambiare la mia condizione di essere ciò? 511 00:24:46,060 --> 00:24:51,960 Ho intenzione di cambiare la mia condizione a quando i è minore di n. 512 00:24:51,960 --> 00:24:55,700 >> Così ora, quante volte sono io controllando la lunghezza di s? 513 00:24:55,700 --> 00:25:00,110 Una volta, ma è OK per controllare i contro n nuovo e di nuovo perché adesso quelli 514 00:25:00,110 --> 00:25:03,170 I valori non sono effettivamente cambiando. 515 00:25:03,170 --> 00:25:06,020 Ora per ora, è sufficiente sapere che ogni volta che si chiamare una funzione, c'è un po 'di 516 00:25:06,020 --> 00:25:09,930 spese generali, non abbastanza per scoraggiare davvero da sempre con le funzioni, ma 517 00:25:09,930 --> 00:25:12,750 certamente quando c'è una riga di codice così - e le linee otterrà 518 00:25:12,750 --> 00:25:15,490 più interessante fra non molto - dove c'è l'opportunità di pensare, se io 519 00:25:15,490 --> 00:25:18,320 digitare il codice, il numero di volte si è eseguito? 520 00:25:18,320 --> 00:25:20,950 Potrai iniziare a vedere nel tempo la prestazioni dei vostri programmi possono 521 00:25:20,950 --> 00:25:21,660 davvero cambiare. 522 00:25:21,660 --> 00:25:24,110 >> In effetti, uno dei problemi che abbiamo imposta fatto negli anni passati coinvolge 523 00:25:24,110 --> 00:25:27,600 attuazione, come forse ricorderete da settimana a zero, un correttore ortografico, ma un 524 00:25:27,600 --> 00:25:31,380 correttore ortografico che è progettato per supportare un dizionario di 150.000, più 525 00:25:31,380 --> 00:25:32,860 parole che gli diamo ragazzi. 526 00:25:32,860 --> 00:25:37,100 Si dovrebbe scrivere il codice che carica quelle parole nella RAM, perciò in 527 00:25:37,100 --> 00:25:40,700 scatole come abbiamo visto sullo schermo un momento fa, e quindi il più velocemente 528 00:25:40,700 --> 00:25:43,740 possibile, è necessario essere in grado di rispondere a una questione della forma, è questa parola 529 00:25:43,740 --> 00:25:44,280 errata? 530 00:25:44,280 --> 00:25:45,420 È questa parola errata? 531 00:25:45,420 --> 00:25:46,770 È questa parola errata? 532 00:25:46,770 --> 00:25:49,525 >> E in qualcosa di simile quello che abbiamo fatto negli anni passati si trasformò in, 533 00:25:49,525 --> 00:25:53,500 anche se su un opt-in via facoltativa, una concorrenza di sorta, per cui il 534 00:25:53,500 --> 00:25:59,470 studenti che usano il meno RAM e meno tempo, un minor numero di cicli di CPU, finiscono per 535 00:25:59,470 --> 00:26:02,640 zampillante per la parte superiore di un piccolo leader board o classifica che abbiamo messo su 536 00:26:02,640 --> 00:26:04,770 homepage del corso, come abbiamo fatto negli anni passati. 537 00:26:04,770 --> 00:26:08,100 Quindi, di nuovo, del tutto facoltativa, ma questo parla alle opportunità progettuali 538 00:26:08,100 --> 00:26:11,250 che sono davanti una volta che iniziamo costruzione in cima a alcuni di questi 539 00:26:11,250 --> 00:26:14,010 elementi di base. 540 00:26:14,010 --> 00:26:16,780 >> Quindi, mi permetta di tornare in questo schema per solo un momento e rivelare un po ' 541 00:26:16,780 --> 00:26:17,610 qualcosa di più. 542 00:26:17,610 --> 00:26:21,400 Questa in effetti è una stringa, e abbiamo preso vantaggio di un paio di librerie, 543 00:26:21,400 --> 00:26:25,150 io.h standard che ha - 544 00:26:25,150 --> 00:26:26,110 >> Printf. 545 00:26:26,110 --> 00:26:27,860 >> Printf, tra le altre cose. 546 00:26:27,860 --> 00:26:31,540 cs50.h, che ha ottenere int e ottenere stringa e così via, string.h, che 547 00:26:31,540 --> 00:26:32,570 avuto str Lung. 548 00:26:32,570 --> 00:26:34,800 Ma si scopre non c'è ancora un altro. 549 00:26:34,800 --> 00:26:38,540 Francamente, ci sono un sacco di intestazione file che dichiarano funzioni 550 00:26:38,540 --> 00:26:43,320 per le biblioteche, ma questo è ctype.h in realtà sta per essere un po ' 551 00:26:43,320 --> 00:26:46,900 vantaggioso perché sto andando di andare avanti e applicare uno 552 00:26:46,900 --> 00:26:48,120 altro programma qui. 553 00:26:48,120 --> 00:26:52,420 >> Lasciami andare avanti e di aprire qualcosa Ho scritto in anticipo chiamato 554 00:26:52,420 --> 00:26:55,750 capitalize.c, e prendiamo un'occhiata a come funziona. 555 00:26:55,750 --> 00:27:00,340 Si noti che sto usando, in questa versione di esso, tre file familiari. 556 00:27:00,340 --> 00:27:04,110 Si noti che in linea di 18, sono ottenendo una riga di testo. 557 00:27:04,110 --> 00:27:07,660 Bando nella linea 21, sto sostenendo che il seguente codice sta per 558 00:27:07,660 --> 00:27:12,170 capitalizzare s, qualunque sia l'utente ha digitato a, e come sto facendo questo? 559 00:27:12,170 --> 00:27:13,300 Beh, io sto prendendo - 560 00:27:13,300 --> 00:27:14,750 lezione imparata da ultima volta - 561 00:27:14,750 --> 00:27:18,370 Sto dichiarando i e n e l'iterazione nel corso dei caratteri della stringa. 562 00:27:18,370 --> 00:27:22,720 E allora che cosa è questo blocco di codice nella riga 24 alla 27 563 00:27:22,720 --> 00:27:24,550 facendo in parole povere? 564 00:27:24,550 --> 00:27:27,766 565 00:27:27,766 --> 00:27:29,730 >> Lettera minuscola indietro. 566 00:27:29,730 --> 00:27:30,430 >> Esattamente. 567 00:27:30,430 --> 00:27:35,920 Se s Staffa i - quindi se l'i-esimo carattere di s, che è una specifica 568 00:27:35,920 --> 00:27:40,220 char nella stringa, è maggiore di o pari a un minuscolo e - 569 00:27:40,220 --> 00:27:42,670 ricordare che doppia e commerciale significare e - 570 00:27:42,670 --> 00:27:46,810 e lo stesso carattere, s staffa i, è inferiore o uguale a z minuscola, 571 00:27:46,810 --> 00:27:50,600 che significa che è una A o una B o una C o punto, punto, punto o una z, il che significa 572 00:27:50,600 --> 00:27:51,340 è minuscolo. 573 00:27:51,340 --> 00:27:52,900 Cosa voglio fare in questo caso? 574 00:27:52,900 --> 00:27:55,010 Beh, posso fare questo in qualche modo cripticamente, ma 575 00:27:55,010 --> 00:27:56,160 cerchiamo di prendere in giro questa parte. 576 00:27:56,160 --> 00:28:00,210 >> Io vado a chiamare printf, stampe% c perché voglio ristampare questo 577 00:28:00,210 --> 00:28:01,580 carattere sullo schermo. 578 00:28:01,580 --> 00:28:06,650 Sto andando poi a prendere s staffa i, il i-esimo carattere in s, e allora perché 579 00:28:06,650 --> 00:28:12,330 sto facendo questo piccolo trucco, Un minuscolo un capitale negativo? 580 00:28:12,330 --> 00:28:16,352 Che cosa è che andare a dare me, in generale? 581 00:28:16,352 --> 00:28:18,600 >> [Incomprensibile]. 582 00:28:18,600 --> 00:28:19,390 >> Esattamente. 583 00:28:19,390 --> 00:28:20,860 Io non mi ricordo - 584 00:28:20,860 --> 00:28:24,390 era 65 per i capitali A. non mi interessa davvero ricordare ciò che è un minuscolo, 585 00:28:24,390 --> 00:28:25,540 ma non importa. 586 00:28:25,540 --> 00:28:26,580 Il computer sa. 587 00:28:26,580 --> 00:28:30,380 Così dicendo, minuscolo un meno maiuscola, è strano di essere 588 00:28:30,380 --> 00:28:33,530 sottraendo un carattere da un altro, ma quali sono i caratteri sotto il cofano? 589 00:28:33,530 --> 00:28:34,520 Sono solo numeri. 590 00:28:34,520 --> 00:28:36,980 Quindi, qualsiasi cosa questi numeri sono, lasciare che il computer lo ricordo 591 00:28:36,980 --> 00:28:38,240 piuttosto che me l'umano. 592 00:28:38,240 --> 00:28:41,710 >> Così minuscolo un capitale negativo A è andando a darmi una differenza. 593 00:28:41,710 --> 00:28:45,370 Capita di essere 32, e che sarebbe il caso di minuscole b e capitale B 594 00:28:45,370 --> 00:28:45,930 e così via. 595 00:28:45,930 --> 00:28:47,710 Rimane costante, per fortuna. 596 00:28:47,710 --> 00:28:51,930 Così sto dicendo in sostanza, prendere la lettera minuscola, sottrarre off che 597 00:28:51,930 --> 00:28:55,340 standard differenza, e che effettivamente cambia s staffa i da 598 00:28:55,340 --> 00:28:59,400 minuscolo, naturalmente, maiuscolo, senza che io davvero dover pensare 599 00:28:59,400 --> 00:29:03,040 circa o ricordare, che cosa erano quelle numeri abbiamo parlato quando l'otto 600 00:29:03,040 --> 00:29:04,800 volontari salirono sul palco? 601 00:29:04,800 --> 00:29:08,800 Ora, nel frattempo, nel resto, se non è una lettera minuscola, come determinato 602 00:29:08,800 --> 00:29:10,400 da linea 24, basta stamparlo. 603 00:29:10,400 --> 00:29:12,590 Voglio solo toccare la personaggi che erano 604 00:29:12,590 --> 00:29:14,410 in realtà originariamente minuscolo. 605 00:29:14,410 --> 00:29:15,150 >> Quindi cerchiamo di vedere questo. 606 00:29:15,150 --> 00:29:17,400 Fai capitalizzare. 607 00:29:17,400 --> 00:29:18,470 Compilato, OK. 608 00:29:18,470 --> 00:29:19,730 . / Capitalizzare. 609 00:29:19,730 --> 00:29:23,530 E mi permetta di digitare in H-E-L-L-O in minuscolo, Enter. 610 00:29:23,530 --> 00:29:26,370 E notare che esso è convertito in maiuscolo. 611 00:29:26,370 --> 00:29:27,940 Mi permetta di fare questo nuovo con una parola diversa. 612 00:29:27,940 --> 00:29:32,720 Che ne dici di D-A-V-I-D con il primo D capitalizzati come nome tipicamente è? 613 00:29:32,720 --> 00:29:33,560 Invio. 614 00:29:33,560 --> 00:29:34,870 Si noti che è ancora corretta. 615 00:29:34,870 --> 00:29:40,250 E 'appena emesso quel primo D invariata via che altro costrutto. 616 00:29:40,250 --> 00:29:42,170 >> Quindi, tenere a mente, quindi, un paio di cose qui. 617 00:29:42,170 --> 00:29:45,060 Uno, se vi capitasse di voler controllare due condizioni in una sola volta, è possibile e li 618 00:29:45,060 --> 00:29:46,500 insieme come avevamo previsto. 619 00:29:46,500 --> 00:29:49,900 È possibile confrontare i caratteri in questo modo e trattare efficacemente i caratteri come 620 00:29:49,900 --> 00:29:53,050 numeri, ma, francamente, questo è così dannatamente criptico Non riuscirò mai a ricordare 621 00:29:53,050 --> 00:29:56,510 come a venire con questo da zero senza ragionare attraverso di essa per molto 622 00:29:56,510 --> 00:29:57,140 un po 'di tempo. 623 00:29:57,140 --> 00:30:00,590 >> Non sarebbe stato bello se qualcuno fuori ci ha scritto una funzione chiamata è 624 00:30:00,590 --> 00:30:05,390 inferiori che potesse rispondere per me vero o falso, questo personaggio è minuscolo? 625 00:30:05,390 --> 00:30:09,350 Beh per fortuna, chi ha scritto ctype.h ha fatto esattamente questo. 626 00:30:09,350 --> 00:30:15,540 Lasciami andare qui e aggiungo ctype per c tipi, e ora lasciami andare qui e 627 00:30:15,540 --> 00:30:18,820 riscrivi questa riga come segue. 628 00:30:18,820 --> 00:30:27,510 >> Quindi, se si chiama è più basso, rivendico, s Staffa di i, allora ho intenzione di cancellare 629 00:30:27,510 --> 00:30:29,400 queste due linee del tutto. 630 00:30:29,400 --> 00:30:32,570 Così ora qualcun altro, spero, ha scritto una funzione chiamata è più basso, e 631 00:30:32,570 --> 00:30:36,250 E 'venuto fuori che hanno fatto e hanno dichiarato all'interno di ctype.h. 632 00:30:36,250 --> 00:30:39,480 E ora ho intenzione di lasciare la linea 27 da solo, ho intenzione di lasciare la linea 31 633 00:30:39,480 --> 00:30:41,890 solo, ma notato quanto ho inasprito il mio codice. 634 00:30:41,890 --> 00:30:42,690 E 'ora più pulito. 635 00:30:42,690 --> 00:30:47,250 E 'meno difficile da guardare attraverso perché ora la funzione, inoltre, è 636 00:30:47,250 --> 00:30:50,080 così meravigliosamente chiamato semplicemente fa quello che dice. 637 00:30:50,080 --> 00:30:51,520 >> Così ora ho intenzione di salvare questo. 638 00:30:51,520 --> 00:30:52,930 Io vado a diminuire. 639 00:30:52,930 --> 00:30:56,650 E proprio come in Scratch si potrebbe avere Booleani, valori booleani vero o 640 00:30:56,650 --> 00:31:01,530 falso, è esattamente ciò che è inferiori, effettivamente resi. 641 00:31:01,530 --> 00:31:02,960 Permettetemi di ricompilazione. 642 00:31:02,960 --> 00:31:04,500 Lasciatemi re-run. 643 00:31:04,500 --> 00:31:07,350 E ora proviamo di nuovo, H-E-L-L-O, Invio. 644 00:31:07,350 --> 00:31:07,970 Questo è abbastanza buono. 645 00:31:07,970 --> 00:31:10,150 E provare di nuovo, assicurarsi che io non avvitare qualcosa. 646 00:31:10,150 --> 00:31:11,670 Che è in maiuscolo pure. 647 00:31:11,670 --> 00:31:14,190 >> Ma questo non è sufficiente perché il altra cosa che non riuscirò mai a 648 00:31:14,190 --> 00:31:19,090 ricordare a meno io lavoro attraverso di essa davvero attenzione, diciamo, la carta è 649 00:31:19,090 --> 00:31:19,920 questa maledetta linea. 650 00:31:19,920 --> 00:31:23,450 Non sarebbe bello se ci fossero una funzione chiamata al superiore? 651 00:31:23,450 --> 00:31:26,930 Ebbene si scopre là fuori è in ctype.h pure. 652 00:31:26,930 --> 00:31:30,150 Ho intenzione di andare avanti e digitare - 653 00:31:30,150 --> 00:31:31,340 lasciatemi portare quella linea di fondo. 654 00:31:31,340 --> 00:31:36,430 Al posto di questo qui, mi lascia andare avanti e dire, sostituire il% c il 655 00:31:36,430 --> 00:31:42,110 risultato della chiamata di questa funzione per superiore sulla i-esimo carattere di s. 656 00:31:42,110 --> 00:31:45,430 E ora la cosa si fa notare un po 'di equilibrio. 657 00:31:45,430 --> 00:31:48,870 Devo tenere traccia del numero di parentesi che ho aperto e chiuso. 658 00:31:48,870 --> 00:31:50,050 >> Così ora è ancora più pulito. 659 00:31:50,050 --> 00:31:53,460 Ora questo programma è sempre meglio e meglio progettato probabilmente perché è 660 00:31:53,460 --> 00:31:56,450 molto, molto di più leggibile, ma non c'è da lasciare che sia corretta. 661 00:31:56,450 --> 00:31:57,600 Fai capitalizzare. 662 00:31:57,600 --> 00:31:58,930 . / Capitalizzare. 663 00:31:58,930 --> 00:32:03,220 H-E-L-L-O. Corriamo ancora una volta, D-A-V-I-D. OK, quindi siamo ancora in 664 00:32:03,220 --> 00:32:04,250 buona forma. 665 00:32:04,250 --> 00:32:06,030 >> Ma ora al superiore. 666 00:32:06,030 --> 00:32:09,720 Propongo che ci sia ancora una raffinatezza potremmo fare sarebbe 667 00:32:09,720 --> 00:32:12,820 veramente bello, che potrebbe davvero stringere su questo codice e davvero ci danno cinque 668 00:32:12,820 --> 00:32:15,150 su cinque per progettazione, per esempio. 669 00:32:15,150 --> 00:32:16,510 Quanto sarebbe bello per sbarazzarsi di? 670 00:32:16,510 --> 00:32:20,770 Beh, guarda come dannatamente lungo questo blocco di il codice è solo per fare qualcosa di semplice. 671 00:32:20,770 --> 00:32:23,850 >> Ora, come un a parte, come si potrebbe avere visto in sezione eccellente lo scorso 672 00:32:23,850 --> 00:32:27,570 fine settimana, non è strettamente necessario il parentesi graffe quando vi è solo un 673 00:32:27,570 --> 00:32:32,180 riga di codice, anche se abbiamo proposto mantenendoli in modo che rende molto 674 00:32:32,180 --> 00:32:36,190 più chiaro, come in forma di U di Scratch blocchi, cosa c'è dentro del ramo. 675 00:32:36,190 --> 00:32:40,170 Ma non sarebbe bello se al superiore, una volta dato il suo input, lo ha trasformato in 676 00:32:40,170 --> 00:32:44,730 maiuscolo, se non lo è, e che cosa sarebbe essere meraviglioso nel caso opposto, se 677 00:32:44,730 --> 00:32:47,210 è già in maiuscolo? 678 00:32:47,210 --> 00:32:49,620 Basta passare attraverso e lasciarlo solo. 679 00:32:49,620 --> 00:32:50,660 >> Così forse lo fa. 680 00:32:50,660 --> 00:32:52,990 Ho potuto provare e spero solo che lo fa, ma mi ha lasciato 681 00:32:52,990 --> 00:32:54,450 introdurre un'altra cosa. 682 00:32:54,450 --> 00:32:57,440 Invece di usare questo terminale integrato finestra qui sotto, si ricordi che 683 00:32:57,440 --> 00:33:01,130 questa icona quadrato nero ti dà una finestra di terminale più grande che posso riempirlo 684 00:33:01,130 --> 00:33:02,260 schermo se voglio? 685 00:33:02,260 --> 00:33:05,820 Così si scopre che sono una sorta di strano chiamato, ma non c'è queste cose chiamate 686 00:33:05,820 --> 00:33:10,970 pagine di manuale, le pagine man, l'uomo in breve, e posso accedervi da 687 00:33:10,970 --> 00:33:14,515 digitando man - 688 00:33:14,515 --> 00:33:15,570 cosa devo digitare? 689 00:33:15,570 --> 00:33:17,830 L'uomo di superiore. 690 00:33:17,830 --> 00:33:21,090 >> E ora notare se esiste una funzione all'interno del computer, in 691 00:33:21,090 --> 00:33:23,970 questo caso l'apparecchio, che è solo il sistema operativo Linux, sta andando 692 00:33:23,970 --> 00:33:27,920 di darmi un insieme un po 'criptico di uscita, ma troverete il tempo che 693 00:33:27,920 --> 00:33:31,720 sempre è formattato praticamente la stesso modo si inizia ad abituarsi ad esso. 694 00:33:31,720 --> 00:33:35,130 Si noti in alto a superiore, e apparentemente la stessa documentazione 695 00:33:35,130 --> 00:33:35,680 per abbassare. 696 00:33:35,680 --> 00:33:38,740 Chi ha scritto che stava tagliando alcuni angoli e mettere tutto in una pagina. 697 00:33:38,740 --> 00:33:40,720 Scopo Queste cose 'in vita è di convertire un 698 00:33:40,720 --> 00:33:42,780 lettera al superiore o minuscole. 699 00:33:42,780 --> 00:33:46,290 >> Si noti che sotto Sinossi, la pagina man mi sta insegnando che lima ho 700 00:33:46,290 --> 00:33:48,130 di includere per utilizzare questa cosa. 701 00:33:48,130 --> 00:33:51,320 Mi sta dando le firme per questi funzioni, sia di loro, anche 702 00:33:51,320 --> 00:33:53,510 se siamo in questo momento solo cura di uno. 703 00:33:53,510 --> 00:33:54,730 Ecco ora una descrizione. 704 00:33:54,730 --> 00:33:58,800 Per superiore converte la lettera c in maiuscolo, se possibile. 705 00:33:58,800 --> 00:34:02,280 >> Ancora non è che istruttivo, ma lasciatemi ora guardare sotto il valore di ritorno, la cosa 706 00:34:02,280 --> 00:34:03,520 quello è restituito. 707 00:34:03,520 --> 00:34:08,600 Pertanto il valore restituito è quello del lettera o c convertita se il 708 00:34:08,600 --> 00:34:09,870 conversione non era possibile. 709 00:34:09,870 --> 00:34:11,202 Che cosa è c? 710 00:34:11,202 --> 00:34:12,560 >> Il carattere originale. 711 00:34:12,560 --> 00:34:15,370 >> Il carattere originale e sappiamo che da, nuovamente, andando fino al 712 00:34:15,370 --> 00:34:19,179 sinossi, e chi ha scritto questo funzione appena deciso che l'ingresso 713 00:34:19,179 --> 00:34:22,909 al di superiore e di più basso è solo arbitrariamente sta per essere chiamato c. 714 00:34:22,909 --> 00:34:24,909 Avrebbero potuto chiamato più nulla che vogliono, ma hanno conservato 715 00:34:24,909 --> 00:34:26,270 semplice come c. 716 00:34:26,270 --> 00:34:27,880 Così mi sono consultato la pagina di manuale. 717 00:34:27,880 --> 00:34:31,870 Questa frase mi rassicura che se non è una lettera minuscola, è 718 00:34:31,870 --> 00:34:34,969 andando a darmi appena tornato C, che è perfetto, che significa che posso eliminare 719 00:34:34,969 --> 00:34:36,199 la mia condizione else. 720 00:34:36,199 --> 00:34:39,679 >> Quindi, mi permetta di tornare a gedit, e ora vorrei solo fare questo. 721 00:34:39,679 --> 00:34:41,960 Io vado a copiare il mio printf. 722 00:34:41,960 --> 00:34:45,969 Ho intenzione di andare avanti e di diritto interno il ciclo di stampa che fuori, e ottenere 723 00:34:45,969 --> 00:34:48,760 liberarsi di tutto questo ora, se costrutto. 724 00:34:48,760 --> 00:34:51,860 Non era una cattiva idea, ed è stato molto molto corretta e coerente con 725 00:34:51,860 --> 00:34:54,100 tutto quello che abbiamo predicato, ma proprio non è necessario. 726 00:34:54,100 --> 00:34:57,070 Non appena vi rendete conto qualche libreria funzione esiste che qualcun altro 727 00:34:57,070 --> 00:35:01,340 scritto, o forse hai scritto altrove in il file, si può utilizzare e realmente 728 00:35:01,340 --> 00:35:02,690 iniziare a stringere il codice. 729 00:35:02,690 --> 00:35:06,080 >> E quando dico le cose come buono stile, il fatto che questa persona denominata 730 00:35:06,080 --> 00:35:11,490 funzionare al superiore, o in precedenza è inferiore è meravigliosamente utile perché 731 00:35:11,490 --> 00:35:12,900 sono molto descrittivo. 732 00:35:12,900 --> 00:35:16,120 Lei non vorrebbe chiamare le funzioni x ed y, z, che hanno 733 00:35:16,120 --> 00:35:19,620 molto, molto meno significato. 734 00:35:19,620 --> 00:35:25,160 Qualsiasi problema che la serie dei miglioramenti? 735 00:35:25,160 --> 00:35:28,010 >> Quindi, è sufficiente dire uno dei takeaway è anche come il tuo problema 736 00:35:28,010 --> 00:35:30,960 set - forse problema proposto uno, ma certamente P impostare due e poi, anche 737 00:35:30,960 --> 00:35:34,380 quando sono corretti non necessariamente significa che sono perfette solo 738 00:35:34,380 --> 00:35:36,155 ancora o particolarmente ben progettato. 739 00:35:36,155 --> 00:35:38,420 Questo è l'altro asse di cominciare a pensare. 740 00:35:38,420 --> 00:35:41,730 Quindi questa era una stringa all'interno del vostro memoria del computer, ma se avete un 741 00:35:41,730 --> 00:35:46,180 intero gruppo di personaggi come H-E-L-L-O all'interno di RAM, e supponiamo 742 00:35:46,180 --> 00:35:51,330 che nel vostro programma di chiamare ottenere stringa più volte tale che si 743 00:35:51,330 --> 00:35:54,200 chiami ottenere stringa una volta, allora si chiamare ottenere nuovamente stringa. 744 00:35:54,200 --> 00:35:55,880 Ebbene, che cosa sta per avvenire nel corso del tempo? 745 00:35:55,880 --> 00:35:59,170 >> In altre parole, se si dispone di una linea di codice, anche se fuori dal contesto, come 746 00:35:59,170 --> 00:36:02,120 stringa s ottiene - 747 00:36:02,120 --> 00:36:02,960 Facciamolo. 748 00:36:02,960 --> 00:36:05,270 String name uguale ottenere stringa. 749 00:36:05,270 --> 00:36:08,590 Quindi supponiamo che la linea di codice è destinato chiedere all'utente per il suo nome. 750 00:36:08,590 --> 00:36:14,580 Questa successiva riga di codice è destinato a chiedere l'utente per la sua scuola, e 751 00:36:14,580 --> 00:36:15,920 questa riga successiva, e così via. 752 00:36:15,920 --> 00:36:18,150 Supponiamo continuiamo a chiedere l'utente e per un'altra 753 00:36:18,150 --> 00:36:19,750 un'altra e un'altra stringa. 754 00:36:19,750 --> 00:36:22,390 Hanno intenzione di rimanere in memoria allo stesso tempo. 755 00:36:22,390 --> 00:36:24,280 Uno non ha intenzione di massacrare l'altro. 756 00:36:24,280 --> 00:36:26,420 La scuola non è sovrascrivere l'altra. 757 00:36:26,420 --> 00:36:28,520 Ma dove fare tutto finire in memoria? 758 00:36:28,520 --> 00:36:32,030 >> Beh, se cominciamo a disegnare sullo schermo, che possiamo usare questa cosa 759 00:36:32,030 --> 00:36:35,800 qui come una lavagna, se questo nero rettangolo rappresenta il mio computer di 760 00:36:35,800 --> 00:36:39,800 memoria, ho intenzione di iniziare arbitrariamente dividendolo in piccoli quadrati, 761 00:36:39,800 --> 00:36:42,120 ciascuno dei quali rappresenta un byte di memoria. 762 00:36:42,120 --> 00:36:46,560 Francamente, se si dispone di un gigabyte di RAM in questi giorni, si dispone di un miliardo di byte 763 00:36:46,560 --> 00:36:49,540 della memoria del computer, in modo da un miliardo di questi quadrati. 764 00:36:49,540 --> 00:36:52,110 Quindi, è sufficiente dire, questo in realtà non è in scala. 765 00:36:52,110 --> 00:36:58,250 >> Ma potremmo continuare disegno tutti questi chiaramente non in scala piazze, e questo 766 00:36:58,250 --> 00:37:01,260 rappresenta collettivamente la memoria del mio computer. 767 00:37:01,260 --> 00:37:03,136 Ora dobbiamo solo fare punti, puntini, puntini. 768 00:37:03,136 --> 00:37:06,260 Quindi, in altre parole, quando ormai il prompt utente con la stringa get di darmi una 769 00:37:06,260 --> 00:37:07,350 stringa, che cosa succede? 770 00:37:07,350 --> 00:37:14,270 Se l'utente digita in "ciao", che finisce in H-E-L-L-O. Ma supponiamo che il 771 00:37:14,270 --> 00:37:15,720 poi tipi di utente in - 772 00:37:15,720 --> 00:37:17,250 in realtà, io non avrei dovuto fare ciao perché stiamo chiedendo 773 00:37:17,250 --> 00:37:18,330 loro per i loro nomi. 774 00:37:18,330 --> 00:37:20,580 Quindi torniamo se posso fare questo. 775 00:37:20,580 --> 00:37:26,130 >> Quindi, se io tipo in D-A-V-I-D per il mio nome, ma ricordare che la seconda riga del 776 00:37:26,130 --> 00:37:29,220 codice è stato ottenere nuovamente stringa per ottenere la loro scuola. 777 00:37:29,220 --> 00:37:32,090 Dove è la parola che l'utente tipi di intenzione di andare dopo? 778 00:37:32,090 --> 00:37:38,290 Beh, forse sta per andare in H-A-R-V-A-R-D. Così, anche se ho 779 00:37:38,290 --> 00:37:41,560 disegnato come due file, questo è solo un mucchio di byte nel vostro 780 00:37:41,560 --> 00:37:42,710 RAM del computer. 781 00:37:42,710 --> 00:37:46,560 C'è un problema ora, perché ora se io sono utilizzando RAM in questo molto ragionevole 782 00:37:46,560 --> 00:37:49,910 ma una sorta di modo ingenuo, cosa si può Non pare distinguere? 783 00:37:49,910 --> 00:37:52,640 784 00:37:52,640 --> 00:37:54,680 Dove si comincia e dove finisce, giusto? 785 00:37:54,680 --> 00:37:55,860 Sono tipo di sfocatura insieme. 786 00:37:55,860 --> 00:37:57,920 >> Così si scopre il computer non fare questo. 787 00:37:57,920 --> 00:38:04,720 Lasciatemi in realtà scorrere indietro nel tempo un pochi personaggi, e invece di Harvard 788 00:38:04,720 --> 00:38:09,570 andare subito dopo il nome dell'utente, l'utente ottiene in realtà, dietro 789 00:38:09,570 --> 00:38:12,000 le scene, un carattere speciale inserito dal 790 00:38:12,000 --> 00:38:13,885 informatico per lui o lei. 791 00:38:13,885 --> 00:38:19,470 / 0, altrimenti noto come il carattere NUL fastidiosamente chiamato N-U-L, non 792 00:38:19,470 --> 00:38:22,190 N-U-L-L, ma si scrive come / 0. 793 00:38:22,190 --> 00:38:27,130 E 'solo che tutti i bit a zero è un marker di tra la prima parola che dell'utente 794 00:38:27,130 --> 00:38:28,290 digitato e la seconda. 795 00:38:28,290 --> 00:38:33,020 >> Così Harvard in realtà ora finisce come questa sequenza di caratteri 796 00:38:33,020 --> 00:38:36,110 e un altro / 0. 797 00:38:36,110 --> 00:38:41,690 Quindi, in altre parole, avendo questi valori sentinella, otto a zero contigui 798 00:38:41,690 --> 00:38:45,220 bit, è ora possibile iniziare a distinguere un personaggio da un altro. 799 00:38:45,220 --> 00:38:49,720 Quindi tutto questo tempo ciò che è stato "ciao" è in realtà "ciao" con un / 0, e 800 00:38:49,720 --> 00:38:53,580 Nel frattempo, ci potrebbe benissimo essere un po 'più di RAM 801 00:38:53,580 --> 00:38:56,400 all'interno del computer. 802 00:38:56,400 --> 00:38:57,810 >> Lasciami fare un'altra cosa adesso. 803 00:38:57,810 --> 00:39:01,800 Si scopre che tutte queste piazze abbiamo disegno, che sono, sì, 804 00:39:01,800 --> 00:39:06,140 stringhe, ma più in generale, queste cose sono array. 805 00:39:06,140 --> 00:39:10,590 Un array è solo un pezzo di memoria questo è back to back to back to back, 806 00:39:10,590 --> 00:39:15,130 e in genere si utilizza un array per mezzo di questa notazione parentesi quadra. 807 00:39:15,130 --> 00:39:18,210 Quindi andiamo a vedere questi un bel po ' nel corso del tempo, ma mi permetta di andare avanti e di 808 00:39:18,210 --> 00:39:21,160 aprire, chiamiamolo età. 809 00:39:21,160 --> 00:39:23,920 E notare che cosa possiamo fare con questi stessi trucchi, un po ' 810 00:39:23,920 --> 00:39:25,750 po 'di più la sintassi qui. 811 00:39:25,750 --> 00:39:29,270 >> Quindi, in linea di 17 di questo programma - in realtà, mi permetta di eseguire il programma di prima 812 00:39:29,270 --> 00:39:30,770 così possiamo vedere che cosa questa cosa fa. 813 00:39:30,770 --> 00:39:33,530 Fammi chiamare le età a compilare questo programma. 814 00:39:33,530 --> 00:39:34,950 . / Età. 815 00:39:34,950 --> 00:39:36,480 Quante persone ci sono nella stanza? 816 00:39:36,480 --> 00:39:38,020 Chiamatela tre. 817 00:39:38,020 --> 00:39:39,575 Età della prima persona? 818 00:39:39,575 --> 00:39:42,710 18, 19, e 20. 819 00:39:42,710 --> 00:39:46,770 Ed ora un po 'ridicolo, ho appena hanno fatto un programma che invecchia quelli 820 00:39:46,770 --> 00:39:47,740 tre persone. 821 00:39:47,740 --> 00:39:50,390 >> Quindi c'è chiaramente una opportunità per alcuni aritmetica divertimento qui. 822 00:39:50,390 --> 00:39:51,560 Per fortuna, la matematica è corretta. 823 00:39:51,560 --> 00:39:54,720 18 è andato a 19, 19 è andato a 20 e così via. 824 00:39:54,720 --> 00:39:58,510 Ma che cosa è veramente destinata a essere illustrativo ecco come stiamo memorizzazione 825 00:39:58,510 --> 00:40:00,190 età quei tre delle persone. 826 00:40:00,190 --> 00:40:02,370 Permettetemi di ingrandire in ciò che è succedendo qui. 827 00:40:02,370 --> 00:40:06,240 >> Quindi, in primo luogo, queste prime righe dovrebbero essere sempre abbastanza familiare. 828 00:40:06,240 --> 00:40:08,770 Sto solo chiedendo all'utente il numero di persone nella stanza. 829 00:40:08,770 --> 00:40:11,490 Poi sto usando ottenere int e da fare, mentre a farlo ancora e ancora e ancora. 830 00:40:11,490 --> 00:40:15,780 Abbiamo visto che il modello precedente, ma linea 27 è nuovo e in realtà abbastanza 831 00:40:15,780 --> 00:40:18,160 utile, e diventerà sempre più utile. 832 00:40:18,160 --> 00:40:21,620 Si noti che ciò che è diverso in linea 27 è che mi sembra essere la dichiarazione di un 833 00:40:21,620 --> 00:40:23,960 int chiamati epoche, ma aspetta. 834 00:40:23,960 --> 00:40:27,140 Non sono solo le età int. 835 00:40:27,140 --> 00:40:30,130 C'è queste parentesi quadre, all'interno del quale è n. 836 00:40:30,130 --> 00:40:35,150 >> Così la staffa n in questo contesto, non interno di un printf qui ma 837 00:40:35,150 --> 00:40:44,370 in questa sola linea 27, questa linea è dicendo, me n interi danno, ciascuno dei quali 838 00:40:44,370 --> 00:40:46,080 è di tipo int. 839 00:40:46,080 --> 00:40:49,870 Quindi questo è un secchio, per così dire, di, in questo caso, tre interi indietro 840 00:40:49,870 --> 00:40:52,770 back to back in modo che io effettivamente avere tre variabili. 841 00:40:52,770 --> 00:40:54,890 L'alternativa, per essere chiaro, sarebbe questo. 842 00:40:54,890 --> 00:40:57,400 >> Se volevo il primo dello studente età, potrei farlo. 843 00:40:57,400 --> 00:40:59,520 Se volevo il secondo dello studente età che potrei farlo. 844 00:40:59,520 --> 00:41:01,860 Se volevo del terzo studente età, potrei farlo. 845 00:41:01,860 --> 00:41:04,320 E Dio non voglia che abbiamo bisogno tutti di età in questa stanza - 846 00:41:04,320 --> 00:41:07,670 Voglio dire, questo è un diavolo di un sacco di copia, incollare ancora e ancora e ancora. 847 00:41:07,670 --> 00:41:10,870 E in più una volta che compilo questo programma, se un altro studente cammina sopra fuori 848 00:41:10,870 --> 00:41:14,200 di quella porta, ora il mio numero delle variabili è corretta. 849 00:41:14,200 --> 00:41:17,450 >> Quindi cosa c'è di bello di un array è come appena si inizia a sentire te stesso 850 00:41:17,450 --> 00:41:20,190 copia e incolla, le probabilità sono che è non è l'approccio migliore. 851 00:41:20,190 --> 00:41:22,240 Una matrice è dinamica potenzialmente. 852 00:41:22,240 --> 00:41:24,610 Non so in anticipo quante persone stanno per essere nella stanza, 853 00:41:24,610 --> 00:41:28,670 ma so ho bisogno n di loro, e io capire n quando sarà il momento. 854 00:41:28,670 --> 00:41:35,500 Questa riga di codice ora significa, dammi un pezzo di memoria che assomiglia a questo 855 00:41:35,500 --> 00:41:40,380 dove il numero di caselle nella schermata è interamente dipendente da n che 856 00:41:40,380 --> 00:41:42,010 l'utente ha digitato dentro 857 00:41:42,010 --> 00:41:44,850 >> Così ora il resto di questo programma è in realtà abbastanza simile a quello che abbiamo 858 00:41:44,850 --> 00:41:46,860 appena fatto con i personaggi. 859 00:41:46,860 --> 00:41:49,970 Notate che ho un ciclo for partenza in linea 30. 860 00:41:49,970 --> 00:41:54,920 Quindi, subito dopo ho la matrice, io iterare da y è uguale a zero su un massimo di n. 861 00:41:54,920 --> 00:41:58,890 Ho solo questo istruttivo printf messaggio solo dicendo, mi danno l'età 862 00:41:58,890 --> 00:42:03,690 di persona #% i, quindi il numero uno, numero due, numero tre. 863 00:42:03,690 --> 00:42:04,730 E perché l'ho fatto? 864 00:42:04,730 --> 00:42:08,870 Francamente, gli esseri umani preferiscono contare da uno su un massimo, mentre gli informatici, 865 00:42:08,870 --> 00:42:09,620 zero su su. 866 00:42:09,620 --> 00:42:11,700 gli informatici non stanno andando a utilizzare questo tipo di programma, quindi siamo 867 00:42:11,700 --> 00:42:13,990 intenzione di iniziare solo contando a uno come persone normali. 868 00:42:13,990 --> 00:42:17,630 >> E ora, in linea 33, notare il lieve pezzo diverso di sintassi. 869 00:42:17,630 --> 00:42:23,710 L'i-esimo età in quella variabile di tipo serie sta per arrivare un int. 870 00:42:23,710 --> 00:42:25,770 E ora, infine, questo è solo aritmetica quaggiù. 871 00:42:25,770 --> 00:42:29,200 Ho deciso in un ciclo separato di rivendicare qualche tempo passa, ed ora in questa 872 00:42:29,200 --> 00:42:31,400 ciclo separato, queste linee eseguire. 873 00:42:31,400 --> 00:42:35,810 >> Un anno da ora, persona sarò io anni, a meno di notare questo non è il 874 00:42:35,810 --> 00:42:36,500 variabile i. 875 00:42:36,500 --> 00:42:38,390 Questo è ora% i per int. 876 00:42:38,390 --> 00:42:43,210 E notate come primo segnaposto, ho collegare i più 1, per cui contiamo come un 877 00:42:43,210 --> 00:42:44,250 persona normale. 878 00:42:44,250 --> 00:42:49,190 E poi per il valore della loro età, per i anni, prendo le età staffa 879 00:42:49,190 --> 00:42:52,980 i - e perché ci faccio più uno qui? 880 00:42:52,980 --> 00:42:53,760 Hanno appena invecchiati. 881 00:42:53,760 --> 00:42:55,030 E 'la mia stupida scelta dei programmi. 882 00:42:55,030 --> 00:42:56,810 Hanno appena di età compresa tra un anno. 883 00:42:56,810 --> 00:42:59,770 Potrei digitare qualsiasi numero che Io in realtà non ci voglio. 884 00:42:59,770 --> 00:43:02,430 >> Così che cosa è in realtà tutti la rilevanza qui? 885 00:43:02,430 --> 00:43:07,610 Bene, lasciate che in realtà scorrere indietro qui e dipingere un quadro 886 00:43:07,610 --> 00:43:10,830 di quello che ci aspetta. 887 00:43:10,830 --> 00:43:15,720 Che cosa faremo con il nostro prossimo Problema due set è dilettarsi nel 888 00:43:15,720 --> 00:43:17,070 mondo della crittografia. 889 00:43:17,070 --> 00:43:22,500 Quindi questa è una stringa di caratteri, quindi un sequenza di caratteri multipli, e ciò 890 00:43:22,500 --> 00:43:23,750 dice questo? 891 00:43:23,750 --> 00:43:28,530 892 00:43:28,530 --> 00:43:30,600 Non è nella versione online delle diapositive. 893 00:43:30,600 --> 00:43:35,880 >> Quindi io sostengo che questo è uguale a questa, un stupido Annuncio di molti anni 894 00:43:35,880 --> 00:43:39,950 fa, che potrebbe effettivamente ricordare una delle sue origini. 895 00:43:39,950 --> 00:43:42,740 Quindi questo è un esempio di crittografia o crittografia. 896 00:43:42,740 --> 00:43:46,150 Si scopre che se si vuole effettivamente inviare informazioni o condividere 897 00:43:46,150 --> 00:43:49,310 informazioni con qualcuno in modo sicuro, come un messaggio come questo, è possibile 898 00:43:49,310 --> 00:43:50,500 rimescolare le lettere. 899 00:43:50,500 --> 00:43:53,170 Ma, in genere, le parole sono Non a caso strapazzate. 900 00:43:53,170 --> 00:43:56,365 Stanno permutati in un modo o modificate in qualche modo, in modo che - oops. 901 00:43:56,365 --> 00:43:59,040 Questo è uno spoiler divertente per la prossima volta. 902 00:43:59,040 --> 00:44:04,390 >> Così si può mappare ciò che è apparentemente O a B. Si noti che le linee fino 903 00:44:04,390 --> 00:44:05,420 capitalizzazione-saggio. 904 00:44:05,420 --> 00:44:07,960 Apparentemente r diventa e. 905 00:44:07,960 --> 00:44:14,000 Apparentemente F-H-E-R diventa S-U-R-E. Così si scopre che c'è una mappatura, e in 906 00:44:14,000 --> 00:44:18,720 questo caso c'è un abbastanza stupido mappatura se qualcuno ha capito? 907 00:44:18,720 --> 00:44:21,440 Questo è qualcosa che si chiama Rot 13, Ruota 13. 908 00:44:21,440 --> 00:44:24,760 E 'la più stupida di crittografia meccanismi perché letteralmente appena 909 00:44:24,760 --> 00:44:29,160 aggiunge 13 ad ogni una delle lettere, stupido, nel senso che se si 910 00:44:29,160 --> 00:44:31,890 avere un po 'di tempo libero per le mani e una matita, o semplicemente pensi che 911 00:44:31,890 --> 00:44:35,260 attraverso nella tua testa, si potrebbe provare tutti i possibili arrivi - uno, due, 912 00:44:35,260 --> 00:44:38,470 tre, punto, punto, punto, 25 a soli ruotare l'intero alfabeto, e 913 00:44:38,470 --> 00:44:40,860 alla fine, capirai ciò che questo messaggio sia. 914 00:44:40,860 --> 00:44:43,700 Quindi, se hai fatto qualcosa di simile in scuola di grado passando messaggi al vostro 915 00:44:43,700 --> 00:44:46,830 migliore amico, se il grado di scuola insegnante semplicemente leggere attraverso il 916 00:44:46,830 --> 00:44:50,320 messaggio e bruta costretto la soluzione, si potrebbe avere ottenuto 917 00:44:50,320 --> 00:44:52,550 una risposta per questo. 918 00:44:52,550 --> 00:44:54,970 >> Ora, naturalmente, nel mondo reale, crittografia è più sofisticato. 919 00:44:54,970 --> 00:45:00,120 Si tratta di un frammento di testo da un sistema di computer che dispone di nomi utente e 920 00:45:00,120 --> 00:45:03,630 le password, come quasi tutti i nostri fanno, e questo è ciò che la tua password potrebbe 921 00:45:03,630 --> 00:45:07,260 guarda come se memorizzati sul disco guidare, ma in forma criptata. 922 00:45:07,260 --> 00:45:11,050 Questo non è solo una rotazione di lettere, A è B e B è C. Questo è 923 00:45:11,050 --> 00:45:15,620 molto più sofisticato, ma utilizza ciò che è generalmente conosciuto come chiave segreta 924 00:45:15,620 --> 00:45:16,690 crittografia. 925 00:45:16,690 --> 00:45:20,210 Questa immagine racconta il seguente storia con alcune icone. 926 00:45:20,210 --> 00:45:22,250 >> Sulla sinistra, abbiamo ciò che chiameremo testo normale. 927 00:45:22,250 --> 00:45:25,420 Nel mondo della crittografia, pianura testo è solo il messaggio originale 928 00:45:25,420 --> 00:45:29,050 scritto in inglese o francese o qualsiasi lingua. 929 00:45:29,050 --> 00:45:32,405 Se si desidera crittografare, noi passeremo ma pittoricamente attraverso un lucchetto, in modo 930 00:45:32,405 --> 00:45:35,580 qualche tipo di algoritmo di, qualche funzione o programma che qualcuno ha scritto 931 00:45:35,580 --> 00:45:39,880 che rimescola le lettere si spera complicatedly più di una semplice aggiunta di 13 932 00:45:39,880 --> 00:45:40,980 a ciascuno di essi. 933 00:45:40,980 --> 00:45:43,780 >> Che cosa si ottiene da questo processo nel centro vi è chiamato testo cifrato. 934 00:45:43,780 --> 00:45:44,850 Quindi una specie di parola sexy. 935 00:45:44,850 --> 00:45:47,630 Significa solo che è il criptato versione del testo. 936 00:45:47,630 --> 00:45:52,570 E solo se si ha lo stesso segreto, 13 o meno 13, si è in grado di 937 00:45:52,570 --> 00:45:54,970 decifrare un messaggio simile. 938 00:45:54,970 --> 00:45:57,770 >> Quindi, in Problema Set Due, tra le cose farete se nella Hacker 939 00:45:57,770 --> 00:46:01,860 Edition, sarà necessario scrivere il codice per rompere queste password, cercando di capire 940 00:46:01,860 --> 00:46:05,170 quello che erano e come sono stati crittografato, anche se facciamo dare un po ' 941 00:46:05,170 --> 00:46:06,460 di guida lungo la strada. 942 00:46:06,460 --> 00:46:09,320 Nella Standard Edition, introduciamo un paio di cifre, la crittografia 943 00:46:09,320 --> 00:46:12,400 meccanismi, uno chiamato Cesare, uno chiamato Vigenère, che sono ancora 944 00:46:12,400 --> 00:46:16,100 cifrari a rotazione dove A diventa qualcosa, B diventa qualcosa, ma 945 00:46:16,100 --> 00:46:18,820 quello che dovete fare a livello di codice perché ci sarà davvero un segreto 946 00:46:18,820 --> 00:46:22,840 chiave coinvolto che è tipicamente un numero o una parola chiave che solo l' 947 00:46:22,840 --> 00:46:26,420 mittente e il destinatario di questi messaggi dovrebbero capire. 948 00:46:26,420 --> 00:46:28,660 >> Ora, questo ha in realtà incarnazioni nel mondo reale. 949 00:46:28,660 --> 00:46:32,910 Questo, per esempio, è poco orfano Anello decodificatore segreto di Annie, e si 950 00:46:32,910 --> 00:46:35,180 può effettivamente realizzare questi cifrari a rotazione - 951 00:46:35,180 --> 00:46:37,930 A diventa qualcosa, B diventa qualcosa - con un paio di ruote, 952 00:46:37,930 --> 00:46:40,840 quello esterno, uno sull'interno tale che se si ruota il volante o 953 00:46:40,840 --> 00:46:44,170 l'anello, si può effettivamente allineare il lettere con lettere diverse, 954 00:46:44,170 --> 00:46:45,430 ottenendo un codice segreto. 955 00:46:45,430 --> 00:46:48,110 E così come il colpo di scena per oggi, quello che ho pensato di fare un po 'di 956 00:46:48,110 --> 00:46:52,170 ritorno al passato che se si accende la TV il 24 dicembre, è possibile guardare la 957 00:46:52,170 --> 00:46:55,390 film fino alla nausea per 24 ore di fila. 958 00:46:55,390 --> 00:47:06,030 Ma per oggi, io apro qui e ci danno solo due minuti di un 959 00:47:06,030 --> 00:47:13,493 pedagogicamente rilevante storia di Natale con un omino di nome Ralphie. 960 00:47:13,493 --> 00:47:14,400 >> [RIPRODUZIONE VIDEO] 961 00:47:14,400 --> 00:47:17,420 >> -Sia noto a tutti quanti che Ralph Parker è nominato 962 00:47:17,420 --> 00:47:20,650 membro del Orphan Annie Piccolo segreto cerchio e il diritto di tutti 963 00:47:20,650 --> 00:47:23,460 gli onori e benefici NONCHÉ. 964 00:47:23,460 --> 00:47:25,990 >> -Firmato, Little Orphan Annie. 965 00:47:25,990 --> 00:47:30,100 Controfirmato, Pierre Andre in inchiostro. 966 00:47:30,100 --> 00:47:34,270 Onori e benefici già all'età di nove anni. 967 00:47:34,270 --> 00:47:39,440 >> [GRIDA ALLA RADIO] 968 00:47:39,440 --> 00:47:40,770 >> Vieni, andiamo avanti con lui. 969 00:47:40,770 --> 00:47:44,965 Non ho bisogno di tutto ciò che il jazz su contrabbandieri e pirati. 970 00:47:44,965 --> 00:47:48,270 >> -Senti domani sera per la concludendo l'avventura del nero 971 00:47:48,270 --> 00:47:49,650 nave dei pirati. 972 00:47:49,650 --> 00:47:53,320 Ora, è il momento per il segreto di Annie Messaggio per voi membri 973 00:47:53,320 --> 00:47:55,720 del cerchio segreto. 974 00:47:55,720 --> 00:47:56,580 Ricordate, ragazzi. 975 00:47:56,580 --> 00:48:01,720 Solo i membri di Secret Circle di Annie in grado di decodificare un messaggio segreto di Annie. 976 00:48:01,720 --> 00:48:05,872 Ricordate, Annie dipende da te. 977 00:48:05,872 --> 00:48:08,670 Impostare le spine di B2. 978 00:48:08,670 --> 00:48:11,000 Ecco il messaggio. 979 00:48:11,000 --> 00:48:12,335 12, 11, 2 - 980 00:48:12,335 --> 00:48:14,670 >> -Io sono nel mio primo incontro segreto. 981 00:48:14,670 --> 00:48:19,720 >> -25, 14, 11, 18, 16 - 982 00:48:19,720 --> 00:48:21,650 >> -Pierre era in grande stasera voce. 983 00:48:21,650 --> 00:48:24,830 Potrei dire che il messaggio di questa sera era davvero importante. 984 00:48:24,830 --> 00:48:26,400 >> -3, 25. 985 00:48:26,400 --> 00:48:28,540 Questo è un messaggio da Annie se stessa. 986 00:48:28,540 --> 00:48:30,086 Ricordate, non dirlo a nessuno. 987 00:48:30,086 --> 00:48:34,370 988 00:48:34,370 --> 00:48:38,710 >> -90 Secondi dopo, io sono in unica camera nella casa dove un bambino di nove anni 989 00:48:38,710 --> 00:48:42,668 potrebbe sedersi in privacy e decodifica. 990 00:48:42,668 --> 00:48:47,628 Aha, B. sono andato a quello successivo. 991 00:48:47,628 --> 00:48:53,060 E. La prima parola è "essere". S. Si è ora in arrivo più facile. 992 00:48:53,060 --> 00:48:54,980 U. 25. 993 00:48:54,980 --> 00:48:55,940 Quello è R. 994 00:48:55,940 --> 00:48:56,900 >> -Dai, Ralphie. 995 00:48:56,900 --> 00:48:57,860 Devo andare. 996 00:48:57,860 --> 00:48:59,780 >> -Torno subito giù, ma '. 997 00:48:59,780 --> 00:49:01,030 Gee Whiz. 998 00:49:01,030 --> 00:49:04,300 999 00:49:04,300 --> 00:49:08,220 >> -T. O. Assicurarsi di. 1000 00:49:08,220 --> 00:49:09,500 Essere sicuri di che cosa? 1001 00:49:09,500 --> 00:49:11,660 Qual è stato Little Orphan Annie cercando di dire? 1002 00:49:11,660 --> 00:49:12,844 Essere sicuri di che cosa? 1003 00:49:12,844 --> 00:49:14,732 >> -Ralphie, Randy ha avuto modo di andare. 1004 00:49:14,732 --> 00:49:16,148 Vi prego di venire fuori? 1005 00:49:16,148 --> 00:49:17,092 >> -Va bene, mamma. 1006 00:49:17,092 --> 00:49:18,510 Vengo subito fuori. 1007 00:49:18,510 --> 00:49:20,270 >> -Mi stavo avvicinando ad ora. 1008 00:49:20,270 --> 00:49:21,823 La tensione era terribile. 1009 00:49:21,823 --> 00:49:23,045 Che cosa è stato? 1010 00:49:23,045 --> 00:49:26,510 Il destino del pianeta può in bilico. 1011 00:49:26,510 --> 00:49:28,985 >> -Ralphie, devo andare di Randy. 1012 00:49:28,985 --> 00:49:32,680 >> -Torno subito fuori per gridare forte. 1013 00:49:32,680 --> 00:49:33,956 >> -Ci siamo quasi. 1014 00:49:33,956 --> 00:49:35,140 Le mie dita volavano. 1015 00:49:35,140 --> 00:49:36,880 La mia mente era una trappola d'acciaio. 1016 00:49:36,880 --> 00:49:38,010 Ogni poro vibrava. 1017 00:49:38,010 --> 00:49:39,878 E 'stato quasi chiaro. 1018 00:49:39,878 --> 00:49:43,210 Sì, sì, sì, sì, sì. 1019 00:49:43,210 --> 00:49:49,030 >> -Assicuratevi di bere il vostro Ovaltine. 1020 00:49:49,030 --> 00:49:50,280 Ovaltine? 1021 00:49:50,280 --> 00:49:53,980 1022 00:49:53,980 --> 00:49:55,230 Un commerciale scadente? 1023 00:49:55,230 --> 00:49:58,572 1024 00:49:58,572 --> 00:50:00,694 Figlio di una cagna. 1025 00:50:00,694 --> 00:50:01,900 >> [FINE RIPRODUZIONE VIDEO] 1026 00:50:01,900 --> 00:50:04,260 >> SPEAKER 1: Questo è CS50, e che sarà Problema due set. 1027 00:50:04,260 --> 00:50:06,305 Ci vediamo la prossima settimana. 1028 00:50:06,305 --> 00:50:08,800 >> SPEAKER 2: Alla prossima CS50, questo accade. 1029 00:50:08,800 --> 00:50:11,060 >> SPEAKER 1: Così un argomento che non abbiamo guardato finora è 1030 00:50:11,060 --> 00:50:12,220 quella di puntatori a funzione. 1031 00:50:12,220 --> 00:50:14,540 Ora, un puntatore a funzione è solo l'indirizzo di un pubblico 1032 00:50:14,540 --> 00:50:17,000 funzione, ma molto simile - 1033 00:50:17,000 --> 00:50:18,250 figlio di un - 1034 00:50:18,250 --> 00:50:19,670