C# 4.0 полное руководство - 2011
Шрифт:
// Зашифровать и расшифровать сообщение, используя // простой подстановочный шифр.
using System;
class Cipher {
static int Main(string[] args) {
// Проверить наличие аргументов, if(args.Length < 2) {
Console.WriteLine("ПРИМЕНЕНИЕ: " +
"слово1: <зашифровать>/<расшифровать> " +
"[слово2... словоЫ]"); return 1; // возвратить код неудачного завершения программы
}
//
Console.WriteLine("Первым аргументом должно быть слово " + "<зашифровать> или <расшифровать>."); return 1; // возвратить код неудачного завершения программы
}
}
Console.Write(" ");
}
Console.WriteLine ; return 0;
}
}
Для того чтобы воспользоваться этой программой, укажите в командной строке имя программы, затем командное слово "зашифровать" или "расшифровать" и далее сообщение, которое требуется зашифровать или расшифровать. Ниже приведены два примера выполнения данной программы, при условии, что она называется Cipher.
C:\Cipher зашифровать один два
пейо егб
C:\Cipher расшифровать пейо егб
один два
Данная программа отличается двумя интересными свойствами. Во-первых, обратите внимание на то, как в ней проверяется наличие аргументов командной строки перед тем, как продолжить выполнение. Это очень важное свойство, которое можно
обобщить. Если в программе принимается во внимание наличие одного или более аргументов командной строки, то в ней должна быть непременно организована проверка факта передачи ей предполагаемых аргументов, иначе программа будет работать неправильно. Кроме того, в программе должна быть организована проверка самих аргументов перед тем, как продолжить выполнение. Так, в рассматриваемой здесь программе проверяется наличие командного слова "зашифровать" или "расшифровать" в качестве первого аргумента командной строки.
И во-вторых, обратите внимание на то, как программа возвращает код своего завершения. Если предполагаемые аргументы командной строки отсутствуют или указаны неправильно, программа возвращает код 1, указывающий на ее аварийное завершение. В противном случае возвращается код 0, когда программа завершается нормально.
Рекурсия
В C# допускается, чтобы метод вызывал самого себя. Этот процесс называется рекурсией, а метод, вызывающий самого себя, — рекурсивным. Вообще,
Классическим примером рекурсии служит вычисление факториала числа. Факториал числа N представляет собой произведение всех целых чисел от 1 до N. Например, факториал числа 3 равен 1х2><3, или 6. В приведенном ниже примере программы демонстрируется рекурсивный способ вычисления факториала числа. Для сравнения в эту программу включен также нерекурсивный вариант вычисления факториала числа.
// Простой пример рекурсии.
using System;
class Factorial {
// Это рекурсивный метод, public int FactR(int n) { int result;
if(n==l) return 1; result = FactR(n-l) * n; return result;
}
// Это итерационный метод, public int FactI(int n) { int t, result;
result = 1;
for(t=l; t <= n; t++) result *= t; return result;
class Recursion {
static void Main { Factorial f = new
Factorial ;
Console.WriteLine("Факториалы, рассчитанные рекурсивным методом. Console.WriteLine("Факториал числа 3 равен " + f.FactR(3));
Факториал числа 4 равен " + f.FactR(4));
Console.WriteLine( Console.WriteLine(
Факториал числа 5 равен " + f.FactR(5));
Console.WriteLine ;
Console.WriteLine("Факториалы, рассчитанные итерационным методом Console.WriteLine("Факториал числа 3 равен " + f.FactR(3));
• Console.WriteLine("Факториал числа 4 равен " + f.FactR(4));
Console.WriteLine("Факториал числа 5 равен " + f.FactR(5));
При выполнении этой программы получается следующий результат.
Факториалы, рассчитанные рекурсивным методом.
Факториал числа 3 равен 6 Факториал числа 4 равен 24 Факториал числа 5 равен 120
Факториалы, рассчитанные итерационным методом.
Принцип действия нерекурсивного метода FactI вполне очевиден. В нем используется цикл, в котором числа, начиная с 1, последовательно умножаются друг на друга, постепенно образуя произведение, дающее факториал.