1 00:00:00,000 --> 00:00:00,980 2 00:00:00,980 --> 00:00:04,410 >> [GIOCO MUSICA] 3 00:00:04,410 --> 00:00:11,147 4 00:00:11,147 --> 00:00:12,230 DAVID J. MALAN: Va bene. 5 00:00:12,230 --> 00:00:16,440 Questo è CS50, e questo è la fine della settimana 2. 6 00:00:16,440 --> 00:00:18,480 Così oggi, stiamo andando per continuare il nostro sguardo 7 00:00:18,480 --> 00:00:21,150 a come noi rappresentiamo le cose sotto il hood-- allontanamento 8 00:00:21,150 --> 00:00:23,520 da numeri come interi e valori in virgola mobile 9 00:00:23,520 --> 00:00:26,810 e concentrandosi sulle stringhe e programmi in definitiva più interessanti. 10 00:00:26,810 --> 00:00:30,140 Ma ci sarà anche uno sguardo a un paio di dominio specifico problems-- 11 00:00:30,140 --> 00:00:33,620 il primo dei quali sarà essere coinvolto crittografia, 12 00:00:33,620 --> 00:00:36,570 l'arte di scrambling informazioni, in cui vedete qui sopra 13 00:00:36,570 --> 00:00:41,480 è una foto di Radio Orphan Annie anello decoder segreto da ieri. 14 00:00:41,480 --> 00:00:46,490 >> Questo è in realtà forma molto primitiva e la forma di bambino di cryptopgraphy 15 00:00:46,490 --> 00:00:50,590 per cui questo anello ha due disks-- uno interno ed uno esterno. 16 00:00:50,590 --> 00:00:54,740 E ruotando uno di quelli, si possono essenzialmente allineare lettere come A 17 00:00:54,740 --> 00:00:59,520 a Z con altre lettere come B attraverso A. In altre parole, 18 00:00:59,520 --> 00:01:03,730 si può letteralmente ruotare l'alfabeto, venendo in tal modo con una mappatura da 19 00:01:03,730 --> 00:01:07,820 lettere alle lettere in modo che, se si ha voluto inviare un messaggio segreto 20 00:01:07,820 --> 00:01:11,820 a qualcuno come Annie, si potrebbe scrivere il vostro messaggio e quindi ruotare 21 00:01:11,820 --> 00:01:15,370 le lettere, per cui, se si intendono di dire "A", è invece dici "B", 22 00:01:15,370 --> 00:01:17,280 Vuoi dire "B" tu invece dici "C" - 23 00:01:17,280 --> 00:01:20,240 o qualcosa di un po 'più intelligente di che-- e quindi, in ultima analisi, 24 00:01:20,240 --> 00:01:24,630 fintanto che Annie ha questo decoder anello, lei può decodificare il messaggio. 25 00:01:24,630 --> 00:01:28,540 Ora, si può ricordare, infatti, che questo è stato utilizzato in un famoso film che 26 00:01:28,540 --> 00:01:31,140 gioca fino alla nausea durante il periodo natalizio. 27 00:01:31,140 --> 00:01:32,650 Diamo uno sguardo qui. 28 00:01:32,650 --> 00:01:35,294 29 00:01:35,294 --> 00:01:37,210 Ralphie PARKER: "Che si tratti di noto a tutti in sintesi 30 00:01:37,210 --> 00:01:41,000 che Ralph Parker è nominato un membro di Little Orphan Annie Segreto 31 00:01:41,000 --> 00:01:44,860 Circle e il diritto di tutti i onori e benefici che si verificano ad essa. " 32 00:01:44,860 --> 00:01:47,410 >> Ralphie PARKER (narrante): Firmato Little Orphan Annie. 33 00:01:47,410 --> 00:01:50,070 Controfirmato, Pierre Andre! 34 00:01:50,070 --> 00:01:51,490 In inchiostro. 35 00:01:51,490 --> 00:01:55,494 Onori e benefici, già all'età di nove anni. 36 00:01:55,494 --> 00:01:57,402 >> [GIOCO MUSICA] 37 00:01:57,402 --> 00:02:00,470 >> [CHATTER RADIO] 38 00:02:00,470 --> 00:02:01,470 Ralphie PARKER: Andiamo. 39 00:02:01,470 --> 00:02:02,344 Andiamo avanti con lui. 40 00:02:02,344 --> 00:02:06,029 Non ho bisogno di tutto ciò che il jazz sui contrabbandieri e pirati. 41 00:02:06,029 --> 00:02:08,820 RADIO ANNUNCIATORE: Ascoltare domani notte per l'avventura conclusiva 42 00:02:08,820 --> 00:02:11,060 di The Pirate Ship nero. 43 00:02:11,060 --> 00:02:14,740 Ora, è il momento per Annie Messaggio segreto per voi soci 44 00:02:14,740 --> 00:02:17,110 del Secret Circle. 45 00:02:17,110 --> 00:02:20,700 Ricordate bambini, solo i membri di Annie Secret Circle 46 00:02:20,700 --> 00:02:23,270 in grado di decodificare il messaggio segreto di Annie. 47 00:02:23,270 --> 00:02:27,270 >> Ricordate, Annie dipende da te. 48 00:02:27,270 --> 00:02:30,060 Impostare i perni per B-2. 49 00:02:30,060 --> 00:02:34,004 Ecco il message-- 12, 11, 2-- 50 00:02:34,004 --> 00:02:36,503 Ralphie PARKER (narrante): I Sono nel mio primo incontro segreto. 51 00:02:36,503 --> 00:02:40,041 RADIO ANNUNCIATORE: -25, 14, 11, 18, 16-- 52 00:02:40,041 --> 00:02:42,790 Ralphie PARKER (narrante): Oh, Pierre era in grande stasera voce. 53 00:02:42,790 --> 00:02:46,110 Potrei dire che stasera di messaggio era veramente importante. 54 00:02:46,110 --> 00:02:47,930 >> RADIO ANNUNCIATORE: --3, 25. 55 00:02:47,930 --> 00:02:49,940 Questo è un messaggio da Annie se stessa. 56 00:02:49,940 --> 00:02:52,182 Ricordate, non dirlo a nessuno. 57 00:02:52,182 --> 00:02:55,077 >> [ANSIMARE] 58 00:02:55,077 --> 00:02:57,285 Ralphie PARKER (narrante): Novanta secondi dopo, io sono 59 00:02:57,285 --> 00:03:00,090 nell'unica camera casa dove un bambino di nove anni 60 00:03:00,090 --> 00:03:04,380 poteva sedersi nel rispetto della privacy e decodifica. 61 00:03:04,380 --> 00:03:04,990 Ah. 62 00:03:04,990 --> 00:03:05,680 "B." 63 00:03:05,680 --> 00:03:06,524 >> [Ridacchia] 64 00:03:06,524 --> 00:03:08,684 >> Ralphie PARKER (narrante): Sono andato al successivo. 65 00:03:08,684 --> 00:03:09,610 "E." 66 00:03:09,610 --> 00:03:11,641 La prima parola è "essere". 67 00:03:11,641 --> 00:03:12,140 Sì! 68 00:03:12,140 --> 00:03:14,293 Veniva più facile ora. 69 00:03:14,293 --> 00:03:15,259 "U." 70 00:03:15,259 --> 00:03:16,225 >> [Ridacchia] 71 00:03:16,225 --> 00:03:18,157 >> RANDY PARKER: Aw, andiamo, Ralphie. 72 00:03:18,157 --> 00:03:19,606 Devo andare! 73 00:03:19,606 --> 00:03:21,538 >> Ralphie PARKER: Torno giù, Ma. 74 00:03:21,538 --> 00:03:22,504 Caspita. 75 00:03:22,504 --> 00:03:25,402 76 00:03:25,402 --> 00:03:31,220 "T." "O." "Essere sicuri a. "" Assicuratevi di "che cosa? 77 00:03:31,220 --> 00:03:33,981 Qual è stato Little Orphan Annie cercando di dire? "Assicuratevi di" che cosa? 78 00:03:33,981 --> 00:03:35,522 MADRE: Ralphie, Randy ha avuto modo di andare. 79 00:03:35,522 --> 00:03:36,735 Vi prego di venire fuori? 80 00:03:36,735 --> 00:03:38,190 >> Ralphie PARKER: Va bene, mamma! 81 00:03:38,190 --> 00:03:39,787 Torno fuori! 82 00:03:39,787 --> 00:03:41,995 Ralphie PARKER (narrante): Mi stavo avvicinando ora. 83 00:03:41,995 --> 00:03:43,370 La tensione era terribile. 84 00:03:43,370 --> 00:03:44,794 Che cosa è stato? 85 00:03:44,794 --> 00:03:47,656 Il destino del pianeta può in bilico. 86 00:03:47,656 --> 00:03:50,518 >> MADRE: Ralphie, Randy deve andare! 87 00:03:50,518 --> 00:03:53,635 >> Ralphie PARKER: Torno fuori, per gridare forte! 88 00:03:53,635 --> 00:03:55,343 Ralphie PARKER (RACCONTO): Ci siamo quasi! 89 00:03:55,343 --> 00:03:56,520 Le mie dita volavano! 90 00:03:56,520 --> 00:03:58,500 La mia mente era una trappola d'acciaio. 91 00:03:58,500 --> 00:03:59,850 Ogni poro vibrava. 92 00:03:59,850 --> 00:04:01,806 Era quasi chiaro! 93 00:04:01,806 --> 00:04:02,773 Sì! 94 00:04:02,773 --> 00:04:03,273 Sì! 95 00:04:03,273 --> 00:04:03,773 Sì! 96 00:04:03,773 --> 00:04:04,740 Sì! 97 00:04:04,740 --> 00:04:10,250 >> Ralphie PARKER: "Essere sicuri bere il tuo Ovaltine. " 98 00:04:10,250 --> 00:04:10,750 Ovaltine? 99 00:04:10,750 --> 00:04:14,864 100 00:04:14,864 --> 00:04:17,539 Uno spot scadente? 101 00:04:17,539 --> 00:04:19,439 >> [GIOCO MUSICA] 102 00:04:19,439 --> 00:04:21,724 >> Ralphie PARKER: Figlio di una cagna. 103 00:04:21,724 --> 00:04:23,460 >> [Ride] 104 00:04:23,460 --> 00:04:27,070 >> DAVID J. MALAN: In modo che poi è uno sguardo a ciò che la crittografia 105 00:04:27,070 --> 00:04:29,880 può essere per un questo-- bere da ieri. 106 00:04:29,880 --> 00:04:30,900 Quindi un annuncio veloce. 107 00:04:30,900 --> 00:04:33,410 Se siete liberi questo Venerdì alle 13:15 e sarebbe 108 00:04:33,410 --> 00:04:36,610 vuole unirsi a noi per CS50 pranzo, testa a questo URL qui. 109 00:04:36,610 --> 00:04:38,080 Primo arrivato, primo servire come al solito. 110 00:04:38,080 --> 00:04:41,840 Ma col tempo, faremo in modo che la maggior parte chiunque desideri partecipare 111 00:04:41,840 --> 00:04:43,640 può programmare-saggio. 112 00:04:43,640 --> 00:04:45,170 >> Quindi stringhe. 113 00:04:45,170 --> 00:04:47,940 Abbiamo Zamyla-- quali ora che hai incontrato più probabile 114 00:04:47,940 --> 00:04:50,750 nel Problema Set 1-- cui nome è scritto così. 115 00:04:50,750 --> 00:04:53,570 E supponiamo che avete digitato il suo nome in un programma per computer che è 116 00:04:53,570 --> 00:04:55,710 usando qualcosa come getString. 117 00:04:55,710 --> 00:04:57,890 Per recuperare questi tasti, come 118 00:04:57,890 --> 00:05:01,620 andiamo su che rappresenta un stringa, una parola, un paragrafo, 119 00:05:01,620 --> 00:05:03,960 o più lettere come questi qui? 120 00:05:03,960 --> 00:05:06,790 >> Abbiamo parlato l'ultima volta su interi e problemi 121 00:05:06,790 --> 00:05:09,960 che nascono con integer overflow e valori in virgola mobile 122 00:05:09,960 --> 00:05:12,190 e problemi che sorgere all'interno di precisione. 123 00:05:12,190 --> 00:05:16,080 Con corde, abbiamo almeno avere un po 'più di flessibilità 124 00:05:16,080 --> 00:05:17,970 perché strings-- solo nel reale world-- 125 00:05:17,970 --> 00:05:19,790 può essere una lunghezza piuttosto arbitraria. 126 00:05:19,790 --> 00:05:21,055 Piuttosto breve, piuttosto lunga. 127 00:05:21,055 --> 00:05:23,680 Ma anche allora, stiamo andando a scoprire che i computer possono a volte 128 00:05:23,680 --> 00:05:27,200 esaurire la memoria e nemmeno memorizzare una stringa abbastanza grande. 129 00:05:27,200 --> 00:05:30,840 >> Ma per ora, cominciamo da visualizzare una stringa come qualcosa in queste caselle 130 00:05:30,840 --> 00:05:31,340 Qui. 131 00:05:31,340 --> 00:05:36,410 Quindi sei tali scatole, ciascuna delle quali rappresenta un carattere o "char". 132 00:05:36,410 --> 00:05:40,646 Quindi ricorda che "char" - c-h-a-r-- è uno dei tipi di dati incorporati in C. 133 00:05:40,646 --> 00:05:43,520 E ciò che è bello è che si può utilizzare quella sorta di come un blocco di costruzione, 134 00:05:43,520 --> 00:05:47,880 un pezzo di puzzle, se si vuole, per formare un più grande tipo di dati che continueremo 135 00:05:47,880 --> 00:05:49,410 chiamare una "stringa". 136 00:05:49,410 --> 00:05:53,650 >> Ora, ciò che è utile di pensare di cose come le stringhe in questo modo? 137 00:05:53,650 --> 00:05:57,720 Beh, si scopre che possiamo in realtà sfruttare questa struttura 138 00:05:57,720 --> 00:06:01,420 per accedere realmente singoli caratteri in un modo abbastanza semplice. 139 00:06:01,420 --> 00:06:04,099 Ho intenzione di andare avanti e creare un file chiamato "stringzero.c," 140 00:06:04,099 --> 00:06:05,765 ma si può chiamare qualunque cosa vuoi. 141 00:06:05,765 --> 00:06:08,500 E sul sito del corso è già questo esempio in anticipo, 142 00:06:08,500 --> 00:06:10,430 quindi non c'è bisogno di digitare tutto. 143 00:06:10,430 --> 00:06:13,820 >> E ho intenzione di andare avanti e prima fare int void main. 144 00:06:13,820 --> 00:06:15,980 E nel giro di pochi giorni, inizieremo a prendere in giro a parte 145 00:06:15,980 --> 00:06:19,070 quello vuoto è qui, perché è int accanto alla principale, e così via. 146 00:06:19,070 --> 00:06:21,180 Ma per ora, continuiamo per copiare incollare questo. 147 00:06:21,180 --> 00:06:23,455 >> Ho intenzione di dichiarare una stringa denominata s. 148 00:06:23,455 --> 00:06:26,920 E ho intenzione di tornare da GetString qualunque sia l'utente a. 149 00:06:26,920 --> 00:06:29,170 Ciò sta andando essere un semplice programma, senza istruzioni, 150 00:06:29,170 --> 00:06:31,336 Sto solo andando a ciecamente si aspetta che l'utente conosce 151 00:06:31,336 --> 00:06:32,600 cosa fare per mantenere le cose semplici. 152 00:06:32,600 --> 00:06:34,220 >> E ora ho intenzione di avere un ciclo for. 153 00:06:34,220 --> 00:06:37,450 E dentro del mio ciclo for sono andando ad avere int mi viene zero. 154 00:06:37,450 --> 00:06:40,660 E i è, ancora una volta, solo una convenzione, una variabile indice per il conteggio, 155 00:06:40,660 --> 00:06:42,350 ma potrei chiamare questo quello che voglio. 156 00:06:42,350 --> 00:06:46,275 Io vado a fare i è meno than-- bene Il nome di Zamyla è lungo sei lettere. 157 00:06:46,275 --> 00:06:48,150 Quindi ho intenzione di duro codice che lì per ora. 158 00:06:48,150 --> 00:06:49,730 >> E poi i ++. 159 00:06:49,730 --> 00:06:53,190 E ora all'interno di questi ricci bretelle ho intenzione di fare printf, 160 00:06:53,190 --> 00:06:55,460 e voglio stampare una carattere alla volta. 161 00:06:55,460 --> 00:06:58,227 Quindi ho intenzione di usare% c per forse la prima volta. 162 00:06:58,227 --> 00:07:00,560 E poi voglio stampare ogni carattere sulla propria riga. 163 00:07:00,560 --> 00:07:02,550 Quindi ho intenzione di mettere un poco backslash n lì. 164 00:07:02,550 --> 00:07:03,640 Chiudi preventivo. 165 00:07:03,640 --> 00:07:06,250 >> E ora voglio fare qualcosa qui. 166 00:07:06,250 --> 00:07:10,610 Voglio stampare il lettera specifica nella stringa, 167 00:07:10,610 --> 00:07:13,670 s, come sto iterazione da zero fino a sei. 168 00:07:13,670 --> 00:07:17,150 In altre parole, voglio stampare il personaggio-esimo di s. 169 00:07:17,150 --> 00:07:18,420 Ora come posso fare questo? 170 00:07:18,420 --> 00:07:21,550 >> Beh, proprio come le scatole di questa rappresentazione qui, 171 00:07:21,550 --> 00:07:25,560 tipo di, evocare la nozione di boxe lettere a, si può fare allo stesso modo che 172 00:07:25,560 --> 00:07:32,630 sintatticamente in C semplicemente specificando, Voglio stampare i di-esimo carattere. 173 00:07:32,630 --> 00:07:35,640 Usando le parentesi quadre sulla tastiera del computer 174 00:07:35,640 --> 00:07:38,910 che su una tastiera americana sono generalmente sopra il vostro tasto di ritorno. 175 00:07:38,910 --> 00:07:42,630 >> Quindi questo non è giusto ma, come avrete notato. 176 00:07:42,630 --> 00:07:44,780 Ma ho intenzione di specie di ciecamente andare avanti qui. 177 00:07:44,780 --> 00:07:47,020 E ho intenzione di fare effettuare stringa 0. 178 00:07:47,020 --> 00:07:50,860 Ma prima di fare questo, vediamo se ci non può anticipare alcuni errori comuni. 179 00:07:50,860 --> 00:07:52,844 È questo andare per compilare? 180 00:07:52,844 --> 00:07:54,510 No, mi manca un sacco di cose. 181 00:07:54,510 --> 00:07:55,280 Librerie ho sentito. 182 00:07:55,280 --> 00:07:58,480 >> Quindi, quale intestazione file potrei desiderare di aggiungere qui? 183 00:07:58,480 --> 00:07:59,205 Già. 184 00:07:59,205 --> 00:08:01,580 >> PUBBLICO: è necessario I / O standard [incomprensibile] 185 00:08:01,580 --> 00:08:02,663 >> DAVID J. MALAN: Eccellente. 186 00:08:02,663 --> 00:08:06,060 Quindi ho bisogno di I / O standard. Per quello scopo Voglio I / O standard? 187 00:08:06,060 --> 00:08:06,670 Per printf. 188 00:08:06,670 --> 00:08:09,220 Quindi includere stdio.h. 189 00:08:09,220 --> 00:08:13,490 E si propone, inoltre, che includo la biblioteca CS50 per quale motivo? 190 00:08:13,490 --> 00:08:14,650 Per avere le stringhe. 191 00:08:14,650 --> 00:08:17,780 Quindi vedremo cosa La biblioteca di CS50 sta facendo 192 00:08:17,780 --> 00:08:19,260 per creare questa nozione di una stringa. 193 00:08:19,260 --> 00:08:21,930 Ma per ora, si può solo pensare di come un tipo di dati effettivo. 194 00:08:21,930 --> 00:08:23,596 >> In modo che sembra essere un po 'ripulito. 195 00:08:23,596 --> 00:08:27,060 E ora ho intenzione di andare avanti e anzi fare rendere stringa 0. 196 00:08:27,060 --> 00:08:27,700 Compilato. 197 00:08:27,700 --> 00:08:28,370 Quindi questo è un bene. 198 00:08:28,370 --> 00:08:32,799 Così ./string0 farmi ingrandire in modo che possiamo vedere più da vicino cosa sta succedendo. 199 00:08:32,799 --> 00:08:33,850 Invio. 200 00:08:33,850 --> 00:08:37,789 Z-A-M-Y-L-A entrare. 201 00:08:37,789 --> 00:08:39,440 E abbiamo stampato al nome di Zamyla. 202 00:08:39,440 --> 00:08:40,409 >> Così che è abbastanza buono. 203 00:08:40,409 --> 00:08:43,220 Così ora andiamo avanti e eseguire di nuovo questo programma, 204 00:08:43,220 --> 00:08:45,659 e digitare i nome completo di Daven. 205 00:08:45,659 --> 00:08:46,450 Sorpresa, sorpresa. 206 00:08:46,450 --> 00:08:48,021 Invio. 207 00:08:48,021 --> 00:08:48,520 Hmm. 208 00:08:48,520 --> 00:08:51,750 Non abbiamo stampato Daven di pieno nome correttamente. 209 00:08:51,750 --> 00:08:54,250 Ora questo dovrebbe essere ovvio in Retrospect a causa di ciò, 210 00:08:54,250 --> 00:08:57,010 sorta di, decisione di progettazione stupida? 211 00:08:57,010 --> 00:08:59,590 >> Sì, ho hardcoded l' sei dentro il mio ciclo for. 212 00:08:59,590 --> 00:09:01,610 Ora l'ho fatto solo perché Sapevo che il nome di Zamyla 213 00:09:01,610 --> 00:09:02,776 stava per essere sei lettere. 214 00:09:02,776 --> 00:09:04,720 Ma sicuramente questo non è una soluzione generale. 215 00:09:04,720 --> 00:09:07,720 Così si scopre che possiamo dinamicamente calcolare la lunghezza di una stringa 216 00:09:07,720 --> 00:09:10,440 chiamando una funzione chiamata strlen. 217 00:09:10,440 --> 00:09:12,840 >> Ancora una volta, volutamente sinteticamente denominato semplicemente 218 00:09:12,840 --> 00:09:14,450 per rendere più conveniente per digitare. 219 00:09:14,450 --> 00:09:17,170 Ma questo è sinonimo di ottenere la lunghezza di una stringa. 220 00:09:17,170 --> 00:09:23,190 Ho intenzione di tornare nel mio terminale finestra e ri-eseguire il compilatore. 221 00:09:23,190 --> 00:09:24,170 Ma è inveire contro di me. 222 00:09:24,170 --> 00:09:29,130 Implicitamente dichiarando funzione di libreria strlen con tipo unsigned int const-- 223 00:09:29,130 --> 00:09:29,780 Mi sono perso. 224 00:09:29,780 --> 00:09:30,590 Completamente. 225 00:09:30,590 --> 00:09:32,940 >> Quindi, tanto più che il vostro occhi cominciano a smalto su 226 00:09:32,940 --> 00:09:36,000 con i messaggi di errore di questo tipo, messa a fuoco onestamente le prime parole. 227 00:09:36,000 --> 00:09:38,590 Sappiamo che il problema è in linea 8, come indicato qui. 228 00:09:38,590 --> 00:09:40,500 Ed è in stringa-0.c. 229 00:09:40,500 --> 00:09:43,580 Implicitamente dichiarando funzione di libreria strlen. 230 00:09:43,580 --> 00:09:47,000 In modo che è generalmente sta per essere un modello di messaggi di errore. 231 00:09:47,000 --> 00:09:49,190 Implicitamente dichiarando qualcosa. 232 00:09:49,190 --> 00:09:53,250 >> Così, in breve, quello che ho mi sembrava di hanno fatto per quanto riguarda la linea 8, qui. 233 00:09:53,250 --> 00:09:56,880 Quale potrebbe essere la soluzione sia ancora se non hai mai usato strlen te stesso? 234 00:09:56,880 --> 00:09:58,907 >> PUBBLICO: Parte di una libreria diversa? 235 00:09:58,907 --> 00:10:00,740 DAVID J. MALAN: Part di una libreria diversa. 236 00:10:00,740 --> 00:10:02,400 Così si è dichiarato, per così dire. 237 00:10:02,400 --> 00:10:07,510 È menzionato in qualche file diverso stdio.h e CS50.h. 238 00:10:07,510 --> 00:10:09,179 Ora, dove si è definito? 239 00:10:09,179 --> 00:10:12,220 Per essere onesti, hai a poco conoscere questo fuori dalla parte superiore della testa, 240 00:10:12,220 --> 00:10:13,640 o voi di Google e scoprire. 241 00:10:13,640 --> 00:10:18,150 Oppure so, ho aperto nella CS50 Appliance il programma terminale, che 242 00:10:18,150 --> 00:10:22,200 è solo il grande, versione a schermo intero di che cosa c'è nella parte inferiore della finestra di gedit. 243 00:10:22,200 --> 00:10:24,970 >> E si scopre che c'è un comando allo stesso modo succinto, chiamato 244 00:10:24,970 --> 00:10:29,280 uomo di manuale, dove se si digita il nome di una funzione e premere Invio, 245 00:10:29,280 --> 00:10:32,240 si otterrà indietro piuttosto documentazione arcano. 246 00:10:32,240 --> 00:10:35,299 E 'solo testo che in genere sembra un po 'qualcosa di simile. 247 00:10:35,299 --> 00:10:37,090 E 'un po' opprimente a prima vista. 248 00:10:37,090 --> 00:10:39,048 Ma francamente ho intenzione di lasciate che i miei occhi vitrei 249 00:10:39,048 --> 00:10:41,930 e concentrarsi solo sulla parte Mi interessa per il momento. 250 00:10:41,930 --> 00:10:42,780 >> Che è questo. 251 00:10:42,780 --> 00:10:45,470 Che sembra strutturalmente simile qualcosa che ho familiarità con. 252 00:10:45,470 --> 00:10:48,080 Infatti la pagina man, così di parlare, vi dirà 253 00:10:48,080 --> 00:10:51,590 in quale file di intestazione di una funzione come strlen è definito. 254 00:10:51,590 --> 00:10:54,170 Quindi ho intenzione di tornare indietro a gedit. 255 00:10:54,170 --> 00:10:59,070 E ho intenzione di andare avanti e aggiungere qui # include 256 00:10:59,070 --> 00:11:00,480 e salvare il file. 257 00:11:00,480 --> 00:11:04,300 >> Ho intenzione di cancellare lo schermo con Controllo L Se siete stati chiedendo. 258 00:11:04,300 --> 00:11:08,210 E ho intenzione di fare rieseguire string.0, compila questo momento. 259 00:11:08,210 --> 00:11:11,790 ./string.0 Zamyla. 260 00:11:11,790 --> 00:11:15,020 Che sembrava funzionare Lasciami andare avanti ed eseguire nuovamente con Davenport. 261 00:11:15,020 --> 00:11:15,860 Invio. 262 00:11:15,860 --> 00:11:17,730 E che, troppo, sembrava funzionare. 263 00:11:17,730 --> 00:11:21,220 >> Così possiamo fare un po 'meglio di questo, però, possiamo cominciare a cose ordinate 264 00:11:21,220 --> 00:11:23,257 appena un po '. 265 00:11:23,257 --> 00:11:25,590 E ho intenzione di realtà introdurre un'altra cosa adesso. 266 00:11:25,590 --> 00:11:28,930 Ho intenzione di andare avanti e salvare questo in un file diverso. 267 00:11:28,930 --> 00:11:31,770 E ho intenzione di chiamare questo file string1.c solo 268 00:11:31,770 --> 00:11:34,620 per essere coerente con il codice sarete in grado di trovare on-line. 269 00:11:34,620 --> 00:11:37,050 >> E concentriamoci in su esattamente lo stesso codice. 270 00:11:37,050 --> 00:11:39,000 Si scopre che ho stato tipo di presa 271 00:11:39,000 --> 00:11:42,600 per scontato il fatto che il mio computer portatile, e, a sua volta, l'apparecchio CS50 272 00:11:42,600 --> 00:11:47,450 ha un sacco di memoria, un sacco di RAM, un sacco di byte di spazio 273 00:11:47,450 --> 00:11:48,920 in cui è possibile memorizzare le stringhe. 274 00:11:48,920 --> 00:11:53,560 >> Ma la realtà, se ho digitato lungo abbastanza, e abbastanza battiture, 275 00:11:53,560 --> 00:11:56,170 Ho potuto in teoria tipo in più caratteri 276 00:11:56,170 --> 00:11:58,830 che il mio computer ha fisicamente memoria per. 277 00:11:58,830 --> 00:11:59,830 E questo è problematico. 278 00:11:59,830 --> 00:12:03,050 Proprio come un int può solo Numero di così alta, in teoria, 279 00:12:03,050 --> 00:12:06,600 è possibile stipare solo tanti personaggi nella RAM del computer o Random 280 00:12:06,600 --> 00:12:07,920 Access Memory. 281 00:12:07,920 --> 00:12:11,140 >> Così avrei fatto meglio anticipare questo problema, anche 282 00:12:11,140 --> 00:12:13,660 anche se potrebbe essere un raro caso angolo, per così dire. 283 00:12:13,660 --> 00:12:15,670 Non accade spesso, potrebbe accadere. 284 00:12:15,670 --> 00:12:18,815 E se succede e non mi anticipare e programma per esso, 285 00:12:18,815 --> 00:12:20,300 il mio programma potrebbe fare chissà che cosa. 286 00:12:20,300 --> 00:12:22,220 Congelare, appendere, riavvio, qualunque sia. 287 00:12:22,220 --> 00:12:24,490 Qualcosa anticipato potrebbe accadere. 288 00:12:24,490 --> 00:12:27,120 >> Così che cosa ho intenzione di fare ora, d'ora in poi veramente, 289 00:12:27,120 --> 00:12:31,630 è prima che io mai alla cieca utilizzare una variabile come s che 290 00:12:31,630 --> 00:12:36,790 è stato assegnato il valore di ritorno di qualche altra funzione come getString, 291 00:12:36,790 --> 00:12:40,200 Io vado a fare in modo che il suo valore è valido. 292 00:12:40,200 --> 00:12:44,280 Quindi so solo dopo aver letto Documentazione di CS50 per getString, 293 00:12:44,280 --> 00:12:49,020 che alla fine ti segnaliamo voi a, che getString restituisce un simbolo speciale 294 00:12:49,020 --> 00:12:53,610 chiamato NULL, N-U-L-L in ciascuno tappi, se qualcosa va storto. 295 00:12:53,610 --> 00:12:55,650 >> Così normale, restituisce una stringa. 296 00:12:55,650 --> 00:12:59,700 Ma per il resto se restituisce N-U-L-L-- avremo finalmente a vedere che cosa realmente 297 00:12:59,700 --> 00:13:01,790 means-- che i soli mezzi successo qualcosa di brutto. 298 00:13:01,790 --> 00:13:05,560 Ora, questo significa, molto simile a Scratch, Posso controllare una condizione qui in C, 299 00:13:05,560 --> 00:13:08,830 se s non è uguale NULL. 300 00:13:08,830 --> 00:13:11,930 Quindi, se non avete visto questo prima, questo significa solo che non è uguale. 301 00:13:11,930 --> 00:13:15,290 >> Quindi è l'opposto di uguali uguali, che, ricordiamo, 302 00:13:15,290 --> 00:13:18,940 è diverso da sola è uguale, che è l'assegnazione. 303 00:13:18,940 --> 00:13:23,030 Quindi, se s non è uguale NULL, solo allora fare 304 00:13:23,030 --> 00:13:25,980 Voglio eseguire queste righe di codice. 305 00:13:25,980 --> 00:13:28,080 Quindi, in altre parole, prima mi tuffo in ciecamente 306 00:13:28,080 --> 00:13:30,919 e iniziare l'iterazione oltre s, e trattandolo 307 00:13:30,919 --> 00:13:33,710 come se fosse una sequenza di personaggi, ho intenzione di controllare in primo luogo, 308 00:13:33,710 --> 00:13:37,900 aspetta un attimo, è s sicuramente non pari a questo valore speciale, NULL? 309 00:13:37,900 --> 00:13:40,030 >> Perché se lo è, le cose brutte possono accadere. 310 00:13:40,030 --> 00:13:43,080 E per ora, supporre che le cose cattive accade significa che il programma va in crash, 311 00:13:43,080 --> 00:13:45,070 e non si può necessariamente recuperare. 312 00:13:45,070 --> 00:13:46,800 Quindi, francamente, sembra più brutto. 313 00:13:46,800 --> 00:13:48,660 è una specie di confusione ora di uno sguardo. 314 00:13:48,660 --> 00:13:50,780 Ma questo diventerà più familiare in breve tempo. 315 00:13:50,780 --> 00:13:52,920 >> Ma ho intenzione di proporre ora un altro miglioramento. 316 00:13:52,920 --> 00:13:54,660 Questo è un miglioramento alla correttezza. 317 00:13:54,660 --> 00:13:58,800 Il mio programma è ora più corretto, perché nel raro caso in cui non basta la memoria 318 00:13:58,800 --> 00:14:01,180 esiste, io gestirlo, e mi limiterò a fare nulla. 319 00:14:01,180 --> 00:14:02,680 Io almeno non andrà in crash. 320 00:14:02,680 --> 00:14:05,000 >> Ma facciamo una versione finale qui. 321 00:14:05,000 --> 00:14:07,690 E un file chiamato string2.c. 322 00:14:07,690 --> 00:14:10,190 Io vado a incollare che stesso codice solo per un attimo, 323 00:14:10,190 --> 00:14:14,210 e ho intenzione di mettere in evidenza questo linea, 11, qui, solo per un momento. 324 00:14:14,210 --> 00:14:18,179 Ora la realtà è che i compilatori intelligenti come Clang potrebbe risolvere questo problema per noi 325 00:14:18,179 --> 00:14:19,970 dietro le quinte senza che noi mai sapere. 326 00:14:19,970 --> 00:14:24,670 Ma pensiamo a questo fondamentalmente come un disegno problematico. 327 00:14:24,670 --> 00:14:29,010 >> Questa linea di codice è, naturalmente, dicendo: inizializzare una variabile i per 0. 328 00:14:29,010 --> 00:14:30,260 Questo è abbastanza semplice. 329 00:14:30,260 --> 00:14:34,691 E ciò che di nuovo è questo dichiarazione, qui, i ++, facendo? 330 00:14:34,691 --> 00:14:37,066 Abbiamo visto prima, ma abbiamo in realtà non parlarne. 331 00:14:37,066 --> 00:14:37,900 >> PUBBLICO: Incrementare i. 332 00:14:37,900 --> 00:14:39,191 >> DAVID J. MALAN: Incrementare i. 333 00:14:39,191 --> 00:14:41,890 Quindi su ogni iterazione attraverso questo ciclo, ogni ciclo, 334 00:14:41,890 --> 00:14:43,570 si sta incrementando i per uno. 335 00:14:43,570 --> 00:14:45,740 Così diventa più grande, e più grande, e più grande fino a quando il ciclo termina. 336 00:14:45,740 --> 00:14:46,810 Come si termina? 337 00:14:46,810 --> 00:14:49,430 Beh, c'è questo mezzo condizione che abbiamo usato prima. 338 00:14:49,430 --> 00:14:52,500 Hai visto e in procedure dettagliate nel set P. 339 00:14:52,500 --> 00:14:53,880 >> Ma che cosa è questo detto? 340 00:14:53,880 --> 00:14:58,352 Eseguire il seguente ciclo in modo fino a quando i è inferiore a quello che? 341 00:14:58,352 --> 00:14:59,810 PUBBLICO: La lunghezza della stringa. 342 00:14:59,810 --> 00:15:01,518 DAVID J. MALAN: L' lunghezza della stringa. 343 00:15:01,518 --> 00:15:04,300 Così si traduce abbastanza pulito a inglese in questo senso. 344 00:15:04,300 --> 00:15:08,810 Ora il problema è che ogni volta che scorrere questo ciclo in teoria, 345 00:15:08,810 --> 00:15:10,000 Sto chiedendo a questa domanda. 346 00:15:10,000 --> 00:15:12,250 Sono io inferiore alla lunghezza della stringa di s? 347 00:15:12,250 --> 00:15:14,500 Sono io inferiore alla lunghezza della stringa di s? 348 00:15:14,500 --> 00:15:18,380 >> Ora è che cambiando ad ogni iterazione? 349 00:15:18,380 --> 00:15:18,880 È. 350 00:15:18,880 --> 00:15:19,629 A causa della ++. 351 00:15:19,629 --> 00:15:21,700 Così ogni iterazione i è sempre più grande. 352 00:15:21,700 --> 00:15:25,411 Ma è s sempre più grande, o più piccolo, o cambiare del tutto? 353 00:15:25,411 --> 00:15:25,910 No. 354 00:15:25,910 --> 00:15:30,240 Quindi, in termini di progettazione, uno degli assi lungo il quale si cerca di valutare il codice 355 00:15:30,240 --> 00:15:32,610 nella classe, questo si sente un po 'stupido. 356 00:15:32,610 --> 00:15:34,690 >> Come si è letteralmente, su ogni iterazione 357 00:15:34,690 --> 00:15:37,110 di questo ciclo chiedere il stessa domanda di nuovo maledetto, 358 00:15:37,110 --> 00:15:40,770 e ancora, e ancora, e letteralmente non è mai sta per cambiare. 359 00:15:40,770 --> 00:15:44,220 Almeno se io non sto toccando s e cercando di modificare il contenuto di s. 360 00:15:44,220 --> 00:15:46,610 Così posso fare un po 'meglio di questo. 361 00:15:46,610 --> 00:15:49,530 >> E che cosa ho intenzione di fare non è dichiarare solo i variabile, 362 00:15:49,530 --> 00:15:53,330 ma una seconda variabile io arbitrariamente, ma convenzionalmente, chiamarlo n. 363 00:15:53,330 --> 00:15:55,940 Assegnare n pari alla lunghezza della stringa di s. 364 00:15:55,940 --> 00:15:59,090 E poi qui, ho intenzione di fare un po 'di ottimizzazione intelligente, così 365 00:15:59,090 --> 00:16:03,460 parlare, che alla fine della giornata non più corrette o non meno corretto è 366 00:16:03,460 --> 00:16:04,260 rispetto a prima. 367 00:16:04,260 --> 00:16:05,500 Ma si tratta di un design migliore. 368 00:16:05,500 --> 00:16:09,480 Nel fatto che sto usando meno tempo, meno cicli di CPU, in modo 369 00:16:09,480 --> 00:16:14,040 di parlare, di rispondere allo stesso domanda, ma solo una volta. 370 00:16:14,040 --> 00:16:17,870 >> Hai domande su quella generale principio di miglioramento, 371 00:16:17,870 --> 00:16:21,294 dire, l'efficienza di un programma? 372 00:16:21,294 --> 00:16:21,991 Sì? 373 00:16:21,991 --> 00:16:23,699 PUBBLICO: Perché voi utilizzare il [incomprensibile]? 374 00:16:23,699 --> 00:16:25,760 375 00:16:25,760 --> 00:16:27,010 DAVID J. MALAN: Bella domanda. 376 00:16:27,010 --> 00:16:30,690 Quindi perché abbiamo messo la ++ sulla fine di I anziché all'inizio del i? 377 00:16:30,690 --> 00:16:33,070 In questo caso, si ha alcun impatto funzionale. 378 00:16:33,070 --> 00:16:36,670 E in generale, tendo a utilizzare l'operatore postfix 379 00:16:36,670 --> 00:16:41,750 in modo che sia un po 'più chiaro a quando l'operazione sta accadendo. 380 00:16:41,750 --> 00:16:46,670 >> Per chi non conosce, c'è un altro dichiarazioni con le quali si potrebbe fare ++ i. 381 00:16:46,670 --> 00:16:48,747 Questi sono funzionalmente equivalente in questo caso 382 00:16:48,747 --> 00:16:51,080 perché non c'è niente altro intorno a quel Incremento. 383 00:16:51,080 --> 00:16:54,435 Ma si può venire su con casi e linee di codice 384 00:16:54,435 --> 00:16:55,810 in cui questo fa la differenza. 385 00:16:55,810 --> 00:16:57,810 Quindi in generale, noi non facciamo anche parlare di questo. 386 00:16:57,810 --> 00:17:00,690 Perché, francamente, rende il codice più sexy, e una sorta di impermeabile, 387 00:17:00,690 --> 00:17:01,776 e un minor numero di caratteri. 388 00:17:01,776 --> 00:17:04,859 Ma la realtà è che è molto più difficile, Credo che, anche per me per avvolgere la mia mente 389 00:17:04,859 --> 00:17:07,319 intorno ad esso a volte, l'ordine delle operazioni. 390 00:17:07,319 --> 00:17:09,750 Così come a parte, se si davvero non mi piace questo, 391 00:17:09,750 --> 00:17:14,650 anche se questo è una specie di sexy guarda, si può anche fare i + = 1, 392 00:17:14,650 --> 00:17:18,880 che è la versione più brutta della stessa idea per postfix Incremento. 393 00:17:18,880 --> 00:17:22,250 >> Lo dico e vi dovrebbe rendere il divertimento di esso, 394 00:17:22,250 --> 00:17:25,140 ma si arriva a vedere il codice come qualcosa di bello in poco tempo. 395 00:17:25,140 --> 00:17:27,160 >> [Risate] 396 00:17:27,160 --> 00:17:28,410 >> DAVID J. MALAN: Giusto? 397 00:17:28,410 --> 00:17:29,360 Già. 398 00:17:29,360 --> 00:17:30,480 Domanda nel mezzo. 399 00:17:30,480 --> 00:17:32,146 >> PUBBLICO: Avete bisogno di dire int n? 400 00:17:32,146 --> 00:17:34,020 DAVID J. MALAN: Tu fai non c'è bisogno di dire int n. 401 00:17:34,020 --> 00:17:37,670 Quindi perché abbiamo già detto int, non c'è bisogno di dirlo di nuovo. 402 00:17:37,670 --> 00:17:41,820 Il problema è che n deve lo stesso tipo di dati come i. 403 00:17:41,820 --> 00:17:43,310 Ecco, questo è solo una comodità qui. 404 00:17:43,310 --> 00:17:44,058 Già. 405 00:17:44,058 --> 00:17:47,806 >> PUBBLICO: Si può andare oltre il Staffa di carattere di stampa s i di nuovo? 406 00:17:47,806 --> 00:17:48,930 DAVID J. MALAN: Assolutamente. 407 00:17:48,930 --> 00:17:52,110 Così% c, ricordare da ultimo tempo, è solo un segnaposto. 408 00:17:52,110 --> 00:17:53,930 Significa mettere un char qui. 409 00:17:53,930 --> 00:17:56,780 barra retroversa n, ovviamente, solo significa mettere una interruzione di linea qui. 410 00:17:56,780 --> 00:17:59,540 In modo che lascia solo, ora, questo pezzo di nuova sintassi. 411 00:17:59,540 --> 00:18:03,730 E questo è letteralmente dicendo, afferrare la stringa chiamato s e andare a prendere la sua 412 00:18:03,730 --> 00:18:06,050 -esimo carattere, per così dire. 413 00:18:06,050 --> 00:18:10,590 >> E io continuo a dire personaggio-esimo perché ad ogni iterazione di questo ciclo 414 00:18:10,590 --> 00:18:14,540 è come se noi stampiamo out, prima staffa s 0, 415 00:18:14,540 --> 00:18:15,780 come programmatore potrebbe dire. 416 00:18:15,780 --> 00:18:18,680 Poi s staffa 1, quindi s staffa 2, poi 3, poi 4. 417 00:18:18,680 --> 00:18:21,610 Ma naturalmente si tratta di una variabile, così ho appena esprimo con i. 418 00:18:21,610 --> 00:18:23,900 >> Chiave, però, è quello di realizzare, soprattutto se non hai 419 00:18:23,900 --> 00:18:26,358 stato acclimating a questo mondo di programmazione, dove tutti 420 00:18:26,358 --> 00:18:28,950 sembrano contare da zero, devo iniziare il conteggio da zero ora. 421 00:18:28,950 --> 00:18:35,130 Poiché le stringhe, primo carattere, il z in Zamyla è nel bene e nel male 422 00:18:35,130 --> 00:18:40,490 andando a vivere nella posizione numero zero. 423 00:18:40,490 --> 00:18:48,210 >> Va bene, così mi permetta di portare ci torna qui per Zamyla 424 00:18:48,210 --> 00:18:50,746 e vedere cosa sta realmente accadendo sul sotto la cappa. 425 00:18:50,746 --> 00:18:52,370 Quindi c'è questa nozione di tipo colata. 426 00:18:52,370 --> 00:18:53,800 Si potrebbe avere effettivamente giocato con questo già, 427 00:18:53,800 --> 00:18:55,970 forse per l'hacker edizione di P impostato uno. 428 00:18:55,970 --> 00:19:00,320 Ma il tipo di colata si riferisce solo al capacità in C e alcune altre lingue 429 00:19:00,320 --> 00:19:03,170 convertire un tipo di dati all'altro. 430 00:19:03,170 --> 00:19:05,450 >> Ora, come potremmo vedere questo abbastanza semplicemente? 431 00:19:05,450 --> 00:19:08,530 Quindi questo, richiamo, è l'inizio dell'alfabeto inglese. 432 00:19:08,530 --> 00:19:11,265 E il contesto, ricordare, da come una settimana fa è ASCII. 433 00:19:11,265 --> 00:19:13,790 Il codice standard americano per Information Interchange. 434 00:19:13,790 --> 00:19:17,080 Che è solo un veramente lungo cammino di dire una mappatura da lettere 435 00:19:17,080 --> 00:19:19,370 di numeri, e dai numeri alle lettere. 436 00:19:19,370 --> 00:19:22,940 >> Quindi da A a M qui, dot dot dot, linee con, richiamo, 437 00:19:22,940 --> 00:19:25,582 il numero decimale 65 in su. 438 00:19:25,582 --> 00:19:27,290 E non abbiamo parlato su questo in modo esplicito, 439 00:19:27,290 --> 00:19:29,850 ma sicuramente c'è simile numeri per le lettere minuscole. 440 00:19:29,850 --> 00:19:30,820 E in effetti, ci sono. 441 00:19:30,820 --> 00:19:33,730 Il mondo ha deciso alcuni anni fa, che un po ', a minuscola, 442 00:19:33,730 --> 00:19:35,020 sta per essere 97. 443 00:19:35,020 --> 00:19:38,010 E poco b sta al 98, e così via. 444 00:19:38,010 --> 00:19:40,200 >> E per qualsiasi altro tasto la tastiera, non c'è 445 00:19:40,200 --> 00:19:42,190 sarà un modello simile di bit. 446 00:19:42,190 --> 00:19:44,540 O equivalentemente, un numero decimale. 447 00:19:44,540 --> 00:19:47,110 Quindi la questione a portata di mano, allora, è come possiamo 448 00:19:47,110 --> 00:19:49,400 effettivamente vedere questo sotto il cofano? 449 00:19:49,400 --> 00:19:51,539 Quindi ho intenzione di andare oltre a gedit nuovo. 450 00:19:51,539 --> 00:19:53,330 E piuttosto che di tipo questo uno da zero, 451 00:19:53,330 --> 00:19:55,330 Ho intenzione di andare avanti e basta aprire qualcosa 452 00:19:55,330 --> 00:19:58,350 dal codice di oggi chiamato ASCII zero. 453 00:19:58,350 --> 00:20:01,210 >> E ASCII pari a zero assomiglia a questo. 454 00:20:01,210 --> 00:20:02,710 Quindi cerchiamo di avvolgere le nostre menti intorno a questo. 455 00:20:02,710 --> 00:20:04,969 Quindi, prima, ho commentato il codice, che è bello. 456 00:20:04,969 --> 00:20:07,010 Perché è letteralmente dirmi cosa aspettarsi, 457 00:20:07,010 --> 00:20:08,950 visualizzare una mappatura per le lettere maiuscole. 458 00:20:08,950 --> 00:20:13,690 Ora io non so bene che cosa dire con questo, quindi cerchiamo di dedurre. 459 00:20:13,690 --> 00:20:16,870 >> In inglese, forse un po 'techie inglese, 460 00:20:16,870 --> 00:20:20,660 Che cosa significa la linea 18 appaiono di fare per noi? 461 00:20:20,660 --> 00:20:21,500 Basta linea 18. 462 00:20:21,500 --> 00:20:22,430 Che cosa sta inducendo? 463 00:20:22,430 --> 00:20:25,192 Che sta andando a dare il via qui? 464 00:20:25,192 --> 00:20:26,100 >> PUBBLICO: Un loop. 465 00:20:26,100 --> 00:20:26,630 >> DAVID J. MALAN: Un loop. 466 00:20:26,630 --> 00:20:28,463 E quante volte è che andare a iterare? 467 00:20:28,463 --> 00:20:31,562 468 00:20:31,562 --> 00:20:33,270 PUBBLICO: [interponendo VOICES] sei volte. 469 00:20:33,270 --> 00:20:34,830 DAVID J. MALAN: Non sei volte. 470 00:20:34,830 --> 00:20:35,840 PUBBLICO: 26 volte. 471 00:20:35,840 --> 00:20:36,560 DAVID J. MALAN: 26 volte. 472 00:20:36,560 --> 00:20:37,060 Sì, mi dispiace. 473 00:20:37,060 --> 00:20:37,960 26 volte. 474 00:20:37,960 --> 00:20:38,460 Perché? 475 00:20:38,460 --> 00:20:41,590 Beh, è ​​un po 'strano, ma Ho iniziato a contare da 65. 476 00:20:41,590 --> 00:20:43,300 Che è strano, ma non è sbagliato. 477 00:20:43,300 --> 00:20:44,610 Non è male per dire. 478 00:20:44,610 --> 00:20:46,980 E sto facendo che solo perché, per questo esempio, 479 00:20:46,980 --> 00:20:50,455 Sto tipo di anticipare che il capitale A era di 65. 480 00:20:50,455 --> 00:20:53,330 Ora, questo non è il più elegante modo per fare questo, per tipo di codice duro 481 00:20:53,330 --> 00:20:56,130 valori esoterici che nessuno è mai aspettato da ricordare. 482 00:20:56,130 --> 00:21:00,155 >> Ma per ora, accorgo che sono facendo questo attraverso 65 più 26. 483 00:21:00,155 --> 00:21:03,030 Perché a quanto pare io non voglio nemmeno per fare aritmetica nella mia testa. 484 00:21:03,030 --> 00:21:04,440 Quindi io lascerò il compilatore farlo. 485 00:21:04,440 --> 00:21:08,600 Ma poi in ogni ciclo, ogni iterazione del ciclo, sto incrementando i. 486 00:21:08,600 --> 00:21:10,196 >> Così ora questo sembra un po 'criptico. 487 00:21:10,196 --> 00:21:13,320 Ma dovremmo avere l'edificio di base blocchi con cui capire questo. 488 00:21:13,320 --> 00:21:15,510 % C è solo un segnaposto per un carattere. 489 00:21:15,510 --> 00:21:19,010 % I è un segnaposto per un int. 490 00:21:19,010 --> 00:21:23,310 E si scopre che utilizzando questo nuova sintassi, questa parentesi, così 491 00:21:23,310 --> 00:21:26,100 parlare, quindi un tipo di dati all'interno di una parentesi, 492 00:21:26,100 --> 00:21:32,270 Posso forzare il compilatore a trattare i non è un numero intero, ma come un char. 493 00:21:32,270 --> 00:21:35,520 >> In tal modo mi mostra il carattere equivalente di quel numero. 494 00:21:35,520 --> 00:21:37,986 Ora qui, questo codice è praticamente identico. 495 00:21:37,986 --> 00:21:39,860 Volevo solo fare Super esplicito il fatto 496 00:21:39,860 --> 00:21:42,095 che sto iniziando a 97, che è minuscolo a. 497 00:21:42,095 --> 00:21:44,080 Su attraverso 26 più lettere. 498 00:21:44,080 --> 00:21:46,970 E sto doing-- di nuovo, colata ho, per così dire. 499 00:21:46,970 --> 00:21:49,160 O tipo colata ho, per così dire. 500 00:21:49,160 --> 00:21:51,420 >> Da un int a char. 501 00:21:51,420 --> 00:21:55,760 Così, il risultato finale sarà, francamente, informazioni che già conosciamo. 502 00:21:55,760 --> 00:21:59,411 Io vado a fare ascii-0 non dot-- dot c. 503 00:21:59,411 --> 00:22:02,160 Avviso, probabilmente fatto che errore come ho appena fatto accidentale. 504 00:22:02,160 --> 00:22:03,820 Fai ascii-0. 505 00:22:03,820 --> 00:22:06,090 Ora ho intenzione di fare ./ascii-0. 506 00:22:06,090 --> 00:22:09,050 Io lo zoom in, e purtroppo sta andando a scorrere fuori dallo schermo. 507 00:22:09,050 --> 00:22:15,060 Ma vediamo un intero grafico in cui una mappa a 97, le mappe b a 98, 508 00:22:15,060 --> 00:22:18,931 e se noi scorriamo ulteriormente A, naturalmente, mappe di 65. 509 00:22:18,931 --> 00:22:21,180 Quindi questo è solo per dire che quello che abbiamo predicato, 510 00:22:21,180 --> 00:22:25,310 c'è questa equivalenza, è infatti il ​​caso nella realtà. 511 00:22:25,310 --> 00:22:28,000 Quindi una rapida modifica di questo. 512 00:22:28,000 --> 00:22:31,220 Lasciatemi apro ascii-1.c. 513 00:22:31,220 --> 00:22:38,070 E notare questo intelligente, tipo di, chiarificazione di questo. 514 00:22:38,070 --> 00:22:41,770 Questo è ascii-1.c, e notare questa cosa pazzesca. 515 00:22:41,770 --> 00:22:45,120 >> E questo diventa veramente al cuore di ciò che i computer stanno facendo. 516 00:22:45,120 --> 00:22:48,150 Anche se noi umani sarebbe Non contare in termini di letters-- 517 00:22:48,150 --> 00:22:50,380 Non mi metto a pensare, tutto bene poi un b, 518 00:22:50,380 --> 00:22:52,590 e usare quelli per contare oggetti fisici. 519 00:22:52,590 --> 00:22:58,680 Si può certamente dire che voglio inizializzare qualche variabile chiamata C-- 520 00:22:58,680 --> 00:23:03,220 ma ho potuto chiamare questo anything-- così c è inizializzato al capitale A. 521 00:23:03,220 --> 00:23:07,560 >> Perché alla fine della giornata, il computer non importa quello che stai memorizzazione, 522 00:23:07,560 --> 00:23:10,170 si preoccupa solo di come si desidera per presentare tali informazioni. 523 00:23:10,170 --> 00:23:13,560 Come si desidera che il computer interpretare quel modello di bit? 524 00:23:13,560 --> 00:23:16,320 Quindi questo non è qualcosa che sarebbe generalmente consiglio facendo. 525 00:23:16,320 --> 00:23:19,500 E 'davvero solo un esempio per comunicare che si può assolutamente 526 00:23:19,500 --> 00:23:22,049 inizializzare un intero in un char. 527 00:23:22,049 --> 00:23:24,090 Poiché sotto l' cofano di un char, naturalmente, 528 00:23:24,090 --> 00:23:26,170 è solo un numero da 0 a 255. 529 00:23:26,170 --> 00:23:28,540 >> Così si può certamente metterlo all'interno di un int. 530 00:23:28,540 --> 00:23:30,890 E che anche questo dimostra è che noi 531 00:23:30,890 --> 00:23:34,040 può convertire da una tipo ad un altro, qui, 532 00:23:34,040 --> 00:23:36,780 in ultima analisi, la stampa la stessa cosa. 533 00:23:36,780 --> 00:23:44,760 E in effetti, questo mi risolverà online-- aveva lo scopo di dire questo, di nuovo, qui. 534 00:23:44,760 --> 00:23:48,610 Lasciatemi Ripuliamolo on-line, e faremo vedere in un walkthrough on-line, se necessario, 535 00:23:48,610 --> 00:23:50,280 ciò che si intendeva lì. 536 00:23:50,280 --> 00:23:50,960 >> Ok. 537 00:23:50,960 --> 00:23:53,892 Così ora ultimo esempio che coinvolge A e B e poi ci 538 00:23:53,892 --> 00:23:54,850 prendere le cose su una tacca. 539 00:23:54,850 --> 00:23:58,330 Quindi, con A e B e c di a capitalizzazione 540 00:23:58,330 --> 00:24:01,560 e l'equivalenza della stessa, cerchiamo di dare un'occhiata a questo esempio, qui. 541 00:24:01,560 --> 00:24:02,752 Un altro esempio di codice. 542 00:24:02,752 --> 00:24:04,460 Ci apriamo uno che è già fatto, così abbiamo 543 00:24:04,460 --> 00:24:06,440 non c'è bisogno di digitare tutti fuori da zero. 544 00:24:06,440 --> 00:24:09,420 >> E notare in anticipo stiamo usando testata multipla 545 00:24:09,420 --> 00:24:13,240 file, tra i quali è il nostro nuovo amico, string.h. 546 00:24:13,240 --> 00:24:15,597 Ora questo sembra, in un primo momento sguardo, un po 'criptico. 547 00:24:15,597 --> 00:24:18,180 Ma vediamo se non possiamo ragionare attraverso quello che sta succedendo qui. 548 00:24:18,180 --> 00:24:21,150 Prima ottengo una stringa da parte dell'utente, e ho messo quella stringa in una variabile 549 00:24:21,150 --> 00:24:22,286 chiamato s. 550 00:24:22,286 --> 00:24:24,090 Copia incolla da prima. 551 00:24:24,090 --> 00:24:27,250 In linea 22, sono apparentemente facendo esattamente quello che 552 00:24:27,250 --> 00:24:30,760 Ho fatto un momento fa, sto iterando sopra i caratteri in s. 553 00:24:30,760 --> 00:24:34,780 >> E i nuovi trucchi qui stanno usando lunghezza della stringa, l'ottimizzazione minore 554 00:24:34,780 --> 00:24:37,930 di memorizzare la lunghezza della stringa n, piuttosto che chiamare strlen di nuovo, 555 00:24:37,930 --> 00:24:38,850 e ancora, e ancora. 556 00:24:38,850 --> 00:24:41,120 E proprio controllando che i è minore di n. 557 00:24:41,120 --> 00:24:43,330 Ora qui, le cose si fanno un po 'interessante. 558 00:24:43,330 --> 00:24:45,980 Ma è solo una domanda di questa stessa nuova idea. 559 00:24:45,980 --> 00:24:48,470 Ciò che in inglese fa Staffa s Io rappresento? 560 00:24:48,470 --> 00:24:51,772 561 00:24:51,772 --> 00:24:54,260 >> PUBBLICO: Conteggio ogni carattere [incomprensibile]. 562 00:24:54,260 --> 00:24:55,926 >> DAVID J. MALAN: Conteggio ogni personaggio. 563 00:24:55,926 --> 00:24:58,680 E ancora più succintamente, Staffa s rappresento cosa? 564 00:24:58,680 --> 00:25:00,950 Diresti. 565 00:25:00,950 --> 00:25:04,084 Non per metterti in loco qui. 566 00:25:04,084 --> 00:25:06,375 >> PUBBLICO: Well-- 567 00:25:06,375 --> 00:25:09,500 DAVID J. MALAN: Quindi, se la parola è-- se la stringa è Zamyla, che starts-- 568 00:25:09,500 --> 00:25:12,380 PUBBLICO: --potete trattare con i personaggi separately-- 569 00:25:12,380 --> 00:25:13,690 DAVID J. MALAN: Good. 570 00:25:13,690 --> 00:25:14,190 Esattamente. 571 00:25:14,190 --> 00:25:17,940 La notazione parentesi quadra consente per accedere a ogni personaggio singolarmente, 572 00:25:17,940 --> 00:25:21,120 così s staffa 0 sta per essere il primo carattere della stringa. 573 00:25:21,120 --> 00:25:24,110 staffa s 1 sta per essere il secondo, e così via. 574 00:25:24,110 --> 00:25:28,050 Quindi la domanda che mi sto chiedendo, qui, in questa condizione è ciò? 575 00:25:28,050 --> 00:25:33,984 Il personaggio-esimo di s maggiore o uguale a minuscoli un? 576 00:25:33,984 --> 00:25:36,400 E che cosa significa questo, qui, con i doppi e commerciali? 577 00:25:36,400 --> 00:25:36,800 PUBBLICO (INSIEME): And. 578 00:25:36,800 --> 00:25:37,210 DAVID J. MALAN: And. 579 00:25:37,210 --> 00:25:38,418 E 'solo equivalente a questa. 580 00:25:38,418 --> 00:25:42,310 E non è una parola chiave in C, si deve uso, fastidiosamente, commerciale e commerciale. 581 00:25:42,310 --> 00:25:47,520 E questo, al contrario, sta chiedendo è s-esimo di carattere inferiori o uguali 582 00:25:47,520 --> 00:25:49,030 in minuscolo z? 583 00:25:49,030 --> 00:25:52,440 E ancora, ecco dove comprensione sottostante 584 00:25:52,440 --> 00:25:54,550 attuazione di un computer di senso. 585 00:25:54,550 --> 00:25:57,330 Si noti che, anche se ho il dot dot dot laggiù, 586 00:25:57,330 --> 00:26:04,410 assomiglia a alla z in minuscolo sono tutti i valori contigui fino da 97 in su. 587 00:26:04,410 --> 00:26:07,820 >> E stessa cosa per le maiuscole a partire dalle 65. 588 00:26:07,820 --> 00:26:10,410 Così il takeaway, poi, è che in inglese, 589 00:26:10,410 --> 00:26:12,760 come descriveresti quale linea 24 sta facendo? 590 00:26:12,760 --> 00:26:15,736 591 00:26:15,736 --> 00:26:16,728 Sì? 592 00:26:16,728 --> 00:26:21,575 >> PUBBLICO: Il 24 è il controllo per vedere se ogni personaggio è un minuscolo. 593 00:26:21,575 --> 00:26:24,700 DAVID J. MALAN: E 'verificare se ogni carattere è una lettera minuscola. 594 00:26:24,700 --> 00:26:28,590 Così, anche più succintamente, è il -esimo carattere di s minuscola? 595 00:26:28,590 --> 00:26:30,690 Questo è tutto quello che siamo esprimendo qui logicamente, 596 00:26:30,690 --> 00:26:33,750 un po 'criptico, ma in ultima analisi, piuttosto semplicemente. 597 00:26:33,750 --> 00:26:36,480 E 's di-esimo carattere minuscolo? 598 00:26:36,480 --> 00:26:40,130 >> Se è così, e qui è dove le cose ottenere un po 'la mente di flessione 599 00:26:40,130 --> 00:26:44,760 solo per un momento, in caso affermativo, andare avanti e stampare un carattere. 600 00:26:44,760 --> 00:26:47,360 Quindi questo è solo un segnaposto, ma quale personaggio? 601 00:26:47,360 --> 00:26:53,710 Perché sto facendo s staffa i meno questa espressione qui? 602 00:26:53,710 --> 00:26:55,110 >> Beh notare il modello qui. 603 00:26:55,110 --> 00:26:57,380 I numeri reali non contano tanto. 604 00:26:57,380 --> 00:27:02,700 Ma si noti che il 97 è quanto lontano da 65? 605 00:27:02,700 --> 00:27:03,560 >> PUBBLICO: 32. 606 00:27:03,560 --> 00:27:04,480 >> DAVID J. MALAN: 32. 607 00:27:04,480 --> 00:27:06,890 Quanto lontano è 98 da 66? 608 00:27:06,890 --> 00:27:07,740 >> PUBBLICO: 32. 609 00:27:07,740 --> 00:27:09,890 >> DAVID J. MALAN: Piccolo c da grande C? 610 00:27:09,890 --> 00:27:10,420 32. 611 00:27:10,420 --> 00:27:14,550 Quindi c'è 32 luppolo da una lettera ad un altro. 612 00:27:14,550 --> 00:27:17,790 Quindi francamente, potevo semplificare questo a quello. 613 00:27:17,790 --> 00:27:20,400 Ma poi mi sono un po 'difficile codifica questo basso livello di comprensione 614 00:27:20,400 --> 00:27:21,740 che nessun lettore è mai andando a capire. 615 00:27:21,740 --> 00:27:25,080 Quindi ho intenzione di generalizzare come, mi conoscere le lettere minuscole sono più grandi. 616 00:27:25,080 --> 00:27:28,400 So che le lettere maiuscole sono valori più piccoli, ironicamente. 617 00:27:28,400 --> 00:27:33,216 >> Ma questo è effettivamente equivalente dicendo sottrarre 32 da s staffa i. 618 00:27:33,216 --> 00:27:35,430 Così, nel contesto di queste lettere, se la lettera 619 00:27:35,430 --> 00:27:38,950 sembra essere una, minuscolo una, e sottraggo 32, 620 00:27:38,950 --> 00:27:43,442 che effetto ha a che, matematicamente, in un minuscolo? 621 00:27:43,442 --> 00:27:44,400 PUBBLICO: Capitalizes-- 622 00:27:44,400 --> 00:27:45,691 DAVID J. MALAN: maiuscolo esso. 623 00:27:45,691 --> 00:27:48,440 E in effetti, questo è il motivo per cui il nostro programma si chiama capitalizzare zero. 624 00:27:48,440 --> 00:27:51,590 Questo programma sia capitalizza una lettera, 625 00:27:51,590 --> 00:27:54,580 dopo aver verificato se è infatti una lettera minuscola. 626 00:27:54,580 --> 00:27:59,810 In caso contrario, in linea 30, che cosa devo fare se non è una lettera minuscola che sono 627 00:27:59,810 --> 00:28:02,852 guardando in un particolare iterazione del ciclo. 628 00:28:02,852 --> 00:28:03,890 Basta stamparlo. 629 00:28:03,890 --> 00:28:07,010 >> Quindi non cambia roba che non è nemmeno in minuscolo. 630 00:28:07,010 --> 00:28:10,790 Limitare a voi stessi di poco, grazie ad un po 'di z. 631 00:28:10,790 --> 00:28:12,730 Ora questo è abbastanza arcano. 632 00:28:12,730 --> 00:28:15,230 Ma alla fine della giornata, questo è il modo in cui, un tempo, 633 00:28:15,230 --> 00:28:16,460 dovuto implementare le cose. 634 00:28:16,460 --> 00:28:19,780 Se io invece aprire capitalizzare uno, oh grazie a dio. 635 00:28:19,780 --> 00:28:22,320 C'è una funzione chiamato a superiore che possono 636 00:28:22,320 --> 00:28:25,410 fare tutto ciò che abbiamo appena fatto ad un livello abbastanza basso. 637 00:28:25,410 --> 00:28:28,752 >> Ora per tomaia è interessante perché si è dichiarata in un file, 638 00:28:28,752 --> 00:28:31,210 e si sa solo questo controllando la documentazione, 639 00:28:31,210 --> 00:28:35,730 o viene detto, per esempio, in classe, dove esiste, in un file chiamato ctype.h. 640 00:28:35,730 --> 00:28:37,630 Quindi questo è un altro nuovo nostro amico. 641 00:28:37,630 --> 00:28:40,750 E fa esattamente superiore ciò che suggerisce il suo nome. 642 00:28:40,750 --> 00:28:44,860 >> È possibile passare in, come argomento, tra queste parentesi, qualche personaggio. 643 00:28:44,860 --> 00:28:48,390 Ho intenzione di passare nel carattere i-esimo di s utilizzando la nostra nuova notazione di fantasia 644 00:28:48,390 --> 00:28:49,870 coinvolgendo parentesi quadre. 645 00:28:49,870 --> 00:28:53,391 E prendere una supposizione, che cosa è il ritorno valore superiore a quanto pare andare 646 00:28:53,391 --> 00:28:53,890 di essere? 647 00:28:53,890 --> 00:28:56,460 648 00:28:56,460 --> 00:28:57,770 Una lettera maiuscola. 649 00:28:57,770 --> 00:28:58,620 Una lettera maiuscola. 650 00:28:58,620 --> 00:29:02,330 >> Quindi, se mi passa in minuscolo una, si spera, da definizione di superiore, 651 00:29:02,330 --> 00:29:05,600 sta andando a restituire un maiuscolo A. In caso contrario, 652 00:29:05,600 --> 00:29:08,590 se non è una lettera minuscola in primo luogo, ho appena stamparlo. 653 00:29:08,590 --> 00:29:10,800 E infatti, notare il secondo amico qui. 654 00:29:10,800 --> 00:29:13,840 Non solo per superiore esiste, ma è inferiore, 655 00:29:13,840 --> 00:29:16,200 risponde in realtà a questa domanda per me. 656 00:29:16,200 --> 00:29:19,730 >> Ora, chi ha scritto queste cose, 10s di anni fa, sai una cosa? 657 00:29:19,730 --> 00:29:23,840 Implementato per superiore ed è abbassare utilizzando il codice come questo. 658 00:29:23,840 --> 00:29:27,270 Ma ancora una volta, in linea con questa idea di astrazione di distanza, 659 00:29:27,270 --> 00:29:29,190 sorta di, livello inferiore dettagli di implementazione. 660 00:29:29,190 --> 00:29:32,600 E in piedi sulle spalle di persone che è venuto prima di noi, utilizzando le funzioni 661 00:29:32,600 --> 00:29:36,300 come a superiore e inferiore è, che abbastanza meravigliosamente sono ben 662 00:29:36,300 --> 00:29:40,190 chiamato per dire quello che fanno, è un meraviglioso paradigma di adottare. 663 00:29:40,190 --> 00:29:44,040 >> Ora, si scopre che se leggo la pagina man di, diciamo, di superiore, 664 00:29:44,040 --> 00:29:45,010 Imparo qualcosa di diverso. 665 00:29:45,010 --> 00:29:46,890 Così l'uomo ToUpper. 666 00:29:46,890 --> 00:29:48,050 E 'un po' opprimente. 667 00:29:48,050 --> 00:29:51,110 Ma notate, ecco che menzione di il file di intestazione che dovrei usare. 668 00:29:51,110 --> 00:29:54,460 Per inciso, perché questo è fuorviante, la funzione 669 00:29:54,460 --> 00:29:59,070 usa int invece di caratteri per motivi di controllo degli errori. 670 00:29:59,070 --> 00:30:01,260 Ma noi forse arriviamo torna che in futuro. 671 00:30:01,260 --> 00:30:05,910 >> Ma si noti, qui, ai convertiti superiori la lettera c in maiuscolo, se possibile. 672 00:30:05,910 --> 00:30:07,674 Ecco, questo è abbastanza semplice. 673 00:30:07,674 --> 00:30:09,340 E ora cerchiamo di essere un po 'più specifico. 674 00:30:09,340 --> 00:30:12,750 Diamo un'occhiata alla parte del Pagina uomo sotto il valore di ritorno. 675 00:30:12,750 --> 00:30:15,420 Il valore restituito è che della lettera convertito. 676 00:30:15,420 --> 00:30:18,690 Oppure C, se la conversione non era possibile, 677 00:30:18,690 --> 00:30:20,250 dove c è l'ingresso originale. 678 00:30:20,250 --> 00:30:24,140 Che so da qui, da l'argomento di superiore. 679 00:30:24,140 --> 00:30:25,780 >> Allora, qual è il takeaway di questo? 680 00:30:25,780 --> 00:30:28,060 Il valore restituito è che della lettera convertito, 681 00:30:28,060 --> 00:30:32,110 o c, la lettera originale, se la conversione non era possibile. 682 00:30:32,110 --> 00:30:36,460 Quello che il miglioramento può pertanto fare il disegno del mio codice? 683 00:30:36,460 --> 00:30:37,146 Sì? 684 00:30:37,146 --> 00:30:38,810 >> PUBBLICO: È possibile rimuovere l'altro. 685 00:30:38,810 --> 00:30:40,810 DAVID J. MALAN: posso rimuovere l'istruzione else, 686 00:30:40,810 --> 00:30:42,510 e non solo l'istruzione else. 687 00:30:42,510 --> 00:30:44,150 >> PUBBLICO: È possibile rimuovere [incomprensibile]. 688 00:30:44,150 --> 00:30:46,310 >> DAVID J. MALAN: posso rimuovere l'intera forcella 689 00:30:46,310 --> 00:30:48,209 in mezzo alla strada, se il resto del tutto. 690 00:30:48,209 --> 00:30:50,250 Così in effetti, mi permetta di aprire la versione finale di questo, 691 00:30:50,250 --> 00:30:55,540 capitalizzare-2 e notare quanto, se si, sexy, il codice ora sta ottenendo, 692 00:30:55,540 --> 00:31:00,040 in che ho ridotto da alcuni sette o giù di linee a solo quattro, 693 00:31:00,040 --> 00:31:03,850 la funzionalità che intendevo semplicemente chiamando al superiore, 694 00:31:03,850 --> 00:31:09,410 passando s staffa i, e la stampa fuori, con il segnaposto% c, 695 00:31:09,410 --> 00:31:11,090 quel particolare personaggio. 696 00:31:11,090 --> 00:31:14,560 >> Ora forse, c'è un bug, o almeno il rischio di un bug, 697 00:31:14,560 --> 00:31:15,350 in questo programma. 698 00:31:15,350 --> 00:31:18,200 Quindi, solo per tornare per un asporto precedente, 699 00:31:18,200 --> 00:31:21,820 che cosa devo fare, probabilmente, anche in questo programma per renderlo più robusto, 700 00:31:21,820 --> 00:31:24,974 in modo che non c'è modo si può bloccarsi, anche nei rari casi? 701 00:31:24,974 --> 00:31:26,390 PUBBLICO: Assicurarsi che non è NULL. 702 00:31:26,390 --> 00:31:28,056 DAVID J. MALAN: Assicurarsi che non è NULL. 703 00:31:28,056 --> 00:31:31,030 Quindi, veramente, per fare questo super corretta, dovrei fare qualcosa di simile, 704 00:31:31,030 --> 00:31:35,300 se s non è NULL, allora andare avanti ed eseguire 705 00:31:35,300 --> 00:31:38,470 queste righe di codice, che Posso allora trattino così, 706 00:31:38,470 --> 00:31:39,870 e poi mettere nel mio vicino parentesi graffa. 707 00:31:39,870 --> 00:31:41,550 Così buono legatura insieme dei due idee. 708 00:31:41,550 --> 00:31:42,429 Sì? 709 00:31:42,429 --> 00:31:44,470 PUBBLICO: Potresti utilizzare fare un ciclo while, invece? 710 00:31:44,470 --> 00:31:47,270 DAVID J. MALAN: Could Faccio un ciclo Do While? 711 00:31:47,270 --> 00:31:50,020 PUBBLICO: --potete vuole fare in modo che in realtà [incomprensibile]. 712 00:31:50,020 --> 00:31:51,728 DAVID J. MALAN: Could si utilizza un do po? 713 00:31:51,728 --> 00:31:52,450 Risposta breve, no. 714 00:31:52,450 --> 00:31:54,700 Perché si sta per introdurre un altro caso d'angolo. 715 00:31:54,700 --> 00:31:56,660 Se la stringa è di lunghezza zero. 716 00:31:56,660 --> 00:31:59,600 Se, per esempio, ho appena colpito Inserire, senza mai digitare Zamyla. 717 00:31:59,600 --> 00:32:02,490 Io vado a portata di mano indietro un effettivo stringa, come vedremo alla fine vediamo, 718 00:32:02,490 --> 00:32:03,780 che ha zero caratteri. 719 00:32:03,780 --> 00:32:05,630 E 'ancora una stringa, è solo super-breve. 720 00:32:05,630 --> 00:32:07,960 Ma se si utilizza un do po, si sta andando a cieca 721 00:32:07,960 --> 00:32:10,050 provare a fare qualcosa con rispetto a quella stringa, 722 00:32:10,050 --> 00:32:12,537 e nulla sarà lì. 723 00:32:12,537 --> 00:32:18,607 >> PUBBLICO: Bene, se avete fatto fare [incomprensibile] mentre s-- 724 00:32:18,607 --> 00:32:21,190 DAVID J. MALAN: Oh, vedo, continuo ottenendo una stringa dall'utente. 725 00:32:21,190 --> 00:32:23,525 Così breve risposta, si potrebbe, e mantenere pestering 726 00:32:23,525 --> 00:32:26,150 li per offrirti una stringa che è sufficientemente breve da stare in memoria. 727 00:32:26,150 --> 00:32:26,700 Assolutamente. 728 00:32:26,700 --> 00:32:27,630 Ho scelto di non. 729 00:32:27,630 --> 00:32:30,505 Se non mi danno la stringa che voglio, sto smettere, sto rinunciando. 730 00:32:30,505 --> 00:32:33,260 Ma assolutamente, a tal fine, si potrebbe assolutamente fare. 731 00:32:33,260 --> 00:32:37,500 >> Così file di intestazione della biblioteca che ora siamo a conoscenza sono questi, qui. 732 00:32:37,500 --> 00:32:41,550 I / O standard, CS50.h, string.h, ctype.h, e ci sono, infatti, gli altri. 733 00:32:41,550 --> 00:32:44,460 Alcuni di voi hanno scoperto la libreria matematica in math.h. 734 00:32:44,460 --> 00:32:48,200 Ma lasciate che vi presento, ora, a questa risorsa che il personale CS50, Davin, 735 00:32:48,200 --> 00:32:50,630 e Rob, e Gabe particolare hanno messo insieme. 736 00:32:50,630 --> 00:32:52,630 Che presto collegherà su sito web del corso. 737 00:32:52,630 --> 00:32:54,870 Si chiama riferimento CS50. 738 00:32:54,870 --> 00:32:58,230 >> Che solo per darvi una rapida gusto di esso, funziona come segue. 739 00:32:58,230 --> 00:33:00,740 Lasciami andare a reference.cs50.net. 740 00:33:00,740 --> 00:33:02,990 Vedrete sulla mano sinistra lato un elenco schiacciante 741 00:33:02,990 --> 00:33:04,595 di funzioni che vengono con c. 742 00:33:04,595 --> 00:33:07,790 Ma se mi preoccupo, per il momento, su qualcosa come strlen, 743 00:33:07,790 --> 00:33:08,746 Posso scrivere lì. 744 00:33:08,746 --> 00:33:10,870 Filtra l'elenco a proprio quello che mi interessa. 745 00:33:10,870 --> 00:33:11,940 Ho intenzione di fare clic su di esso. 746 00:33:11,940 --> 00:33:14,740 E ora a sinistra, vedrai quello che ci auguriamo 747 00:33:14,740 --> 00:33:18,290 è un più semplice, umano spiegazione amichevole di come 748 00:33:18,290 --> 00:33:19,170 questa funzione. 749 00:33:19,170 --> 00:33:20,600 >> Restituisce la lunghezza di una stringa. 750 00:33:20,600 --> 00:33:24,060 Ecco una sinossi, ecco come si utilizzare in termini di file di intestazione, 751 00:33:24,060 --> 00:33:27,430 e in termini di ciò che la funzione sembra che in termini di argomenti. 752 00:33:27,430 --> 00:33:30,250 E poi qui, i rendimenti la lunghezza di una stringa. 753 00:33:30,250 --> 00:33:34,280 Ma per quelli di voi più comodo, si può effettivamente fare clic su più comodi, 754 00:33:34,280 --> 00:33:37,070 e il contenuto di questa pagina, ora, cambierà 755 00:33:37,070 --> 00:33:41,660 essere i valori di default di ciò che si ottiene utilizzando la pagina man. 756 00:33:41,660 --> 00:33:44,100 >> In altre parole, CS50 riferimento è una semplificazione 757 00:33:44,100 --> 00:33:46,220 delle pagine man da parte del personale, per gli studenti. 758 00:33:46,220 --> 00:33:49,320 In particolare, quelli meno confortevole e in mezzo, in modo che si 759 00:33:49,320 --> 00:33:51,660 non c'è bisogno di cercare di avvolgere la tua mente intorno, francamente, 760 00:33:51,660 --> 00:33:55,030 una sintassi abbastanza criptica e la documentazione qualche volta. 761 00:33:55,030 --> 00:33:57,650 >> Quindi, tenere a mente nei giorni a venire. 762 00:33:57,650 --> 00:33:59,560 Così qui, ancora una volta, è un Zamyla. 763 00:33:59,560 --> 00:34:03,255 Facciamo fare una domanda che è un po 'più umano accessibili. 764 00:34:03,255 --> 00:34:05,380 Grazie a Chang, che è stato stampa più elefanti 765 00:34:05,380 --> 00:34:07,090 senza sosta per giorni scorsi. 766 00:34:07,090 --> 00:34:09,730 Abbiamo l'opportunità di dare almeno uno di loro via. 767 00:34:09,730 --> 00:34:13,239 Se siamo riusciti a ottenere un solo volontario di venire su un massimo di disegnare sullo schermo. 768 00:34:13,239 --> 00:34:14,530 Che ne dici di questo? 769 00:34:14,530 --> 00:34:15,340 >> Andiamo su. 770 00:34:15,340 --> 00:34:16,720 Come ti chiami? 771 00:34:16,720 --> 00:34:17,219 ALEX: Alex. 772 00:34:17,219 --> 00:34:17,760 DAVID J. MALAN: Alex. 773 00:34:17,760 --> 00:34:18,259 Bene. 774 00:34:18,259 --> 00:34:19,388 Alex, vieni su. 775 00:34:19,388 --> 00:34:21,679 Stiamo per vedere il tuo scrittura a mano sullo schermo qui. 776 00:34:21,679 --> 00:34:24,325 777 00:34:24,325 --> 00:34:25,570 Va bene, piacere di conoscerti. 778 00:34:25,570 --> 00:34:26,429 >> ALEX: Nice si incontrano voi. 779 00:34:26,429 --> 00:34:27,512 >> DAVID J. MALAN: Va bene. 780 00:34:27,512 --> 00:34:28,969 Così, super semplice esercizio. 781 00:34:28,969 --> 00:34:31,440 Bar non è elevato a ottenere un elefante di oggi. 782 00:34:31,440 --> 00:34:33,439 Stai giocando il ruolo di getString. 783 00:34:33,439 --> 00:34:35,980 E ho intenzione di dire solo te la stringa che hai ottenuto. 784 00:34:35,980 --> 00:34:38,080 E supponiamo che tu, getString, sono stati chiamati. 785 00:34:38,080 --> 00:34:42,480 E l'umano, come me, ha digitato Zamyla, Z-A-M-Y-L-A. 786 00:34:42,480 --> 00:34:45,650 Basta andare avanti e scrivere Zamyla sul schermo come se si è ottenuto che 787 00:34:45,650 --> 00:34:47,250 e memorizzati da qualche parte nella memoria. 788 00:34:47,250 --> 00:34:52,370 789 00:34:52,370 --> 00:34:55,570 >> Lasciando spazio per quello che sarà numerosi altri words-- che è OK, andare avanti. 790 00:34:55,570 --> 00:34:59,620 >> [Risate] 791 00:34:59,620 --> 00:35:00,800 >> Così Zamyla, eccellente. 792 00:35:00,800 --> 00:35:04,880 Così ora supponiamo che tu, getString, sono chiamati di nuovo. 793 00:35:04,880 --> 00:35:09,350 E dunque, vi fornisco, in tastiera, con un altro nome, Belinda. 794 00:35:09,350 --> 00:35:17,560 795 00:35:17,560 --> 00:35:18,060 Bene. 796 00:35:18,060 --> 00:35:22,380 E ora la prossima volta getString è chiamato, digito qualcosa come Gabe, 797 00:35:22,380 --> 00:35:27,560 G-A-B-E. Si sta davvero prendendo a cuore la memoria ad accesso casuale. 798 00:35:27,560 --> 00:35:29,631 Qual è il disegno tutto completamente casuale. 799 00:35:29,631 --> 00:35:30,130 Ok. 800 00:35:30,130 --> 00:35:31,104 >> [Risate] 801 00:35:31,104 --> 00:35:32,520 ALEX: Scusate la mia scrittura è male. 802 00:35:32,520 --> 00:35:33,770 DAVID J. MALAN: No, va bene. 803 00:35:33,770 --> 00:35:40,480 E per quanto riguarda Rob, R-O-B. Ok. 804 00:35:40,480 --> 00:35:41,020 Buona. 805 00:35:41,020 --> 00:35:43,853 Quindi non ho anticipare che ci si tipo di lay cose in questo modo. 806 00:35:43,853 --> 00:35:45,020 Ma siamo in grado di fare questo lavoro. 807 00:35:45,020 --> 00:35:48,810 Così come hai fatto a posa questi caratteri in memoria? 808 00:35:48,810 --> 00:35:51,310 In altre parole, se pensiamo questa schermata nera rettangolare 809 00:35:51,310 --> 00:35:53,550 a rappresentare una RAM, o la memoria del computer. 810 00:35:53,550 --> 00:35:55,850 >> E ricordare che la RAM è solo un sacco di byte, 811 00:35:55,850 --> 00:35:57,480 e byte sono un sacco di bit. 812 00:35:57,480 --> 00:35:59,350 E bit sono in qualche modo attuato, generalmente 813 00:35:59,350 --> 00:36:01,119 con una qualche forma di elettricità in hardware. 814 00:36:01,119 --> 00:36:03,160 Ecco, questo è una sorta di stratificazione abbiamo parlato 815 00:36:03,160 --> 00:36:04,510 e ora può dare per scontato. 816 00:36:04,510 --> 00:36:07,020 Come avete fatto su decidere dove scrivere 817 00:36:07,020 --> 00:36:11,634 Rob contro Gabe contro Belinda contro Zamyla? 818 00:36:11,634 --> 00:36:14,020 >> ALEX: Ho appena fatto nel ordina che mi hai detto. 819 00:36:14,020 --> 00:36:15,650 >> DAVID J. MALAN: E questo è vero. 820 00:36:15,650 --> 00:36:20,100 Ma cosa governato dove si mettono Il nome di Belinda e il nome di Gabe? 821 00:36:20,100 --> 00:36:20,764 >> ALEX: Niente? 822 00:36:20,764 --> 00:36:22,930 DAVID J. MALAN: [ride] Così che funziona, va bene. 823 00:36:22,930 --> 00:36:25,290 Così i computer sono poco più ordinato di quello. 824 00:36:25,290 --> 00:36:29,000 E così quando siamo implement-- stare lì solo per un moment-- quando abbiamo effettivamente 825 00:36:29,000 --> 00:36:31,470 implementare qualcosa di simile getString in un computer, 826 00:36:31,470 --> 00:36:34,480 Zamyla potrebbe essere disposta praticamente come hai fatto sullo schermo, lì. 827 00:36:34,480 --> 00:36:36,660 >> E ciò che è fondamentale notare qui, quello che Alex ha fatto, 828 00:36:36,660 --> 00:36:40,260 è c'è una specie di demarcazione tra ognuna di queste parole, giusto? 829 00:36:40,260 --> 00:36:46,580 Non hai scritto Z-A-M-Y-L-A-B-E-L-I-N-D-A-G-A-B-- 830 00:36:46,580 --> 00:36:49,740 in altre parole, c'è una specie di demarcazione che sembra essere, 831 00:36:49,740 --> 00:36:52,370 sorta di, spaziatura casuale tra queste diverse parole. 832 00:36:52,370 --> 00:36:54,120 Ma questo è un bene, perché noi umani può ora 833 00:36:54,120 --> 00:36:56,470 visualizzare che questi sono quattro diverse stringhe. 834 00:36:56,470 --> 00:36:59,540 Non è solo una sequenza di un sacco di personaggi. 835 00:36:59,540 --> 00:37:04,190 Quindi un computer, poi, nel frattempo, potrebbe prendere una stringa come Zamyla, 836 00:37:04,190 --> 00:37:07,220 mettere ciascuna di queste lettere all'interno di un byte di memoria. 837 00:37:07,220 --> 00:37:10,400 Ma questo numero è molto più grande, naturalmente, di sei caratteri. 838 00:37:10,400 --> 00:37:11,690 >> C'è un sacco di RAM. 839 00:37:11,690 --> 00:37:15,330 E così d'ora in poi, questo griglia di scatole sta andando 840 00:37:15,330 --> 00:37:17,560 per rappresentare quello che Alex appena ha fatto qui sullo schermo. 841 00:37:17,560 --> 00:37:20,937 E ora, Alex, siamo in grado di offrire una blu o un elefante arancione da Chang. 842 00:37:20,937 --> 00:37:22,270 ALEX: Io prendo un elefante blu. 843 00:37:22,270 --> 00:37:23,120 DAVID J. MALAN: Un elefante blu. 844 00:37:23,120 --> 00:37:25,580 Quindi un grande applauso, se potessimo, per Alex qui. 845 00:37:25,580 --> 00:37:26,100 >> [Applausi] 846 00:37:26,100 --> 00:37:26,766 >> ALEX: Grazie. 847 00:37:26,766 --> 00:37:28,820 DAVID J. MALAN: Grazie. 848 00:37:28,820 --> 00:37:36,230 Quindi l'asporto è che, anche se l' modello tipo di cambiato nel corso del tempo, qui 849 00:37:36,230 --> 00:37:40,430 sul bordo, c'era questo demarcazione tra le varie stringhe 850 00:37:40,430 --> 00:37:42,610 che Alex ha per noi. 851 00:37:42,610 --> 00:37:45,230 Ora i computer, francamente, potrebbe fare la stessa cosa. 852 00:37:45,230 --> 00:37:48,210 Potrebbero tipo di plop stringhe ovunque nella RAM. 853 00:37:48,210 --> 00:37:50,710 Fino qui, qui, qui, qui. 854 00:37:50,710 --> 00:37:52,020 >> Potevano fare esattamente questo. 855 00:37:52,020 --> 00:37:54,280 Ma, naturalmente, questo è probabilmente non la migliore pianificazione. 856 00:37:54,280 --> 00:37:54,780 Giusto? 857 00:37:54,780 --> 00:37:57,340 Se ho continuato a chiedere a Alex ottenere i nomi, probabilmente aveva 858 00:37:57,340 --> 00:38:01,370 mettere un po 'più giù qui, forse fino qui, qui, qui, alla fine 859 00:38:01,370 --> 00:38:02,211 qui. 860 00:38:02,211 --> 00:38:05,460 Ma con un po 'più di pianificazione, di certo, potremmo porre le cose in modo più pulito. 861 00:38:05,460 --> 00:38:07,350 E in effetti, questo è ciò che un computer fa. 862 00:38:07,350 --> 00:38:10,720 >> Ma il problema è che se la stringa successiva ottengo 863 00:38:10,720 --> 00:38:14,050 dopo Zamyla è qualcosa come il Belinda, 864 00:38:14,050 --> 00:38:17,929 proporre dove potremmo scrivere il lettera b rispetto a questa griglia? 865 00:38:17,929 --> 00:38:18,720 Dove vorresti andare? 866 00:38:18,720 --> 00:38:21,480 Alla destra del una, sotto la z, sotto l'una? 867 00:38:21,480 --> 00:38:23,204 Quale sarebbe il vostro primo istinto è? 868 00:38:23,204 --> 00:38:24,120 PUBBLICO: Sotto la z. 869 00:38:24,120 --> 00:38:25,100 DAVID J. MALAN: Così sotto la z. 870 00:38:25,100 --> 00:38:26,530 E questo è abbastanza semplice, giusto? 871 00:38:26,530 --> 00:38:29,321 E 'una specie di pulito, è quello che facciamo su una tastiera quando colpiamo Enter, 872 00:38:29,321 --> 00:38:31,770 o una e-mail quando si effettua un elenco puntato delle cose. 873 00:38:31,770 --> 00:38:34,310 Ma la realtà è che i computer cercare di essere più efficienti, 874 00:38:34,310 --> 00:38:37,170 e stipare certamente tanto i dati in RAM possibile, 875 00:38:37,170 --> 00:38:38,890 in modo da non sprecare alcun byte. 876 00:38:38,890 --> 00:38:41,545 In modo che tu non sprecare qualsiasi bene immobile dello schermo. 877 00:38:41,545 --> 00:38:44,170 E il problema, però, è che se abbiamo letteralmente messo la lettera 878 00:38:44,170 --> 00:38:49,940 b dopo una, come faremo a sapere dove il nome di Zamyla finisce 879 00:38:49,940 --> 00:38:51,840 e il nome di Belinda inizia? 880 00:38:51,840 --> 00:38:55,270 Così gli esseri umani appena proposto, bene, premere il tasto Invio, in sostanza. 881 00:38:55,270 --> 00:38:56,410 Metti giù di sotto. 882 00:38:56,410 --> 00:38:59,750 O anche, come ha fatto Alex, basta iniziare a scrivere il nome successivo di sotto del precedente, 883 00:38:59,750 --> 00:39:01,583 e sotto quello, e poi sotto quella. 884 00:39:01,583 --> 00:39:02,510 Questo è un segnale visivo. 885 00:39:02,510 --> 00:39:05,960 >> I computer hanno un altro stimolo visivo, ma è un po 'più succinta. 886 00:39:05,960 --> 00:39:07,840 E 'questo carattere funky. 887 00:39:07,840 --> 00:39:11,890 Barra rovesciata 0, che è forse ricorda backslash n, 888 00:39:11,890 --> 00:39:12,640 e così via, adesso. 889 00:39:12,640 --> 00:39:14,120 Le sequenze di escape speciali. 890 00:39:14,120 --> 00:39:19,120 Barra rovesciata 0 è il modo di che rappresenta otto a zero i bit in una riga. 891 00:39:19,120 --> 00:39:22,000 0000 0000. 892 00:39:22,000 --> 00:39:26,130 >> Il modo di esprimere che non è colpire il numero zero sulla tastiera, 893 00:39:26,130 --> 00:39:28,140 perché in realtà che è un carattere ASCII. 894 00:39:28,140 --> 00:39:30,990 Sembra un numero, ma è in realtà un numero decimale 895 00:39:30,990 --> 00:39:35,910 che rappresenta la circolare glifo, il carattere circolare. 896 00:39:35,910 --> 00:39:38,410 Nel frattempo, backslash zero significa, letteralmente 897 00:39:38,410 --> 00:39:40,700 mettere otto a zero byte qui per me. 898 00:39:40,700 --> 00:39:42,136 >> Quindi questo è un po 'arbitraria. 899 00:39:42,136 --> 00:39:44,260 Potremmo abbiamo usato alcun modello di bit, ma il mondo 900 00:39:44,260 --> 00:39:46,610 deciso alcuni anni fa che rappresentare 901 00:39:46,610 --> 00:39:49,710 la fine di una stringa in memoria, basta mettere un sacco di zeri. 902 00:39:49,710 --> 00:39:51,000 Perché possiamo rilevare che. 903 00:39:51,000 --> 00:39:54,790 Ora che significa che nessuna lettera del alfabeto può essere rappresentato con zeri. 904 00:39:54,790 --> 00:39:58,480 >> Ma va bene, abbiamo già visto che stiamo usando 65 su un massimo di 97 su un massimo. 905 00:39:58,480 --> 00:40:00,290 Non abbiamo avuto nessuna parte vicino a tutti zeri. 906 00:40:00,290 --> 00:40:03,040 907 00:40:03,040 --> 00:40:06,540 Così Belinda nella memoria di un computer è in realtà sta per andare qui. 908 00:40:06,540 --> 00:40:09,764 Ho disegnato in giallo solo per attirare la nostra attenzione. 909 00:40:09,764 --> 00:40:11,680 E notate, anche, questo è del tutto arbitraria. 910 00:40:11,680 --> 00:40:12,680 Ho disegnato come una griglia. 911 00:40:12,680 --> 00:40:14,460 Come, la RAM è solo un oggetto fisico. 912 00:40:14,460 --> 00:40:17,300 Esso non deve necessariamente righe e colonne, per sé. 913 00:40:17,300 --> 00:40:20,490 Ha appena ricevuto un sacco di byte implementato in hardware in qualche modo. 914 00:40:20,490 --> 00:40:22,817 Ma se dopo Belinda I digitato il nome di Gabe, 915 00:40:22,817 --> 00:40:25,650 ha intenzione di finire qui in memoria, e se ho digitato in nome di Daven, 916 00:40:25,650 --> 00:40:27,316 per esempio, ha intenzione di finire qui. 917 00:40:27,316 --> 00:40:29,310 E posso continuare a scrivere anche più nomi. 918 00:40:29,310 --> 00:40:32,100 >> Purtroppo, se cerco di scrivi un super nome lungo, 919 00:40:32,100 --> 00:40:33,730 Potrei finalmente esaurito la memoria. 920 00:40:33,730 --> 00:40:37,810 In questo caso, è getString andando a restituire NULL, come abbiamo detto. 921 00:40:37,810 --> 00:40:41,720 Ma per fortuna, almeno in questo visiva qui, non siamo riusciti a tanto. 922 00:40:41,720 --> 00:40:45,860 >> Ora, ciò che è bello è che questo idea generale di trattare le cose 923 00:40:45,860 --> 00:40:49,720 come essere in scatole è rappresentativo di una caratteristica di C 924 00:40:49,720 --> 00:40:52,690 e un sacco di lingue, conosciuto come un array. 925 00:40:52,690 --> 00:40:55,490 Una matrice è un altro tipo di dati. 926 00:40:55,490 --> 00:40:57,380 Si tratta di una struttura di dati, se si vuole. 927 00:40:57,380 --> 00:41:01,160 Struttura nel senso di veramente, tipo, guardando come una scatola, almeno 928 00:41:01,160 --> 00:41:02,320 con l'occhio della mente. 929 00:41:02,320 --> 00:41:09,680 Una matrice è un contiguo sequenza dei tipi di dati identici, 930 00:41:09,680 --> 00:41:11,330 back to back to back to back. 931 00:41:11,330 --> 00:41:14,720 >> Quindi una stringa, in altre parole, è un array di caratteri. 932 00:41:14,720 --> 00:41:16,120 Un array di caratteri. 933 00:41:16,120 --> 00:41:19,070 Ma si scopre che si può avere array di mazzi di cose. 934 00:41:19,070 --> 00:41:21,870 In realtà, possiamo mettere anche numeri in un array. 935 00:41:21,870 --> 00:41:23,920 Così la forma in cui stiamo per cominciare 936 00:41:23,920 --> 00:41:26,590 dichiarando questi dati struttura nota come matrice 937 00:41:26,590 --> 00:41:28,250 sta anche andando a utilizzare le parentesi quadre. 938 00:41:28,250 --> 00:41:31,500 Ma queste parentesi quadre stanno per hanno un significato diverso in questo contesto. 939 00:41:31,500 --> 00:41:33,450 >> E vediamo come segue. 940 00:41:33,450 --> 00:41:36,780 Supponiamo che ho aperto un nuovo file qui. 941 00:41:36,780 --> 00:41:38,535 E io Salva come ages.c. 942 00:41:38,535 --> 00:41:41,280 943 00:41:41,280 --> 00:41:43,470 E io salverò questo nella mia cartella qui. 944 00:41:43,470 --> 00:41:46,130 E ora ho intenzione di andare avanti e iniziare a digitare qualcosa 945 00:41:46,130 --> 00:41:53,940 come includere CS50.h, includere stdio.h, int void main. 946 00:41:53,940 --> 00:41:57,370 E poi dentro di qui, voglio di avere prima un int chiamato età. 947 00:41:57,370 --> 00:42:01,371 >> E ho intenzione di usarla per ottenere un int da parte dell'utente per la sua età. 948 00:42:01,371 --> 00:42:04,620 Ma questo programma è pensato per essere utilizzato da più persone, per qualsiasi contesto. 949 00:42:04,620 --> 00:42:05,490 Ho una linea di persone. 950 00:42:05,490 --> 00:42:08,281 Tutti loro hanno di digitare nella loro età per magari un po ', non so, 951 00:42:08,281 --> 00:42:10,530 la concorrenza, o evento che sono arrivati ​​per. 952 00:42:10,530 --> 00:42:13,030 Così la prossima persona, mi bisogno di un'altra variabile. 953 00:42:13,030 --> 00:42:15,790 >> Perché se faccio e basta età ottiene getInt, che è 954 00:42:15,790 --> 00:42:18,500 andare a clobber, o sovrascrivere l'età della persona precedente. 955 00:42:18,500 --> 00:42:19,760 Così non va bene. 956 00:42:19,760 --> 00:42:21,790 Quindi il mio primo istinto potrebbe essere, oh, va bene, 957 00:42:21,790 --> 00:42:26,260 se voglio ottenere più persone di ages-- chiamiamolo questo age1, 958 00:42:26,260 --> 00:42:31,280 int age2 ottiene int, int Age3 ottiene getInt. 959 00:42:31,280 --> 00:42:35,340 E ora ho intenzione di usare codice pseudocodice qui. 960 00:42:35,340 --> 00:42:37,679 >> Fare qualcosa con quei numeri. 961 00:42:37,679 --> 00:42:40,470 Lasceremo per un altro giorno quello che stiamo facendo lì, perché abbiamo solo 962 00:42:40,470 --> 00:42:44,200 la cura per il momento su age1, age2, Age3. 963 00:42:44,200 --> 00:42:46,450 Purtroppo, una volta che compilare questo programma 964 00:42:46,450 --> 00:42:51,140 e metterlo davanti a utenti effettivi, qual è il fondamentalmente cattiva progettazione 965 00:42:51,140 --> 00:42:53,890 decisione mi sembra di aver fatto? 966 00:42:53,890 --> 00:42:54,624 Sì? 967 00:42:54,624 --> 00:42:55,499 PUBBLICO: [incomprensibile] 968 00:42:55,499 --> 00:42:58,071 969 00:42:58,071 --> 00:42:59,820 DAVID J. MALAN: Sì, Non ho nemmeno provato 970 00:42:59,820 --> 00:43:02,028 di capire come molte età posso realmente importa? 971 00:43:02,028 --> 00:43:05,380 Se ho meno di tre persone qui, e quindi meno di tre secoli, 972 00:43:05,380 --> 00:43:07,260 Sto ancora aspettando ciecamente tre. 973 00:43:07,260 --> 00:43:08,720 Dio non voglia quattro persone appaiono. 974 00:43:08,720 --> 00:43:10,990 Il mio programma semplicemente non sarà nemmeno li supporta. 975 00:43:10,990 --> 00:43:13,280 >> E così questo, lunga storia Insomma, non è una buona abitudine. 976 00:43:13,280 --> 00:43:13,780 Giusto? 977 00:43:13,780 --> 00:43:16,530 Mi è stato essenzialmente la copia e incollando il codice e solo tweaking 978 00:43:16,530 --> 00:43:17,430 i nomi delle variabili. 979 00:43:17,430 --> 00:43:22,410 E, mio ​​Dio, se tu avessi, non tre età, ma 10, o 100, o anche 6.500 980 00:43:22,410 --> 00:43:23,820 studenti, per esempio. 981 00:43:23,820 --> 00:43:26,950 Questo non sta per essere particolarmente codice elegante, o sostenibile. 982 00:43:26,950 --> 00:43:29,200 Stai andando ad avere per riscrivere il programma ogni volta 983 00:43:29,200 --> 00:43:30,760 il tuo numero di persone modifiche. 984 00:43:30,760 --> 00:43:35,090 >> Quindi, per fortuna, nel nostro attuale file di ages.c per oggi, 985 00:43:35,090 --> 00:43:36,970 noi abbiamo una soluzione più intelligente. 986 00:43:36,970 --> 00:43:39,800 In primo luogo, ho intenzione di prendere in prestito il Costruiamo abbiamo usato un paio di volte, 987 00:43:39,800 --> 00:43:43,744 questa do while, al fine di ottenere il numero di persone nella stanza. 988 00:43:43,744 --> 00:43:46,910 Sto solo andando a tormentare l'utente, di nuovo e ancora, fino a che non mi dà 989 00:43:46,910 --> 00:43:49,260 un valore di n che è un numero intero positivo. 990 00:43:49,260 --> 00:43:51,590 >> Avrei potuto usare, ultimo tempo di get int positivo. 991 00:43:51,590 --> 00:43:53,720 Ma noi non abbiamo che per davvero, così sono andato avanti 992 00:43:53,720 --> 00:43:55,660 e ri implementato questa idea. 993 00:43:55,660 --> 00:43:58,410 Ora qui, questo è il nuovo trucco. 994 00:43:58,410 --> 00:44:02,260 In linea 27, come i commenti in linea 26 suggerisce, 995 00:44:02,260 --> 00:44:05,180 dichiarare un array in cui per memorizzare l'età di tutti. 996 00:44:05,180 --> 00:44:09,320 >> Quindi, se si vuole ottenere, non un int, non due interi, ma un sacco di int. 997 00:44:09,320 --> 00:44:13,800 In particolare n interi, erano n potrebbe essere tre, potrebbe essere 100, potrebbe essere 1.000. 998 00:44:13,800 --> 00:44:17,570 La sintassi, molto semplicemente, è quello di per esempio, che tipo di dati vuoi? 999 00:44:17,570 --> 00:44:19,620 Che cosa si desidera chiamare che pezzo di memoria? 1000 00:44:19,620 --> 00:44:23,530 Che cosa si desidera chiamare la griglia che assomiglia a questo pittoricamente? 1001 00:44:23,530 --> 00:44:27,700 >> E tra parentesi qui, tu dici quanto grande volete che la matrice sia. 1002 00:44:27,700 --> 00:44:30,450 E così prima, quando ho detto il sintassi è un po 'diverso qui, 1003 00:44:30,450 --> 00:44:33,614 stiamo ancora usando le parentesi quadre, ma quando sto dichiarando un array, 1004 00:44:33,614 --> 00:44:35,530 il numero interno del parentesi quadre mezzi 1005 00:44:35,530 --> 00:44:37,610 quanto grande volete la matrice sia. 1006 00:44:37,610 --> 00:44:42,490 >> Al contrario, quando usavamo s staffa ho un momento fa, s, una stringa, 1007 00:44:42,490 --> 00:44:46,820 è infatti un array di caratteri, ma quando non stai dichiarazione di una variabile, 1008 00:44:46,820 --> 00:44:49,760 come con questa parola chiave qui, si sta semplicemente ricevendo 1009 00:44:49,760 --> 00:44:54,280 un indice specifico, una determinata elemento di tale matrice. 1010 00:44:54,280 --> 00:44:57,090 Una volta che sappiamo che, il resto di questo è semplice. 1011 00:44:57,090 --> 00:45:00,765 Se nuovo Sto andando prima di stampare qual è l'età della persona numero i. 1012 00:45:00,765 --> 00:45:03,890 Dove posso solo dire il numero uno persona, persona numero due, numero tre persone. 1013 00:45:03,890 --> 00:45:06,306 >> E sto solo facendo aritmetica, in modo che le persone normali come, 1014 00:45:06,306 --> 00:45:09,030 contiamo da uno per questo programma, e non da zero. 1015 00:45:09,030 --> 00:45:13,620 Poi chiamo getint, ma devo conservare la risposta in epoche staffa I. 1016 00:45:13,620 --> 00:45:16,610 Quale è l'età-esimo nella matrice. 1017 00:45:16,610 --> 00:45:21,640 Così, mentre l'ultima volta eravamo trattando queste scatole come caratteri per il nome del Zamyla, 1018 00:45:21,640 --> 00:45:22,490 e altri. 1019 00:45:22,490 --> 00:45:26,530 Ora, queste scatole rappresentano 32 bit, o quattro byte 1020 00:45:26,530 --> 00:45:29,510 in cui possiamo memorizzare un int, int, int. 1021 00:45:29,510 --> 00:45:31,890 Tutto ciò, ancora una volta, sono lo stesso tipo di dati. 1022 00:45:31,890 --> 00:45:33,890 >> Ora faccio qualcosa di stupido, come passa il tempo, basta 1023 00:45:33,890 --> 00:45:35,510 per giustificare la scrittura di questo programma. 1024 00:45:35,510 --> 00:45:40,050 E poi qui, ho di nuovo iterate sopra la matrice dire un anno da oggi, 1025 00:45:40,050 --> 00:45:43,090 persona numero uno volontà essere qualcosa anni. 1026 00:45:43,090 --> 00:45:45,010 E per capire che math-- Voglio dire, questo 1027 00:45:45,010 --> 00:45:49,260 non è molto complicato arithmetic-- Ho solo aggiungere uno alla loro età. 1028 00:45:49,260 --> 00:45:51,240 Giusto per dimostrare, ancora una volta, questo. 1029 00:45:51,240 --> 00:45:57,910 >> Proprio come posso indice in una stringa, s, così posso indice in un array di età, 1030 00:45:57,910 --> 00:45:59,950 come quella lì. 1031 00:45:59,950 --> 00:46:03,340 Allora, dove sta questo sarà prendere noi? 1032 00:46:03,340 --> 00:46:07,070 Quindi vedremo, in ultima analisi, un poche cose nei giorni a venire. 1033 00:46:07,070 --> 00:46:09,510 Uno, tutto questo tempo, in cui scrivere i propri programmi, 1034 00:46:09,510 --> 00:46:11,239 come Mario, avidi, di credito. 1035 00:46:11,239 --> 00:46:13,780 Sei stato a digitare il nome di il programma e premendo invio. 1036 00:46:13,780 --> 00:46:15,610 E poi avere un input dell'utente. 1037 00:46:15,610 --> 00:46:18,137 >> Con getString, getInt, getLongLong, o simili. 1038 00:46:18,137 --> 00:46:20,720 Ma si scopre che supporta C qualcosa che si chiama riga di comando 1039 00:46:20,720 --> 00:46:25,740 argomenti, che sta per farci effettivamente arrivare a parole digitati, 1040 00:46:25,740 --> 00:46:28,570 al prompt lampeggiante, dopo il nome del vostro programma. 1041 00:46:28,570 --> 00:46:31,430 >> Così, nei giorni a venire, è potrebbe digitare qualcosa come Cesare, 1042 00:46:31,430 --> 00:46:34,950 o ./caesar numero 13, da allora in poi. 1043 00:46:34,950 --> 00:46:36,070 Vedremo come funziona. 1044 00:46:36,070 --> 00:46:37,550 Poiché infatti, in problema impostare due, noi siamo 1045 00:46:37,550 --> 00:46:39,383 andando a presentarvi per un po 'di qualcosa 1046 00:46:39,383 --> 00:46:42,360 ricorda Ralphie di sfidare precedente di cartografia. 1047 00:46:42,360 --> 00:46:43,970 L'arte di scrambling informazioni. 1048 00:46:43,970 --> 00:46:46,660 Questo, infatti, è molto ricorda di quello che ha fatto Ralphie. 1049 00:46:46,660 --> 00:46:51,380 >> Questo è un esempio di una crittografia algoritmo chiamato rot13, R-O-T 13. 1050 00:46:51,380 --> 00:46:54,910 Il che significa semplicemente ruotare il lettere dell'alfabeto 13 posti. 1051 00:46:54,910 --> 00:46:58,309 E se lo fai, vedrai adesso ciò che è, forse, una frase familiare. 1052 00:46:58,309 --> 00:47:01,100 Ma il modo in cui stiamo andando a utilizzare questo, in definitiva, è più generale. 1053 00:47:01,100 --> 00:47:04,390 >> In P impostare due, in edizione standard, ti implementa un paio di cifre, 1054 00:47:04,390 --> 00:47:06,720 uno chiamato Cesare, uno chiamato Vigenere. 1055 00:47:06,720 --> 00:47:10,090 Entrambi sono rotazionale cifre, in che in qualche modo si 1056 00:47:10,090 --> 00:47:11,826 trasformare una lettera in una lettera diversa. 1057 00:47:11,826 --> 00:47:12,950 E Cesare è super semplice. 1058 00:47:12,950 --> 00:47:16,220 Si aggiunge uno, si aggiungono 13, o un numero fino a 26. 1059 00:47:16,220 --> 00:47:19,570 Vigenere fa che su una base per lettera. 1060 00:47:19,570 --> 00:47:22,140 Così Vigenère, come si vedrà nelle specifiche, è più sicuro. 1061 00:47:22,140 --> 00:47:24,973 >> Ma alla fine della giornata quello sarete implementando e P impostare due, 1062 00:47:24,973 --> 00:47:29,050 è quella chiave che si utilizza sia per la crittografia e la decrittografia. 1063 00:47:29,050 --> 00:47:32,160 Con riferimento al processo di tornitura testo normale, qualche messaggio originale, 1064 00:47:32,160 --> 00:47:34,490 in testo cypher, che è qualcosa criptato. 1065 00:47:34,490 --> 00:47:36,220 E poi decifrare nuovamente. 1066 00:47:36,220 --> 00:47:38,119 >> Nell'edizione hacker, nel frattempo, sarete 1067 00:47:38,119 --> 00:47:40,660 con il compito di qualcosa di simile in spirito, dove vi daremo 1068 00:47:40,660 --> 00:47:44,610 un file, da una tipica Linux, o Mac, o Unix computer chiamato etsy 1069 00:47:44,610 --> 00:47:47,800 password, che contiene un intero mazzo di nomi utente e password. 1070 00:47:47,800 --> 00:47:50,932 E le password sono tutti stato criptato, o hash, 1071 00:47:50,932 --> 00:47:53,140 per così dire, più propriamente come si vedrà nelle specifiche. 1072 00:47:53,140 --> 00:47:57,090 >> E l'edizione di hacker sfiderà con l'assunzione di un ingresso come questo, 1073 00:47:57,090 --> 00:47:58,800 e screpolature della password. 1074 00:47:58,800 --> 00:48:02,590 Cioè, cercare di capire ciò che il password di umana realtà. 1075 00:48:02,590 --> 00:48:05,570 Perché, in effetti, le password sono generalmente non memorizzato in chiaro, 1076 00:48:05,570 --> 00:48:08,260 e password generale dovrebbe essere difficile da indovinare. 1077 00:48:08,260 --> 00:48:09,610 Questo non è spesso il caso. 1078 00:48:09,610 --> 00:48:12,110 >> E quello che ho pensato di fare è Concludo con un paio di minuti 1079 00:48:12,110 --> 00:48:15,160 sguardo particolarmente scarsa scelta delle password 1080 00:48:15,160 --> 00:48:17,260 da un film si potrebbe ricordare con affetto. 1081 00:48:17,260 --> 00:48:18,915 E se non, dovreste affittare. 1082 00:48:18,915 --> 00:48:20,070 >> [RIPRODUZIONE VIDEO] 1083 00:48:20,070 --> 00:48:22,320 >> -Casco, Si demonio, cosa sta succedendo? 1084 00:48:22,320 --> 00:48:24,240 Cosa stai facendo per mia figlia? 1085 00:48:24,240 --> 00:48:28,010 >> Mi -Permit di introdurre il giovane e brillante chirurgo plastico, 1086 00:48:28,010 --> 00:48:30,010 Dottor Phillip Schlotkin. 1087 00:48:30,010 --> 00:48:35,020 Il lavoro più grande uomo naso in tutto l'universo e Beverly Hills. 1088 00:48:35,020 --> 00:48:36,140 >> -La Tua altezza. 1089 00:48:36,140 --> 00:48:36,820 >> Lavoro -Nose? 1090 00:48:36,820 --> 00:48:37,700 Non capisco. 1091 00:48:37,700 --> 00:48:39,070 Ha già avuto un lavoro di naso. 1092 00:48:39,070 --> 00:48:40,800 Era il suo dolce 16 presenti. 1093 00:48:40,800 --> 00:48:42,590 >> No, non è quello che pensi. 1094 00:48:42,590 --> 00:48:44,490 E 'molto, molto peggio. 1095 00:48:44,490 --> 00:48:48,160 Se non mi dai l' combinazione allo scudo aria, 1096 00:48:48,160 --> 00:48:52,748 medico Schlotkin darà al vostro figlia di eseguire il suo vecchio naso. 1097 00:48:52,748 --> 00:48:53,748 - [Rantoli] Nooooooooooooo. 1098 00:48:53,748 --> 00:48:57,684 1099 00:48:57,684 --> 00:48:59,652 Dove l'hai preso? 1100 00:48:59,652 --> 00:49:00,640 >> -Tutti Destra. 1101 00:49:00,640 --> 00:49:02,506 Ti dirò, ti dirò. 1102 00:49:02,506 --> 00:49:03,498 >> No, papà, no. 1103 00:49:03,498 --> 00:49:04,490 Non si deve. 1104 00:49:04,490 --> 00:49:06,090 >> -Sei Destra mia cara. 1105 00:49:06,090 --> 00:49:07,390 Mi mancherà il tuo nuovo naso. 1106 00:49:07,390 --> 00:49:10,990 Ma non voglio dire loro la combinazione non importa quale. 1107 00:49:10,990 --> 00:49:12,450 >> -Molto Bene. 1108 00:49:12,450 --> 00:49:14,830 Medico Schlotkin, fare il vostro peggiore. 1109 00:49:14,830 --> 00:49:15,744 >> Piacere -My. 1110 00:49:15,744 --> 00:49:19,860 1111 00:49:19,860 --> 00:49:20,800 >> -NO! 1112 00:49:20,800 --> 00:49:22,780 Aspetta, aspetta. 1113 00:49:22,780 --> 00:49:24,000 Te lo dico. 1114 00:49:24,000 --> 00:49:25,830 Te lo dico. 1115 00:49:25,830 --> 00:49:28,270 >> -I Sapeva che avrebbe funzionato. 1116 00:49:28,270 --> 00:49:31,390 Va bene, dare a me. 1117 00:49:31,390 --> 00:49:36,220 >> -Il Combinazione è uno. 1118 00:49:36,220 --> 00:49:36,740 >> -Un. 1119 00:49:36,740 --> 00:49:37,473 >> -Un. 1120 00:49:37,473 --> 00:49:37,972 -Due. 1121 00:49:37,972 --> 00:49:38,471 -Due. 1122 00:49:38,471 --> 00:49:39,800 -Due. 1123 00:49:39,800 --> 00:49:40,300 -Tre. 1124 00:49:40,300 --> 00:49:40,800 -Tre. 1125 00:49:40,800 --> 00:49:41,800 -Tre. 1126 00:49:41,800 --> 00:49:42,300 -Quattro. 1127 00:49:42,300 --> 00:49:42,800 -Quattro. 1128 00:49:42,800 --> 00:49:44,707 -Quattro. 1129 00:49:44,707 --> 00:49:45,521 -Cinque. 1130 00:49:45,521 --> 00:49:46,430 -Cinque. 1131 00:49:46,430 --> 00:49:47,930 -Cinque. 1132 00:49:47,930 --> 00:49:53,480 -Allora La combinazione è uno, due, tre, quattro, cinque. 1133 00:49:53,480 --> 00:49:56,140 Questa è la combinazione più stupida Ho mai sentito in vita mia. 1134 00:49:56,140 --> 00:49:58,640 Questo è il genere di cosa che un idiota avrebbe avuto sui suoi bagagli. 1135 00:49:58,640 --> 00:50:00,000 >> Si -Grazie, vostra altezza. 1136 00:50:00,000 --> 00:50:01,340 >> [CLICK REMOTE] 1137 00:50:01,340 --> 00:50:02,450 >> -Cosa Hai fatto? 1138 00:50:02,450 --> 00:50:03,800 >> -I Spento il muro. 1139 00:50:03,800 --> 00:50:05,010 >> No, non l'hai fatto, è spento tutto il film. 1140 00:50:05,010 --> 00:50:06,220 >> Deve aver -I premuto il pulsante sbagliato. 1141 00:50:06,220 --> 00:50:07,064 >> Be ', rimetterlo su! 1142 00:50:07,064 --> 00:50:07,910 Mettere il filmato su! 1143 00:50:07,910 --> 00:50:08,300 >> Sì, signore! 1144 00:50:08,300 --> 00:50:08,799 Sì, signore. 1145 00:50:08,799 --> 00:50:09,660 -Andiamo, Arnold. 1146 00:50:09,660 --> 00:50:10,450 Vieni, Gretchen. 1147 00:50:10,450 --> 00:50:12,533 Naturalmente sapete io devono fatturare per questo. 1148 00:50:12,533 --> 00:50:16,720 1149 00:50:16,720 --> 00:50:17,220 Be '? 1150 00:50:17,220 --> 00:50:17,802 Ha funzionato? 1151 00:50:17,802 --> 00:50:18,510 Dov'è il re? 1152 00:50:18,510 --> 00:50:20,218 >> -It Lavorato, signore, abbiamo hanno la combinazione. 1153 00:50:20,218 --> 00:50:20,740 -Grande. 1154 00:50:20,740 --> 00:50:24,810 Ora possiamo prendere ogni ultimo respiro di aria fresca dal pianeta Druidia. 1155 00:50:24,810 --> 00:50:25,890 Qual è la combinazione? 1156 00:50:25,890 --> 00:50:28,155 >> -Una, Due, tre, quattro, cinque. 1157 00:50:28,155 --> 00:50:29,890 >> -Una, Due, tre, quattro, cinque? 1158 00:50:29,890 --> 00:50:30,390 Sě. 1159 00:50:30,390 --> 00:50:31,110 -Che È incredibile. 1160 00:50:31,110 --> 00:50:34,550 Ho avuto la stessa combinazione sul mio bagaglio. 1161 00:50:34,550 --> 00:50:37,160 Preparare Spaceball 1 per partenza immediata. 1162 00:50:37,160 --> 00:50:38,160 >> Sì, signore. 1163 00:50:38,160 --> 00:50:40,745 >> -E Cambiare il combinazione sul mio bagaglio. 1164 00:50:40,745 --> 00:50:41,578 [PORTA CHIUSURA SOUND] 1165 00:50:41,578 --> 00:50:42,064 [CLINK PORTE COLPISCE CASCO] 1166 00:50:42,064 --> 00:50:42,550 -Ahh. 1167 00:50:42,550 --> 00:50:43,383 [FINE RIPRODUZIONE VIDEO] 1168 00:50:43,383 --> 00:50:46,700 DAVID J. MALAN: Questo è tutto per CS50, ci vediamo la prossima settimana. 1169 00:50:46,700 --> 00:50:49,883 NARRATORE: E ora, Profondo Pensieri, di Daven Farnham. 1170 00:50:49,883 --> 00:50:53,160 1171 00:50:53,160 --> 00:50:55,860 >> Daven FARNHAM: Codifica in C è molto più difficile di quanto Scratch. 1172 00:50:55,860 --> 00:50:57,320 printf, Scratch era una bugia. 1173 00:50:57,320 --> 00:50:59,930 1174 00:50:59,930 --> 00:51:01,430 >> [SOUNDBITE RISATA] 1175 00:51:01,430 --> 00:51:02,486