1 00:00:00,000 --> 00:00:10,103 2 00:00:10,103 --> 00:00:11,270 >> ZAMYLA CHAN:おめでとう あなたの仕上げに 3 00:00:11,270 --> 00:00:13,200 Cプログラムの最初のカップル。 4 00:00:13,200 --> 00:00:16,379 私が知っているあなたの最初の進出に C言語の構文は、困難なことができます。 5 00:00:16,379 --> 00:00:20,060 しかし、私の最後に、お約束いたします もちろん、あなたは見てできるようになります 6 00:00:20,060 --> 00:00:23,870 割り当ての最初のカップルと 数分でそれらを完了。 7 00:00:23,870 --> 00:00:27,830 >> 今、あなたはより身近取得していることを 構文で、カエサルにましょう。 8 00:00:27,830 --> 00:00:31,720 シーザーでは、ユーザーは提出します コマンドラインとして整数キー 9 00:00:31,720 --> 00:00:35,300 引数、その後平野を入力してください プロンプトでテキストメッセージ。 10 00:00:35,300 --> 00:00:38,050 プログラムは暗号化するでしょう テキストとプリント 11 00:00:38,050 --> 00:00:40,020 その暗号文メッセージ。 12 00:00:40,020 --> 00:00:42,980 >> シーザーのために暗号化 非常に簡単です。 13 00:00:42,980 --> 00:00:46,455 自分では、各文字をシフト キーによってプレーンテキスト、。 14 00:00:46,455 --> 00:00:49,220 結果として、それはまた、周辺 かなり安全でない。 15 00:00:49,220 --> 00:00:53,850 しかし、シーザーを実装する紹介します 当方ASCIIMathと配列データへ 16 00:00:53,850 --> 00:00:54,460 構造。 17 00:00:54,460 --> 00:00:57,510 私たちは、より複雑に買ってあげる 後で暗号。 18 00:00:57,510 --> 00:01:01,680 2のシーザーキーの文字で プレーンテキストは次式で表されます 19 00:01:01,680 --> 00:01:07,580 暗号文の文字のCなぜならC A. Bの後に2文字は次のようになりますです 20 00:01:07,580 --> 00:01:12,450 向けE.によってDとCで表さ アルファベットの最後、Wは 21 00:01:12,450 --> 00:01:18,550 しかし、Z. YによってY、およびXで表される そう、それの後に2文字を持っていない 22 00:01:18,550 --> 00:01:21,070 暗号は、アルファベットを包み込む。 23 00:01:21,070 --> 00:01:27,190 プレーンテキストでは、このようにYで表される。 B.それは可能性によって暗号文、およびZで 24 00:01:27,190 --> 00:01:32,080 のようにシーザーサイファーを表示するために役立つ 連続アルファベットホイール。 25 00:01:32,080 --> 00:01:35,760 >> 彼らのテキストは、ユーザを暗号化するには 二つの引数を入力します 26 00:01:35,760 --> 00:01:37,090 コマンドラインに - 27 00:01:37,090 --> 00:01:40,010 。/シーザーは、キーが続く。 28 00:01:40,010 --> 00:01:44,710 いつものように、私たちは、ユーザーを信頼することはできません 完全に作る入力を入力する 29 00:01:44,710 --> 00:01:45,800 私たちのプログラムのための感覚。 30 00:01:45,800 --> 00:01:50,670 だから我々は彼らを検証する必要があります コマンドライン入力。 31 00:01:50,670 --> 00:01:57,285 >> 代わりにint型のメイン空間を使用するのでは、我々はしている int型のmainはint argcは、文字列ARGVを使って。 32 00:01:57,285 --> 00:02:01,730 のargcが表す整数変数 に渡された引数の数 33 00:02:01,730 --> 00:02:02,880 コマンドライン。 34 00:02:02,880 --> 00:02:09,070 とargvは次のように配列であるか、それを考える 引数のリストが渡された 35 00:02:09,070 --> 00:02:12,000 >> だからシーザーのために、我々はどのように検証するか ユーザーの入力? 36 00:02:12,000 --> 00:02:15,870 まあ、彼らは唯一の入力すべきである 2つのコマンドライン引数 - 37 00:02:15,870 --> 00:02:18,150 。/シーザーとキー。 38 00:02:18,150 --> 00:02:22,340 argcは2でない場合、だから、それはつまり、 それらのいずれかのキーを忘れてしまったし、ちょうど 39 00:02:22,340 --> 00:02:27,230 入力。/シーザー、またはそれら 複数のキーを入力した。 40 00:02:27,230 --> 00:02:29,770 >> これが事実である場合は、よ 手順を印刷したい 41 00:02:29,770 --> 00:02:30,910 とプログラムを終了します。 42 00:02:30,910 --> 00:02:34,320 彼らは再試行する必要があります コマンドラインから。 43 00:02:34,320 --> 00:02:37,430 しかし、argcは2であっても、あなたはよ 彼らかどうかを確認する必要があります 44 00:02:37,430 --> 00:02:39,100 あなたに有効な鍵を与える。 45 00:02:39,100 --> 00:02:40,730 シーザーでは、整数値を必要とする。 46 00:02:40,730 --> 00:02:43,260 しかし、ARGVは、文字列の配列です。 47 00:02:43,260 --> 00:02:46,490 どのようにして、そのキーにアクセスできますか? 48 00:02:46,490 --> 00:02:47,850 >> 配列で簡単に見 - 49 00:02:47,850 --> 00:02:51,410 複数保持するデータ構造 同じデータ型の値。 50 00:02:51,410 --> 00:02:55,350 エントリはゼロインデックス付きであることを意味 最初の要素のインデックスはゼロです 51 00:02:55,350 --> 00:03:00,260 最後の要素は、インデックスサイズである サイズは数あるマイナス1、 52 00:03:00,260 --> 00:03:02,850 配列内の要素。 53 00:03:02,850 --> 00:03:07,380 >> 私は、新しい文字列配列のメールボックスを宣言した場合 長さ3の、視​​覚的に、それ 54 00:03:07,380 --> 00:03:08,570 このように見えます。 55 00:03:08,570 --> 00:03:11,520 文字列の3つのコンテナ 、サイドバイサイド。 56 00:03:11,520 --> 00:03:15,445 任意の要素にアクセスするには、名前を入力します 配列の、次に示す 57 00:03:15,445 --> 00:03:18,080 角括弧内のインデックス。 58 00:03:18,080 --> 00:03:21,610 ここで、私はそれぞれに値を代入しています 私はすべてで行うのと同じように要素、 59 00:03:21,610 --> 00:03:24,310 他の文字列変数。 60 00:03:24,310 --> 00:03:29,020 >> だから我々のコマンドライン引数にアクセスするには、 私たちがしなければならないすべてはアクセスです 61 00:03:29,020 --> 00:03:31,690 argv配列の右側の要素。 62 00:03:31,690 --> 00:03:37,360 ユーザーは、。/打ち上げチームを入力した場合 端子にロケット、argvは0だろう 63 00:03:37,360 --> 00:03:38,950 。/打ち上げである。 64 00:03:38,950 --> 00:03:45,010 ARGVはチームとなり arg2にはロケットでしょう。 65 00:03:45,010 --> 00:03:47,670 >> 今、我々は我々のキーにアクセスできることを、 我々はまだ確認する必要があり 66 00:03:47,670 --> 00:03:49,040 それが正しいことを確認してください。 67 00:03:49,040 --> 00:03:51,060 我々は、整数に変換する必要があります。 68 00:03:51,060 --> 00:03:54,680 しかし、我々は同じようにキャストすることはできません 我々は以前にやった。 69 00:03:54,680 --> 00:03:58,800 幸いにも、へY機能が面倒を見る 私たちのためにこれを、さらには0を返します 70 00:03:58,800 --> 00:04:02,110 文字列は、変換できない場合 整数に変換します。 71 00:04:02,110 --> 00:04:04,450 それは伝えるために、しかし、あなた次第です ユーザーは、なぜあなたはしません 72 00:04:04,450 --> 00:04:06,220 プログラムを続行することができます。 73 00:04:06,220 --> 00:04:10,710 でYにした結果を格納する 整数、あなたのキーをそこに持っています。 74 00:04:10,710 --> 00:04:12,070 次の部分は簡単です。 75 00:04:12,070 --> 00:04:15,940 、彼らのプレーンテキストの入力をユーザーに促す どのデータ型の文字列になります。 76 00:04:15,940 --> 00:04:18,339 幸いにも私たちのために、すべてのユーザーが入力した 文字列は有効です。 77 00:04:18,339 --> 00:04:21,170 78 00:04:21,170 --> 00:04:24,760 >> 今、我々は必要なすべての入力を持っていること ユーザから、それは私たちにとっての時間だ 79 00:04:24,760 --> 00:04:26,520 彼らのメッセージを暗号化。 80 00:04:26,520 --> 00:04:29,200 シーザーの概念は単純です 理解するには十分。 81 00:04:29,200 --> 00:04:33,750 しかし、どのようにコンピュータが知っている 手紙は、互いの後に来る? 82 00:04:33,750 --> 00:04:36,100 >> ASCIIテーブルは出番ここだ 83 00:04:36,100 --> 00:04:39,420 すべての文字は、整数を持つ それに関連付けられた番号。 84 00:04:39,420 --> 00:04:41,380 資本金65です。 85 00:04:41,380 --> 00:04:43,310 キャピタル·Bは66です。 86 00:04:43,310 --> 00:04:45,260 97で小文字。 87 00:04:45,260 --> 00:04:47,590 小文字のbが98である。 88 00:04:47,590 --> 00:04:50,770 しかし、文字が限定されるものではない ただアルファベット番号へ。 89 00:04:50,770 --> 00:04:56,020 たとえば、@記号 ASCII番号64です。 90 00:04:56,020 --> 00:04:59,690 >> 文字列全体を扱う前に、 我々は単にシフトしなければならないふりをみましょう 91 00:04:59,690 --> 00:05:01,220 一文字。 92 00:05:01,220 --> 00:05:04,640 さて、私たちは、実際のシフトさせたい プレーンテキストの文字ではなく、 93 00:05:04,640 --> 00:05:06,020 文字や数字。 94 00:05:06,020 --> 00:05:09,100 我々はしたいと思うように最初に チェックは、文字が入っているかどうかです 95 00:05:09,100 --> 00:05:10,430 アルファベット。 96 00:05:10,430 --> 00:05:14,460 >> 関数isalphaはがためにこれを行います 私たちとブール値を返します - 97 00:05:14,460 --> 00:05:18,570 文字であればtrueが、文字です そうでない場合はfalse。 98 00:05:18,570 --> 00:05:22,270 他の二つの便利な機能があります isupperはとislowerは、と 99 00:05:22,270 --> 00:05:23,860 自明の名前。 100 00:05:23,860 --> 00:05:27,370 彼らは与えられた文字あればtrueを返す 、大文字または小文字である 101 00:05:27,370 --> 00:05:28,740 それぞれ。 102 00:05:28,740 --> 00:05:33,770 それらはブール値であるので、それらは同じく 条件として使用すると便利。 103 00:05:33,770 --> 00:05:38,310 >> isalphaはがtrueを返した場合は、次のものが必要でしょう キーでその文字をシフトする。 104 00:05:38,310 --> 00:05:43,750 それでは、ASCIIMathに開いてみましょう といくつかのASCII数学を行う。 105 00:05:43,750 --> 00:05:48,700 usage使用法と非常によく似ています シーザー用とでキーに取り 106 00:05:48,700 --> 00:05:50,870 コマンドライン。 107 00:05:50,870 --> 00:05:59,590 >> 私はASCIIMath 5を実行する場合は、追加するようだ 5に、私に手紙fを与え、 108 00:05:59,590 --> 00:06:01,260 ASCII値が表示されます。 109 00:06:01,260 --> 00:06:04,090 それでは、プログラムを見てみましょう。 110 00:06:04,090 --> 00:06:11,820 >> あなたは正しいここで、なぜ、疑問に思うかもしれません それは時の手紙は、整数です 111 00:06:11,820 --> 00:06:14,330 明らかに、まあ、手紙。 112 00:06:14,330 --> 00:06:17,690 それは、その文字が判明し、 整数では互換性があります。 113 00:06:17,690 --> 00:06:21,730 単一の文字を入れて 整数が格納できる引用符、 114 00:06:21,730 --> 00:06:25,390 資本のASCII値 A.は、しかし、注意してください。 115 00:06:25,390 --> 00:06:27,150 単一の服が必要です。 116 00:06:27,150 --> 00:06:31,260 単一引用符は必要ありません、 コンパイラは、変数を探します 117 00:06:31,260 --> 00:06:35,510 キャラクターの名前ではなく、。 118 00:06:35,510 --> 00:06:42,140 >> それから私は、保存、文字とキーを追加 int型の変数に結果の合計。 119 00:06:42,140 --> 00:06:47,740 その結果、データ型であるにもかかわらず 整数、私のprintf文では使用してい 120 00:06:47,740 --> 00:06:50,370 文字の%Cプレースホルダ。 121 00:06:50,370 --> 00:06:54,530 だから、プログラムは文字を出力 整数の結果に関連付けられている。 122 00:06:54,530 --> 00:07:00,400 そして、私たちは整数を印刷以来 形だけでなく、%dを使用して、我々が表示さ 123 00:07:00,400 --> 00:07:02,110 数字だけでなく、。 124 00:07:02,110 --> 00:07:04,450 だから今、あなたは見ることができ、私たち 文字を治療し、 125 00:07:04,450 --> 00:07:06,980 整数、逆もまた同様である。 126 00:07:06,980 --> 00:07:12,205 >> ASCIIMathいくつかをテストしてみましょう キーとして25を使用して複数回。 127 00:07:12,205 --> 00:07:15,510 128 00:07:15,510 --> 00:07:17,090 私たちは、文字Zを得る。 129 00:07:17,090 --> 00:07:19,750 今我々は26を試してみてください。 130 00:07:19,750 --> 00:07:25,600 私たちは、文字を取得したいが、 代わりに、我々は左のブラケットを得る。 131 00:07:25,600 --> 00:07:29,490 だから明らかに、単に追加 手紙への鍵はしないだろう。 132 00:07:29,490 --> 00:07:32,780 私たちは、ラップする計算式を把握する必要があり アルファベットの周りに、私たちのような 133 00:07:32,780 --> 00:07:34,570 最初の例ではなかった。 134 00:07:34,570 --> 00:07:38,520 >> シーザーのための式 シフトは次のとおりです。 135 00:07:38,520 --> 00:07:42,750 Cは、pプラスKモジュロ26に等しい。 136 00:07:42,750 --> 00:07:46,040 モジュロが有用であることを忘れないでください 私たちの余りを与える操作 137 00:07:46,040 --> 00:07:49,880 他ずつ数を割った。 138 00:07:49,880 --> 00:07:54,870 平野には、この計算式を適用してみましょう 2のキーを使用してテキスト文字。 139 00:07:54,870 --> 00:08:01,810 yのASCII値は、89である モジュロ26は、私たちに91を与え 140 00:08:01,810 --> 00:08:03,690 それは13に等しい - 141 00:08:03,690 --> 00:08:08,740 間違いではないASCII値 、その67ですの。 142 00:08:08,740 --> 00:08:12,810 >> 今私をユーモアとから離れる アルファベット順のインデックスにASCII値 143 00:08:12,810 --> 00:08:18,690 ゼロであり、Zは、25である Yは24であることを意味する。 144 00:08:18,690 --> 00:08:25,830 24プラス2、モジュロ6は、私達に26を与え あるモジュロ26、0、 145 00:08:25,830 --> 00:08:28,170 のアルファベット順のインデックス。 146 00:08:28,170 --> 00:08:32,980 したがって、この式では、に適用されるように見える アルファベットの文字のインデックスと 147 00:08:32,980 --> 00:08:34,960 はなく、そのASCII値。 148 00:08:34,960 --> 00:08:37,630 >> しかし、あなたはASCII値で始まります。 149 00:08:37,630 --> 00:08:41,650 と暗号文の文字を印刷するには、 あなたにもそのASCII値が必要になります。 150 00:08:41,650 --> 00:08:46,400 それは把握し、その後、あなた次第です 前後に切り替える方法。 151 00:08:46,400 --> 00:08:49,850 >> たら、右の式を見つけ出す あなたがする必要がある一つの文字のために、すべての 152 00:08:49,850 --> 00:08:53,520 毎に同じ計算式を適用している プレーンテキストの文字 - 153 00:08:53,520 --> 00:08:57,720 その文字はアルファベットである場合にのみ、 もちろん。 154 00:08:57,720 --> 00:09:02,360 そして、あなたが保持する必要があることを覚えておいてください 大文字または小文字、、だ 155 00:09:02,360 --> 00:09:06,890 isupperはとislowerは機能 言及は、以前の便利になるだろう。 156 00:09:06,890 --> 00:09:08,830 あなたは、2つの式があるかもしれない - 157 00:09:08,830 --> 00:09:11,680 大文字のために1 と小文字のために1。 158 00:09:11,680 --> 00:09:18,420 だからislowerは、あなたを助けるisupperは 適用する式を決定します。 159 00:09:18,420 --> 00:09:22,460 >> どのようにすべてのへの式を適用しない 文字列内の単一の文字? 160 00:09:22,460 --> 00:09:25,910 さて、文字列だけである 文字の配列。 161 00:09:25,910 --> 00:09:31,150 だから、それぞれの文字にすることによってアクセスすることができます 内のすべての文字の上にグループ化 162 00:09:31,150 --> 00:09:33,450 forループ内の文字列。 163 00:09:33,450 --> 00:09:37,550 ループについては、の条件については、 文字列用の関数strlenは、 164 00:09:37,550 --> 00:09:39,280 長さは、便利になるだろう。 165 00:09:39,280 --> 00:09:44,020 それは、入力として文字列を取り込み、 その文字列の長さを返します。 166 00:09:44,020 --> 00:09:49,250 右のライブラリが含まれていることを確認してください 文字列の長さの関数を使用する。 167 00:09:49,250 --> 00:09:51,790 >> そして、あなたはあなたの暗号文をそこに持っています。 168 00:09:51,790 --> 00:09:53,260 私の名前はZamylaです。 169 00:09:53,260 --> 00:09:54,510 と[話すCODE]。 170 00:09:54,510 --> 00:10:02,944