JavaRush /Java Blog /Random-JA /ハーバード CS50: 第 2 週の課題 (講義 5 および 6)
Masha
レベル 41

ハーバード CS50: 第 2 週の課題 (講義 5 および 6)

Random-JA グループに公開済み
cs50 の講義 5 と 6 の課題 CS50 の講義はここにあります: https://cdn.javarush.com/images/article/155cea79-acfd-4968-9361-ad585e939b82/original.pngcs50.html。この資料には 3 つのタスク、それらに関する理論的な情報、およびアクションのガイドが含まれています。

目標

• 関数とライブラリをさらに深く理解する • 暗号化に慣れ、いくつかの簡単な暗号を実装する

追加資料

https://reference.cs50.net/ - トレーニング中に使用するライブラリ関数の説明。英語で。 http://computer.howstuffworks.com/c.htmページ 11 ~ 14 および 39

準備

cs50.io にログインして、 update50 ワークスペースのバージョンが最新であることを確認します。誤ってターミナル ウィンドウを閉じた場合は、[表示] メニューに移動し、[コンソール] 項目の横にチェックマークがあることを確認します (オンになっていない場合はチェックしてください)。 ハーバード CS50: 第 2 週の課題 (講義 5 および 6) - 1 (+) をクリックし、ターミナル ウィンドウのフレーム上の緑色の円の内側で、[新しいターミナル]を選択します。 ハーバード CS50: 第 2 週の課題 (講義 5 および 6) - 2 作業ディレクトリを作成します。 mkdir~/workspace/pset2mkdir ~/workspace/pset2 の間にスペースがあることに注意してください。要約すると、~ はルート ディレクトリを意味し、~/workspaceはルート ディレクトリ内の workspace というフォルダー、~/workspace/pset2は~/workspace内のpset2というディレクトリを意味します。ここで次を実行して、 新しいディレクトリに変更します。コマンド ラインは次のようになります。 何か問題がある場合は、手順を繰り返します。コマンドを呼び出して、 最後のいくつかのコマンドを時系列で表示することもできます。コマンド ラインにカーソルを置き、キーボードの上矢印を押すと、最後に入力したコマンドから最初に入力したコマンドまでの順序ですべてのコマンドを表示することもできます。下ボタンで戻ることができます。ちなみに、毎回同じコマンドを入力する代わりに、すでに入力したコマンドをスクロールし、Enter キーを押して再度実行することもできます。デビッドが講義でまさにこれを行っていることに気づいたかもしれません。2 週目のタスクはpset2に保存する必要があります。 cd ~/workspace/pset2username:~/workspace/pset2 $history

タスク 0. 初期化

線を詳しく見てみましょう。Initials.cファイルに、ユーザーの名前を要求し (GetString 関数を使用して名前を文字列として取得します)、名と姓の最初の文字をスペースを入れずに大文字で表示するプログラムを作成します。ピリオドまたはその他の文字は、改行 ( \n ) のみを使用します。ユーザーは文字 (小文字、大文字、またはその両方) と単語の間に 1 つのスペースのみを入力すると想定しています。ジョセフ・ゴードン=レヴィット、コナン・オブライエン、デヴィッド・J・マランという名前の人たちはこのプログラムを使用しないだろうと考えてください。 プログラムが正しく動作するかどうかを確認するには、check50 を呼び出します 。CS50 スタッフが用意したプログラムの実装を試してみますか? 次の行を入力します。 username:~/workspace/pset2 $ ./initials Zamyla Chan ZC username:~/workspace/pset2 $ ./initials robert thomas bowden RTBcheck50 2015.fall.pset2.initials initials.c~cs50/pset2/initials
暗号化
暗号学、情報の暗号化と解読の科学...実際、暗号化されたメッセージは古代から存在しており、秘密のメッセージを送信するために軍隊によって使用されていました。さて、Facebook やその他のネットワーク上のパスワードは暗号化された形式で保存されています。

タスク 1. 万歳、シーザー!

