ここでは、Caesarの暗号を使用してメッセージを暗号化できるcaesarというプログラムを作成します。ユーザはプログラムを実行するときに、コマンドライン引数を指定して、実行時に提供する秘密メッセージ内のキーを決定する必要があります。ユーザのキーが数字であると必ずしも仮定すべきではありません。数値の場合は正の整数でなければなりません。プログラムの動作例をいくつか示します。ユーザが1のキーとHELLOというプレーンテキストを入力したとします。worldのプレーンテキストを入力すると、プログラムは次のように動作します。されていないことに注意してください。英字のみをシフトさせます。ひとつ試してみましょう。ユーザが再び13の鍵をもっと複雑な平文で示した場合、プログラムはどのように動作するかを以下に示します。Binygvarなぜでしょうか?元のメッセージの大文字と小文字が保持されていることに注意してください。小文字は小文字のまま、大文字は大文字のままです。ユーザが指示に従わない場合はどうなりますか。keyユーザが全く指示に従っていない場合はどうでしょう。key試してみましょうスタッフによるこの問題の実装をテストするには、次のコマンドを実行します。keyこのサンドボックス内で、keyの代わりに有効な整数を代入します。仕様Caesarの暗号を使用してメッセージを暗号化するプログラムcaesarを設計および実装します。caesarというディレクトリにあるcaesar.cというファイルにプログラムを実装します。受け入れる必要があります。議論のためにkとしましょう。keyというメッセージを出力し、mainから値1が返されます。kが26以下であると仮定しないでください。-26より小さいkのすべての非負の整数値に対して機能するはずです。(intはオーバーフローする可能性があることを思い出してください)。kが26より大きい場合でも、プログラムの入力のアルファベット文字は、プログラムの出力のアルファベット文字のままである必要があります。[ではなく、ZからAに戻るとしてAから27離れた位置にあるBになります。プレーンテキストのstringを要求しなければなりません。ciphertext:を出力しなければなりません。アルファベット以外の文字はそのまま出力されます。プログラムは大文字と小文字を保持する必要があります。大文字はずらしても大文字のままである必要があります。小文字はずらしても小文字のままである必要があります。暗号文を出力した後、改行を出力する必要があります。プログラムはmainに0を返して終了するはずです。やって始めますか?この問題に一歩ずつ取り組みましょう。擬似コードまず、たとえどのようにコードを実装するか定かでなくても、疑似コードを考えてみてください。疑似コードを書く正しい方法は1つではありませんが、短い英文で十分です。Smithで擬似コードを書いたことを思い出してみましょう。疑似コードでは1つ以上の関数、条件、ブール式、ループ、または変数が使用されるでしょう。ネタバレ複数の方法がありますが、ここでは1つだけを紹介します。プログラムが1つのコマンドライン引数で実行されたことを確認します。指定された引数を繰り返して、すべての文字が数字であることを確認します。コマンドライン引数をstringからintに変換します。平文の各文字を繰り返します。大文字の場合は、大文字を保持したままシフトしてから、シフトした文字を表示します。小文字の場合は、小文字を保持したままシフトしてから、シフトした文字を表示します。どちらでもない場合は、文字をそのまま表示します。この擬似コードを参考に自分で疑似コードを編集してかまいませんが、これを単にコピー&ペーストするのはやめてください。コマンドライン引数のカウント擬似コードが何であれ、追加機能を追加する前に、プログラムが単一のコマンドライン引数で実行されたかどうかをチェックするCコードのみを最初に記述します。具体的には、caesar.cを次のように変更します。ユーザがコマンドライン引数を1つだけ指定した場合、Successと表示します。keyと表示されます。このキーはget_string経由ではなく、実行時にコマンドラインから取得されるため、ユーザに再度プロンプトを表示することはできません。結果のプログラムの動作は次のようになります。keyヒントmakeを使ってプログラムをコンパイルできることを思い出してください。printfで表示できることを思い出してください。argcとargvは、コマンドラインで何が提供されたかについての情報を提供することを思い出してください。プログラム自体の名前(./caesar)はargv[0]にあることを思い出しましょう。指定された入力を受け入れ、次のステップに進みます。提供しますが、実際には整数ではないものを入力するユーザに対して対応する必要があることを思い出してください。xyzただし、キーの有効性を分析する前に、キーが実際に読めることを確認します。caesar.cをさらに変更して、ユーザがコマンドライン引数を1つだけ指定したかどうかをチェックするだけでなく、それを確認した後、その1つのコマンドライン引数を出力するようにします。動作は次のようになります。20Success20ヒントargcとargvは、コマンドラインで何が提供されたかについての情報を提供することを思い出してください。argvは文字列の配列であることを思い出してください。printfでは、プレースホルダとして%sを使用して文字列を出力できることを思い出してください。コンピュータ科学者は0から数えるのが好きだということを思い出しましょう。argv[0]のように角括弧を使ってargvのような配列の個々の要素にアクセスできることを思い出してください。キーの検証キーの読み方がわかったので、キーを分析します。keyというメッセージを出力した後で終了するようにします。(argvは文字列の配列であることを思い出してください。実際の整数に変換し、printfを使用して%i経由で整数を出力する必要があります。動作は次のようになります。keyヒントargvは文字列の配列であることを思い出してください。文字列は単なる文字の配列であることを思い出してください。string.hヘッダファイルには、文字列を処理する便利な関数がいくつか含まれています。文字列の長さがわかっていれば、ループを使って文字列の各文字を繰り返し処理できることを思い出してください。ctype.hヘッダファイルには、文字に関する情報を提供する便利な関数がたくさん含まれていることを思い出してください。プログラムが正常に終了しなかったことを示すために、mainから0以外の値を返すことができることを思い出してください。printfで%iをプレースホルダとして使って整数を出力できることを思い出してください。atoi関数は、数値に似た文字列をその数値に変換することを思い出してください。言える以上、上記の公式を直感的に理解することは容易です。コンピュータは同じ論理を理解できるのでしょうか?調べてみましょう。ここでは、ユーザが入力したキーを一時的に無視し、代わりにユーザに秘密のメッセージを要求して、そのすべての文字を1だけずらします。caesar.cの機能を拡張し、キーを検証した後、ユーザに文字列の入力を求め、すべての文字を1ずつシフトして結果を出力するようにします。この時点で、Successを出力するコード行を削除することもできます。この結果、次のような動作になるでしょう。ifmmpヒント平文のすべての文字を繰り返し処理し、文字どおり1を加えてから、それを印刷してみてください。今こそ、すべてを1つにまとめるときです。文字を1ずつシフトするのではなく、caesar.cを変更して実際のキー値だけシフトします。文字の大小はそのままにしてください!大文字は大文字のまま、小文字は小文字のまま、アルファベット以外の文字は変更しないでください。演算子%を使用するのが最適です。するのでしょうか?前のセクションで説明した方法を使用してZまたはzを1でラップしようとすると、状況がおかしくなります。このテクニックを使って句読点もラップしようとすると、状況がおかしくなります。ASCIIはすべての印刷可能な文字を数字にマップすることを思い出してください。AのASCII値は65であることを思い出しましょう。aのASCII値は97です。printfを呼び出しても出力がまったく表示されない場合は、0から127までの有効なASCII範囲外の文字を印刷している可能性があります。%cではなく%iを使用して数字として文字を印刷してみて、印刷する値を確認し、有効な文字だけを印刷しようとしていることを確認してください。ウォークスルーコードのテスト方法check50を使用して以下を実行し、コードの正確さを評価してください。コンパイルとテストは必ず自分で行ってください。cs50/problems/2021/x/caesar以下を実行し、style50を使用してコードのスタイルを評価します。次のコマンドを実行し、GitHubのユーザ名とパスワードを入力してログインします。languages.。