public static int Main(string[] args) {
// Проверить наличие аргументов.
if (args.Length < 2) {
Console.WriteLine("ПРИМЕНЕНИЕ: " +
"слово1: <���зашифровать>/<���расшифровать> " +
"[слово2... словоN]");
return 1; // возвратить код неудачного завершения программы
}
// Если аргументы присутствуют, то первым аргументом должно быть
// слово <���зашифровать> или же слово <���расшифровать>.
if (args[0] != "зашифровать" & args[0] != "расшифровать") {
Console.WriteLine("Первым аргументом должно быть слово "
+ "<���зашифровать> или <���расшифровать>.");
return 1; // возвратить код неудачного завершения программы
}
// Encode or decode message.
for (int n = 1; n < args.Length; n++) {
for (int i = 0; i < args[n].Length; i++) {
if (args[0] == "зашифровать")
Console.Write((char)(args[n][i] + 1));
else
Console.Write((char)(args[n][i] - 1));
}
Console.Write(" ");
}
Console.WriteLine();
return 0;
}
}
Для того чтобы воспользоваться этой программой, укажите в командной строке имя программы, затем командное слово "зашифровать" или "расшифровать" и далее сообщение, которое требуется зашифровать или расшифровать. Ниже приведены два примера выполнения данной программы, при условии, что она называется Cipher
.
C:\Cipher зашифровать один два
пейо егб
C:\Cipher расшифровать пейо егб
один два
Данная программа отличается двумя интересными свойствами. Во-первых, обратите внимание на то, как в ней проверяется наличие аргументов командной строки перед тем, как продолжить выполнение. Это очень важное свойство, которое можно обобщить. Если в программе принимается во внимание наличие одного или более аргументов командной строки, то в ней должна быть непременно организована проверка факта передачи ей предполагаемых аргументов, иначе программа будет работать неправильно. Кроме того, в программе должна быть организована проверка самих аргументов перед тем, как продолжить выполнение. Так, в рассматриваемой здесь программе проверяется наличие командного слова "зашифровать" или "расшифровать" в качестве первого аргумента командной строки.
И во-вторых, обратите внимание на то, как программа возвращает код своего завершения. Если предполагаемые аргументы командной строки отсутствуют или указаны неправильно, программа возвращает код 1, указывающий на ее аварийное завершение. В противном случае возвращается код 0, когда программа завершается нормально.
В C# допускается, чтобы метод вызывал самого себя. Этот процесс называется рекурсией, а метод, вызывающий самого себя, — рекурсивным. Вообще, рекурсия представляет собой процесс, в ходе которого нечто определяет самое себя. В этом отношении она чем-то напоминает циклическое определение. Рекурсивный метод отличается главным образом тем, что он содержит оператор, в котором этот метод вызывает самого себя. Рекурсия является эффективным механизмом управления программой.
Классическим примером рекурсии служит вычисление факториала числа. Факториал числа N представляет собой произведение всех целых чисел от 1 до N. Например, факториал числа 3 равен 1х2x3, или 6. В приведенном ниже примере программы демонстрируется рекурсивный способ вычисления факториала числа. Для сравнения в эту программу включен также нерекурсивный вариант вычисления факториала числа.
// Простой пример рекурсии.
using System;
class Factorial {
// Это рекурсивный метод.
public int FactR(int n) {
int result;
if (n == 1) return 1;
result = FactR(n - 1) * n;
return result;
}
// Это итерационный метод.
public int FactI(int n) {
int t, result;
result = 1;
for (t = 1; t <= n; t++) result *= t;
return result;
}
}
class Recursion {
static void Main() {
Читать дальше