1 00:00:00,000 --> 00:00:10,103 2 00:00:10,103 --> 00:00:11,270 >> ZAMYLA CHAN: Gratuluji na dokončením 3 00:00:11,270 --> 00:00:13,200 První pár C programy. 4 00:00:13,200 --> 00:00:16,379 Vím, že vaše první vpád do C syntaxe může být skličující. 5 00:00:16,379 --> 00:00:20,060 Ale ujišťuji vás, že na konci roku Samozřejmě, budete mít možnost podívat se na 6 00:00:20,060 --> 00:00:23,870 Prvních pár úkolů a splnit během několika minut. 7 00:00:23,870 --> 00:00:27,830 >> Nyní, když jste stále známější se syntaxí, pojďme k císaři. 8 00:00:27,830 --> 00:00:31,720 V Caesarovi, uživatel bude předkládat číslo klíče jako příkazového řádku 9 00:00:31,720 --> 00:00:35,300 Argument, zadejte prostý Textová zpráva na příkazovém řádku. 10 00:00:35,300 --> 00:00:38,050 Program pak bude zašifrovat text a tisku 11 00:00:38,050 --> 00:00:40,020 jejich šifrovaný vzkaz. 12 00:00:40,020 --> 00:00:42,980 >> Šifrováním pro Caesara je poměrně jednoduché. 13 00:00:42,980 --> 00:00:46,455 Shift každý dopis, v jejich prostý text, klávesou. 14 00:00:46,455 --> 00:00:49,220 V důsledku toho, že je to také dost nejistá. 15 00:00:49,220 --> 00:00:53,850 Ale provádí Caesar se představí nám ASCIIMath a pole dat 16 00:00:53,850 --> 00:00:54,460 struktury. 17 00:00:54,460 --> 00:00:57,510 Dostaneme se k složitější šifry později. 18 00:00:57,510 --> 00:01:01,680 S Caesarem klíče 2, písmeno v holý text bude zastoupena 19 00:01:01,680 --> 00:01:07,580 písmeno C do šifrového textu, protože C skládá ze dvou písmen po A. B by 20 00:01:07,580 --> 00:01:12,450 zastoupené D a C E. K konec abecedy, W je 21 00:01:12,450 --> 00:01:18,550 zastoupené Y, X a Z. Ale Y nemá dvě písmena po ní, takže 22 00:01:18,550 --> 00:01:21,070 šifry se zalomí kolem abecedy. 23 00:01:21,070 --> 00:01:27,190 Y ve formátu prostého textu je tedy zastoupena V šifrového textu a Z do B. To může 24 00:01:27,190 --> 00:01:32,080 Nápověda zobrazíte Caesar Cypher jako kontinuální abeceda kolo. 25 00:01:32,080 --> 00:01:35,760 >> Chcete-li zašifrovat svůj text, uživatelské vstoupí dva argumenty 26 00:01:35,760 --> 00:01:37,090 do příkazového řádku - 27 00:01:37,090 --> 00:01:40,010 . / Caesar následuje klíč. 28 00:01:40,010 --> 00:01:44,710 Jako vždy, nemůžeme věřit uživatele úplně zadat vstup, aby 29 00:01:44,710 --> 00:01:45,800 smysl pro náš program. 30 00:01:45,800 --> 00:01:50,670 Takže budeme muset ověřit jejich vstup z příkazové řádky. 31 00:01:50,670 --> 00:01:57,285 >> Namísto použití int main neplatné, jsme pomocí int main int argc, argv, řetězec. 32 00:01:57,285 --> 00:02:01,730 Celočíselné proměnné argc představuje Počet argumentů předaných do 33 00:02:01,730 --> 00:02:02,880 příkazového řádku. 34 00:02:02,880 --> 00:02:09,070 A argv je pole, nebo myslíte, že na to, jak seznam, z argumentů předaných palců 35 00:02:09,070 --> 00:02:12,000 >> Takže pro Caesara, jak jsme se ověřit uživatelského vstupu? 36 00:02:12,000 --> 00:02:15,870 No, měly by být zadání dva argumenty příkazového řádku - 37 00:02:15,870 --> 00:02:18,150 . / Caesar a klíč. 38 00:02:18,150 --> 00:02:22,340 Takže pokud není argc 2, to znamená, že buď zapomněl klíče a jen 39 00:02:22,340 --> 00:02:27,230 vstoupil. / caesar, nebo zadat více klíčů. 40 00:02:27,230 --> 00:02:29,770 >> Pokud je to váš případ, pak budete které chcete vytisknout pokyny 41 00:02:29,770 --> 00:02:30,910 a ukončete program. 42 00:02:30,910 --> 00:02:34,320 Budou muset zkusit znovu z příkazového řádku. 43 00:02:34,320 --> 00:02:37,430 Ale i když argc je 2, budete si muset vybrat je třeba zkontrolovat, zda 44 00:02:37,430 --> 00:02:39,100 vám platný klíč. 45 00:02:39,100 --> 00:02:40,730 Pro Caesara, budete potřebovat číslo. 46 00:02:40,730 --> 00:02:43,260 Ale argv je pole řetězců. 47 00:02:43,260 --> 00:02:46,490 Jak přistupovat tento klíč? 48 00:02:46,490 --> 00:02:47,850 >> Rychlý pohled na pole - 49 00:02:47,850 --> 00:02:51,410 datové struktury, které drží více hodnoty stejný typ dat. 50 00:02:51,410 --> 00:02:55,350 Příspěvky jsou nulové, indexované, což znamená, že Prvním prvkem je index nulový 51 00:02:55,350 --> 00:03:00,260 a poslední element je v indexu velikosti minus 1, kde velikost je počet 52 00:03:00,260 --> 00:03:02,850 prvky pole. 53 00:03:02,850 --> 00:03:07,380 >> Kdybych prohlásil nový řetězec pole schránky délky 3, vizuálně, je 54 00:03:07,380 --> 00:03:08,570 vypadá takto. 55 00:03:08,570 --> 00:03:11,520 Tři kontejnery pro řetězce , Bok po boku. 56 00:03:11,520 --> 00:03:15,445 Chcete-li otevřít libovolný prvek, zadejte název z pole a pak uvést 57 00:03:15,445 --> 00:03:18,080 index v hranatých závorkách. 58 00:03:18,080 --> 00:03:21,610 Zde jsem přiřazení hodnoty k sobě prvek, stejně jako bych to s jakýmkoli 59 00:03:21,610 --> 00:03:24,310 jiné řetězcové proměnné. 60 00:03:24,310 --> 00:03:29,020 >> Takže přístup k našim argumenty příkazového řádku, vše, co musíte udělat, je přístup 61 00:03:29,020 --> 00:03:31,690 právo prvek pole argv. 62 00:03:31,690 --> 00:03:37,360 Pokud uživatel zadal. / Odpal tým Rocket do terminálu, by argv 0 63 00:03:37,360 --> 00:03:38,950 být. / odpálení. 64 00:03:38,950 --> 00:03:45,010 argv bude tým, a arg2 bude raketa. 65 00:03:45,010 --> 00:03:47,670 >> Teď, když jsme přístup našeho klíč, stále je třeba, aby 66 00:03:47,670 --> 00:03:49,040 ujistěte se, že je to správné. 67 00:03:49,040 --> 00:03:51,060 Musíme převést na celé číslo. 68 00:03:51,060 --> 00:03:54,680 Ale nemůžeme jen cast jako jsme udělali dříve. 69 00:03:54,680 --> 00:03:58,800 Naštěstí na Y funkce se stará o z toho pro nás, a dokonce vrátí 0 70 00:03:58,800 --> 00:04:02,110 v případě, že řetězec nelze převést na celé číslo. 71 00:04:02,110 --> 00:04:04,450 Je to jen na vás, i když, abych uživatel proč ne 72 00:04:04,450 --> 00:04:06,220 nechat program pokračovat. 73 00:04:06,220 --> 00:04:10,710 Uložte výsledek Y v celé číslo, a tam máte klíč. 74 00:04:10,710 --> 00:04:12,070 Další část je jednoduchý. 75 00:04:12,070 --> 00:04:15,940 Vyzve uživatele k jejich prostý text, která bude datového typu řetězec. 76 00:04:15,940 --> 00:04:18,339 Naštěstí pro nás všechny uživatelské vloženy struny jsou platné. 77 00:04:18,339 --> 00:04:21,170 78 00:04:21,170 --> 00:04:24,760 >> Nyní, když máme všechny potřebné vstupy od uživatele, že je čas pro nás 79 00:04:24,760 --> 00:04:26,520 zašifrovat své poselství. 80 00:04:26,520 --> 00:04:29,200 Koncept je jednoduchý Caesar dost rozumět. 81 00:04:29,200 --> 00:04:33,750 Ale jak se váš počítač vědět, jaké dopisy přicházejí jeden po druhém? 82 00:04:33,750 --> 00:04:36,100 >> Zde je místo, kde ASCII tabulka vypovídací 83 00:04:36,100 --> 00:04:39,420 Každá postava má celé číslo číslo s ním spojené. 84 00:04:39,420 --> 00:04:41,380 Kapitál je 65. 85 00:04:41,380 --> 00:04:43,310 Kapitál B je 66. 86 00:04:43,310 --> 00:04:45,260 Malá písmena je 97. 87 00:04:45,260 --> 00:04:47,590 Malé písmeno b je 98. 88 00:04:47,590 --> 00:04:50,770 Ale znaky nejsou omezeny na pouhých abecedy čísel. 89 00:04:50,770 --> 00:04:56,020 Například, symbol @ ASCII číslo 64. 90 00:04:56,020 --> 00:04:59,690 >> Než se zabývá celého řetězce, pojďme předstírat, že jsme se jen přesunout 91 00:04:59,690 --> 00:05:01,220 jeden znak. 92 00:05:01,220 --> 00:05:04,640 No, my jen chceme posunout aktuální písmena v prostém textu, nikoli 93 00:05:04,640 --> 00:05:06,020 znaky nebo čísla. 94 00:05:06,020 --> 00:05:09,100 Takže první věc, kterou budete chtít zkontrolovat, zda je znak v 95 00:05:09,100 --> 00:05:10,430 abeceda. 96 00:05:10,430 --> 00:05:14,460 >> Funkce isalpha to udělá za nám a vrátí logickou hodnotu - 97 00:05:14,460 --> 00:05:18,570 true, pokud postav je dopis, false, jestliže jinak. 98 00:05:18,570 --> 00:05:22,270 Dva další užitečné funkce isupper a islower se 99 00:05:22,270 --> 00:05:23,860 self-vysvětlující jména. 100 00:05:23,860 --> 00:05:27,370 Oni se vrátí true, pokud daný znak je velká nebo malá písmena, 101 00:05:27,370 --> 00:05:28,740 v tomto pořadí. 102 00:05:28,740 --> 00:05:33,770 Vzhledem k tomu, že jsou booleovské operace, jsou vhodné k použití jako podmínky. 103 00:05:33,770 --> 00:05:38,310 >> Pokud isalpha vrací true, budete potřebovat posunout tento znak klávesou. 104 00:05:38,310 --> 00:05:43,750 Takže pojďme otevřít na ASCIIMath a udělat nějaké ASCII matematiky. 105 00:05:43,750 --> 00:05:48,700 Použití je velmi podobné využití pro Caesara a bere v klíči na 106 00:05:48,700 --> 00:05:50,870 příkazového řádku. 107 00:05:50,870 --> 00:05:59,590 >> Mám-li spustit ASCIIMath 5, zdá se přidat 5 až, že mi na písmeno F, a 108 00:05:59,590 --> 00:06:01,260 zobrazení na hodnotu ASCII. 109 00:06:01,260 --> 00:06:04,090 Takže pojďme se podívat na program. 110 00:06:04,090 --> 00:06:11,820 >> Možná se divíte, tady, proč písmeno je celé číslo, pokud je to 111 00:06:11,820 --> 00:06:14,330 jasně, dobře, písmeno. 112 00:06:14,330 --> 00:06:17,690 Ukazuje se, že znaky a čísla jsou zaměnitelné. 113 00:06:17,690 --> 00:06:21,730 Tím, že dopis v jedno uvozovky, můžete číslo uložit 114 00:06:21,730 --> 00:06:25,390 ASCII hodnota kapitálu A. Buďte opatrní, i když. 115 00:06:25,390 --> 00:06:27,150 Musíte jednotlivé oblečení. 116 00:06:27,150 --> 00:06:31,260 Bez jednotné uvozovek, kompilátor by najít proměnné 117 00:06:31,260 --> 00:06:35,510 s názvem, a nikoli charakter. 118 00:06:35,510 --> 00:06:42,140 >> Pak přidám dopis a klíč, skladování částka v int proměnné výsledek. 119 00:06:42,140 --> 00:06:47,740 I když výsledek je datového typu integer, moje printf výraz používá 120 00:06:47,740 --> 00:06:50,370 % C zástupný symbol pro znaky. 121 00:06:50,370 --> 00:06:54,530 Takže program vytiskne znak spojené s výsledkem celé číslo. 122 00:06:54,530 --> 00:07:00,400 A protože jsme si vytiskli celé číslo podobě i pomocí% d, vidíme, 123 00:07:00,400 --> 00:07:02,110 číslo stejně. 124 00:07:02,110 --> 00:07:04,450 Takže nyní můžete vidět, že jsme léčbě znaků a 125 00:07:04,450 --> 00:07:06,980 celá čísla, a naopak. 126 00:07:06,980 --> 00:07:12,205 >> Pojďme otestují ASCIIMath několika Vícekrát pomocí 25 jako klíč. 127 00:07:12,205 --> 00:07:15,510 128 00:07:15,510 --> 00:07:17,090 Dostáváme Písmeno Z. 129 00:07:17,090 --> 00:07:19,750 Nyní se pokusíme 26. 130 00:07:19,750 --> 00:07:25,600 Chceme se dostat dopis a, ale místo toho dostaneme levou hranatou závorku. 131 00:07:25,600 --> 00:07:29,490 Tak samozřejmě, jen přidat Klíčem k dopisu nebude dělat. 132 00:07:29,490 --> 00:07:32,780 Musíme vymyslet vzorec zabalit kolem abecedy, jako naše 133 00:07:32,780 --> 00:07:34,570 Například na začátku udělal. 134 00:07:34,570 --> 00:07:38,520 >> Vzorec pro císařovo posun je následující. 135 00:07:38,520 --> 00:07:42,750 c se rovná p plus K modulo 26. 136 00:07:42,750 --> 00:07:46,040 Pamatujte si, že modulo je užitečný operace, která nám dává zbytek 137 00:07:46,040 --> 00:07:49,880 dělení jedno číslo od druhého. 138 00:07:49,880 --> 00:07:54,870 Pojďme platí tento vzorec na rovinatý Text dopis s klíčem 2. 139 00:07:54,870 --> 00:08:01,810 ASCII hodnota y je 89, nám dává 91 modulo 26, 140 00:08:01,810 --> 00:08:03,690 který se rovná 13 - 141 00:08:03,690 --> 00:08:08,740 rozhodně není hodnota ASCII z, který je 67 let. 142 00:08:08,740 --> 00:08:12,810 >> Humor mě teď a upustit od ASCII hodnot do indexu abecedním 143 00:08:12,810 --> 00:08:18,690 kde je nulová, a Z je 25, což znamená, že Y je 24. 144 00:08:18,690 --> 00:08:25,830 24 a 2, modulo 6, nám dává 26, modulo 26, 0, který je 145 00:08:25,830 --> 00:08:28,170 abecední seznam. 146 00:08:28,170 --> 00:08:32,980 Takže to vypadá, že vzorec platí pro abecední rejstřík dopisu a 147 00:08:32,980 --> 00:08:34,960 není jeho ASCII hodnota. 148 00:08:34,960 --> 00:08:37,630 >> Ale začnete s ASCII hodnoty. 149 00:08:37,630 --> 00:08:41,650 A vytisknout znak šifrového textu budete muset svou hodnotu ASCII stejně. 150 00:08:41,650 --> 00:08:46,400 Je to jen na vás, pak zjistit, jak přepínat tam a zpět. 151 00:08:46,400 --> 00:08:49,850 >> Jakmile se přijít na správný recept jeden znak, vše, co potřebujete udělat, 152 00:08:49,850 --> 00:08:53,520 je použít stejný vzorec pro každý dopis v prostém textu - 153 00:08:53,520 --> 00:08:57,720 pouze v případě, že dopis je abecední, Samozřejmě. 154 00:08:57,720 --> 00:09:02,360 A pamatujte, že musíte zachovat v případě, horní a dolní, to je místo, kde 155 00:09:02,360 --> 00:09:06,890 isupper a islower funkce již bylo zmíněno dříve přijde vhod. 156 00:09:06,890 --> 00:09:08,830 Můžete mít dva vzorce - 157 00:09:08,830 --> 00:09:11,680 jeden pro velká písmena a jeden pro malá písmena. 158 00:09:11,680 --> 00:09:18,420 Takže isupper islower vám pomůže určit, které vzorec použít. 159 00:09:18,420 --> 00:09:22,460 >> Jak použít své vzorce každý znak v řetězci? 160 00:09:22,460 --> 00:09:25,910 No, řetězec je jen pole znaků. 161 00:09:25,910 --> 00:09:31,150 Takže můžete přistupovat každý znak seskupování přes každý znak v 162 00:09:31,150 --> 00:09:33,450 řetězec v cyklu for. 163 00:09:33,450 --> 00:09:37,550 Co se týče stavu vašeho smyčky for, Funkce strlen, pro řetězec 164 00:09:37,550 --> 00:09:39,280 délka, přijde vhod. 165 00:09:39,280 --> 00:09:44,020 Bere v řetězci jako vstup vrací délku tohoto řetězce. 166 00:09:44,020 --> 00:09:49,250 Nezapomeňte uvést správnou knihovnu použít délku řetězce funkce. 167 00:09:49,250 --> 00:09:51,790 >> A tady máte šifrový text. 168 00:09:51,790 --> 00:09:53,260 Mé jméno je Zamyla. 169 00:09:53,260 --> 00:09:54,510 A [MLUVÍCÍ KÓD]. 170 00:09:54,510 --> 00:10:02,944