1 00:00:00,000 --> 00:00:01,940 [Powered by Google Translate] [Soluzione - Problem Set 2] 2 00:00:01,940 --> 00:00:04,130 [Zamyla Chan - Harvard University] 3 00:00:05,170 --> 00:00:07,490 [Questo è CS50. CS50.TV] 4 00:00:07,490 --> 00:00:10,750 Bene. Ciao a tutti, e benvenuti a Walkthrough 2. 5 00:00:10,750 --> 00:00:14,330 In primo luogo, voglio congratularmi con voi per la finitura pset 1. 6 00:00:14,330 --> 00:00:18,140 So che avrebbe potuto essere un po 'difficile per alcuni di voi, 7 00:00:18,140 --> 00:00:20,460 avrebbe potuto essere il vostro primo computer programma che hai scritto, 8 00:00:20,460 --> 00:00:24,500 ma solo ricordare che alla fine di questo, quando si guarda indietro alla fine del semestre, 9 00:00:24,500 --> 00:00:29,820 ti aspetto a pset 1 e ti dice: "Ehi, ho potuto farlo in 5 minuti." 10 00:00:29,820 --> 00:00:35,700 Così conoscono e si fidano che alla fine di questo avrai sicuramente trovare pset uno molto semplice. 11 00:00:35,700 --> 00:00:40,640 Ma per ora si tratta di un risultato enorme, e complimenti per la sempre fatto. 12 00:00:40,640 --> 00:00:44,010 Ora, anche una breve nota prima di entrare nella carne della procedura dettagliata. 13 00:00:44,010 --> 00:00:48,340 Voglio solo fare una breve nota che a volte non hanno abbastanza tempo 14 00:00:48,340 --> 00:00:52,500 durante le procedure dettagliate di passare attraverso ogni singolo aspetto di fare il problema proposto 15 00:00:52,500 --> 00:00:56,140 e un po 'solo forse concentrarsi su 1 o 2 tipi di implementazioni, 16 00:00:56,140 --> 00:00:57,750 modi che si possa fare ciò. 17 00:00:57,750 --> 00:01:01,970 Ma questo non vuol dire che si è proibito di farlo in un altro modo. 18 00:01:01,970 --> 00:01:05,980 Ci sono spesso, come con l'informatica, molti modi di fare le cose, 19 00:01:05,980 --> 00:01:12,190 e così sicuramente sentire liberi di utilizzare un diverso tipo di soluzione che forse ho presentato. 20 00:01:12,190 --> 00:01:14,520 [Pset 2: Crypto - Zamyla Chan - zamyla@cs50.net] 21 00:01:14,520 --> 00:01:17,160 [Pset2 - 0. Una sezione di domande - 1. Caesar - 2. Vigenere] 22 00:01:17,160 --> 00:01:20,650 Bene. Così problema set 2: Crypto è un divertimento uno. 23 00:01:20,650 --> 00:01:24,500 Anche in questo caso, con ogni pset si inizia con una sezione di domande 24 00:01:24,500 --> 00:01:29,600 che sta per essere condotta nelle sezioni con il tuo compagno di insegnamento assegnato. 25 00:01:29,600 --> 00:01:31,670 Non abbiamo intenzione di passare attraverso questi oltre la procedura dettagliata, 26 00:01:31,670 --> 00:01:35,100 ma che sicuramente vi aiuteranno a completare il pset. 27 00:01:35,100 --> 00:01:38,100 Quindi la prima parte del set problema è Cesare. 28 00:01:38,100 --> 00:01:43,470 E così in Cesare qualcuno si passa una chiave con un numero intero, 29 00:01:43,470 --> 00:01:48,420 e si crittografare una stringa di testo che essi forniscono 30 00:01:48,420 --> 00:01:50,670 e li restituire una cosa criptata. 31 00:01:50,670 --> 00:01:56,050 Se qualcuno osservò Una storia di Natale, c'è un esempio di che. 32 00:01:56,050 --> 00:01:59,090 Poi la seconda parte del set problema è Vigenere, 33 00:01:59,090 --> 00:02:01,790 che è una tecnica di codifica più avanzata. 34 00:02:01,790 --> 00:02:05,640 E così stiamo per cifrare un testo, 35 00:02:05,640 --> 00:02:09,600 solo che invece con appena un singolo intero, stiamo effettivamente andando a codificarlo 36 00:02:09,600 --> 00:02:13,340 con una parola chiave che l'utente ci fornirà. 37 00:02:16,270 --> 00:02:22,090 Ok, quindi il primo strumento nella casella degli strumenti di oggi è in realtà sta per essere l'aggiornamento del dispositivo. 38 00:02:22,090 --> 00:02:26,430 Sul forum di discussione avremmo visto cose del tipo: "Perché non è questo lavoro?" 39 00:02:26,430 --> 00:02:28,110 "Perché non presenta 50 lavori?" 40 00:02:28,110 --> 00:02:31,830 e spesso la soluzione è in realtà solo per aggiornare il vostro apparecchio. 41 00:02:31,830 --> 00:02:36,730 E quindi se hai appena eseguito in una finestra di terminale nel vostro apparecchio sudo yum-y - 42 00:02:36,730 --> 00:02:40,040 che è una bandiera dire sì, aggiornare tutto - update, 43 00:02:40,040 --> 00:02:42,280 allora il vostro apparecchio verrà aggiornato se necessario. 44 00:02:42,280 --> 00:02:46,960 E non fa male se sei già alla versione più recente del prodotto. 45 00:02:46,960 --> 00:02:51,280 Poi sarà solo dire no nuovi aggiornamenti disponibili e si può continuare a lavorare insieme. 46 00:02:51,280 --> 00:02:55,800 Ma questo è un bene per l'esecuzione anche ogni volta che si apre l'apparecchio 47 00:02:55,800 --> 00:02:57,140 perché siamo ancora molto - 48 00:02:57,140 --> 00:03:00,320 a volte se si entra in un bug - fissandola nell'apparecchio. 49 00:03:00,320 --> 00:03:03,180 Quindi assicuratevi di avere la versione più recente della macchina 50 00:03:03,180 --> 00:03:07,710 ed eseguire tale aggiornamento lì. 51 00:03:07,710 --> 00:03:14,360 Bene. Quindi, dal momento abbiamo a che fare con le lettere e la modifica, cifratura cose, 52 00:03:14,360 --> 00:03:20,410 stiamo andando a voler davvero diventare la migliore amica di nostra tabella ASCII. 53 00:03:20,410 --> 00:03:24,350 Ci sono numerosi quelli on-line, se si trova. Forse anche fare il vostro proprio. 54 00:03:24,350 --> 00:03:29,950 In sostanza, con ogni lettera e ogni numero e ogni carattere 55 00:03:29,950 --> 00:03:32,210 vi è un numero ad essi associati, 56 00:03:32,210 --> 00:03:38,670 e quindi è bello vedere i loro valori ASCII a fianco la lettera vera e propria. 57 00:03:38,670 --> 00:03:42,310 Che sicuramente vi aiuterà nel set problema. 58 00:03:42,310 --> 00:03:45,750 Una cosa che veramente mi ha aiutato in questo set problema era effettivamente stampare, 59 00:03:45,750 --> 00:03:48,380 e mentre stava attraversando, vorrei davvero disegnare su di esso, 60 00:03:48,380 --> 00:03:51,150 scrivere, "Se questo deve andare a lì, poi ..." 61 00:03:51,150 --> 00:03:55,270 Tipo di disegnare su di esso e segnare in su, diventano migliori amici con la tua tabella ASCII. 62 00:03:57,240 --> 00:04:00,750 Poi ci sono pochi altri strumenti a nostra disposizione. 63 00:04:00,750 --> 00:04:03,750 Questa volta invece di effettivamente chiedere conferma all'utente per tutto il loro ingresso 64 00:04:03,750 --> 00:04:05,230 stiamo andando a fare una combinazione. 65 00:04:05,230 --> 00:04:06,880 Stiamo andando a richiedere loro un certo input, 66 00:04:06,880 --> 00:04:11,350 ma stiamo anche andando a utilizzare solo gli argomenti della riga di comando. 67 00:04:11,350 --> 00:04:15,600 Così, quando corrono il loro programma, di solito si dice. / Ciao, per esempio, 68 00:04:15,600 --> 00:04:17,310 se il programma è stato hello.c. 69 00:04:17,310 --> 00:04:22,500 Ma questa volta, invece di dire semplicemente quello, possono mettere le parole, gli argomenti in seguito. 70 00:04:22,500 --> 00:04:27,210 E così abbiamo intenzione di utilizzare tutto quello che passano a noi come loro contributo pure, 71 00:04:27,210 --> 00:04:31,720 così commovente oltre la semplice richiesta di conferma per intero, ma anche utilizzando gli argomenti della riga di comando. 72 00:04:31,720 --> 00:04:36,590 E poi andremo in un array e stringhe, che verranno utilizzati in un sacco di bene. 73 00:04:41,460 --> 00:04:44,810 Ecco solo un esempio di 1 grafico mini ASCII. 74 00:04:44,810 --> 00:04:48,460 Come ho detto, ogni lettera corrisponde ad un numero, 75 00:04:48,460 --> 00:04:52,510 e così familiarizzare con questo. Essa sarà utile. 76 00:04:52,510 --> 00:04:55,610 E più tardi, quando si inizia a fare un po 'di ASCIIMath che fare con i numeri - 77 00:04:55,610 --> 00:05:00,110 aggiungendo, sottraendo loro - quindi sicuramente buona per fare riferimento a questa tabella. 78 00:05:02,860 --> 00:05:06,920 Quindi, ecco un esempio di un cifrario di Cesare - qualcosa che potrebbe essere giocato con. 79 00:05:06,920 --> 00:05:11,190 E 'solo una ruota. Essenzialmente, c'è un alfabeto esterno e quindi vi è un alfabeto interna. 80 00:05:11,190 --> 00:05:15,290 Quindi, in questo caso è un esempio di cifrario di Cesare, ma con una chiave di 0. 81 00:05:15,290 --> 00:05:21,540 Essenzialmente, A è allineato con A, B è allineato con B, fino a Z. 82 00:05:21,540 --> 00:05:26,590 Ma poi dire che volevamo una chiave di 3, per esempio. 83 00:05:26,590 --> 00:05:33,280 Poi ci sarebbe ruotare la ruota interna in modo che A si allinea ora con D, ecc 84 00:05:33,280 --> 00:05:35,250 E così questo è essenzialmente quello che stiamo per fare. 85 00:05:35,250 --> 00:05:38,340 Noi non abbiamo una ruota, ma quello che abbiamo intenzione di fare è rendere il nostro programma 86 00:05:38,340 --> 00:05:44,490 tipo di spostare l'alfabeto con noi una certa quantità di numeri. 87 00:05:44,490 --> 00:05:48,650 Quindi, come ho detto prima, stiamo andando a che fare con gli argomenti della riga di comando 88 00:05:48,650 --> 00:05:50,390 così come ottenere un numero intero. 89 00:05:50,390 --> 00:05:55,050 Quindi il modo che un utente esegue il programma Cesare dicendo. / Caesar 90 00:05:55,050 --> 00:05:58,090 e poi inserendo un numero dopo. 91 00:05:58,090 --> 00:06:01,130 E quel numero rappresenta la chiave, lo spostamento, 92 00:06:01,130 --> 00:06:06,740 quante volte si sta andando ad essere in rotazione la ruota interna del cifrario di Cesare. 93 00:06:06,740 --> 00:06:08,390 E così che vedete qui un esempio. 94 00:06:08,390 --> 00:06:14,550 Se siamo entrati le lettere da A a L nella nostra cifrario di Cesare, 95 00:06:14,550 --> 00:06:19,520 allora sarebbe ingresso D per il punto O, perché questo è ogni lettera spostato più di 3 volte, 96 00:06:19,520 --> 00:06:22,080 proprio come l'esempio della ruota che vi ho mostrato. 97 00:06:22,080 --> 00:06:25,300 Allora se avete inserito, per esempio, questo è CS50! 98 00:06:25,300 --> 00:06:27,960 allora sarebbe anche possibile spostare tutte le lettere. 99 00:06:27,960 --> 00:06:31,040 E questa è una cosa importante sia Cesare e Vigenère 100 00:06:31,040 --> 00:06:34,890 è che stiamo andando a saltare tutte le non-lettere. 101 00:06:34,890 --> 00:06:39,160 Quindi, gli eventuali spazi, caratteri, ecc, numeri, stiamo andando a tenerli lo stesso. 102 00:06:39,160 --> 00:06:42,920 Stiamo solo andando a spostare le lettere in questo caso. 103 00:06:42,920 --> 00:06:45,870 Quindi, come si vede nella ruota, abbiamo solo le lettere a nostra disposizione, 104 00:06:45,870 --> 00:06:50,150 quindi vogliamo solo spostare le lettere e crittografare le lettere. 105 00:06:51,370 --> 00:06:56,720 Quindi la prima cosa da fare, si è visto che l'utilizzo di Cesare nel problem set 2 106 00:06:56,720 --> 00:07:05,280 è quello di eseguire Cesare e quindi immettere un numero quando lo si esegue nel terminale. 107 00:07:05,280 --> 00:07:10,940 Quindi quello che dobbiamo fare è quello di ottenere in qualche modo la chiave e accedervi. 108 00:07:10,940 --> 00:07:14,730 E quindi vogliamo vedere in qualche modo sarà il secondo argomento della riga di comando. 109 00:07:14,730 --> 00:07:20,950 Il primo sarà. / Caesar, e il prossimo sarà il numero di chiave. 110 00:07:22,190 --> 00:07:29,200 Quindi, prima abbiamo avuto int main (void) per avviare i nostri programmi in C. 111 00:07:29,200 --> 00:07:31,790 Stiamo andando a staccare un livello un po ' 112 00:07:31,790 --> 00:07:34,720 ed effettivamente vedere che invece di passare nel vuoto per la nostra funzione principale 113 00:07:34,720 --> 00:07:37,920 stiamo effettivamente fare con 2 parametri. 114 00:07:37,920 --> 00:07:44,070 Abbiamo chiamato un int argc e quindi un array di stringhe chiamato argv. 115 00:07:44,070 --> 00:07:46,030 Quindi argc è un numero intero, 116 00:07:46,030 --> 00:07:49,640 e rappresenta il numero di argomenti passati al programma. 117 00:07:49,640 --> 00:07:53,590 E poi argv è in realtà l'elenco degli argomenti passati. 118 00:07:53,590 --> 00:08:00,820 Tutti gli argomenti sono stringhe, e quindi argv rappresenta un array, una lista, di stringhe. 119 00:08:01,830 --> 00:08:03,990 Parliamo di array un po '. 120 00:08:03,990 --> 00:08:05,940 Gli array sono essenzialmente una nuova struttura di dati. 121 00:08:05,940 --> 00:08:09,660 Ci sono interi, abbiamo doppie, abbiamo corde, e ora abbiamo gli array. 122 00:08:09,660 --> 00:08:13,820 Array sono strutture di dati che può contenere più valori dello stesso tipo, 123 00:08:13,820 --> 00:08:18,320 Quindi, in sostanza, un elenco di qualsiasi tipo che si desidera. 124 00:08:18,320 --> 00:08:24,400 In sostanza, se si vuole una lista di interi tutti in 1 variabile, 125 00:08:24,400 --> 00:08:29,090 allora è necessario creare una nuova variabile che è stata di tipo array int. 126 00:08:29,090 --> 00:08:34,450 Quindi, gli array sono indice a base zero, il che significa che il primo elemento della matrice è in corrispondenza dell'indice 0. 127 00:08:34,450 --> 00:08:41,799 Se la matrice è di lunghezza 4, come in questo esempio, allora la ultimo elemento sarebbe all'indice 3, 128 00:08:41,799 --> 00:08:44,810 che è 4 - 1. 129 00:08:45,940 --> 00:08:48,420 Quindi, per creare un array, si potrebbe fare qualcosa di simile. 130 00:08:48,420 --> 00:08:51,440 Diciamo che voleva una doppia matrice. 131 00:08:51,440 --> 00:08:56,520 Questo vale per qualsiasi tipo di tipo di dati, però. 132 00:08:56,520 --> 00:09:00,210 Quindi dici che vuoi una doppia matrice. Dire che si desidera chiamare cassetta postale. 133 00:09:00,210 --> 00:09:04,760 Proprio come si dovrebbe inizializzare qualsiasi altra doppia, 134 00:09:04,760 --> 00:09:09,760 si direbbe doppio e poi il nome, ma questa volta abbiamo messo le parentesi quadre, 135 00:09:09,760 --> 00:09:13,570 e quindi il numero ci sarà la lunghezza della matrice. 136 00:09:13,570 --> 00:09:16,840 Si noti che in matrici non si può mai modificare la lunghezza, 137 00:09:16,840 --> 00:09:21,230 modo da avere sempre di definire e scegliere il numero di scatole, 138 00:09:21,230 --> 00:09:25,440 quantità di valori l'array sta per tenere. 139 00:09:25,440 --> 00:09:31,820 Quindi, per impostare valori differenti nella propria matrice, hai intenzione di usare questa sintassi seguente, 140 00:09:31,820 --> 00:09:33,200 come si vede nella diapositiva. 141 00:09:33,200 --> 00:09:37,620 Hai 0 indice casella di posta sarà impostato a 1,2, 142 00:09:37,620 --> 00:09:42,180 casella di posta indice 1 set a 2.4, ecc 143 00:09:42,180 --> 00:09:47,910 Quindi, ora che abbiamo esaminato array un po ', torniamo a argc e argv. 144 00:09:47,910 --> 00:09:52,220 Sappiamo che argv è un array di stringhe. 145 00:09:52,220 --> 00:09:55,080 Così, quando un utente passa - dicono che sta eseguendo un programma - 146 00:09:55,080 --> 00:09:58,740 dicono. / ciao David Malan, 147 00:09:58,740 --> 00:10:05,160 quello che il programma farà per voi è in realtà già venire con quello che argc e argv sono. 148 00:10:05,160 --> 00:10:07,620 Quindi non c'è bisogno di preoccuparsi di questo. 149 00:10:07,620 --> 00:10:14,370 Argc in questo caso sarebbe 3 perché vede tre parole distinte separate da spazi. 150 00:10:14,370 --> 00:10:18,850 E così allora la matrice in questo caso, il primo indice sarebbe. / Ciao, 151 00:10:18,850 --> 00:10:21,770 il prossimo David, il prossimo Malan. 152 00:10:21,770 --> 00:10:25,640 Qualcuno vedere subito quale sia il rapporto tra argv, 153 00:10:25,640 --> 00:10:28,990  l'array, e argc è? 154 00:10:32,820 --> 00:10:38,090 Gia '. Ci arriveremo in che in un esempio in args.c. 155 00:10:38,090 --> 00:10:42,880 Vediamo se siamo in grado di sfruttare la relazione tra il 2. 156 00:10:42,880 --> 00:10:46,550 Qui si potrebbe scoprire che nell'apparecchio l'applicazione predefinita 157 00:10:46,550 --> 00:10:49,450 per aprire i file. c è a volte Emacs. 158 00:10:49,450 --> 00:10:54,660 Ma noi vogliamo fare con gedit, quindi cosa si può fare è che si può fare clic destro sul file C, 159 00:10:54,660 --> 00:11:04,580 andate su Proprietà, Apri con, quindi scegliere gedit, Imposta come predefinito, 160 00:11:04,580 --> 00:11:13,020 e ora il programma dovrebbe aprire in gedit invece di Emacs. 161 00:11:14,710 --> 00:11:16,290 Perfetto. 162 00:11:17,120 --> 00:11:25,520 Così qui Ho un programma che voglio stampare ogni argomento della riga di comando. 163 00:11:25,520 --> 00:11:32,050 Quindi, qualunque sia l'utente immette, voglio essenzialmente tornare a loro su una nuova linea. 164 00:11:32,050 --> 00:11:36,710 Così che cosa è una struttura che possiamo utilizzare per iterare su una cosa - 165 00:11:36,710 --> 00:11:40,380 qualcosa che probabilmente utilizzato nel pset 1? 166 00:11:40,380 --> 00:11:45,840 Se si desidera passare attraverso un determinato numero di cose? >> [Studente] ciclo For. 167 00:11:45,840 --> 00:11:48,910 Per il ciclo. Esattamente. Quindi partiamo con il ciclo for. 168 00:11:48,910 --> 00:11:56,900 Abbiamo per int i = 0. Diciamo solo iniziare con una variabile di inizializzazione standard. 169 00:11:56,900 --> 00:12:02,370 Ho intenzione di lasciare la condizione per un set e poi dire i + +, andando a fare le cose lì. 170 00:12:02,370 --> 00:12:04,090 Bene. 171 00:12:04,090 --> 00:12:11,590 Quindi, ripensando a argv, se argv è la lista di argomenti passati al programma 172 00:12:11,590 --> 00:12:15,380 e argc è il numero di argomenti del programma, 173 00:12:15,380 --> 00:12:21,280 allora ciò significa che argc è essenzialmente la lunghezza di argv, destra, 174 00:12:21,280 --> 00:12:28,970 perché ci saranno molti come argomenti come il valore di argc. 175 00:12:28,970 --> 00:12:35,910 Quindi, se si vuole eseguire iterazioni su ogni elemento di argv, 176 00:12:35,910 --> 00:12:43,290 stiamo andando a voler ogni volta accedere alla variabile in argv in corrispondenza dell'indice specificato. 177 00:12:43,290 --> 00:12:49,060 Che può essere rappresentato con questo, giusto? 178 00:12:49,060 --> 00:12:53,430 Questa variabile qui rappresenta la stringa particolare in questo caso 179 00:12:53,430 --> 00:12:57,030 perché è una matrice di stringhe - la stringa particolare in quel determinato indice. 180 00:12:57,030 --> 00:13:00,690 Quello che vogliamo fare, in questo caso vogliamo stamparlo, quindi diciamo printf. 181 00:13:00,690 --> 00:13:04,680 E ora argv è una stringa, quindi vogliamo mettere quella segnaposto lì. 182 00:13:04,680 --> 00:13:08,430 Vogliamo una nuova linea solo per farlo sembrare buono. 183 00:13:08,430 --> 00:13:12,530 Quindi qui abbiamo un ciclo di. Non abbiamo la condizione ancora. 184 00:13:12,530 --> 00:13:20,020 Così i inizia a 0, e poi ogni volta che sta per stampare la stringa data 185 00:13:20,020 --> 00:13:22,980 in quel particolare indice nella matrice. 186 00:13:22,980 --> 00:13:28,410 Così, quando vogliamo smettere di stampare elementi della matrice? 187 00:13:28,410 --> 00:13:35,720 Quando abbiamo finito, giusto? Quando abbiamo raggiunto la fine della matrice. 188 00:13:35,720 --> 00:13:38,870 Quindi non vogliamo superare oltre la lunghezza della matrice, 189 00:13:38,870 --> 00:13:43,700 e sappiamo già che non è necessario in realtà attivamente scoprire che la lunghezza di argv è 190 00:13:43,700 --> 00:13:47,520 perché è dato a noi, e che cosa è questo? Argc. Esattamente. 191 00:13:47,520 --> 00:13:56,640 Così vogliamo fare questo numero argc processo di volte. 192 00:13:56,640 --> 00:13:59,550 Io non sono nella directory giusta. 193 00:14:02,100 --> 00:14:03,490 Bene. 194 00:14:03,490 --> 00:14:08,990 Ora facciamo args. Nessun errore, che è grande. 195 00:14:08,990 --> 00:14:11,430 Così facciamo solo argomenti esec. 196 00:14:11,430 --> 00:14:15,130 Che cosa è questo andare per tornare a noi? E 'solo andando a stampare di nuovo. 197 00:14:15,130 --> 00:14:18,320 "È immesso args nel programma, io vado a dare di nuovo a voi." 198 00:14:18,320 --> 00:14:23,170 Quindi diciamo che vogliamo dire args allora foo bar. 199 00:14:23,170 --> 00:14:26,570 Così allora esso stampa di nuovo a noi. Va bene? 200 00:14:26,570 --> 00:14:30,790 Quindi c'è un esempio di come si può usare argc e argv 201 00:14:30,790 --> 00:14:33,460 sapendo che argc rappresenta la lunghezza di argv. 202 00:14:33,460 --> 00:14:42,750 Assicurarsi di non fare mai con accesso array uno oltre la lunghezza della matrice 203 00:14:42,750 --> 00:14:45,140 perché C sarà sicuramente gridare contro di voi. 204 00:14:45,140 --> 00:14:47,560 Otterrete qualcosa chiamato un errore di segmentazione, 205 00:14:47,560 --> 00:14:52,470 che non è mai divertente, in pratica dicendo che sta cercando di accedere a qualcosa 206 00:14:52,470 --> 00:14:55,000 che non esiste, non appartiene a voi. 207 00:14:55,000 --> 00:14:59,430 Quindi assicuratevi, e soprattutto con lo zero-indicizzazione, noi non vogliamo - 208 00:14:59,430 --> 00:15:02,390 Come per esempio, se abbiamo un array di lunghezza 4, 209 00:15:02,390 --> 00:15:07,240 che indice di matrice 4 non esiste, perché si parte da 0, a indice zero. 210 00:15:07,240 --> 00:15:11,730 Essa diventerà una seconda natura, proprio come per i cicli quando si iniziano da 0. 211 00:15:11,730 --> 00:15:13,610 Quindi, solo tenere a mente. 212 00:15:13,610 --> 00:15:22,590 Se non si desidera accedere sempre l'indice di un array che è oltre la vostra portata. 213 00:15:26,710 --> 00:15:32,560 Così possiamo vedere ora come possiamo tipo di accesso 214 00:15:32,560 --> 00:15:35,930 gli argomenti della riga di comando che vengono passati trovi 215 00:15:35,930 --> 00:15:41,330 Ma come avete visto la stringa, il argv è in realtà un array di stringhe. 216 00:15:41,330 --> 00:15:45,740 Quindi in realtà non è un numero intero ancora, ma in Cesare vogliamo fare con numeri interi. 217 00:15:45,740 --> 00:15:54,430 Per fortuna, c'è una funzione creata per noi che può effettivamente convertire una stringa in un intero. 218 00:15:54,430 --> 00:15:58,710 Anche qui non abbiamo a che fare con l'input dell'utente in cui li stiamo spingendo 219 00:15:58,710 --> 00:16:03,740 per l'ingresso qui per la chiave, quindi non possiamo effettivamente reprompt e dire, 220 00:16:03,740 --> 00:16:07,840 "Oh, dammi un altro numero intero, ad esempio, se non è valido." 221 00:16:07,840 --> 00:16:10,540 Ma abbiamo ancora bisogno di controllare per l'utilizzo corretto. 222 00:16:10,540 --> 00:16:13,520 In Cesare sono solo permesso di passare in 1 numero, 223 00:16:13,520 --> 00:16:18,030 e quindi devono eseguire. / Cesare e poi devono dare un numero. 224 00:16:18,030 --> 00:16:23,660 Quindi argc deve essere un certo numero. 225 00:16:23,660 --> 00:16:29,060 Quale numero si tratterebbe se devono passare voi il. / Cesare e poi una chiave? 226 00:16:29,060 --> 00:16:32,920 Che cosa è argc? >> [Studente] 2. Due >>. Esattamente. 227 00:16:32,920 --> 00:16:35,490 Così si vuole fare in modo che argc è 2. 228 00:16:35,490 --> 00:16:39,620 In caso contrario, che, fondamentalmente, si rifiutano di eseguire il programma. 229 00:16:39,620 --> 00:16:43,040 In main è una funzione che dice int main, 230 00:16:43,040 --> 00:16:47,360 così poi abbiamo sempre in 0 buone prassi di ritorno al termine di un programma di successo. 231 00:16:47,360 --> 00:16:50,840 Quindi se, per esempio, ti danno 3 argomenti della riga di comando invece di 2 232 00:16:50,840 --> 00:16:54,350 o dare 1, per esempio, allora quello che faremo è si vorrà verificare la presenza di tale 233 00:16:54,350 --> 00:16:59,900 e poi restituire 1 dire, no, non è possibile procedere con questo programma. 234 00:16:59,900 --> 00:17:03,190 [Studente] Non ci può essere uno spazio nel testo. >> Mi scusi? 235 00:17:03,190 --> 00:17:06,780 [Studente] Non ci può essere uno spazio nel testo che si sta cercando di crittografare. 236 00:17:06,780 --> 00:17:08,480 Ah! 237 00:17:08,480 --> 00:17:11,280 Per quanto riguarda il testo che stiamo cercando di crittografare, che proviene in realtà più tardi 238 00:17:11,280 --> 00:17:13,970 quando diamo il testo. 239 00:17:13,970 --> 00:17:18,260 Per ora siamo solo accettare come argomenti del comando il numero effettivo, 240 00:17:18,260 --> 00:17:21,579 lo spostamento effettivo per la crittografia Cesare. 241 00:17:21,579 --> 00:17:27,569 [Studente] Perché avete bisogno di 2 invece di solo 1 argc? C'è sicuramente 1 numero. 242 00:17:27,569 --> 00:17:32,200 Giusto. Il motivo per cui abbiamo bisogno di 2 per argc invece di 1 243 00:17:32,200 --> 00:17:36,260 perché quando si esegue un programma e dire. / Cesare o. / ciao, 244 00:17:36,260 --> 00:17:38,280 che conta in realtà come argomento della riga di comando. 245 00:17:38,280 --> 00:17:43,020 E allora che prende già in 1 e così poi stiamo inserendo 1 extra. 246 00:17:45,030 --> 00:17:49,440 Quindi stai inserendo in realtà una stringa della riga di comando. 247 00:17:49,440 --> 00:17:52,730 Che cosa si vuole fare, per Cesare che vogliamo fare con un numero intero, 248 00:17:52,730 --> 00:17:57,180 in modo da poter utilizzare questa funzione atoi. 249 00:17:57,180 --> 00:18:02,850 E in fondo, si passa in una stringa e poi si ritorna indietro un intero 250 00:18:02,850 --> 00:18:06,070 se è possibile fare la stringa in un intero. 251 00:18:06,070 --> 00:18:10,960 Ora ricordo che quando abbiamo a che fare con le cose printf o GetString, del genere, 252 00:18:10,960 --> 00:18:13,390 includiamo le librerie specifiche per noi. 253 00:18:13,390 --> 00:18:19,450 Così all'inizio si comincia con un hash tag standard di I / O,. H, qualcosa del genere. 254 00:18:19,450 --> 00:18:22,430 Beh, atoi non è in una di queste librerie, 255 00:18:22,430 --> 00:18:26,600 quindi quello che dobbiamo fare è che dobbiamo includere la libreria giusta per questo. 256 00:18:26,600 --> 00:18:32,720 Quindi richiamare indietro Procedura dettagliata 1, dove ho discusso la funzione manuale. 257 00:18:32,720 --> 00:18:37,110 Si digita l'uomo nel vostro terminale e poi seguito dal nome di una funzione. 258 00:18:37,110 --> 00:18:39,720 E così che si apre una lista completa del suo uso, 259 00:18:39,720 --> 00:18:42,890 ma bene, si apre la libreria che appartiene a. 260 00:18:42,890 --> 00:18:47,000 Quindi lascio a voi per utilizzare la funzione manuale con atoi 261 00:18:47,000 --> 00:18:53,360 e capire quale libreria è necessario includere per poter utilizzare la funzione atoi. 262 00:18:54,450 --> 00:18:57,670 Quindi abbiamo la chiave e ora si tratta di ottenere il testo in chiaro, 263 00:18:57,670 --> 00:19:01,820 e così che in realtà sta per essere l'input dell'utente in cui si richiede. 264 00:19:01,820 --> 00:19:05,540 Abbiamo trattato con GetInt e getFloat, e quindi con lo stesso spirito 265 00:19:05,540 --> 00:19:07,670 stiamo andando a che fare con GetString. 266 00:19:07,670 --> 00:19:12,440 Ma in questo caso non abbiamo bisogno di fare qualsiasi do while o while per controllare. 267 00:19:12,440 --> 00:19:14,480 GetString sicuramente ci darà una stringa, 268 00:19:14,480 --> 00:19:17,630 e stiamo andando a crittografare ciò che l'utente ci dà. 269 00:19:17,630 --> 00:19:23,770 Così si può supporre che tutte queste stringhe utente immessi siano corretti. 270 00:19:23,770 --> 00:19:24,670 Grande. 271 00:19:24,670 --> 00:19:27,270 Allora una volta che hai la chiave e una volta che hai il testo, 272 00:19:27,270 --> 00:19:31,660 ora quello che rimane è che bisogna cifrare il testo in chiaro. 273 00:19:31,660 --> 00:19:36,530 Giusto per coprire rapidamente sul linguaggio, il testo in chiaro è ciò che l'utente ti dà, 274 00:19:36,530 --> 00:19:41,030 e il testo cifrato è quello che si torna a loro. 275 00:19:42,450 --> 00:19:45,850 Così stringhe, per essere in grado di passare attraverso effettivamente lettera per lettera 276 00:19:45,850 --> 00:19:48,550 perché dobbiamo spostare ogni lettera, 277 00:19:48,550 --> 00:19:51,390 abbiamo capito che le stringhe, se abbiamo tipo staccare la strato, 278 00:19:51,390 --> 00:19:54,130 si vede che sono solo davvero un elenco di caratteri. 279 00:19:54,130 --> 00:19:55,930 Uno viene dopo l'altra. 280 00:19:55,930 --> 00:20:01,690 E così siamo in grado di trattare le stringhe come array, poiché sono array di caratteri. 281 00:20:01,690 --> 00:20:05,640 Allora supponiamo di avere una stringa denominata di testo, 282 00:20:05,640 --> 00:20:09,400 e all'interno di tale testo variabile viene memorizzata Questo è CS50. 283 00:20:09,400 --> 00:20:15,680 Poi il testo in corrispondenza dell'indice 0 sarebbe una T maiuscola, indice 1 sarebbe h, ecc 284 00:20:17,530 --> 00:20:23,970 E poi con gli array, nell'esempio argc in args.c, 285 00:20:23,970 --> 00:20:27,090 abbiamo visto che abbiamo dovuto scorrere un array 286 00:20:27,090 --> 00:20:32,440 e quindi abbiamo dovuto scorrere i = da 0 fino i è inferiore alla lunghezza. 287 00:20:32,440 --> 00:20:35,560 Quindi abbiamo bisogno di un modo di capire quale sia la lunghezza della nostra stringa è 288 00:20:35,560 --> 00:20:37,090 se andiamo a scorrere su di esso. 289 00:20:37,090 --> 00:20:42,300 Per fortuna ancora una volta, c'è una funzione lì per noi, anche se più tardi nel CS50 290 00:20:42,300 --> 00:20:45,860 sarete sicuramente in grado di implementare e rendere la propria funzione 291 00:20:45,860 --> 00:20:48,260 che può calcolare la lunghezza di una stringa. 292 00:20:48,260 --> 00:20:52,120 Ma per ora stiamo andando a utilizzare la lunghezza della stringa, così strlen. 293 00:20:52,120 --> 00:21:00,440 Si passa in una stringa, e poi si ritorna un int che rappresenta la lunghezza della stringa. 294 00:21:00,440 --> 00:21:05,840 Vediamo un esempio di come potremmo essere in grado di eseguire iterazioni su ogni carattere in una stringa 295 00:21:05,840 --> 00:21:08,470 e fare qualcosa con quello. 296 00:21:08,470 --> 00:21:13,250 Quello che vogliamo fare è iterare su ogni carattere della stringa, 297 00:21:13,250 --> 00:21:19,150 e quello che vogliamo fare è che ogni carattere stampa indietro 1 di 1 298 00:21:19,150 --> 00:21:22,060 tranne che aggiungere qualcosa accanto ad essa. 299 00:21:22,060 --> 00:21:27,020 Quindi partiamo con il ciclo for. Int i = 0. 300 00:21:27,020 --> 00:21:30,070 Stiamo per lasciare spazio per la condizione. 301 00:21:32,700 --> 00:21:36,840 Vogliamo ripetere fino a raggiungere la fine della stringa, giusto? 302 00:21:36,840 --> 00:21:41,340 E allora quale funzione ci dà la lunghezza della stringa? 303 00:21:41,340 --> 00:21:43,160 [Risposta degli studenti incomprensibile] 304 00:21:43,160 --> 00:21:46,420 Questa è la lunghezza degli argomenti della riga di comando. 305 00:21:46,420 --> 00:21:50,650 Ma per una stringa che vogliamo utilizzare una funzione che ci dà la lunghezza della stringa. 306 00:21:50,650 --> 00:21:53,090 Ecco, questo è la lunghezza della stringa. 307 00:21:53,090 --> 00:21:57,130 E così poi si deve passare una stringa ad esso. 308 00:21:57,130 --> 00:21:59,760 Si ha bisogno di sapere la stringa di cui ha bisogno per calcolare la lunghezza di. 309 00:21:59,760 --> 00:22:03,160 E allora, in questo caso abbiamo a che fare con la stringa s. 310 00:22:04,790 --> 00:22:05,860 Grande. 311 00:22:05,860 --> 00:22:10,770 E allora cosa vogliamo fare, cerchiamo di printf. 312 00:22:10,770 --> 00:22:14,850 Ora, vogliamo affrontare con i caratteri. Vogliamo stampare ogni singolo carattere. 313 00:22:14,850 --> 00:22:22,150 Quando si desidera stampare un galleggiante, è necessario utilizzare il segnaposto come% f. 314 00:22:22,150 --> 00:22:24,580 Con un int si usa% d. 315 00:22:24,580 --> 00:22:30,890 E così allo stesso modo, con un carattere% c si utilizza per dire ho intenzione di essere la stampa di un carattere 316 00:22:30,890 --> 00:22:34,570 che viene memorizzato all'interno di una variabile. 317 00:22:34,570 --> 00:22:40,840 Quindi abbiamo questo, e andiamo ad aggiungere un punto e uno spazio ad esso. 318 00:22:40,840 --> 00:22:45,430 Quale personaggio stiamo usando? 319 00:22:45,430 --> 00:22:49,780 Stiamo per essere utilizzando qualsiasi personaggio che ci siamo della stringa. 320 00:22:49,780 --> 00:22:52,890 Allora abbiamo intenzione di utilizzare qualcosa con lo spago, 321 00:22:52,890 --> 00:22:56,420 ma vogliamo essere l'accesso il carattere certo lì. 322 00:22:56,420 --> 00:23:02,740 Quindi, se una stringa è solo un array, allora come possiamo accedere agli elementi di array? 323 00:23:02,740 --> 00:23:06,480 Abbiamo le parentesi quadre, e poi abbiamo messo l'indice in là. 324 00:23:06,480 --> 00:23:11,820 Quindi abbiamo parentesi quadre. Il nostro indice in questo caso si può semplicemente utilizzare i. Esattamente. 325 00:23:15,290 --> 00:23:22,370 Quindi qui stiamo dicendo che sta andando ad essere la stampa di un carattere seguito da un punto e uno spazio, 326 00:23:22,370 --> 00:23:30,870 e quel personaggio sta per essere la lettera i-esimo nella nostra stringa s. 327 00:23:32,920 --> 00:23:39,330 Sto solo andando a salvare questo. Va bene. 328 00:23:42,510 --> 00:23:46,840 Ora sto andando a correre la lunghezza della stringa. 329 00:23:46,840 --> 00:23:53,440 Così abbiamo avuto una stringa denominata OMG, e ora è sottolineato ancora di più. 330 00:23:53,440 --> 00:23:57,870 Allo stesso modo, diciamo che in realtà vuole ottenere una stringa da parte dell'utente. 331 00:23:57,870 --> 00:23:59,580 Come possiamo fare questo? 332 00:23:59,580 --> 00:24:01,610 Prima, come siamo arrivati ​​un int? 333 00:24:01,610 --> 00:24:08,040 Abbiamo detto GetInt, giusto? Ma questo non è di tipo int, quindi cerchiamo di GetString. 334 00:24:11,780 --> 00:24:17,770 Facciamo in modo che la lunghezza della stringa. Qui non hai inserito una richiesta specifica. 335 00:24:17,770 --> 00:24:19,940 Quindi non lo so. 336 00:24:19,940 --> 00:24:23,820 Ho intenzione di mettere il mio nome qui e così poi posso fare una di quelle cose 337 00:24:23,820 --> 00:24:29,600 dove ho assegnare una parola per ogni lettera o qualcosa del genere. Cool. 338 00:24:29,600 --> 00:24:31,900 Ecco, questo è la lunghezza della stringa. 339 00:24:33,000 --> 00:24:34,640 Così siamo tornati a Cesare. 340 00:24:34,640 --> 00:24:38,620 Abbiamo un paio di strumenti su come possiamo iterare su una stringa, 341 00:24:38,620 --> 00:24:41,250 il modo in cui accedere a ciascun singolo elemento. 342 00:24:41,250 --> 00:24:44,720 Così ora possiamo tornare al programma. 343 00:24:44,720 --> 00:24:48,650 Come ho detto prima, nella tabella ASCII, il tuo migliore amico, 344 00:24:48,650 --> 00:24:52,300 si sta andando a vedere i numeri che sono associati con ogni lettera. 345 00:24:52,300 --> 00:24:55,900 Ecco quindi dire che il nostro testo in chiaro è che io sono stordito! 346 00:24:55,900 --> 00:25:01,090 Poi ognuno di questi caratteri avrà un numero e valore ASCII associato, 347 00:25:01,090 --> 00:25:04,710 anche l'apostrofo, anche lo spazio, anche il punto esclamativo, 348 00:25:04,710 --> 00:25:06,600 quindi ti consigliamo di tenere a mente. 349 00:25:06,600 --> 00:25:12,360 Quindi dire che la nostra chiave che l'utente incluso nel loro argomentazione linea di comando è 6. 350 00:25:12,360 --> 00:25:17,770 Questo significa che per la prima lettera, che è, che è rappresentato da 73, 351 00:25:17,770 --> 00:25:25,610 si desidera tornare a loro tutto ciò che lettera è rappresentato dal valore ASCII di 73 + 6. 352 00:25:25,610 --> 00:25:29,020 In questo caso sarebbe 79. 353 00:25:30,840 --> 00:25:35,040 Ora vogliamo andare al carattere successivo. 354 00:25:35,040 --> 00:25:40,960 Così la prossima indice 1 del testo in chiaro sarebbe l'apostrofo. 355 00:25:40,960 --> 00:25:46,780 Ma ricordate vogliamo solo per cifrare le lettere. 356 00:25:46,780 --> 00:25:50,040 Quindi vogliamo fare in modo che l'apostrofo rimane in realtà lo stesso, 357 00:25:50,040 --> 00:25:54,310 che non cambia da 39 a 45 è tutto ciò. 358 00:25:54,310 --> 00:25:57,150 Vogliamo tenerlo come un apostrofo. 359 00:25:57,150 --> 00:26:00,780 Così vogliamo ricordare per cifrare solo le lettere 360 00:26:00,780 --> 00:26:04,560 perché vogliamo che tutti gli altri simboli rimanere invariato nel nostro programma. 361 00:26:04,560 --> 00:26:07,130 Un'altra cosa che vogliamo è quello di preservare la capitalizzazione. 362 00:26:07,130 --> 00:26:10,250 Così, quando si ha una lettera maiuscola, dovrebbe rimanere come maiuscolo. 363 00:26:10,250 --> 00:26:12,830 Lowercases dovrebbe rimanere in minuscolo. 364 00:26:13,620 --> 00:26:19,480 Quindi, alcune funzioni utili per essere in grado di affrontare solo lettere cifratura 365 00:26:19,480 --> 00:26:22,380 mantenere e preservare la capitalizzazione delle cose 366 00:26:22,380 --> 00:26:25,130 sia le funzioni islower isalpha, isupper,. 367 00:26:25,130 --> 00:26:29,270 E così queste sono funzioni che restituiscono un valore booleano. 368 00:26:29,270 --> 00:26:34,180 In sostanza, vero o falso. Si tratta di un maiuscolo? E `la alfanumerico? 369 00:26:34,180 --> 00:26:37,180 Si tratta di una lettera, in sostanza. 370 00:26:37,180 --> 00:26:41,070 Così qui sono 3 esempi di come si usa tale funzione. 371 00:26:41,070 --> 00:26:47,060 In sostanza, si potrebbe verificare se il valore restituito da tale funzione è vera o falsa 372 00:26:47,060 --> 00:26:49,400 sulla base di tale ingresso. 373 00:26:49,400 --> 00:26:54,880 O fare qualcosa di non cifrare o cifrare esso o fare in modo che sia maiuscolo, ecc 374 00:26:54,880 --> 00:27:01,080 [Studente] Si può solo spiegare quelli un po 'di più e come si utilizzano? >> Si ', di sicuro. 375 00:27:01,080 --> 00:27:08,470 Quindi, se ci guardiamo indietro, qui abbiamo un capitale che, giusto? 376 00:27:08,470 --> 00:27:14,550 Così sappiamo che va a O perché ho + 6 è O. 377 00:27:14,550 --> 00:27:18,740 Ma noi vogliamo fare in modo che che O sta per essere una capitale O. 378 00:27:18,740 --> 00:27:22,940 Quindi, fondamentalmente, che è una specie di andare a cambiare il nostro contributo. 379 00:27:22,940 --> 00:27:26,870 Quindi, se è maiuscolo o no tipo di cambiare il modo in cui abbiamo a che fare con esso. 380 00:27:26,870 --> 00:27:32,360 Allora, se si utilizza la funzione isupper su quel particolare indice, 381 00:27:32,360 --> 00:27:36,480 così isupper ("I"), che restituisce true per noi, quindi sappiamo che è superiore. 382 00:27:36,480 --> 00:27:40,360 Quindi in base a questo, poi andremo in una formula 383 00:27:40,360 --> 00:27:42,750 che ti verrà utilizzato per spostare le cose a Cesare, 384 00:27:42,750 --> 00:27:46,560 così poi in fondo, ci sarà una formula leggermente diversa se si tratta di lettere maiuscole 385 00:27:46,560 --> 00:27:50,670 al contrario in minuscolo. Ha senso? 386 00:27:51,020 --> 00:27:52,760 Gia '. Nessun problema. 387 00:27:54,900 --> 00:27:58,990 Ho parlato un po 'di aggiungere 6 a una lettera, che non ha molto senso 388 00:27:58,990 --> 00:28:05,500 tranne quando abbiamo tipo di capire che questi personaggi 389 00:28:05,500 --> 00:28:08,920 sono un po 'intercambiabili con numeri interi. 390 00:28:08,920 --> 00:28:11,250 Quello che facciamo noi è una specie di fusione uso implicito. 391 00:28:11,250 --> 00:28:18,100 Andremo in fusione un po 'più avanti dove si prende un valore e si trasformano in un diverso tipo 392 00:28:18,100 --> 00:28:20,440 di quanto non lo era in origine. 393 00:28:20,440 --> 00:28:25,910 Ma con questo pset saremo in grado di utilizzare in modo intercambiabile tipo di caratteri 394 00:28:25,910 --> 00:28:30,880 ed i loro corrispondenti valori interi. 395 00:28:30,880 --> 00:28:35,140 Quindi, se è sufficiente racchiudere un personaggio con solo le virgolette singole, 396 00:28:35,140 --> 00:28:40,390 allora sarete in grado di lavorare con con numeri interi, trattandola come un numero intero. 397 00:28:40,390 --> 00:28:48,040 Così il capitale C riferisce a 67. F minuscola si riferisce a 102. 398 00:28:48,040 --> 00:28:51,480 Anche in questo caso, se si vuole conoscere questi valori, guarda la tua tabella ASCII. 399 00:28:51,480 --> 00:28:56,160 Quindi cerchiamo di andare in alcuni esempi di come si potrebbe essere in grado di sottrarre e aggiungere, 400 00:28:56,160 --> 00:29:03,130 come si può effettivamente veramente lavorare con questi personaggi, sono intercambiabili. 401 00:29:03,870 --> 00:29:11,350 Dico che ASCIIMath sta per calcolare l'aggiunta di un carattere per un intero 402 00:29:11,350 --> 00:29:17,590 e quindi visualizza il carattere risultante così come il valore risultante ASCII. 403 00:29:17,590 --> 00:29:22,290 Ed ecco che sto dicendo - we'll accordo con questa parte in seguito - 404 00:29:22,290 --> 00:29:29,100 ma in fondo, sto dicendo che l'utente dovrebbe dire ASCIIMath correre lungo con una chiave, 405 00:29:29,100 --> 00:29:30,880 e io sto dicendo che la chiave sta per essere il numero 406 00:29:30,880 --> 00:29:34,600 con la quale abbiamo intenzione di aggiungere questo personaggio. 407 00:29:34,600 --> 00:29:38,560 Così qui notare che dato che sto chiedendo una chiave, 408 00:29:38,560 --> 00:29:40,590 dal momento che sto chiedendo che mi stanno dando 1 cosa, 409 00:29:40,590 --> 00:29:45,600 Voglio solo accettare. / Asciimath e una chiave. 410 00:29:45,600 --> 00:29:49,330 Quindi ho intenzione di chiedere che argc è pari a 2. 411 00:29:49,330 --> 00:29:54,360 Se non lo è, quindi ho intenzione di restituire 1 e il programma si chiude. 412 00:29:55,070 --> 00:29:58,540 Così sto dicendo che la chiave non sta andando essere il primo argomento della riga di comando, 413 00:29:58,540 --> 00:30:05,080 sta andando essere il secondo, e come potete vedere qui, 414 00:30:05,080 --> 00:30:11,790 Ho intenzione di trasformarla in un numero intero. 415 00:30:15,740 --> 00:30:19,230 Poi ho intenzione di impostare un carattere per essere r. 416 00:30:19,230 --> 00:30:23,970 Si noti che il tipo della variabile chr è in realtà un intero. 417 00:30:23,970 --> 00:30:30,480 Il modo in cui sono in grado di utilizzare r come un intero è intrappolandolo con le virgolette singole. 418 00:30:33,850 --> 00:30:40,560 Ma torniamo al nostro printf dove abbiamo un segnaposto per un carattere 419 00:30:40,560 --> 00:30:43,590 e poi un segnaposto per un numero intero, 420 00:30:43,590 --> 00:30:49,450 il carattere è rappresentato dalla CHR, e l'intero è la chiave. 421 00:30:49,450 --> 00:30:54,320 E così poi abbiamo intenzione di aggiungere in seguito il 2 insieme. 422 00:30:54,320 --> 00:30:58,420 Quindi stiamo andando ad aggiungere r + qualunque sia la chiave è, 423 00:30:58,420 --> 00:31:03,520 e poi andremo a stampare il risultato di questo. 424 00:31:06,210 --> 00:31:14,220 Quindi cerchiamo di fare asciimath. E 'aggiornato, quindi cerchiamo di appena eseguito asciimath. 425 00:31:14,220 --> 00:31:18,290 Oh, ma vedi, non fa nulla, perché non abbiamo in realtà dare una chiave. 426 00:31:18,290 --> 00:31:23,850 Così, quando è appena tornato 1, la nostra funzione principale, è appena tornato di nuovo a noi. 427 00:31:23,850 --> 00:31:29,250 Allora passiamo in una chiave. Qualcuno mi dia un numero. >> [Studente] 4. 428 00:31:29,250 --> 00:31:30,920 4. Va bene. 429 00:31:30,920 --> 00:31:39,280 Così r un incremento del 4 sta per darci v, che corrisponde al valore ASCII di 118. 430 00:31:39,280 --> 00:31:43,880 Allora che tipo di senso che - 431 00:31:43,880 --> 00:31:51,250 In realtà, posso chiederti, cosa ne pensa il valore ASCII di r è se r + 4 è il 118? 432 00:31:53,070 --> 00:31:55,470 Quindi sì, r è 114. 433 00:31:55,470 --> 00:32:03,010 Quindi, se si guarda la tabella ASCII poi, di sicuro, vedrai che r è rappresentata da 114. 434 00:32:03,010 --> 00:32:08,610 Quindi, ora che sappiamo che possiamo aggiungere interi a personaggi, questo sembra abbastanza semplice. 435 00:32:08,610 --> 00:32:12,740 Stiamo solo andando a scorrere una stringa come abbiamo visto in un esempio prima. 436 00:32:12,740 --> 00:32:17,170 Ci verificare se si tratta di una lettera. 437 00:32:17,170 --> 00:32:20,420 Se lo è, allora noi lo spostamento con qualsiasi la chiave è. 438 00:32:20,420 --> 00:32:23,650 Abbastanza semplice, tranne quando si arriva a come questo, 439 00:32:23,650 --> 00:32:32,140 si vede che z, rappresentato da 122, poi vuoi dare un carattere diverso. 440 00:32:32,140 --> 00:32:37,770 In realtà vuole rimanere all'interno della nostra alfabeto, giusto? 441 00:32:37,770 --> 00:32:43,180 Quindi abbiamo bisogno di capire il modo di tipo di avvolgimento intorno. 442 00:32:43,180 --> 00:32:47,190 Quando si raggiunge zed e si vuole aumentare di un certo numero, 443 00:32:47,190 --> 00:32:51,230 non si vuole andare al di là nella sezione alfabeto ASCII; 444 00:32:51,230 --> 00:32:54,140 si vuole avvolgere indietro fino ad A. 445 00:32:54,140 --> 00:32:58,550 Ma tenete a mente che stai conserva ancora il caso. 446 00:32:58,550 --> 00:33:00,980 Quindi, sapendo che le lettere non possono diventare simboli 447 00:33:00,980 --> 00:33:05,290 proprio come simboli non saranno cambiando. 448 00:33:05,290 --> 00:33:08,170 Nel pset ultimo sicuramente non ha bisogno di, 449 00:33:08,170 --> 00:33:14,310 ma l'opzione era quella di implementare il pset avido utilizzando la funzione modulo. 450 00:33:14,310 --> 00:33:17,230 Ma ora stiamo effettivamente andando ad avere bisogno di utilizzare modulo, 451 00:33:17,230 --> 00:33:19,900 quindi cerchiamo di basta andare su questo un po '. 452 00:33:19,900 --> 00:33:26,920 In sostanza, quando si ha x modulo y, che ti dà il resto di x diviso per y. 453 00:33:26,920 --> 00:33:30,930 Ecco alcuni esempi qui. Abbiamo il 27% 15. 454 00:33:30,930 --> 00:33:36,200 Fondamentalmente, quando si sottrae 15 da 27 come numero di volte possibile senza ottenere negativo 455 00:33:36,200 --> 00:33:39,060 quindi si ottiene 12 sinistra sopra. 456 00:33:39,060 --> 00:33:44,650 Ecco, questo è un po 'come nel contesto matematica, ma come possiamo effettivamente utilizzare questo? 457 00:33:44,650 --> 00:33:47,100 E 'intenzione di essere utile per la nostra vestaglia. 458 00:33:47,100 --> 00:33:55,420 Per questo, diciamo solo che ho chiesto a tutti voi di dividere in 3 gruppi. 459 00:33:55,420 --> 00:33:58,010 A volte si esegue questa operazione in gruppo e qualcosa del genere. 460 00:33:58,010 --> 00:34:01,320 Dire ho detto: "Ok, voglio che tutti voi di essere diviso in 3." 461 00:34:01,320 --> 00:34:04,240 In che modo hai fatto? 462 00:34:04,240 --> 00:34:06,810 [Risposta degli studenti incomprensibile] Sì, esattamente. Contare. Va bene. 463 00:34:06,810 --> 00:34:10,260 Facciamo darsi da fare. Vuoi cominciare? 464 00:34:10,260 --> 00:34:13,810 [Studenti contando] 1, 2, 3, 4. 465 00:34:13,810 --> 00:34:16,620 Ma ricorda ... >> [Studente] Oh, mi dispiace. 466 00:34:16,620 --> 00:34:18,730 Questo è un punto davvero buona. 467 00:34:18,730 --> 00:34:24,130 Hai detto 4, ma in realtà voglio che tu dica 1 perché vogliamo solo 3 gruppi. 468 00:34:24,130 --> 00:34:30,159 Allora, come - No, questo è un esempio molto buono, perché allora come potrebbe dire 1? 469 00:34:30,159 --> 00:34:33,370 Qual è il rapporto tra il 4 e 1? 470 00:34:33,370 --> 00:34:36,760 Beh, 4 mod 3 è 1. 471 00:34:36,760 --> 00:34:41,460 Quindi, se si continua, si sarebbe 2. 472 00:34:41,460 --> 00:34:44,540 Così abbiamo 1, 2, 3, 1, 2. 473 00:34:44,540 --> 00:34:49,420 Anche in questo caso, si è in realtà la 5 ° persona. Come fai a sapere dire 2 invece di 5? 474 00:34:49,420 --> 00:34:53,760 Tu dici 5 mod 3 è 2. 475 00:34:53,760 --> 00:34:59,100 Voglio vedere quanti gruppi di 3 sono rimasti, poi che ordine sono io 476 00:34:59,100 --> 00:35:02,860 E così se poi abbiamo proseguito lungo tutta la stanza, 477 00:35:02,860 --> 00:35:07,760 allora si vedrebbe che siamo sempre di applicare la funzione mod a noi stessi 478 00:35:07,760 --> 00:35:09,990 contare tipo di off. 479 00:35:09,990 --> 00:35:14,490 Questo è un genere più di esempio tangibile di come è possibile utilizzare modulo 480 00:35:14,490 --> 00:35:17,960 perché sono sicuro che molti di noi hanno probabilmente vissuto quel processo 481 00:35:17,960 --> 00:35:19,630 dove abbiamo dovuto contare fuori. 482 00:35:19,630 --> 00:35:21,840 Hai domande su modulo? 483 00:35:21,840 --> 00:35:25,360 Sarà molto importante capire i concetti di questo, 484 00:35:25,360 --> 00:35:28,640 quindi voglio fare in modo che voi ragazzi capire. 485 00:35:28,640 --> 00:35:34,660 [Studente] Se non c'è resto, non ti dà il numero effettivo? 486 00:35:34,660 --> 00:35:40,430 Se uno dei primi 3 di loro aveva fatto, avrebbe dato loro ciò che in realtà erano, 487 00:35:40,430 --> 00:35:43,310 o sarebbe dato loro [incomprensibile] >> E 'una buona domanda. 488 00:35:43,310 --> 00:35:48,750 Quando non c'è resto per il modulo - in modo che si dispone di 6 mod 3 - 489 00:35:48,750 --> 00:35:52,340 che dà effettivamente si torna 0. 490 00:35:53,670 --> 00:35:57,290 Noi parleremo un po 'più tardi. 491 00:35:58,810 --> 00:36:07,720 Oh sì, per esempio, la 3 ª persona - 3 mod 3 è 0, ma in realtà ha detto 3. 492 00:36:07,720 --> 00:36:14,900 Ecco, questo è un po 'come un fermo interno, per esempio, 493 00:36:14,900 --> 00:36:17,620 come va bene, se il mod è a 0, poi ho intenzione di essere la 3 ° persona. 494 00:36:17,620 --> 00:36:22,740 Ma ci arriveremo in genere di come potremmo avere a che fare con ciò che 0 è tardi. 495 00:36:22,740 --> 00:36:32,750 Così ora abbiamo in qualche modo hanno un modo di mappatura del Zed alla lettera destra. 496 00:36:32,750 --> 00:36:34,920 Quindi, ora che abbiamo passato questi esempi, 497 00:36:34,920 --> 00:36:37,880 che tipo di vedere come Cesare potrebbe funzionare. 498 00:36:37,880 --> 00:36:42,640 Vedete i 2 alfabeti e poi li vedi spostamento. 499 00:36:42,640 --> 00:36:44,430 Quindi cerchiamo di esprimere che in termini di formula. 500 00:36:44,430 --> 00:36:46,940 Questa formula è in realtà dato a voi nelle specifiche, 501 00:36:46,940 --> 00:36:52,070 ma cerchiamo di tipo di sguardo attraverso ciò che ogni variabile significa. 502 00:36:52,070 --> 00:36:55,000 Il risultato finale sarà il testo cifrato. 503 00:36:55,000 --> 00:36:58,300 Quindi, questo dice che il carattere i-esimo del testo cifrato 504 00:36:58,300 --> 00:37:02,500 sta per corrispondere al carattere esimo del testo in chiaro. 505 00:37:02,500 --> 00:37:08,130 Questo ha senso perché vogliamo essere sempre in fila queste cose. 506 00:37:08,130 --> 00:37:13,480 Quindi sarà il carattere i-esimo del testo cifrato più k, che è la nostra chiave - 507 00:37:13,480 --> 00:37:17,230 che abbia un senso - e poi abbiamo questo mod 26. 508 00:37:17,230 --> 00:37:19,860 Ricordate indietro quando abbiamo avuto la zed 509 00:37:19,860 --> 00:37:24,190 non volevamo entrare nel personaggio, così abbiamo deciso di mod che 510 00:37:24,190 --> 00:37:26,540 e tipo di avvolgono l'alfabeto. 511 00:37:26,540 --> 00:37:33,430 Dopo zed si dovrebbe andare ad a, b, c, d, fino a che non ha ottenuto il giusto numero. 512 00:37:33,430 --> 00:37:44,690 Così sappiamo che zed, se + 6, ci darebbe f perché dopo zed arriva a, b, c, d, e, f. 513 00:37:44,690 --> 00:37:52,530 Quindi ricordiamoci che sappiamo per certo che Zed + 6 sta per darci f. 514 00:37:52,530 --> 00:38:03,530 In valori ASCII, z è 122 e f è di 102. 515 00:38:03,530 --> 00:38:10,570 Quindi dobbiamo trovare il modo di rendere la nostra formula di Cesare ci danno 102 516 00:38:10,570 --> 00:38:13,590 dopo aver preso in 122. 517 00:38:13,590 --> 00:38:19,550 Quindi, se abbiamo appena applicare questa formula, il ('z' + 6)% 26, che dà effettivamente voi 24 518 00:38:19,550 --> 00:38:25,980 perché 122 + 6 è 128, 128% 26 vi dà 24 resto. 519 00:38:25,980 --> 00:38:29,140 Ma questo non vuol dire f. Questo non è assolutamente 102. 520 00:38:29,140 --> 00:38:33,590 Non è anche la lettera 6 ° dell'alfabeto. 521 00:38:33,590 --> 00:38:41,550 Così, ovviamente, abbiamo bisogno di avere un modo di impostare questo un po '. 522 00:38:42,970 --> 00:38:51,340 In termini dell'alfabeto regolare, sappiamo che z è la lettera f è 26 e il sesto. 523 00:38:51,340 --> 00:38:55,460 Ma siamo in informatica, quindi stiamo andando a indice a 0. 524 00:38:55,460 --> 00:39:00,690 Allora, invece di z è il numero 26, che andremo a dire che è il numero 25 525 00:39:00,690 --> 00:39:02,630 perché a è 0. 526 00:39:02,630 --> 00:39:04,770 Ora cerchiamo di applicare questa formula. 527 00:39:04,770 --> 00:39:11,710 Abbiamo z rappresentato da 25 + 6, che vi dà 31. 528 00:39:11,710 --> 00:39:15,790 E 31 mod 26 ti dà 5 come un resto. 529 00:39:15,790 --> 00:39:20,500 E 'perfetto perché sappiamo che f è la 5 ° lettera dell'alfabeto. 530 00:39:20,500 --> 00:39:26,400 Ma ancora non è f, giusto? E ancora non è 102. 531 00:39:26,400 --> 00:39:32,730 E allora per questo pset, una sfida sarà cercare di scoprire il rapporto 532 00:39:32,730 --> 00:39:36,910 tra la conversione tra questi valori ASCII e l'indice alfabetico. 533 00:39:36,910 --> 00:39:40,280 In sostanza, quello che si vorrà fare, si vuole iniziare con i valori ASCII, 534 00:39:40,280 --> 00:39:45,390 ma poi si desidera tradurre in qualche modo che in un indice alfabetico 535 00:39:45,390 --> 00:39:52,610 quindi calcolare che cosa lettera che dovrebbe essere - in fondo, qual è il suo indice alfabetico è 536 00:39:52,610 --> 00:39:57,660 del personaggio cifrario - poi tradurre che torna ai valori ASCII. 537 00:39:57,660 --> 00:40:04,870 Quindi, se tirate fuori il vostro tabella ASCII, quindi cercare di trovare le relazioni tra, diciamo, 102 e 5 538 00:40:04,870 --> 00:40:10,440 o il 122 e 25. 539 00:40:12,140 --> 00:40:15,690 Abbiamo ottenuto la nostra chiave di argomenti della riga di comando, abbiamo ottenuto il testo in chiaro, 540 00:40:15,690 --> 00:40:17,520 l'abbiamo cifrato. 541 00:40:17,520 --> 00:40:19,820 Ora non ci resta da fare è stamparlo. 542 00:40:19,820 --> 00:40:22,040 Potremmo fare questo un paio di modi diversi. 543 00:40:22,040 --> 00:40:24,570 Che cosa si potrebbe fare è in realtà la stampa come andiamo avanti. 544 00:40:24,570 --> 00:40:28,250 Come scorrere i caratteri della stringa, 545 00:40:28,250 --> 00:40:31,660 potremmo semplicemente stampare a destra e poi quando calcolarla. 546 00:40:31,660 --> 00:40:36,030 In alternativa, è possibile anche memorizzare in un array e hanno una serie di caratteri 547 00:40:36,030 --> 00:40:39,280 e alla fine scorrere tale matrice intera e stamparlo. 548 00:40:39,280 --> 00:40:40,980 In modo da avere un paio di opzioni per questo. 549 00:40:40,980 --> 00:40:47,280 E ricordate che% c sarà il segnaposto per la stampa di un carattere. 550 00:40:47,280 --> 00:40:50,420 Così ci abbiamo Cesare, e ora si passa alla Vigenère, 551 00:40:50,420 --> 00:40:57,580 che è molto simile a Cesare ma solo leggermente più complessa. 552 00:40:57,580 --> 00:41:03,310 Quindi, in sostanza, con Vigenère sta si sta andando a passare in una parola chiave. 553 00:41:03,310 --> 00:41:06,510 Così, invece di un numero, si sta andando ad avere una stringa, 554 00:41:06,510 --> 00:41:09,200 e così che sta andando ad agire come la parola chiave. 555 00:41:09,200 --> 00:41:14,440 Poi, come al solito, si sta andando per ottenere un prompt per una stringa da parte dell'utente 556 00:41:14,440 --> 00:41:19,050 e poi cifrare e poi dare loro la schiena testo cifrato. 557 00:41:19,050 --> 00:41:24,650 Così come ho detto, è molto simile a Cesare, solo che invece di spostare da un certo numero, 558 00:41:24,650 --> 00:41:30,620 il numero è in realtà sta per cambiare ogni volta da un personaggio all'altro. 559 00:41:30,620 --> 00:41:34,890 Per rappresentare il numero effettivo di spostare, è rappresentato dalle lettere tastiera. 560 00:41:34,890 --> 00:41:43,150 Quindi, se si entra in uno spostamento di, per esempio, allora, che corrisponde ad uno spostamento di 0. 561 00:41:43,150 --> 00:41:45,900 Quindi è ancora una volta torna all'indice alfabetico. 562 00:41:45,900 --> 00:41:49,100 Ciò che potrebbe essere utile se si sta vedendo che siamo in realtà in gioco valori ASCII 563 00:41:49,100 --> 00:41:51,790 nonché le lettere, nonché l'indice alfabetico, 564 00:41:51,790 --> 00:41:58,020 magari trovare o fare il vostro tavolo ASCII che mostra l'indice alfabetico di 0 a 25, 565 00:41:58,020 --> 00:42:03,750 dalla a alla z, e i valori ASCII in modo da poter vedere il tipo di rapporto 566 00:42:03,750 --> 00:42:07,020 e disegnare fuori e cercare di trovare alcuni modelli. 567 00:42:07,020 --> 00:42:11,010 Allo stesso modo, se si stavano spostando su istanza certo da f - 568 00:42:11,010 --> 00:42:21,110 e questo è sia f minuscolo o maiuscolo - allora che corrisponderebbe a 5. 569 00:42:21,110 --> 00:42:24,180 Siamo a posto fino ad ora? 570 00:42:25,770 --> 00:42:30,050 La formula per Vigenère è un po 'diverso. 571 00:42:30,050 --> 00:42:32,960 In pratica, si vede che è proprio come Cesare, 572 00:42:32,960 --> 00:42:37,390 salvo invece di k abbiamo indice k j. 573 00:42:37,390 --> 00:42:44,810 Si noti che non stiamo usando i perché essenzialmente, la lunghezza della parola chiave 574 00:42:44,810 --> 00:42:49,850 non è necessariamente la lunghezza del nostro testo cifrato. 575 00:42:49,850 --> 00:42:56,130 Questo sarà un po 'più chiaro quando vediamo un esempio che ho un po' più avanti. 576 00:42:56,130 --> 00:43:03,160 In sostanza, se si esegue il programma con una parola chiave di ohai, 577 00:43:03,160 --> 00:43:08,560 poi che significa che ogni volta, ohai sarà il tuo turno. 578 00:43:08,560 --> 00:43:11,060 Quindi, a seconda in quale posizione ci si trova la parola chiave, 579 00:43:11,060 --> 00:43:15,800 si sta andando a spostare il tuo personaggio certo testo cifrato in misura corrispondente. 580 00:43:15,800 --> 00:43:19,630 Ancora una volta, proprio come Cesare, si vuole fare in modo che noi preserviamo la capitalizzazione delle cose 581 00:43:19,630 --> 00:43:22,900 e solo le lettere, non cifrare i caratteri o spazi. 582 00:43:22,900 --> 00:43:26,330 Quindi, guardare indietro a Cesare sulle funzioni che si possono avere utilizzato, 583 00:43:26,330 --> 00:43:32,570 il modo in cui avete deciso come spostare le cose, e che si applicano al programma qui. 584 00:43:32,570 --> 00:43:35,260 Quindi cerchiamo di mappare questo fuori. 585 00:43:35,260 --> 00:43:39,680 Abbiamo un testo in chiaro che abbiamo ottenuto da parte dell'utente da GetString 586 00:43:39,680 --> 00:43:44,090 dicendo questo ... è CS50! 587 00:43:44,090 --> 00:43:47,090 Poi abbiamo una parola chiave di ohai. 588 00:43:47,090 --> 00:43:50,930 I primi 4 caratteri sono abbastanza semplici. 589 00:43:50,930 --> 00:43:55,580 Sappiamo che T sta per essere spostato da O, 590 00:43:55,580 --> 00:44:01,990 allora h sta per essere spostato da h, i sta per essere spostato da un. 591 00:44:01,990 --> 00:44:04,610 Qui si vede che a rappresenta 0, 592 00:44:04,610 --> 00:44:11,940 così allora il valore finale è in realtà solo la lettera stessa di prima. 593 00:44:11,940 --> 00:44:15,250 Allora s è spostata di i. 594 00:44:15,250 --> 00:44:19,370 Ma poi ci sono questi periodi qui. 595 00:44:19,370 --> 00:44:25,960 Non vogliamo che per cifrare, e allora non lo cambia da niente 596 00:44:25,960 --> 00:44:31,280 e solo stampare il periodo invariato. 597 00:44:31,280 --> 00:44:38,020 [Studente] Non capisco come fai a sapere che questo è spostato da - Dove hai - >> Oh, mi dispiace. 598 00:44:38,020 --> 00:44:41,620 Nella parte superiore qui si vede che la linea di comando ohai argomento qui, 599 00:44:41,620 --> 00:44:43,740 che sta per essere la parola chiave. 600 00:44:43,740 --> 00:44:49,550 E così in fondo, sei in bicicletta sui caratteri della parola chiave. 601 00:44:49,550 --> 00:44:52,020 [Studente] Quindi o sta per essere lo spostamento lo stesso - 602 00:44:52,020 --> 00:44:56,260 Quindi o corrisponde a un certo numero dell'alfabeto. 603 00:44:56,260 --> 00:44:58,400 [Studente] destro. Ma dove hai preso il CS50 parte da? 604 00:44:58,400 --> 00:45:02,540 Oh. Ecco in GetString dove siete come, "Dammi una stringa da codificare." 605 00:45:02,540 --> 00:45:07,510 [Studente] Stanno andando a darvi tale argomento per cambiare di 606 00:45:07,510 --> 00:45:09,380 e poi ti chiederà la prima stringa. Sì >>. 607 00:45:09,380 --> 00:45:12,440 Così, quando si esegue il programma, che stanno andando a includere la parola chiave 608 00:45:12,440 --> 00:45:14,740 negli argomenti della riga di comando loro quando si esegue. 609 00:45:14,740 --> 00:45:19,740 Poi, una volta che hai verificato che in realtà ti hanno dato 1 e non di più, non di meno, 610 00:45:19,740 --> 00:45:23,750 allora si sta andando per indurre le vittime di una stringa, ad esempio, "Dammi una stringa." 611 00:45:23,750 --> 00:45:27,630 Ecco dove, in questo caso hanno dato questo ... è CS50! 612 00:45:27,630 --> 00:45:32,090 Allora avete intenzione di usare questo e utilizzare ohai e scorrere. 613 00:45:32,090 --> 00:45:38,200 Si noti che qui abbiamo saltato la crittografia dei periodi, 614 00:45:38,200 --> 00:45:51,660 ma in termini di nostra posizione per ohai, la prossima abbiamo usato o. 615 00:45:51,660 --> 00:45:54,990 In questo caso è un po 'più difficile da vedere perché è 4, 616 00:45:54,990 --> 00:45:57,710 quindi cerchiamo di continuare un po '. Basta restare con me qui. 617 00:45:57,710 --> 00:46:02,960 Poi abbiamo i e s, che vengono poi tradotto da O e H rispettivamente. 618 00:46:02,960 --> 00:46:09,370 Poi abbiamo uno spazio, e così poi sappiamo che non stiamo andando a cifrare gli spazi. 619 00:46:09,370 --> 00:46:18,930 Ma si noti che invece di andare a una in questo luogo proprio qui, 620 00:46:18,930 --> 00:46:28,330 siamo la crittografia da un - non so se si può vedere che - proprio qui. 621 00:46:28,330 --> 00:46:33,710 Quindi non è come in realtà predeterminata, per esempio, o qui va, h va qui, 622 00:46:33,710 --> 00:46:39,200 una va qui, i va qui, o, h, a, i, o, h, a, i. Non farlo. 623 00:46:39,200 --> 00:46:43,760 Basta spostare la vostra posizione nella parola chiave 624 00:46:43,760 --> 00:46:51,020 quando si sa che si sta effettivamente intenzione di crittografia una lettera vera e propria. 625 00:46:51,020 --> 00:46:53,920 Fa che tipo di senso? 626 00:46:53,920 --> 00:46:55,800 Va bene. 627 00:46:56,490 --> 00:46:58,500 Quindi solo alcuni promemoria. 628 00:46:58,500 --> 00:47:03,760 Si vuole fare in modo che solo passare alla lettera successiva la parola chiave 629 00:47:03,760 --> 00:47:06,390 se il carattere in chiaro è una lettera. 630 00:47:06,390 --> 00:47:09,120 Quindi dire che siamo al o. 631 00:47:09,120 --> 00:47:19,310 Notiamo che il carattere successivo, l'indice i del testo in chiaro, è un numero, per esempio. 632 00:47:19,310 --> 00:47:31,630 Quindi noi non avanzare j, l'indice per la nostra parola chiave, fino a raggiungere un'altra lettera. 633 00:47:31,630 --> 00:47:36,230 Anche in questo caso, anche voi volete fare in modo che si avvolgenti all'inizio della parola chiave 634 00:47:36,230 --> 00:47:37,770 quando sei alla fine di esso. 635 00:47:37,770 --> 00:47:42,030 Se vedi qui siamo in i, il prossimo deve essere o. 636 00:47:42,030 --> 00:47:47,690 Così si vuole trovare un modo di essere in grado di avvolgente all'inizio della parola chiave 637 00:47:47,690 --> 00:47:49,470 ogni volta che si raggiunge la fine. 638 00:47:49,470 --> 00:47:55,040 E così ancora una volta, che tipo di operatore è utile in questo caso per il confezionamento in giro? 639 00:47:56,630 --> 00:47:59,840 Come nel conteggio off esempio. 640 00:47:59,840 --> 00:48:03,710 [Studente] Il segno di percentuale. >> Si ', il segno di percentuale, che è modulo. 641 00:48:03,710 --> 00:48:11,250 Così modulo sarà utile qui quando si vuole avvolgere il vostro indice ohai. 642 00:48:11,250 --> 00:48:17,700 E solo un rapido accenno: Provate a pensare di avvolgere sulla parola chiave un po 'come la bassa conta, 643 00:48:17,700 --> 00:48:23,590 dove se ci sono 3 gruppi, la 4 ° persona, 644 00:48:23,590 --> 00:48:30,610 il loro numero, che hanno detto che era 4 mod 3, che è stato di 1. 645 00:48:30,610 --> 00:48:32,880 Quindi, cercare di pensare in questo modo. 646 00:48:34,770 --> 00:48:42,740 Come si è visto nella formula, ovunque ci sia e poi ci pi ma poi kj, 647 00:48:42,740 --> 00:48:44,700 si vuole fare in modo che a tenere traccia di quelli. 648 00:48:44,700 --> 00:48:47,580 Non c'è bisogno di chiamare i, non è necessario chiamare j, 649 00:48:47,580 --> 00:48:53,270 ma si vuole fare in modo che a tenere traccia della posizione che ci sei in chiaro 650 00:48:53,270 --> 00:48:55,790 così come la posizione che ci sei la parola chiave 651 00:48:55,790 --> 00:48:59,840 perché quelli non sono necessariamente sarà lo stesso. 652 00:48:59,840 --> 00:49:06,400 Non solo la parola chiave - potrebbe essere una lunghezza completamente diverso da quello del testo in chiaro. 653 00:49:06,400 --> 00:49:09,140 Inoltre, il testo in chiaro, ci sono numeri e caratteri, 654 00:49:09,140 --> 00:49:14,450 quindi non sta andando per abbinare perfettamente insieme. Sì. 655 00:49:14,450 --> 00:49:19,280 [Studente] C'è una funzione per modificare le maiuscole? 656 00:49:19,280 --> 00:49:24,530 Si può cambiare un a maiuscola? >> Si, c'è sicuramente. 657 00:49:24,530 --> 00:49:27,890 È possibile controllare - Credo che sia toupper, tutti 1 parola. 658 00:49:30,650 --> 00:49:36,310 Ma quando si sta cercando di cifrare le cose e conservare il testo, 659 00:49:36,310 --> 00:49:39,350 è meglio avere fondamentalmente casi distinti. 660 00:49:39,350 --> 00:49:42,040 Se si tratta di una A maiuscola, poi si vuole passare da questo 661 00:49:42,040 --> 00:49:46,460 perché nella formula, quando si guarda indietro come dobbiamo tipo di go 662 00:49:46,460 --> 00:49:50,900 intercambiabile tra il modo ASCII di rappresentare i numeri 663 00:49:50,900 --> 00:49:55,020 e l'indice alfabetico reale, si vuole fare in modo 664 00:49:55,020 --> 00:50:01,850 ci sarà un qualche tipo di modello che si sta andando ad utilizzare. 665 00:50:01,850 --> 00:50:04,580 Un'altra nota sul modello, in realtà. 666 00:50:04,580 --> 00:50:07,250 Stai andando a sicuramente a che fare con i numeri. 667 00:50:07,250 --> 00:50:11,280 Cercate di non usare i numeri magici, che è un esempio di stile. 668 00:50:11,280 --> 00:50:18,470 Quindi dici che vuoi ogni volta che qualcosa turno di desideri - 669 00:50:18,470 --> 00:50:22,400 Ok, quindi suggerimento, un altro spoiler è quando si sta andando ad essere qualcosa di spostamento 670 00:50:22,400 --> 00:50:26,310 di una certa quantità, cercate di non rappresentare che da parte di un numero reale 671 00:50:26,310 --> 00:50:32,810 ma piuttosto provare e vedere se è possibile utilizzare il valore ASCII, che tipo di più senso. 672 00:50:32,810 --> 00:50:35,470 Un'altra nota: perché abbiamo a che fare con le formule, 673 00:50:35,470 --> 00:50:41,200 anche se il TF tipo di sapere quale schema si potrebbero utilizzare, 674 00:50:41,200 --> 00:50:44,430 meglio al vostro genere di commenti spiegare la logica, come, 675 00:50:44,430 --> 00:50:51,880 "Io sto usando questo modello perché ..." e tipo di spiegare il modello in modo succinto i tuoi commenti. 676 00:50:54,090 --> 00:50:58,990 [Questa era procedura dettagliata 2] Se non ci sono altre domande, quindi mi limiterò a stare qui per un po '. 677 00:50:58,990 --> 00:51:04,370 Buona fortuna con il tuo pset 2: Crypto e grazie per essere venuti. 678 00:51:06,070 --> 00:51:08,620 [Studente] Grazie. Grazie >>. 679 00:51:09,220 --> 00:51:10,800 [Intro media offline]