Добавить в цитаты Настройки чтения

Страница 110 из 502

<b>      return 1; // возвратить код неудачного завершения программы</b>

<b>    }</b>

<b>    // Если аргументы присутствуют, то первым аргументом должно быть </b>

<b>    // слово &lt;зашифровать&gt; или же слово &lt;расшифровать&gt;.</b>

<b>    if (args[0] != &quot;зашифровать&quot; &amp; args[0] != &quot;расшифровать&quot;) {</b>

<b>      Console.WriteLine(&quot;Первым аргументом должно быть слово &quot;</b>

<b>          + &quot;&lt;зашифровать&gt; или &lt;расшифровать&gt;.&quot;);</b>

<b>      return 1; // возвратить код неудачного завершения программы</b>

<b>    }</b>

<b>    // Encode or decode message. </b>

<b>    for (int n = 1; n &lt; args.Length; n++) {</b>

<b>      for (int i = 0; i &lt; args[n].Length; i++) {</b>

<b>        if (args[0] == &quot;зашифровать&quot;)</b>

<b>          Console.Write((char)(args[n][i] + 1));</b>

<b>        else</b>

<b>          Console.Write((char)(args[n][i] - 1));</b>

<b>      }</b>

<b>      Console.Write(&quot; &quot;);</b>

<b>    }</b>

<b>    Console.WriteLine();</b>

<b>    return 0;</b>

<b>  }</b>

<b>}</b>

Для того чтобы воспользоваться этой программой, укажите в командной строке имя программы, затем командное слово "зашифровать" или "расшифровать" и далее сообщение, которое требуется зашифровать или расшифровать. Ниже приведены два примера выполнения данной программы, при условии, что она называется Cipher.

<b>C:Cipher зашифровать один два</b>

<b>пейо егб</b>

<b>C:Cipher расшифровать пейо егб</b>

<b>один два</b>

Данная программа отличается двумя интересными свойствами. Во-первых, обратите внимание на то, как в ней проверяется наличие аргументов командной строки перед тем, как продолжить выполнение. Это очень важное свойство, которое можно обобщить. Если в программе принимается во внимание наличие одного или более аргументов командной строки, то в ней должна быть непременно организована проверка факта передачи ей предполагаемых аргументов, иначе программа будет работать неправильно. Кроме того, в программе должна быть организована проверка самих аргументов перед тем, как продолжить выполнение. Так, в рассматриваемой здесь программе проверяется наличие командного слова "зашифровать" или "расшифровать" в качестве первого аргумента командной строки.

И во-вторых, обратите внимание на то, как программа возвращает код своего завершения. Если предполагаемые аргументы командной строки отсутствуют или указаны неправильно, программа возвращает код 1, указывающий на ее аварийное завершение. В противном случае возвращается код 0, когда программа завершается нормально.

Рекурсия

В C# допускается, чтобы метод вызывал самого себя. Этот процесс называется рекурсией, а метод, вызывающий самого себя, — рекурсивным. Вообще, рекурсия представляет собой процесс, в ходе которого нечто определяет самое себя. В этом отношении она чем-то напоминает циклическое определение. Рекурсивный метод отличается главным образом тем, что он содержит оператор, в котором этот метод вызывает самого себя. Рекурсия является эффективным механизмом управления программой.

Классическим примером рекурсии служит вычисление факториала числа. Факториал числа N представляет собой произведение всех целых чисел от 1 до N. Например, факториал числа 3 равен 1х2x3, или 6. В приведенном ниже примере программы демонстрируется рекурсивный способ вычисления факториала числа. Для сравнения в эту программу включен также нерекурсивный вариант вычисления факториала числа.

<b>// Простой пример рекурсии.</b>

<b>using System;</b>

<b>class Factorial {</b>

<b>  // Это рекурсивный метод. </b>

<b>  public int FactR(int n) {</b>

<b>    int result;</b>

<b>    if (n == 1) return 1;</b>

<b>    result = FactR(n - 1) * n;</b>

<b>    return result;</b>

<b>  }</b>

<b>  // Это итерационный метод. </b>

<b>  public int FactI(int n) {</b>

<b>    int t, result;</b>

<b>    result = 1;</b>

<b>    for (t = 1; t &lt;= n; t++) result *= t;</b>

<b>    return result;</b>

<b>  }</b>

<b>}</b>

<b>class Recursion {</b>

<b>  static void Main() {</b>

    Factorial f = new Factorial();

<b>    Console.WriteLine(&quot;Факториалы, рассчитанные рекурсивным методом.&quot;);</b>

<b>    Console.WriteLine(&quot;Факториал числа 3 равен &quot; + f.FactR(3));</b>

<b>    Console.WriteLine(&quot;Факториал числа 4 равен &quot; + f.FactR(4));</b>