Опубликован: 19.02.2009 | Доступ: свободный | Студентов: 3073 / 803 | Оценка: 4.35 / 4.11 | Длительность: 16:28:00
ISBN: 978-5-94774-401-9
Лекция 9:

Символы и строки

< Лекция 8 || Лекция 9: 1234 || Лекция 10 >

Самостоятельная работа

Работа с командной строкой

Компиляция программы из командной строки
  1. Создайте новый проект или откройте старый, который выводит на экран сообщение:
    "Привет!"
  2. Сохраните исходный текст программы на диск D в папку Temp c именем Program.cs
Вариант 1
  1. Выполните последовательность действий: Пуск - Все программы - Microsoft Visual Studio 2005 - Visual Studio 2005 Tools - Visual Studio 2005 Command Prompt
  2. Откроется консольное окно:

    09_01

Вариант 2
  1. Выполните последовательность действий: Пуск - Все программы - Microsoft .Net Framwork SDK v2.0 - SDK Command Prompt
  2. Откроется консольное окно:

    09_02

    Замечание. Далее мы будем работать с командным окном SDK Command Prompt
  3. В командной строке окна запишите следующую команду:
    csc  /out:d:\temp\hello.exe  d:\temp\Program.cs

    где csc - команда компиляции исполняемого файла

    /out - определяет местоположение и название скомпилированного файла, в нашем случае исполняемый файл называется hello.exe и будет располагаться в папке temp диска d.

    d:\temp\Program.cs - определяет местоположение и название исходного файла.

  4. Для выполнения команды нажмите клавишу Enter:

    09_03

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

В командной строке SDK Command Prompt указать полный путь к файлу, например, d:\temp\hello.exe и нажать клавишу Enter.

В нашем случае консольное окно примет вид:

09_04

Передача параметров в метод Main из командной строки
  1. Создадим новый проект, в котором содержится следующий код:
    static void Main(string[] args) //метод принимает параметры в виде массива строк
    {
     Console.WriteLine("Командная строка содержит" + args.Length + "аргументов.\n Вот они");
     for (int i = 0; i < args.Length; i++) //просматриваем содержимое массива args
     Console.WriteLine(args[i]);
    }
  2. Сохраним данный проект в папку temp на диске d.
  3. Запустим SDK Command Prompt, сгенерируем exe файл и запустим его:

    09_05

    В данном случае никакие параметры при вызове Program.exe не передавались, поэтому список аргументов пуст.

  4. Теперь при обращении к исполняемому файлу после указания его местоположения запишем строку один два три четыре пять и нажмем клавишу Enter.

    09_06

    В нашем случае строка " один два три четыре пять " была передана в метод Main. При передаче строка автоматически разбивается пробелами на подстроки, которые записываются массив args.

  5. Параметры в метод Main могут передаваться только в виде массива строк, но элементы этого массива внутри метода Main могут быть преобразованы к нужном типу.
  6. Внесем изменения в код метода Main:
    static void Main(string[] args)
    {
     if (args.Length ==2)
     {
      try
      {
       int a = int.Parse(args[0]);
       int b = int.Parse(args[1]);
       Console.WriteLine("{0} + {1} = {2}", a, b, a + b);
      }
      catch (FormatException)
      {
      Console.WriteLine("передаваемые параметры должны быть целыми числами");
      }
     }
     else Console.WriteLine("В метод Main следует передавать два целочисленных параметра");
    }
  7. Сохраните данный файл в папку temp на диске d, и не забудьте сгенерировать исполняемый файл.
  8. Несколько раз вызовите исполняемый файл из консольного окна, используя разное количество параметров и разные типы параметров:

    09_07

Практические задачи

Замечание.Данные передаются в программу из командной строки

Задача 1.Известны фамилия, имя и отчество пользователя. Найти его код личности. Правило получения кода личности: каждой букве ставится в соответствие число - порядковый номер буквы в алфавите. Эти числа складываются. Если полученная сумма не является однозначным числом, то цифры числа снова складываются и так до тех пор, пока не будет получено однозначное число. Например:

Исходные данные: Александр Сергеевич Пушкин

Код личности: (1+13+6+12+19+1+15+5+18)+\\
(19+6+18+4+6+6+3+10+25)+\\
(17+21+26+12+10+15)=288 \Rightarrow 2+8+8=18 \Rightarrow 1+8=9

Задача 2.В шифре Цезаря алфавит размещается на круге по часовой стрелке. За последней буквой алфавита идет первая буква алфавита, т.е. после буквы "я" идет буква "а". При шифровании текста буквы заменяются другими буквами, отстоящими по кругу на заданное количество позиций (сдвиг) дальше по часовой стрелке. Например, если сдвиг равен 3, то буква "а" заменяется на букву "г", буква "б" на букву "д", а буква "я" на букву "в".

Зашифровать сообщение, используя шифр Цезаря со сдвигом k.

Задача 3.Сообщение, зашифрованное шифром Цезаря достаточно легко расшифровать, зная сдвиг. Однако шифр Цезаря можно расшифровать даже при неизвестном значении сдвига, пользуясь следующим алгоритмом:

  1. найти частоты букв в сообщении f_{i}, где i=1, … n ( n -число букв в алфавите);
  2. найти вероятности букв в сообщении p_{i}, где i=1, \dots  n ;
  3. вычислить sum(k)=\sum_{i=1}^n{|p_i-f_i(k)|}, где k - это значение сдвига. Найти минимальное значение sum, подсчитывая ее для различных значений k от 1 до n. Значение k, на котором достигается минимум значения sum, считается сдвигом в шифре Цезаря.
  4. использовать найденное значение k для расшифровки заданного сообщения.
< Лекция 8 || Лекция 9: 1234 || Лекция 10 >