Если в ходе выполнения метода Sravnenie(); не было произведено никаких замен (не выполнялся метод Otvet();), то это означает, что числу Nomer соответствует какое-то двоичное число, которое при переводе в десятичную систему счисления дает цифру большую 9. Это означает, что в сгенерированном девятиразрядном числе отсутствуют ошибки. Тогда с помощью сравнения длины строки в окне textBox3 с нулем (if(textBox3.Text.Length==0)) мы получаем в случае выполнения данного условия, что ошибки отсутствуют. Следовательно, мы можем увеличить число правильных ответов на 1 и запустить метод Otvet();,который запишет в окно textBox3 число, равное тому, которое находится в окне textBox1 (Число, возможно содержащее ошибку).
В итоге мы меняем число правильных ответов в окне textBox5, а также приравниваем X к нулю, это означает, что мы сделали свой окончательный выбор того, содержит ли сгенерированное число ошибки.
При нажатии кнопки button2 (Ошибка есть) в начале запускается метод Proverka();. Смысл этого метода заключается в том, чтобы проверить ввел ли пользователь достаточное количество разрядов в окно «Исправленный вариант» и являются ли они двоичными числами (0 и 1). Вначале с помощью управляющей конструкции if проверяется, записал ли пользователь строку в окно «Исправленный вариант» требуемой длины и нет ли уже появившегося ответа в окне textBox3 (Правильный ответ): if(textBox2.Text.Length! =textBox1.Text.Length && textBox1.Text.Length! = textBox3.Text.Length)
Если это условие выполняется, то это означает, что пользователь ввел в окно «Исправленный вариант» строку меньшую по своей длине 9 или то, что уже был получен ответ и, следовательно, выполняется действие, заключенное в фигурных скобках: запуск формы об ошибке, содержащее пояснение того, в чем заключается ошибка ввода (A5=new Error("Исправленный вариант должен содержать 9-ти разрядное число"); A5.ShowDialog(); )
Если это условие не выполняется, то работа алгоритма программы продолжается по ветке else. Вначале снова проверяется отсутствие ответа if(textBox1.Text.Length!=textBox3.Text.Length) и только когда это условие выполнено запускается цикл с параметром (for(int i=0; i<textBox2.Text.Length; i++)) , который сравнивает все разряды введенного пользователем числа с 0 или 1.Для этого используется заложенный в языке C# метод работы со строками Substring(i,1) (string d=textBox2.Text.Substring(i,1); - в строку d записывается один символ введенного пользователем числа , начиная с i-ой позиции (а i меняется от 0 до длины введенной строки, т.е. до 9 )). В ходе работы цикла d 9 раз сравнивается с 0 или 1 (if(d!=b && d!=a)) ,и при первом же случая, когда d не является 1 или 0 появляется форма ошибки, содержащее пояснение того, в чем заключается ошибка ввода (A5=new Error("Исправленный вариант должен содержать 9-ти разрядное двоичное число"); A5.ShowDialog(); ), а цикл прекращается, т.к. переменной i присваивается значение равное textBox2.Text.Length. Также в случае появления ошибки переменная X приравнивается к 0. В случае отсутствии ошибки ввода переменная X приравнивается к 1.На этом метод Proverka(); заканчивается. Если X=1, то возможны дальнейшие операции заключенные в фигурных скобках условия if (X==1). Используя условную конструкцию if, Nomer сравнивается с нулем (if (Nomer==0)). Если данное условие выполняется (т.е. номер ошибочного разряда равняется нулю, что означает отсутствие ошибки), то пользователь ответил неправильно, неверно предположив, что содержится ошибка. Затем запускается метод Otvet(), который выведет число в окне textBox3, равное сгенерированному числу.
После этого запускается метод Sravnenie(); (его запуск требуется, если не выполняется условие Nomer==0). Если Nomer не равен нулю и метод Sravnenie(); не дает правильного ответа в окне textBox3,, то, следовательно, Nomer при переводе в десятичную систему счисления дает число, большее, чем 9. Это означает, что сгенерированное число не содержит неправильных разрядов и в окно textBox3 нужно записать заданное число без изменений. Для этого используется условная конструкция, которая проверяет, записан ли ответ в textBox3: if (textBox3.Text.Length==0) Otvet();. Затем в переменную Moe считывается число, которое пользователь ввел в окно textBox2, а в переменную Pravilnoe считывается ответ из textBox3. После чего эти две переменные сравниваются между собой и в случае равенства количество правильных ответов увеличивается на 1: if (Moe==Pravilnoe) Prav++; . Затем переменная X приравнивается к нулю, что означает, что пользователь уже сделал свой окончательный выбор.
Кнопка button3 служит для того чтобы сгенерировать следующее число, когда работа с предыдущим закончена. При нажатии кнопки button3 (Следующее число) число вопросов увеличивается на единицу, а также запускаются методы: Generation() и Number();
Машина Поста
Для того чтобы лучше понять, как изменить программу, подробнее разберем ее код (см. Приложение).
private void button2_Click(object sender, System.EventArgs e) – метод, вызывающийся при нажатии кнопки «Вернуться к выбору темы».
private void help_Click(object sender, System.EventArgs e) - метод, вызывающийся при нажатии кнопки «Справка».
private void button3_Click(object sender, System.EventArgs e) - метод, вызывающийся при нажатии кнопки «GO».
public static byte first() – метод, который запускается при выполнении команды типа «Движение головки на одну клетку вправо и переход к команде m1».
public static byte second() – метод, который запускается при выполнении команды типа «Движение головки на одну клетку влево и переход к команде m1».
public static byte third() – метод, который запускается при выполнении команды типа «Нанесение метки в ячейку и переход к команде m1.».
public static byte fourth() – метод, который запускается при выполнении команды типа «Стирание метки в ячейке и переход к команде m1.».
public void fifth() – метод, который запускается при выполнении команды типа «Проверка наличия метки в клетке, над которой находится головка. Если метка отсутствует, то управление передается с номером m1, если метка есть, то с номером m2.».
bool check_string(string str) метод, вызываемый для проверки командной строки.
Разберем подробно работу программы.
Задаются два массива типа char input[] и command[][]. При нажатии кнопки «GO» формируется массив из входной строки и записывается в input[]. Далее этот массив проверяется, если в нем содержатся символы, отличные от 0 и 1, то выдается ошибка. Затем проверяется список команд в методе check_string(string str), если он не соответствует заданному шаблону, то выдается ошибка, в противном случае он записывается в массив command[][]. После этого запускается цикл с постусловием, в котором проверяется какая команда должна выполняться в данный момент и запускается соответствующий метод. Во время выполнения команды останова – цикл завершается и выводится результат работы программы.
Глава 3. Инструкция пользователя
Программа StudyProgram должна запускаться на IBM и совместимых компьютерах. Минимальные системные требования: процессор Pentium и выше, объем оперативной памяти 16MB, видеокарта с расширением 800x600, 256 цветов, операционная система семейства Windows 95 и выше, на компьютере также должен быть установлен .NET Framework.
Программа StudyProgram предоставляет возможность выполнить упражнения по кодированию информации методом четности и методом Хэмминга. Для запуска программы сделайте двойной щелчок по ярлыку программы. После запуска программы на экране появляется окно «StudyProgram», представленное на Рис.4.:
Пункт меню StudyProgram содержит следующие разделы:
«Программирование машины Поста»
«Кодирование по методу четности\нечетности»
«Кодирование по методу Хэмминга»
При выборе пункта меню «Кодирование по методу четности\нечетности» появляется диалоговое окно.
В данном диалоговом окне предлагаются вопросы по теме «Кодирование по методу четности\нечетности». Число вопросов неограниченно. После каждого ответа показывается номер задаваемого вопроса и количество правильных ответов.
Диалоговое окно содержит три кнопки: «Код числа правильный», «Код числа неправильный», «Справка» и «Вернуться к выбору темы». Вверху расположено текстовое поле «Цифровые разряды», в котором задано случайное семизначное двоичное число. Чуть ниже расположено текстовое поле «Контрольного разряд», в котором задан контрольный разряд, с помощью которого происходит кодирование случайного семизначного двоичного числа по методу четности. Нужно определить присутствует или не присутствует ошибка в записи числа. Если число записано правильно, нужно щелкнуть по кнопке «Код числа правильный». Если число содержит ошибку, нужно щелкнуть кнопку «Код числа неправильный». Если ответ был правильным, счетчик правильных ответов увеличивается на единицу. Переход к следующему заданию происходит автоматически при нажатии на любую из двух кнопок: «Код числа правильный», «Код числа неправильный», при этом счетчик заданных вопросов увеличивается на единицу. Число заданий неограниченно. Чтобы прервать работу с диалоговым окном, нужно щелкнуть по кнопке «Вернуться к выбору темы» при этом счетчик правильных ответов обнуляется и при следующем запуске раздела «Кодирование по методу четности\нечетности» количество верных ответов снова равно нулю. Если пользователю требуется помощь по теории, то тогда можно щелкнуть по кнопке «Справка», и тогда появится диалоговое окно Help(см. Рис.6)