1 00:00:00,000 --> 00:00:10,103 2 00:00:10,103 --> 00:00:11,270 >> ZAMYLA CHAN: Congratulazioni sulla rifinitura del vostro 3 00:00:11,270 --> 00:00:13,200 primo paio di programmi in C. 4 00:00:13,200 --> 00:00:16,379 So che la vostra prima incursione Sintassi del C può essere scoraggiante. 5 00:00:16,379 --> 00:00:20,060 Ma vi assicuro che, alla fine del Naturalmente, sarete in grado di guardare al 6 00:00:20,060 --> 00:00:23,870 primo paio di incarichi e completarli in pochi minuti. 7 00:00:23,870 --> 00:00:27,830 >> Ora che stai ricevendo più familiare con la sintassi, andiamo a Cesare. 8 00:00:27,830 --> 00:00:31,720 In Cesare, l'utente presenterà una chiave intero come una riga di comando 9 00:00:31,720 --> 00:00:35,300 argomento, quindi immettere una pianura messaggio di testo al prompt. 10 00:00:35,300 --> 00:00:38,050 Il programma sarà poi cifrare il testo e stampa 11 00:00:38,050 --> 00:00:40,020 il loro messaggio cifrato. 12 00:00:40,020 --> 00:00:42,980 >> La cifratura di Cesare è abbastanza semplice. 13 00:00:42,980 --> 00:00:46,455 Spostare ogni lettera, nella loro testo normale, dalla chiave. 14 00:00:46,455 --> 00:00:49,220 Come risultato, è anche piuttosto insicuro. 15 00:00:49,220 --> 00:00:53,850 Ma l'implementazione di Cesare introdurrà noi di dati ASCIIMath e la matrice 16 00:00:53,850 --> 00:00:54,460 strutture. 17 00:00:54,460 --> 00:00:57,510 Ci arriveremo più complesso cifrari più tardi. 18 00:00:57,510 --> 00:01:01,680 Con una chiave di Cesare 2, la lettera A in testo normale sarebbe rappresentato da 19 00:01:01,680 --> 00:01:07,580 la lettera C nel testo cifrato causa C è di due lettere dopo A. B sarebbero 20 00:01:07,580 --> 00:01:12,450 rappresentato da D e C da E. Verso la fine dell'alfabeto, W è 21 00:01:12,450 --> 00:01:18,550 rappresentato da Y, X e Y da Z. Ma non ha due lettere dopo di esso, così 22 00:01:18,550 --> 00:01:21,070 le cifre avvolge l'alfabeto. 23 00:01:21,070 --> 00:01:27,190 Y in testo normale è quindi rappresentato da A in testo cifrato, e Z da B. Esso può 24 00:01:27,190 --> 00:01:32,080 ? per visualizzare la Cesare Cypher come una ruota alfabeto continuo. 25 00:01:32,080 --> 00:01:35,760 >> Per cifrare loro testo, l'utente entrerà due argomenti 26 00:01:35,760 --> 00:01:37,090 nella riga di comando - 27 00:01:37,090 --> 00:01:40,010 . / Caesar seguito da un tasto. 28 00:01:40,010 --> 00:01:44,710 Come sempre, non possiamo fidarci l'utente completamente per entrare input che rendono 29 00:01:44,710 --> 00:01:45,800 senso per il nostro programma. 30 00:01:45,800 --> 00:01:50,670 Quindi saremo costretti a convalidare la loro ingresso di linea di comando. 31 00:01:50,670 --> 00:01:57,285 >> Invece di usare int void main, siamo utilizzando int main, int argc, argv stringa. 32 00:01:57,285 --> 00:02:01,730 Il numero intero argc variabile rappresenta il numero di argomenti passati in 33 00:02:01,730 --> 00:02:02,880 la riga di comando. 34 00:02:02,880 --> 00:02:09,070 E argv è un array, o pensare ad esso come un elenco, degli argomenti passati dentro 35 00:02:09,070 --> 00:02:12,000 >> Così, per Cesare, come possiamo validare l'input dell'utente? 36 00:02:12,000 --> 00:02:15,870 Beh, dovrebbero essere entrando solo due argomenti della riga di comando - 37 00:02:15,870 --> 00:02:18,150 . / Caesar e una chiave. 38 00:02:18,150 --> 00:02:22,340 Quindi se argc non è 2, ciò significa che essi o dimenticato una chiave e solo 39 00:02:22,340 --> 00:02:27,230 inserito. / Cesare, o entrato più chiavi. 40 00:02:27,230 --> 00:02:29,770 >> Se questo è il caso, allora si dovrà consiglia di stampare le istruzioni 41 00:02:29,770 --> 00:02:30,910 e uscire dal programma. 42 00:02:30,910 --> 00:02:34,320 Avranno bisogno di provare di nuovo dalla riga di comando. 43 00:02:34,320 --> 00:02:37,430 Ma anche se argc è 2, ti necessario verificare se essi 44 00:02:37,430 --> 00:02:39,100 vi darà una chiave valida. 45 00:02:39,100 --> 00:02:40,730 Per Cesare, hai bisogno di un numero intero. 46 00:02:40,730 --> 00:02:43,260 Ma argv è un array di stringhe. 47 00:02:43,260 --> 00:02:46,490 Come si accede quella chiave? 48 00:02:46,490 --> 00:02:47,850 >> Un rapido sguardo a matrici - 49 00:02:47,850 --> 00:02:51,410 strutture dati che contengono più valori dello stesso tipo di dati. 50 00:02:51,410 --> 00:02:55,350 Le iscrizioni sono indice a base zero, il che significa che il primo elemento è l'indice zero 51 00:02:55,350 --> 00:03:00,260 e l'ultimo elemento è a dimensione dell'indice meno 1, dove size è il numero di 52 00:03:00,260 --> 00:03:02,850 elementi dell'array. 53 00:03:02,850 --> 00:03:07,380 >> Se ho dichiarato una nuova cassetta postale array di stringhe di lunghezza 3, visivamente, 54 00:03:07,380 --> 00:03:08,570 si presenta così. 55 00:03:08,570 --> 00:03:11,520 Tre contenitori per le stringhe , Fianco a fianco. 56 00:03:11,520 --> 00:03:15,445 Per accedere a qualsiasi elemento, si digita il nome della matrice e quindi indicare 57 00:03:15,445 --> 00:03:18,080 l'indice tra parentesi quadre. 58 00:03:18,080 --> 00:03:21,610 Ecco, sto assegnando un valore ad ogni elemento, proprio come avrei fatto con qualsiasi 59 00:03:21,610 --> 00:03:24,310 altra variabile stringa. 60 00:03:24,310 --> 00:03:29,020 >> Quindi, per accedere ai nostri argomenti della riga di comando, tutto quello che dobbiamo fare è accedere 61 00:03:29,020 --> 00:03:31,690 l'elemento destro della matrice argv. 62 00:03:31,690 --> 00:03:37,360 Se l'utente ha inserito. / Blastoff squadra Rocket nel terminale, argv 0 sarebbe 63 00:03:37,360 --> 00:03:38,950 essere. / blastoff. 64 00:03:38,950 --> 00:03:45,010 argv sarebbe Team, e arg2 sarebbe razzo. 65 00:03:45,010 --> 00:03:47,670 >> Ora che siamo in grado di accedere al nostro tasto, abbiamo ancora bisogno di fare 66 00:03:47,670 --> 00:03:49,040 sicuri che sia corretta. 67 00:03:49,040 --> 00:03:51,060 Abbiamo bisogno di convertirlo in un numero intero. 68 00:03:51,060 --> 00:03:54,680 Ma non possiamo semplicemente gettare come abbiamo fatto in precedenza. 69 00:03:54,680 --> 00:03:58,800 Per fortuna, la A per funzione Y si prende cura di questo per noi e anche restituisce 0 70 00:03:58,800 --> 00:04:02,110 Se la stringa non può essere convertita in un numero intero. 71 00:04:02,110 --> 00:04:04,450 Tocca a te, anche se, a dire l'utente per cui non si 72 00:04:04,450 --> 00:04:06,220 lasciare che il programma procede. 73 00:04:06,220 --> 00:04:10,710 Memorizzare il risultato di A a Y in un numero intero, e non vi hai la tua chiave. 74 00:04:10,710 --> 00:04:12,070 La parte successiva è semplice. 75 00:04:12,070 --> 00:04:15,940 Richiedere all'utente il loro testo, che sarà di tipo stringa di dati. 76 00:04:15,940 --> 00:04:18,339 Fortunatamente per noi, tutti gli utenti immessi stringhe sono valide. 77 00:04:18,339 --> 00:04:21,170 78 00:04:21,170 --> 00:04:24,760 >> Ora che abbiamo tutte le risorse necessarie da parte dell'utente, è il momento per noi di 79 00:04:24,760 --> 00:04:26,520 cifrare il loro messaggio. 80 00:04:26,520 --> 00:04:29,200 Il concetto di Cesare è semplice abbastanza per capire. 81 00:04:29,200 --> 00:04:33,750 Ma come fa sapere il computer che lettere arrivano uno dopo l'altro? 82 00:04:33,750 --> 00:04:36,100 >> Ecco dove la tabella ASCII entra in gioco 83 00:04:36,100 --> 00:04:39,420 Ogni personaggio ha un numero intero numero ad esso associati. 84 00:04:39,420 --> 00:04:41,380 Maiuscola è 65. 85 00:04:41,380 --> 00:04:43,310 Capital B è 66. 86 00:04:43,310 --> 00:04:45,260 Le lettere minuscole sono 97. 87 00:04:45,260 --> 00:04:47,590 Minuscolo b è 98. 88 00:04:47,590 --> 00:04:50,770 Caratteri ma non sono limitati al solo numeri alfabetici. 89 00:04:50,770 --> 00:04:56,020 Ad esempio, il simbolo @ è il numero ASCII 64. 90 00:04:56,020 --> 00:04:59,690 >> Prima di affrontare l'intera stringa, facciamo finta non ci resta che spostare 91 00:04:59,690 --> 00:05:01,220 un carattere. 92 00:05:01,220 --> 00:05:04,640 Beh, vogliamo solo a spostare reale lettere nel testo normale, non 93 00:05:04,640 --> 00:05:06,020 caratteri o numeri. 94 00:05:06,020 --> 00:05:09,100 Quindi la prima cosa che dobbiamo provare a verificare è se il personaggio è in 95 00:05:09,100 --> 00:05:10,430 l'alfabeto. 96 00:05:10,430 --> 00:05:14,460 >> Il isalpha funzione lo fa per noi e restituisce un valore booleano - 97 00:05:14,460 --> 00:05:18,570 true se i caratteri è una lettera, false se altrimenti. 98 00:05:18,570 --> 00:05:22,270 Altre due utili funzioni sono isupper e islower, con 99 00:05:22,270 --> 00:05:23,860 nomi auto-esplicativi. 100 00:05:23,860 --> 00:05:27,370 Tornano true se il carattere dato è maiuscolo o minuscolo, 101 00:05:27,370 --> 00:05:28,740 rispettivamente. 102 00:05:28,740 --> 00:05:33,770 Dal momento che sono booleani, sono utile utilizzare come condizioni. 103 00:05:33,770 --> 00:05:38,310 >> Se isalpha restituisce true, è necessario di spostare tale carattere dalla chiave. 104 00:05:38,310 --> 00:05:43,750 Quindi apriamo a ASCIIMath e fare un po 'di matematica ASCII. 105 00:05:43,750 --> 00:05:48,700 L'utilizzo è molto simile all'uso per Cesare e prende in una chiave al 106 00:05:48,700 --> 00:05:50,870 riga di comando. 107 00:05:50,870 --> 00:05:59,590 >> Se corro ASCIIMath 5, sembra aggiungere 5 per una, dandomi la lettera f, e 108 00:05:59,590 --> 00:06:01,260 la visualizzazione del valore ASCII. 109 00:06:01,260 --> 00:06:04,090 Quindi, diamo uno sguardo al programma. 110 00:06:04,090 --> 00:06:11,820 >> Ci si potrebbe chiedere, proprio qui, perché lettera è un numero intero, quando è 111 00:06:11,820 --> 00:06:14,330 chiaramente, bene, una lettera. 112 00:06:14,330 --> 00:06:17,690 Si scopre che i personaggi e le interi sono intercambiabili. 113 00:06:17,690 --> 00:06:21,730 Apponendo la lettera A in un'unica virgolette, il numero intero in grado di memorizzare 114 00:06:21,730 --> 00:06:25,390 il valore ASCII del capitale A. Attenzione, però. 115 00:06:25,390 --> 00:06:27,150 Avete bisogno dei singoli vestiti. 116 00:06:27,150 --> 00:06:31,260 Senza le virgolette singole, il compilatore sarebbe per una variabile 117 00:06:31,260 --> 00:06:35,510 denominati A, e non il personaggio. 118 00:06:35,510 --> 00:06:42,140 >> Poi aggiungo lettera e una chiave, la memorizzazione del somma del risultato variabili int. 119 00:06:42,140 --> 00:06:47,740 Anche se risultato è di tipo dati numero intero, la mia dichiarazione printf utilizza il 120 00:06:47,740 --> 00:06:50,370 % C segnaposto per i caratteri. 121 00:06:50,370 --> 00:06:54,530 Quindi, il programma stampa il carattere associato al risultato intero. 122 00:06:54,530 --> 00:07:00,400 E dal momento che abbiamo stampato il numero intero forma e utilizzando% d, vediamo 123 00:07:00,400 --> 00:07:02,110 il numero pure. 124 00:07:02,110 --> 00:07:04,450 Così ora si può vedere che ci trattare i personaggi e 125 00:07:04,450 --> 00:07:06,980 numeri interi, e viceversa. 126 00:07:06,980 --> 00:07:12,205 >> Diamo prova fuori ASCIIMath alcuni altre volte usando 25 come chiave. 127 00:07:12,205 --> 00:07:15,510 128 00:07:15,510 --> 00:07:17,090 Riceviamo la lettera z. 129 00:07:17,090 --> 00:07:19,750 Adesso cerchiamo 26. 130 00:07:19,750 --> 00:07:25,600 Vogliamo ottenere la lettera a, ma invece otteniamo una parentesi sinistra. 131 00:07:25,600 --> 00:07:29,490 Così, ovviamente, solo l'aggiunta del chiave per la lettera non lo farà. 132 00:07:29,490 --> 00:07:32,780 Abbiamo bisogno di capire una formula per avvolgere intorno l'alfabeto, come il nostro 133 00:07:32,780 --> 00:07:34,570 esempio in principio ha fatto. 134 00:07:34,570 --> 00:07:38,520 >> Una formula per il Cesare spostamento è il seguente. 135 00:07:38,520 --> 00:07:42,750 c è uguale a p + k modulo 26. 136 00:07:42,750 --> 00:07:46,040 Ricordate che il modulo è un utile operazione che ci dà il resto 137 00:07:46,040 --> 00:07:49,880 della divisione di un numero per l'altro. 138 00:07:49,880 --> 00:07:54,870 Proviamo ad applicare questa formula per la pianura lettera del testo con una chiave di 2. 139 00:07:54,870 --> 00:08:01,810 Il valore ASCII di y è 89, che ci dà 91 modulo 26, 140 00:08:01,810 --> 00:08:03,690 che è uguale a 13 - 141 00:08:03,690 --> 00:08:08,740 sicuramente non il valore ASCII di una, che è 67. 142 00:08:08,740 --> 00:08:12,810 >> Umorismo me ora e allontanarsi dal Valori ASCII ad un indice alfabetico 143 00:08:12,810 --> 00:08:18,690 dove A è zero e Z è 25, il che significa che Y è 24. 144 00:08:18,690 --> 00:08:25,830 24 più 2, modulo 6, ci dà 26, modulo 26, 0, che è la 145 00:08:25,830 --> 00:08:28,170 indice alfabetico di una. 146 00:08:28,170 --> 00:08:32,980 Pertanto questa formula sembra applicarsi alla indice alfabetico della lettera e 147 00:08:32,980 --> 00:08:34,960 non il suo valore ASCII. 148 00:08:34,960 --> 00:08:37,630 >> Ma si inizia con valori ASCII. 149 00:08:37,630 --> 00:08:41,650 E per stampare il carattere cifrato, sarà necessario il suo valore ASCII pure. 150 00:08:41,650 --> 00:08:46,400 Sta a voi, allora, di capire come passare avanti e indietro. 151 00:08:46,400 --> 00:08:49,850 >> Una volta a capire la formula giusta per un solo carattere, tutto quello che dovete fare 152 00:08:49,850 --> 00:08:53,520 si applica la stessa formula di ogni lettera nel testo - 153 00:08:53,520 --> 00:08:57,720 solo se tale lettera è alfabetico, ovviamente. 154 00:08:57,720 --> 00:09:02,360 E ricordate che è necessario per preservare il caso, superiore o inferiore, è lì 155 00:09:02,360 --> 00:09:06,890 il isupper e funzioni islower detto in precedenza sarà utile. 156 00:09:06,890 --> 00:09:08,830 Si potrebbe avere due formule - 157 00:09:08,830 --> 00:09:11,680 uno per le lettere maiuscole e uno per minuscolo. 158 00:09:11,680 --> 00:09:18,420 Così isupper un Minuscolo vi aiuterà determinare quale formula da applicare. 159 00:09:18,420 --> 00:09:22,460 >> Come si applica la formula di ogni singolo carattere in una stringa? 160 00:09:22,460 --> 00:09:25,910 Beh, una stringa è solo un array di caratteri. 161 00:09:25,910 --> 00:09:31,150 Così si può accedere a ogni personaggio raggruppando su ogni personaggio del 162 00:09:31,150 --> 00:09:33,450 stringa in un ciclo for. 163 00:09:33,450 --> 00:09:37,550 Per quanto riguarda la condizione del tuo ciclo for, la funzione strlen, per stringa 164 00:09:37,550 --> 00:09:39,280 lunghezza, sarà utile. 165 00:09:39,280 --> 00:09:44,020 Ci vuole in una stringa come input e restituisce la lunghezza della stringa. 166 00:09:44,020 --> 00:09:49,250 Assicurati di includere la libreria giusta Per utilizzare la funzione lunghezza della stringa. 167 00:09:49,250 --> 00:09:51,790 >> E ci hai il tuo testo cifrato. 168 00:09:51,790 --> 00:09:53,260 Il mio nome è il Zamyla. 169 00:09:53,260 --> 00:09:54,510 E [CODICE PARLANTE]. 170 00:09:54,510 --> 00:10:02,944