理論情報
私たちは最も単純な暗号の 1 つであるローマ皇帝にちなんで名付けられたシーザー暗号を研究します。この暗号では、テキストの各文字が、アルファベットの下位の固定数の文字に置き換えられます。この固定数の文字をキーと呼びます。したがって、キー 1 はラテン文字 C を文字 D に変換し、サイクルを通じて Z を A に変換します。キーが 3 の場合、文字 C は F に変換され、Z は C に変換されます。 例:シーザー暗号を次のように使用します。猫という単語のキー 5。 c -> h a -> f t -> y Caesar (cat, 5) = hfy キー = 7、ワード = コンピューター c->j o->v m->t p->w u->b t->a e->l r->y Caesar(computer,7) = jvtwbaly ハーバード CS50: 第 2 週の課題 (講義 5 および 6) - 3 シーザー暗号はシンプルですが、残念なことに信頼性がありません (これらは相互に関連しているものです!): 英語のアルファベットの場合、暗号化オプションは 25 しかありません。コンピューターがなくても、すべてのオプションを簡単に実行できます。ただし、シーザー暗号は、ヴィジェネール暗号 (詳細は次の段落で説明します) など、他の暗号のステップとしてよく使用されます。シーザー暗号を「数学化」してみましょう。平文を文字 p で表します。pi は、テキスト p 内の位置番号 i にある文字です。秘密鍵の文字を k、c を暗号文、ci を暗号文内の位置 i にある文字と呼びます。次に、次の式を使用して暗号の各文字を計算できます。 ci = (pi + k) % 26 この形式化に慣れると、アルゴリズムをプログラムし、暗号の意味を正確かつ簡潔に表現できるようになります。キー k = 13 で、元のテキスト p が「必ずオバルチンを飲んでください!」である場合、これが得られる暗号です: Or fher gb qevax lbhe Binygvar! O (暗号文の最初の文字) は文字 B (暗号文の最初の文字) から 13 位置シフトされていることに注意してください。原文の最初の文字)。文字 r (暗号化の 2 番目の文字) も同様で、e (元の 2 番目の文字) から 13 文字シフトされます。暗号化の 3 番目の文字 f は、s (元の 3 番目) から 13 文字シフトされています。ここでは、z から a まで円を描きます。キー 13 のシーザー暗号には、ROT13 という特別な名前が付いています。これは対称的であり、2 回適用すると元のテキストに戻ります。もちろん、ROT26 もあります。これは一般的に非常に安全ですが、自分の考えを明確に表現しない場合に限ります =)。
状態
ファイルcaesar.cに、 Caesar 暗号を使用してテキストを暗号化するプログラムを書き込みます。プログラムへの入力として 1 つのコマンド ライン引数 (負でない整数) を指定します。簡単にするために、それを k と呼びます。ユーザーがコマンド ライン引数なし、または複数の引数を指定してプログラムを実行した場合、アプリケーションはエラーを表示して値 1 を返す必要があります (通常、エラーはこのように示されます)。 return 1; それ以外の場合はすべて、プログラムはユーザーにテキストの入力を求めます。暗号化してから、キー k (つまり、サイクルに沿って k 位置を右にシフト) で暗号化されたテキストを表示します。テキストに英語のアルファベット以外の文字が含まれている場合、プログラムはそれらを変更しません。暗号文を出力した後、アプリケーションは終了し、main は0 を返します 。mainreturn 0;明示的に 0 を返さない 場合は、自動的にそれを返します (実際には main の戻り値の型は int ですが、これについてはまた別の機会に説明します)。慣例 (プログラミングにおける正しい形式の規則) に従って、エラーを示すために明示的に 1 を返す場合は、プログラムが正常に完了したことへのポインターとして 0 も返す必要があります。英語のアルファベットには 26 文字しかありませんが、k は 26 より大きくても構いません。基本的に、キー k = 27 は k = 1 と同じ結果を返しますが、ユーザーが負でない任意の数値を入力できるようにする必要があります。 2^31 – 26 を超える (int に収まる必要があります)。プログラムでは、小文字は小文字で暗号化され、大文字は大文字で暗号化されることも考慮する必要があります。どこから始めましょうか? アプリケーションは引数文字列で k の値を直接受け入れる必要があるため、メイン関数のヘッダーは次のようになります。 第 6 章から、argvが文字列の配列であることがわかります。この配列は、ジムのロッカーの列と考えることができます。それぞれに何らかの意味が隠されています。この場合、各セル内に「 最初のロッカーを開くには argv[0]、2 番目のロッカーを開くには argv[1] など」のような引数があります。n 個のロックがある場合、argv[n - 1] で停止する必要があります。argv[n] はもう存在しないからです (または、存在しますが、他の誰かに属しているため、触れないほうがよいでしょう)。したがって、次のように引数 k にアクセスできます。 int main(int argc, string argv[])stringstring k = argv[1]; 私たちはそこに本当に何かがあると信じています!argc は argv の行数と等しい int 変数であることを思い出してください。これは、argc の値が存在しないことが判明する可能性があるため、セルを開こうとする前に argc の値を確認する方がよいことを意味します。理想的には argc = 2 ですが、なぜそうなるのでしょうか? argv[0] の中には通常、プログラムの名前が入ります。つまり、argc は常に少なくとも 1 です。しかし、プログラムではユーザーがコマンド ライン引数 k を指定する必要があるため、argc = 2 となります。当然、ユーザーがコマンド ラインに複数の引数を入力すると、argc も大きくなり、 2 より大きいこと ユーザーが文字列に整数を入力した場合、入力された値が自動的に int として保存されるわけではありません。より正確に言えば、そうではありません。たとえそれが int のように見えたとしても、それは文字列になります。したがって、文字列を自分で int に変換する必要があります。幸いなことに、この目的のために設計された atoi と呼ばれる関数があります。その構文は次のとおりです。 int k = atoi(argv[1]); k は int 型なので、算術演算ができることに注意してください。この関数を使用すると、ユーザーが整数を入力するか、たとえば foo を入力するかを心配する必要はありません。その場合、atoi は 0 を返します。 atoi 関数は stdlib.h ライブラリで宣言されているため、必ず #プログラムの先頭に含めてください。この関数はすでにcs50.hライブラリに含まれているため、コードはこれなしでコンパイルされます。ただし、ネイティブ ライブラリを信頼する方が良いでしょう。したがって、 k を int として保存しました。次に、テキスト入力を求めてみましょう。最初の週の課題を完了した場合は、GetString と呼ばれる CS50 ライブラリ関数にすでに慣れているでしょう。彼女は私たちを助けてくれるでしょう。k と最初のテキストを受け取ったら、暗号化を開始しましょう。要約すると、次のループを使用して、文字列のすべての文字を反復処理し、それらを出力できます 。for (int i = 0, n = strlen(p); i < n; i++) { printf("%c", p[i]); } つまり、argvが文字列の配列であるのと同じように、stringは文字の配列です。したがって、角括弧を使用すると、argv で個々の文字列を取得するのと同じ方法で個々の文字列要素にアクセスできます。もちろん、各文字の印刷には暗号的なものは何もありません。または、技術的には、k = 0 の場合です。しかし、シーザーがテキストを暗号化するのを手伝わなければなりません。万歳、シーザー!strlen を使用するには、別のライブラリをインクルードする必要があります。いくつかの検証テストを自動化しているため、プログラムは次のように動作するはずです。 atoiusername:~/workspace/pset2 $ ./caesar 13 Be sure to drink your Ovaltine! Or fher gb qevax lbhe Binygvar! 以外にも、 ctype.hおよびstdlib.hライブラリには他の優れた関数があります。これを行うには、リンクに従って、そこを少し調べてください。たとえば、isdigital は 明らかに興味深いものです =)。Z から A (または z から a) に移動するときは、モジュロ演算子%を忘れないでください。C 言語のも調べてください。文字だけでなく ASCII 文字も表示されます。check50を使用してプログラムが正しく動作していることを確認するには、次の手順を実行します。 check50 2015.fall.pset2.caesar caesar.c また、CS50 スタッフが作成したコードを試してみたい場合は、次のコマンドを実行します ~cs50/pset2/caesar 。 ちなみに、uggc://jjj.lbhghor.pbz/jngpu ?i=bUt5FWLEUN0
タスクの分析
  1. 鍵を入手する
  2. テキストを取得する
  3. 暗号化する
  4. 暗号化されたメッセージを表示する
1. ユーザーがコマンドラインにキーを入力し、キーが正しいかどうかをチェックするように main 関数を作成します。 int main(int argc, string argv[]) argc: • int • コマンドラインに入力された引数の数 • argc = 2 の場合、すべて問題ありません。そうでない場合は、指示を出力してプログラムを閉じます。• argc = 2 の場合、キーが整数かどうかを確認します。 • Argv は文字列の配列、引数が入力されたリストです。 配列は、異なるセルに同じ型の異なるデータを含むデータ構造です。 ハーバード CS50: 第 2 週の課題 (講義 5 および 6) - 4 たとえば、ユーザーは文字列「blastoff Team Rocket」を入力し、次のようにします。 ハーバード CS50: 第 2 週の課題 (講義 5 および 6) - 5 atoi() 関数を使用して、結果の数値を整数に変換します。これが不可能な場合、関数は 0 を返します。 ハーバード CS50: 第 2 週の課題 (講義 5 および 6) - 6 2. ユーザーにテキストの入力を求めます。それは簡単です。ユーザーが入力するものはすべて文字列です。3. 暗号化。アルゴリズムは単純ですが、どの文字が次々に来るかをどうやってコンピューターに説明できるでしょうか? ASCII テーブルを覚えてみましょう。 ハーバード CS50: 第 2 週の課題 (講義 5 および 6) - 7 ただし、文字列には文字以外の文字も含まれる場合があります。文字列の変更に進む前に、変更する必要があるのは 1 文字だけであると想像してください。記号や数字ではなく、最初のテキストの文字を変更したいと考えています。私たちは何をすべきか?まず、この文字がアルファベットに含まれるかどうかを確認する必要があります。これはisalpha()関数を使用して実行できます。文字がアルファベットの場合、この関数は true を返し、それ以外の場合は false を返します。さらに 2 つの便利な関数 - isupper()is lower() は、それぞれ文字が大文字または小文字の場合に true を返します。したがって、 Isalpha(‘Z’) -> true Isalpha(‘;’) -> false Isupper(‘Z’) ->true Isupper(‘z’) -> false Islower(‘Z’) -> false Islower(‘z’)->true isalpha が true を返した場合、キーを使用してこの文字を変更する必要があります。例として、CS50 アシスタントである Zamili のプログラムを検討して分析してみましょう。 「A」は明らかに文字であるのに、なぜ整数なのか疑問に思われるかもしれません。記号と整数は互換性があることがわかります。文字 A を一重引用符で囲むと、その ASCII コードを int で取得できます。注意: 一重引用符が必要です。一重引用符がないと、コンパイラはシンボルではなく A という名前の変数を検索します。次に、行内で 文字の ASCII コードにキー値を追加し、整数変数に格納します。結果が int であっても、printf ステートメントでは文字に %c プレースホルダーが使用されます。したがって、プログラムは整数の結果に関連付けられた文字を出力します。2 番目のケースでは、%d プレースホルダーを使用して数値を表示します。このコードを cs50 IDE に入力して試してみることができます。さまざまなキーに対して asciimath がどのように機能するかを確認してみましょう。値を 25 にすると、次の図が表示されます: そして、キーを 26 にします: [ を取得しましたが、文字 A はまったくありません。これは、Z の次の ASCII 文字にすぎません。したがって、単にキーを追加するだけでは機能しません。仕事。文字がなくなったらすぐにアルファベットの先頭に戻る暗号式を使用する必要があります。上ですでに書いたことを思い出してください。 /* * asciimath.c * by Zamyla Chan * * Calculates the addition of a char and an integer, * and displays both the resultant character and its * ASCII value. * * Usage: ./asciimath key [char] * */ #include #include #include int main(int argc, string argv[]) { if (argc != 2) { printf("print the key next time \n"); return 1; } // key is the second command line argument int key = atoi(argv[1]); //преобразование строки в int int letter = 'A'; printf("\nCalculating '%c' + %d...\n", letter, key); int result = (letter + key); printf("The ASCII value of %c is %d.\n\n", result, result); return 0; } int result = (letter + key);ハーバード CS50: 第 2 週の課題 (講義 5 および 6) - 8ハーバード CS50: 第 2 週の課題 (講義 5 および 6) - 9ci = (pi + k) % 26 ここで、ci は暗号文の文字番号 i、pi は平文の文字番号 i、k はキー、%26 は 26 で割った余り (または「モジュロ 26」) です。この式を文字 Y に適用しましょう。k = 2 とします。文字 'Y' = 89 の ('Y' + 2) %26 ASCII コードを計算します。次に、('Y' + 2) %26 = (89 + 2) )% 26 = 91%26 = 13 しかし、これは必要な文字 A の ASCII 値、つまり 65 ではありません。次に、アルファベットの各文字に 0 から 25 までの値を順番に与えてみましょう。この場合、Y = 24. (24+2)%26 = 0 文字 A はまさにそのようなインデックスを持ちます。したがって、この式は文字の ASCII 値ではなく、アルファベット順のインデックスを参照します。暗号化された文字を印刷するには、その ASCII 値が必要です。そして、ASCII 値とアルファベットの数字を切り替える方法を理解してください。1 つの文字の公式を理解したら、それをキーボードから入力された文字列の各文字に適用する必要があります。ただし、それが文字である場合に限ります。大文字と小文字では異なる意味が必要であることを覚えておいてください。ここで isupper 関数と is lower 関数が役に立ちます。2 つの式があり、1 つは大文字用、もう 1 つは小文字用である場合、関数はどちらを適用するかを選択するのに役立ちます。文字列内のすべての文字に数式を適用するにはどうすればよいですか? 文字列は単なる文字の配列であることに注意してください。strlen関数(文字列の長さ) は、ループ内の反復回数を決定するのに役立ちます。ハーバード CS50: 第 2 週の課題 (講義 5 および 6) - 10

タスク 2. フランスをパリに行きますか?

理論
ヴィジェネール暗号はシーザー暗号よりもいくらか安全です。単語をキーとして使用し、周波数分析やブルート フォースのみを使用して手動で解読するのは困難です。キーの各文字は数字を生成し、その結果、文字をシフトするための複数のキーが得られます。 例: p = Meet me in the park at eleven am В качестве ключевого слова возьмем k = bacon Длина messages p = 25 В то время How длина k = 5 Поэтому его нужно повторять 5 раз. ハーバード CS50: 第 2 週の課題 (講義 5 および 6) - 11 メッセージ内の文字数がキーで割り切れない場合は、キーの最後の適用でその一部のみを使用します。 ハーバード CS50: 第 2 週の課題 (講義 5 および 6) - 12 オフセットの値を見つけるには、ベーコン キーの各文字の位置を使用します。アルファベット(aからzまで)です。私たちは真のプログラマーと同じように、ゼロから数えます。そして、シーザー暗号のように、元のテキストの各文字は指定された数だけシフトされ、必要に応じて Z の後にアルファベットの先頭に戻ります。したがって、M は 1 だけ移動し、最初の e はまったく移動せず、2 番目の e は 2 位置移動します。以下に、元のメッセージ、書き込まれたキー、およびその適用結果が表示されます。 ハーバード CS50: 第 2 週の課題 (講義 5 および 6) - 13 もちろんヴィジュネール暗号の方が強力ですが、鍵の長さを知っていれば、解読するのは非常に簡単です。それを識別するにはどうすればよいですか? 元のテキストが十分に長く、一部の単語がその中に複数回出現する場合、いくつかの繰り返しが表示されます。 ハーバード CS50: 第 2 週の課題 (講義 5 および 6) - 14 総当たりを使用することもできますが、多くのオプションがあります: 26^n – 1 (n は未知のキーの長さ) 。しかし、通常はこれが多いです。確かに、これはコンピュータにとっては問題ではありません。さて、暗号の数学: p をテキスト、k をキーワード、kj をキーの j 番目の文字、pi を元のテキストの文字番号 i、ci を暗号化の文字番号 i とします。 。それから: ci = (pi + kj) % 26
エクササイズ
条件 Vigenere 暗号を使用してメッセージを暗号化するプログラム vigenere.c を作成します。プログラム入力に 1 つのコマンド ライン引数、つまり英語のアルファベットの文字で構成されるキーワード k を指定します。複数の引数やアルファベットに含まれない引数を指定してアプリケーションを起動した場合は、エラー情報を表示してプログラムを終了する必要があります。つまり、main は 1 を返します。この場合、自動テストはここではすべてが正常であることを認識し、この条件が考慮されます。すべてが順調であれば、プログラムはテキスト文字列 p の要求に進み、上で取得したキー k で暗号化し、結果を出力して値 0 を返してプログラムを完了し ます 。 k 文字 A と a は 0、B と b は 1、...、Z と z は 25 として指定されます。プログラムは、テキスト p の文字にのみヴィジェネール暗号を適用する必要があります。残りの文字 (数字、句読点、スペース) は変更せずに出力する必要があります。アルゴリズムが j 番目の文字k をアルファベットにないi 番目の文字pに適用する場合、その j 番目のキー文字をテキスト内の次のアルファベット文字に適用します。それをそのままにして、k の別のキャラクターに移ることはできません。最後に、プログラムはp内の各文字の大文字と小文字を保持する必要があります。
どこから始めればよいかわかりませんか?
ハーバード CS50: 第 2 週の課題 (講義 5 および 6) - 15
CS50 コース アシスタントの Zamilya からのヒントをいくつか紹介します。
幸いなことに、このプログラムはシーザー暗号に非常に似ており、キーが整数ではなく文字列であることだけが異なります。ローマの統治者の名前の暗号の実装に成功した場合は、2 番目のタスクの素晴らしいスタートとなる可能性があります。1 文字をキーとするヴィジュネール暗号がシーザー暗号と同じであることはすでにお気づきかと思います。Vigenère アルゴリズムは、Caesar と同じ手順を使用します。
  1. 鍵を入手する
    • codeword は 2 番目のコマンドライン引数 argv[1] です。
    • アルファベットでなければなりません: isalpha 関数
  2. テキストを取得する
  3. 暗号化する
  4. 暗号文を印刷する
そこで、2 番目のコマンド ライン引数 argv[1] がアルファベット文字に属しているかどうかを確認してみましょう。これは、すでにおなじみのisalphaを使用して行います。キーが正しい場合は、ユーザーから文字列を受け取り、暗号化を開始します。ヴィジュネールの暗号式はシーザーの暗号式に似ています。文字を対応する暗号オフセットに変換するにはどうすればよいでしょうか? ASCII テーブルを使用して値を比較してみてください。 ハーバード CS50: 第 2 週の課題 (講義 5 および 6) - 16 おそらく、表内のシーケンスを使用して、文字とそのアルファベットインデックスの間のパターンを見つけることができるでしょう。望ましい結果を得るために、ある文字から別の文字を減算する方法を理解しましたか? 大文字と小文字のオフセットは同じであるため、小文字のオフセットと大文字のオフセットを個別に決定するには、2 つの同様の式を定義する必要があります。また、テキスト ループでは英語以外の文字を無視する必要があることにも注意してください。大文字と小文字を区別しないことを忘れないでください。暗号式を見ると、 ci = (pi + kj) % 26 2 つのインデックス変数 i と j が表示されます。1 つはソース テキスト内の位置を保存し、もう 1 つはキーに保存します。テキストがキーより長い場合、キーのインデックスはキーの末尾から先頭に戻ります。どうやってするの?モジュロ除算演算を使用してください! 演算の結果は、2 つの数値を除算した余りになります。プログラミングにおけるこの操作の実際的な利点は非常に大きいです。大きなグループを 3 つのサブグループに分割する必要があると想像してください。これを行う 1 つの方法は、1 回目、2 回目、3 回目の料金を支払ってもらうことです。 ハーバード CS50: 第 2 週の課題 (講義 5 および 6) - 17 つまり、最初の人は最初のグループに属し、2 人目は 2 人目、3 人目は 3 人目、4 人目は再び最初の人というようになります。モジュロ除算を使用して同じ演算を実行できます。同じ 3 つのグループに最初から番号を付けてみましょう。その方法は次のとおりです。 ハーバード CS50: 第 2 週の課題 (講義 5 および 6) - 18 インデックスを取得し、それを最大値を法として除算した場合、結果の結果がその値以上になることはありません。この原則を使ってキーワードを先頭に戻してみてください。グループごとに並べ替える代わりに、キーの長さを超えずに正しい文字をオフセットできるようにキーワードのインデックスが必要になるだけです。コードの一部のテストを自動化しているため、プログラムは次のように動作するはずです。 jharvard@appliance (~/Dropbox/pset2): ./vigenere bacon Meet me at the park at eleven am Negh zf av huf pcfx bt gzrwep oz 手動で暗号文を計算する以外にプログラムをテストするにはどうすればよいでしょうか? 私たちは親切です。このために私たちはプログラムdevigenereを書きました。これはコマンド ライン引数 (キーワード) を 1 つだけ取り、その仕事は暗号文を入力として受け取り、平文を返すことです。実行します。 ~cs50/pset2/devigenere k k はキーワードです。check50 を使用してプログラムの正しさをチェックしたい場合は、次を実行します。 check50 2014.fall.pset2.vigenere vigenere.c また、vigenere 実装を評価したい場合は、次のように入力します。 ~cs50/pset2/vigenere

コードを検証してマークを取得する方法

注意!タスクの正確性のみをチェックすることが重要な場合は、cs50check を使用します。edx プラットフォームで成績を取得したい場合は、以下に説明する手順に従ってください。この手順では、同じ cs50check を使用してタスクをチェックすることに注意してください。唯一の違いは、結果を記憶し、全体のスコアを計算することです。
  1. CS50 IDEにログイン
  2. CS50 IDE のファイル ブラウザがある左上隅付近(ターミナル ウィンドウ内ではない) で、pset2ディレクトリにあるInitials.cファイルを右クリックし、[ダウンロード]をクリックします。ブラウザにInitials.cが読み込まれていることがわかります。
  3. caesar.cについても繰り返します。
  4. vigenere.cについても繰り返します。
  5. 別のウィンドウまたはタブで、CS50にログインします。
  6. 画面の左上隅にある 送信アイコンをクリックします。ハーバード CS50: 第 2 週の課題 (講義 5 および 6) - 19
  7. 左側のフォルダーのリストで、問題セット 2ディレクトリをクリックし、[新しい提出物のアップロード]ボタン をクリックします。それは右側にあります。 ハーバード CS50: 第 2 週の課題 (講義 5 および 6) - 20
  8. 表示される画面で、「ファイルを追加...」ボタンをクリックします。コンピュータからファイルを選択するためのウィンドウが開きます。 ハーバード CS50: 第 2 週の課題 (講義 5 および 6) - 21
  9. Initials.c を保存するフォルダーに移動します。おそらく、ダウンロードフォルダー、またはブラウザーがデフォルトでファイルを配置する場所に保存されています。Initials.cを見つけたら、それを 1 回クリックして選択し、[開く] をクリックします。
  10. もう一度「ファイルの追加」をクリックします。
  11. caesar.c を見つけて開きます。
  12. vigenere.cファイルに対しても同じことを行います。
  13. 「アップロードの開始」をクリックします。ファイルはCS50サーバーにアップロードされます。
  14. 表示される画面に、「ファイルが選択されていません」ウィンドウが表示されます。マウスカーソルを左に動かすと、ダウンロードしたファイルの一覧が表示されます。確認するには、それぞれをクリックしてください。何か不明な点がある場合は、同じ手順を繰り返してファイルを再アップロードできます。2016 年末までは何度でも行うことができます。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION